Pixel Manager for WooCommerce – Track Google Analytics, Google Ads, Facebook and more - Version 1.27.8

Version Description

06.12.2022

  • Tweak: Added various type validations for REST routes.
  • Tweak: Increase Gutenberg compatibility for all-products block, cart block and checkout block.
  • Tweak: Streamlined code for backend product retrieval and excluded saving product transients on cart and checkout pages.
  • Tweak: Made sure that the action scheduler hooks always get registered (even when an Ajax request is happening).
Download this release

Release Info

Developer alekv
Plugin Icon 128x128 Pixel Manager for WooCommerce – Track Google Analytics, Google Ads, Facebook and more
Version 1.27.8
Comparing to
See all releases

Code changes from version 1.27.7 to 1.27.8

Files changed (57) hide show
  1. classes/admin/class-admin.php +16 -16
  2. classes/admin/class-debug-info.php +1 -1
  3. classes/admin/class-environment-check.php +8 -1
  4. classes/class-database.php +3 -3
  5. classes/class-helpers.php +11 -1
  6. classes/class-options.php +27 -6
  7. classes/class-shop.php +25 -2
  8. classes/pixels/class-pixel-manager.php +62 -54
  9. classes/pixels/facebook/class-facebook-pixel-manager.php +1 -1
  10. classes/pixels/google/class-google-pixel-manager.php +1 -1
  11. js/public/wpm-public.p1.min.js +1 -1
  12. js/public/wpm-public.p1.min.js.br +0 -0
  13. js/public/wpm-public.p1.min.js.gz +0 -0
  14. js/public/wpm-public.p1.min.js.map +1 -1
  15. languages/woocommerce-google-adwords-conversion-tracking-tag.pot +7 -7
  16. readme.txt +11 -1
  17. vendor/composer/installed.json +14 -14
  18. vendor/composer/installed.php +9 -9
  19. vendor/freemius/wordpress-sdk/assets/css/admin/add-ons.css +1 -1
  20. vendor/freemius/wordpress-sdk/includes/class-freemius.php +6 -6
  21. vendor/freemius/wordpress-sdk/includes/class-fs-plugin-updater.php +32 -11
  22. vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-tag.php +4 -0
  23. vendor/freemius/wordpress-sdk/includes/fs-plugin-info-dialog.php +54 -3
  24. vendor/freemius/wordpress-sdk/languages/freemius-cs_CZ.mo +0 -0
  25. vendor/freemius/wordpress-sdk/languages/freemius-da_DK.mo +0 -0
  26. vendor/freemius/wordpress-sdk/languages/freemius-de_DE.mo +0 -0
  27. vendor/freemius/wordpress-sdk/languages/freemius-en.mo +0 -0
  28. vendor/freemius/wordpress-sdk/languages/freemius-es_ES.mo +0 -0
  29. vendor/freemius/wordpress-sdk/languages/freemius-fr_FR.mo +0 -0
  30. vendor/freemius/wordpress-sdk/languages/freemius-he_IL.mo +0 -0
  31. vendor/freemius/wordpress-sdk/languages/freemius-hu_HU.mo +0 -0
  32. vendor/freemius/wordpress-sdk/languages/freemius-it_IT.mo +0 -0
  33. vendor/freemius/wordpress-sdk/languages/freemius-ja.mo +0 -0
  34. vendor/freemius/wordpress-sdk/languages/freemius-nl_NL.mo +0 -0
  35. vendor/freemius/wordpress-sdk/languages/freemius-ru_RU.mo +0 -0
  36. vendor/freemius/wordpress-sdk/languages/freemius-ta.mo +0 -0
  37. vendor/freemius/wordpress-sdk/languages/freemius-zh_CN.mo +0 -0
  38. vendor/freemius/wordpress-sdk/languages/freemius.pot +116 -104
  39. vendor/freemius/wordpress-sdk/start.php +1 -1
  40. vendor/freemius/wordpress-sdk/templates/connect.php +2 -2
  41. vendor/freemius/wordpress-sdk/templates/plugin-info/description.php +1 -1
  42. vendor/giggsey/libphonenumber-for-php/METADATA-VERSION.txt +1 -1
  43. vendor/giggsey/libphonenumber-for-php/src/ShortNumberInfo.php +4 -0
  44. vendor/giggsey/libphonenumber-for-php/src/carrier/data/en/350.php +6 -1
  45. vendor/giggsey/libphonenumber-for-php/src/carrier/data/en/420.php +1 -0
  46. vendor/giggsey/libphonenumber-for-php/src/carrier/data/en/51.php +2 -0
  47. vendor/giggsey/libphonenumber-for-php/src/carrier/data/en/996.php +1 -0
  48. vendor/giggsey/libphonenumber-for-php/src/data/PhoneNumberAlternateFormats_7.php +4 -4
  49. vendor/giggsey/libphonenumber-for-php/src/data/PhoneNumberMetadata_GI.php +2 -2
  50. vendor/giggsey/libphonenumber-for-php/src/data/PhoneNumberMetadata_KG.php +1 -1
  51. vendor/giggsey/libphonenumber-for-php/src/data/PhoneNumberMetadata_KZ.php +1 -1
  52. vendor/giggsey/libphonenumber-for-php/src/data/PhoneNumberMetadata_RU.php +4 -4
  53. vendor/giggsey/libphonenumber-for-php/src/geocoding/data/en/64.php +237 -513
  54. vendor/giggsey/libphonenumber-for-php/src/geocoding/data/en/7.php +5 -1
  55. vendor/giggsey/libphonenumber-for-php/src/geocoding/data/ru/7.php +5 -1
  56. vendor/giggsey/libphonenumber-for-php/src/timezone/data/map_data.php +2 -2
  57. wgact.php +2 -5
classes/admin/class-admin.php CHANGED
@@ -47,7 +47,7 @@ class Admin
47
  wpm_fs()->add_filter( 'templates/checkout.php', [ $this, 'fs_inject_additional_scripts' ] );
48
  wpm_fs()->add_filter( 'checkout/purchaseCompleted', [ $this, 'fs_after_purchase_js' ] );
49
  // end __construct
50
- if ( wpm_fs()->is__premium_only() && $this->google->is_ga4_data_api_active() ) {
51
  // https://stackoverflow.com/a/45617265/4688612
52
  // https://stackoverflow.com/a/37780501/4688612
53
  add_action( 'add_meta_boxes', function () {
@@ -338,7 +338,7 @@ class Admin
338
  $section_ids['settings_name']
339
  );
340
 
341
- if ( wpm_fs()->is__premium_only() || $this->options['general']['pro_version_demo'] ) {
342
  // add the field for the Bing Ads UET tag ID
343
  add_settings_field(
344
  'wpm_plugin_bing_uet_tag_id',
@@ -416,7 +416,7 @@ class Admin
416
  $this->add_section_advanced_subsection_shop( $section_ids );
417
  $this->add_section_advanced_subsection_google( $section_ids );
418
 
419
- if ( wpm_fs()->is__premium_only() || $this->pro_version_demo_active() ) {
420
  $this->add_section_advanced_subsection_facebook( $section_ids );
421
  $this->add_section_advanced_subsection_tiktok( $section_ids );
422
  $this->add_section_advanced_subsection_cookie_consent_mgmt( $section_ids );
@@ -464,7 +464,7 @@ class Admin
464
  $section_ids['settings_name']
465
  );
466
 
467
- if ( wpm_fs()->is__premium_only() || $this->options['general']['pro_version_demo'] ) {
468
  // add checkbox for disabling tracking for user roles
469
  add_settings_field(
470
  'wpm_setting_disable_tracking_for_user_roles',
@@ -491,7 +491,7 @@ class Admin
491
  'wpm_plugin_options_page',
492
  $section_ids['settings_name']
493
  );
494
- if ( wpm_fs()->is__premium_only() || $this->options['general']['pro_version_demo'] ) {
495
  // Add checkbox for the scroll tracker
496
  add_settings_field(
497
  'pmw_setting_scroll_tracker_thresholds',
@@ -527,7 +527,7 @@ class Admin
527
  $section_ids['settings_name']
528
  );
529
 
530
- if ( wpm_fs()->is__premium_only() || $this->pro_version_demo_active() ) {
531
  // add fields for the Google enhanced e-commerce
532
  add_settings_field(
533
  'wpm_setting_google_analytics_eec',
@@ -571,7 +571,7 @@ class Admin
571
  $section_ids['settings_name']
572
  );
573
 
574
- if ( wpm_fs()->is__premium_only() || $this->pro_version_demo_active() ) {
575
  // add user_id for the Google
576
  add_settings_field(
577
  'wpm_setting_google_user_id',
@@ -591,7 +591,7 @@ class Admin
591
  }
592
 
593
 
594
- if ( wpm_fs()->is__premium_only() || $this->pro_version_demo_active() ) {
595
  // add fields for the Google Ads phone conversion number
596
  add_settings_field(
597
  'wpm_plugin_google_ads_phone_conversion_number',
@@ -888,7 +888,7 @@ class Admin
888
  'wpm_plugin_options_page',
889
  'wpm_plugin_beta_section'
890
  );
891
- if ( wpm_fs()->is__premium_only() || $this->pro_version_demo_active() ) {
892
  // google_business_vertical
893
  add_settings_field(
894
  'wpm_plugin_google_business_vertical',
@@ -1946,7 +1946,7 @@ class Admin
1946
  </label>
1947
  <?php
1948
 
1949
- if ( wpm_fs()->is__premium_only() || '2' === $this->options['shop']['order_total_logic'] || $this->options['general']['pro_version_demo'] ) {
1950
  ?>
1951
  <br>
1952
  <label>
@@ -1956,7 +1956,7 @@ class Admin
1956
  echo checked( 2, $this->options['shop']['order_total_logic'], false ) ;
1957
  ?>
1958
  <?php
1959
- if ( !Environment_Check::get_instance()->is_a_cog_plugin_active() || !wpm_fs()->is__premium_only() ) {
1960
  ?>
1961
  disabled
1962
  <?php
@@ -1987,7 +1987,7 @@ class Admin
1987
  ?>
1988
  <?php
1989
 
1990
- if ( wpm_fs()->is__premium_only() && !Environment_Check::get_instance()->is_a_cog_plugin_active() ) {
1991
  ?>
1992
  </div>
1993
  <div style="margin-top: 10px">
@@ -2127,7 +2127,7 @@ class Admin
2127
  public function wpm_info_html_google_analytics_eec()
2128
  {
2129
  esc_html_e( 'Google Analytics Enhanced E-Commerce is ', 'woocommerce-google-adwords-conversion-tracking-tag' );
2130
- $this->get_status_icon( wpm_fs()->is__premium_only() && $this->google->is_google_analytics_active() );
2131
  $this->html_pro_feature();
2132
  // $this->get_documentation_html_by_key('eec');
2133
  }
@@ -3108,7 +3108,7 @@ class Admin
3108
  public function wpm_info_html_acr()
3109
  {
3110
  esc_html_e( 'Automatic Conversion Recovery (ACR) is ', 'woocommerce-google-adwords-conversion-tracking-tag' );
3111
- $this->get_status_icon( wpm_fs()->is__premium_only() );
3112
  $this->html_pro_feature();
3113
  $this->get_documentation_html_by_key( 'acr' );
3114
  }
@@ -3522,7 +3522,7 @@ class Admin
3522
  private function html_pro_feature()
3523
  {
3524
 
3525
- if ( !wpm_fs()->is__premium_only() && $this->options['general']['pro_version_demo'] ) {
3526
  // if (1===1) {
3527
  // return '<div class="pmw-pro-feature">' . esc_html__('Pro Feature', 'woocommerce-google-adwords-conversion-tracking-tag') . '</div>';
3528
  ?>
@@ -3552,7 +3552,7 @@ class Admin
3552
  private function disable_if_demo()
3553
  {
3554
 
3555
- if ( !wpm_fs()->is__premium_only() && $this->options['general']['pro_version_demo'] ) {
3556
  return 'disabled';
3557
  } else {
3558
  return '';
47
  wpm_fs()->add_filter( 'templates/checkout.php', [ $this, 'fs_inject_additional_scripts' ] );
48
  wpm_fs()->add_filter( 'checkout/purchaseCompleted', [ $this, 'fs_after_purchase_js' ] );
49
  // end __construct
50
+ if ( wpm_fs()->can_use_premium_code__premium_only() && $this->google->is_ga4_data_api_active() ) {
51
  // https://stackoverflow.com/a/45617265/4688612
52
  // https://stackoverflow.com/a/37780501/4688612
53
  add_action( 'add_meta_boxes', function () {
338
  $section_ids['settings_name']
339
  );
340
 
341
+ if ( wpm_fs()->can_use_premium_code__premium_only() || $this->options['general']['pro_version_demo'] ) {
342
  // add the field for the Bing Ads UET tag ID
343
  add_settings_field(
344
  'wpm_plugin_bing_uet_tag_id',
416
  $this->add_section_advanced_subsection_shop( $section_ids );
417
  $this->add_section_advanced_subsection_google( $section_ids );
418
 
419
+ if ( wpm_fs()->can_use_premium_code__premium_only() || $this->pro_version_demo_active() ) {
420
  $this->add_section_advanced_subsection_facebook( $section_ids );
421
  $this->add_section_advanced_subsection_tiktok( $section_ids );
422
  $this->add_section_advanced_subsection_cookie_consent_mgmt( $section_ids );
464
  $section_ids['settings_name']
465
  );
466
 
467
+ if ( wpm_fs()->can_use_premium_code__premium_only() || $this->options['general']['pro_version_demo'] ) {
468
  // add checkbox for disabling tracking for user roles
469
  add_settings_field(
470
  'wpm_setting_disable_tracking_for_user_roles',
491
  'wpm_plugin_options_page',
492
  $section_ids['settings_name']
493
  );
494
+ if ( wpm_fs()->can_use_premium_code__premium_only() || $this->options['general']['pro_version_demo'] ) {
495
  // Add checkbox for the scroll tracker
496
  add_settings_field(
497
  'pmw_setting_scroll_tracker_thresholds',
527
  $section_ids['settings_name']
528
  );
529
 
530
+ if ( wpm_fs()->can_use_premium_code__premium_only() || $this->pro_version_demo_active() ) {
531
  // add fields for the Google enhanced e-commerce
532
  add_settings_field(
533
  'wpm_setting_google_analytics_eec',
571
  $section_ids['settings_name']
572
  );
573
 
574
+ if ( wpm_fs()->can_use_premium_code__premium_only() || $this->pro_version_demo_active() ) {
575
  // add user_id for the Google
576
  add_settings_field(
577
  'wpm_setting_google_user_id',
591
  }
592
 
593
 
594
+ if ( wpm_fs()->can_use_premium_code__premium_only() || $this->pro_version_demo_active() ) {
595
  // add fields for the Google Ads phone conversion number
596
  add_settings_field(
597
  'wpm_plugin_google_ads_phone_conversion_number',
888
  'wpm_plugin_options_page',
889
  'wpm_plugin_beta_section'
890
  );
891
+ if ( wpm_fs()->can_use_premium_code__premium_only() || $this->pro_version_demo_active() ) {
892
  // google_business_vertical
893
  add_settings_field(
894
  'wpm_plugin_google_business_vertical',
1946
  </label>
1947
  <?php
1948
 
1949
+ if ( wpm_fs()->can_use_premium_code__premium_only() || '2' === $this->options['shop']['order_total_logic'] || $this->options['general']['pro_version_demo'] ) {
1950
  ?>
1951
  <br>
1952
  <label>
1956
  echo checked( 2, $this->options['shop']['order_total_logic'], false ) ;
1957
  ?>
1958
  <?php
1959
+ if ( !Environment_Check::get_instance()->is_a_cog_plugin_active() || !wpm_fs()->can_use_premium_code__premium_only() ) {
1960
  ?>
1961
  disabled
1962
  <?php
1987
  ?>
1988
  <?php
1989
 
1990
+ if ( wpm_fs()->can_use_premium_code__premium_only() && !Environment_Check::get_instance()->is_a_cog_plugin_active() ) {
1991
  ?>
1992
  </div>
1993
  <div style="margin-top: 10px">
2127
  public function wpm_info_html_google_analytics_eec()
2128
  {
2129
  esc_html_e( 'Google Analytics Enhanced E-Commerce is ', 'woocommerce-google-adwords-conversion-tracking-tag' );
2130
+ $this->get_status_icon( wpm_fs()->can_use_premium_code__premium_only() && $this->google->is_google_analytics_active() );
2131
  $this->html_pro_feature();
2132
  // $this->get_documentation_html_by_key('eec');
2133
  }
3108
  public function wpm_info_html_acr()
3109
  {
3110
  esc_html_e( 'Automatic Conversion Recovery (ACR) is ', 'woocommerce-google-adwords-conversion-tracking-tag' );
3111
+ $this->get_status_icon( wpm_fs()->can_use_premium_code__premium_only() );
3112
  $this->html_pro_feature();
3113
  $this->get_documentation_html_by_key( 'acr' );
3114
  }
3522
  private function html_pro_feature()
3523
  {
3524
 
3525
+ if ( !wpm_fs()->can_use_premium_code__premium_only() && $this->options['general']['pro_version_demo'] ) {
3526
  // if (1===1) {
3527
  // return '<div class="pmw-pro-feature">' . esc_html__('Pro Feature', 'woocommerce-google-adwords-conversion-tracking-tag') . '</div>';
3528
  ?>
3552
  private function disable_if_demo()
3553
  {
3554
 
3555
+ if ( !wpm_fs()->can_use_premium_code__premium_only() && $this->options['general']['pro_version_demo'] ) {
3556
  return 'disabled';
3557
  } else {
3558
  return '';
classes/admin/class-debug-info.php CHANGED
@@ -40,7 +40,7 @@ class Debug_Info
40
  $html = '### Debug Information ###' . PHP_EOL . PHP_EOL;
41
  $html .= '## Pixel Manager Info ##' . PHP_EOL . PHP_EOL;
42
  $html .= 'Version: ' . WPM_CURRENT_VERSION . PHP_EOL;
43
- $tier = ( wpm_fs()->is__premium_only() ? 'pro' : 'free' );
44
  $html .= 'Tier: ' . $tier . PHP_EOL;
45
  $html .= PHP_EOL . '## System Environment ##' . PHP_EOL . PHP_EOL;
46
  $html .= 'WordPress version: ' . $wp_version . PHP_EOL;
40
  $html = '### Debug Information ###' . PHP_EOL . PHP_EOL;
41
  $html .= '## Pixel Manager Info ##' . PHP_EOL . PHP_EOL;
42
  $html .= 'Version: ' . WPM_CURRENT_VERSION . PHP_EOL;
43
+ $tier = ( wpm_fs()->can_use_premium_code__premium_only() ? 'pro' : 'free' );
44
  $html .= 'Tier: ' . $tier . PHP_EOL;
45
  $html .= PHP_EOL . '## System Environment ##' . PHP_EOL . PHP_EOL;
46
  $html .= 'WordPress version: ' . $wp_version . PHP_EOL;
classes/admin/class-environment-check.php CHANGED
@@ -13,7 +13,6 @@ class Environment_Check {
13
 
14
  private $order_redirect = null;
15
  private $options;
16
- private $wpm_ist_order_received_page;
17
 
18
  private static $instance;
19
 
@@ -1051,6 +1050,14 @@ class Environment_Check {
1051
  add_filter('facebook_for_woocommerce_integration_pixel_enabled', '__return_false');
1052
  }
1053
 
 
 
 
 
 
 
 
 
1054
  /**
1055
  * WooCommerce Gutenberg Blocks Google Analytics Tracking
1056
  *
13
 
14
  private $order_redirect = null;
15
  private $options;
 
16
 
17
  private static $instance;
18
 
1050
  add_filter('facebook_for_woocommerce_integration_pixel_enabled', '__return_false');
1051
  }
1052
 
1053
+ /**
1054
+ * Pinterest for WooCommerce
1055
+ */
1056
+
1057
+ if ($this->is_pmw_pinterest_active()) {
1058
+ add_filter('woocommerce_pinterest_disable_tracking', '__return_true');
1059
+ }
1060
+
1061
  /**
1062
  * WooCommerce Gutenberg Blocks Google Analytics Tracking
1063
  *
classes/class-database.php CHANGED
@@ -114,7 +114,7 @@ class Database {
114
  delete_option($option_name_old_2);
115
  }
116
 
117
- private function up_from_1_to_2() {
118
 
119
  self::save_options_backup('1');
120
 
@@ -138,7 +138,7 @@ class Database {
138
  update_option(WPM_DB_OPTIONS_NAME, $options_new);
139
  }
140
 
141
- private function up_from_2_to_3() {
142
 
143
  self::save_options_backup('2');
144
 
@@ -164,7 +164,7 @@ class Database {
164
  update_option(WPM_DB_OPTIONS_NAME, $options_new);
165
  }
166
 
167
- private function up_from_3_to_4() {
168
 
169
  error_log('db up_from_3_to_4');
170
 
114
  delete_option($option_name_old_2);
115
  }
116
 
117
+ private static function up_from_1_to_2() {
118
 
119
  self::save_options_backup('1');
120
 
138
  update_option(WPM_DB_OPTIONS_NAME, $options_new);
139
  }
140
 
141
+ private static function up_from_2_to_3() {
142
 
143
  self::save_options_backup('2');
144
 
164
  update_option(WPM_DB_OPTIONS_NAME, $options_new);
165
  }
166
 
167
+ private static function up_from_3_to_4() {
168
 
169
  error_log('db up_from_3_to_4');
170
 
classes/class-helpers.php CHANGED
@@ -94,7 +94,7 @@ class Helpers {
94
 
95
  public static function get_options_object( $options ) {
96
 
97
- // TODO find out why I did this weird transformation and simplify it
98
  $options_obj = json_decode(wp_json_encode($options));
99
 
100
  if (function_exists('get_woocommerce_currency')) {
@@ -123,6 +123,11 @@ class Helpers {
123
  }
124
  }
125
 
 
 
 
 
 
126
  public static function is_localhost() {
127
 
128
  // If the IP is local, return true, else false
@@ -135,6 +140,11 @@ class Helpers {
135
  );
136
  }
137
 
 
 
 
 
 
138
  public static function get_user_ip() {
139
 
140
  if (self::is_localhost()) {
94
 
95
  public static function get_options_object( $options ) {
96
 
97
+ // TODO find out why I did this weird transformation and simplify it (I think it had something to do with correctly representing objects)
98
  $options_obj = json_decode(wp_json_encode($options));
99
 
100
  if (function_exists('get_woocommerce_currency')) {
123
  }
124
  }
125
 
126
+ /**
127
+ * Check if the current visitor is on localhost.
128
+ *
129
+ * @return bool
130
+ */
131
  public static function is_localhost() {
132
 
133
  // If the IP is local, return true, else false
140
  );
141
  }
142
 
143
+ /**
144
+ * Get the (external) IP address of the current visitor.
145
+ *
146
+ * @return array|string|string[]
147
+ */
148
  public static function get_user_ip() {
149
 
150
  if (self::is_localhost()) {
classes/class-options.php CHANGED
@@ -42,12 +42,6 @@ class Options {
42
  return self::$options_obj;
43
  }
44
 
45
- public static function get_db_version() {
46
- self::init();
47
-
48
- return self::$options_obj->db_version;
49
- }
50
-
51
  // get the default options
52
  public static function get_default_options() {
53
 
@@ -193,4 +187,31 @@ class Options {
193
  return false;
194
  }
195
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  }
42
  return self::$options_obj;
43
  }
44
 
 
 
 
 
 
 
45
  // get the default options
46
  public static function get_default_options() {
47
 
187
  return false;
188
  }
189
  }
190
+
191
+ public static function get_db_version() {
192
+ return self::get_options_obj()->db_version;
193
+ }
194
+
195
+ public static function server_2_server_enabled() {
196
+
197
+ return
198
+ self::is_facebook_capi_enabled()
199
+ || self::is_tiktok_eapi_enabled();
200
+ }
201
+
202
+ public static function is_facebook_pixel_enabled() {
203
+ return (bool) self::get_options_obj()->facebook->pixel_id;
204
+ }
205
+
206
+ public static function is_facebook_capi_enabled() {
207
+ return self::is_facebook_pixel_enabled() && self::get_options_obj()->facebook->capi->token;
208
+ }
209
+
210
+ public static function is_tiktok_pixel_enabled() {
211
+ return (bool) self::get_options_obj()->tiktok->pixel_id;
212
+ }
213
+
214
+ public static function is_tiktok_eapi_enabled() {
215
+ return self::is_tiktok_pixel_enabled() && self::get_options_obj()->tiktok->eapi->token;
216
+ }
217
  }
classes/class-shop.php CHANGED
@@ -610,23 +610,46 @@ class Shop
610
  // https://stackoverflow.com/a/49616130/4688612
611
  private static function get_order_from_order_received_page()
612
  {
 
 
 
 
 
613
  $order = self::get_order_from_query_vars();
 
 
 
 
614
  if ( !$order ) {
615
  $order = self::get_order_with_url_order_key();
616
  }
617
  return $order;
618
  }
619
 
 
 
 
 
 
 
 
620
  public static function pmw_is_order_received_page()
621
  {
622
- // Get cached value
 
 
 
 
 
623
  if ( is_bool( self::$pmw_ist_order_received_page ) ) {
624
  return self::$pmw_ist_order_received_page;
625
  }
626
  /**
627
  * If a purchase order was created by a shop manager
628
  * and the customer is viewing the PO page
629
- * don't fire the conversion pixels
 
 
630
  **/
631
 
632
  if ( is_checkout_pay_page() ) {
610
  // https://stackoverflow.com/a/49616130/4688612
611
  private static function get_order_from_order_received_page()
612
  {
613
+ /**
614
+ * Try to get the order from the query vars.
615
+ * This is to work around some side cases where
616
+ * the order key is not available in the URL.
617
+ */
618
  $order = self::get_order_from_query_vars();
619
+ /**
620
+ * If the order is not found, try to get it from the URL
621
+ * with the order key.
622
+ */
623
  if ( !$order ) {
624
  $order = self::get_order_with_url_order_key();
625
  }
626
  return $order;
627
  }
628
 
629
+ /**
630
+ * PMW uses its own function to check if a visitor is on the order received page.
631
+ * There are various plugins which modify the checkout workflow and/or the
632
+ * order received page, which is why we can't only rely on the WooCommerce function.
633
+ *
634
+ * @return bool
635
+ */
636
  public static function pmw_is_order_received_page()
637
  {
638
+ /**
639
+ * Get cached value if available.
640
+ *
641
+ * There are several places in the code where we check if we are on the order received page.
642
+ * And the function is quite expensive when checking the database, so we cache the result.
643
+ */
644
  if ( is_bool( self::$pmw_ist_order_received_page ) ) {
645
  return self::$pmw_ist_order_received_page;
646
  }
647
  /**
648
  * If a purchase order was created by a shop manager
649
  * and the customer is viewing the PO page
650
+ * don't fire the conversion pixels.
651
+ * (order key is available in the URL, but
652
+ * it's not a completed order yet)
653
  **/
654
 
655
  if ( is_checkout_pay_page() ) {
classes/pixels/class-pixel-manager.php CHANGED
@@ -6,6 +6,7 @@ use WCPM\Classes\Admin\Environment_Check ;
6
  use WCPM\Classes\Admin\Validations ;
7
  use WCPM\Classes\Data\GA4_Data_API ;
8
  use WCPM\Classes\Helpers ;
 
9
  use WCPM\Classes\Shop ;
10
  use WCPM\Classes\Product ;
11
  use WCPM\Classes\Http\Facebook_CAPI ;
@@ -68,7 +69,7 @@ class Pixel_Manager
68
  */
69
  add_action( 'wp_head', function () {
70
  $this->inject_wpm_opening();
71
- if ( wpm_fs()->is__premium_only() && Environment_Check::get_instance()->is_woocommerce_active() && is_product() ) {
72
  if ( $this->options_obj->facebook->microdata ) {
73
  $this->microdata_product_id = ( new Facebook_Microdata( $this->options ) )->inject_schema( wc_get_product( get_the_ID() ) );
74
  }
@@ -91,7 +92,7 @@ class Pixel_Manager
91
  if ( $this->facebook_active ) {
92
  new Facebook_Pixel_Manager( $this->options );
93
  }
94
- if ( wpm_fs()->is__premium_only() && $this->is_tiktok_eapi_active__premium_only() ) {
95
  TikTok_EAPI::get_instance();
96
  }
97
  add_action( 'wp_head', function () {
@@ -275,28 +276,7 @@ class Pixel_Manager
275
  'methods' => 'POST',
276
  'callback' => function ( $request ) {
277
  $request_decoded = $request->get_json_params();
278
- $product_ids = Helpers::generic_sanitization( $request_decoded['productIds'] );
279
- // Prevent server overload if too many products are requested
280
- $product_ids = ( count( $product_ids ) > 50 ? array_slice( $product_ids, 0, 50 ) : $product_ids );
281
-
282
- if ( !$product_ids ) {
283
- wp_send_json_error( 'No product ids provided' );
284
- } else {
285
- $products = $this->get_products_for_datalayer( $product_ids );
286
- // Check if a data layer products transient for this page exists
287
- // If it does, add the products from the transient to $products
288
-
289
- if ( get_transient( 'pmw_products_for_datalayer_' . $request_decoded['pageId'] ) ) {
290
- $products_in_transient = get_transient( 'pmw_products_for_datalayer_' . $request_decoded['pageId'] );
291
- // Merge the associative arrays with nested arrays $products and $products_in_transient preserving the keys
292
- $products = array_replace_recursive( $products, $products_in_transient );
293
- }
294
-
295
- // Set transient with products for $request_decoded['pageId']
296
- set_transient( 'pmw_products_for_datalayer_' . $request_decoded['pageId'], $products, MONTH_IN_SECONDS );
297
- wp_send_json_success( $products );
298
- }
299
-
300
  },
301
  'permission_callback' => function () {
302
  return true;
@@ -326,6 +306,34 @@ class Pixel_Manager
326
  ] );
327
  }
328
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
  private function get_order_value_after_refunds( $order )
330
  {
331
  $refunds = $order->get_refunds();
@@ -406,26 +414,27 @@ class Pixel_Manager
406
  $options = $request->get_params();
407
  // Sanitize nested array $options
408
  $options = Helpers::generic_sanitization( $options );
 
 
 
409
  // Validate imported options
410
-
411
- if ( Validations::validate_imported_options( $options ) ) {
412
- update_option( WPM_DB_OPTIONS_NAME, $options );
413
- wp_send_json_success( [
414
- 'message' => 'Options saved',
415
- ] );
416
- } else {
417
- // wc_get_logger()->debug('Invalid Options. Options not saved', ['source' => 'wpm']);
418
  wp_send_json_error( [
419
- 'message' => 'Invalid options',
420
  ] );
421
  }
422
-
 
 
 
 
423
  }
424
 
425
  public function run_background_processes()
426
  {
427
 
428
- if ( wpm_fs()->is__premium_only() && Environment_Check::get_instance()->is_woocommerce_active() ) {
429
 
430
  if ( is_cart() || is_checkout() ) {
431
  if ( $this->options_obj->facebook->pixel_id && $this->options_obj->facebook->capi->token ) {
@@ -607,8 +616,10 @@ class Pixel_Manager
607
  'position' => 1,
608
  'viewItemListTrigger' => $this->view_item_list_trigger_settings(),
609
  'version' => [
610
- 'number' => WPM_CURRENT_VERSION,
611
- 'pro' => wpm_fs()->is__premium_only(),
 
 
612
  ],
613
  ];
614
  /**
@@ -692,16 +703,16 @@ class Pixel_Manager
692
  'universal' => [
693
  'property_id' => $this->options_obj->google->analytics->universal->property_id,
694
  'parameters' => (object) $this->google->get_ga_ua_parameters( $this->options_obj->google->analytics->universal->property_id ),
695
- 'mp_active' => wpm_fs()->is__premium_only(),
696
  ],
697
  'ga4' => [
698
  'measurement_id' => $this->options_obj->google->analytics->ga4->measurement_id,
699
  'parameters' => (object) $this->google->get_ga4_parameters( $this->options_obj->google->analytics->ga4->measurement_id ),
700
- 'mp_active' => $this->options_obj->google->analytics->ga4->api_secret && wpm_fs()->is__premium_only(),
701
  'debug_mode' => $this->google->is_ga4_debug_mode_active(),
702
  ],
703
  'id_type' => $this->google->get_ga_id_type(),
704
- 'eec' => wpm_fs()->is__premium_only() && $this->google->is_google_analytics_active(),
705
  ];
706
  }
707
  if ( $this->google->is_google_optimize_active() ) {
@@ -733,7 +744,7 @@ class Pixel_Manager
733
  'advanced_matching' => (bool) $this->options_obj->facebook->capi->user_transparency->send_additional_client_identifiers,
734
  'exclusion_patterns' => apply_filters( 'pmw_facebook_tracking_exclusion_patterns', [] ),
735
  ];
736
- if ( wpm_fs()->is__premium_only() && Environment_Check::get_instance()->is_woocommerce_active() && is_product() && $this->options_obj->facebook->microdata ) {
737
  $data['microdata_product_id'] = $this->microdata_product_id;
738
  }
739
  return $data;
@@ -1194,20 +1205,13 @@ class Pixel_Manager
1194
 
1195
  public function ajax_pmw_get_product_ids()
1196
  {
1197
- $_post = Helpers::get_input_vars( INPUT_POST );
1198
- $product_ids = explode( ',', $_post['productIds'] );
1199
- // Prevent server overload if too many products are requested
1200
- $product_ids = ( count( $product_ids ) > 50 ? array_slice( $product_ids, 0, 50 ) : $product_ids );
1201
-
1202
- if ( !$product_ids ) {
1203
- wp_send_json_error();
1204
- return;
1205
- }
1206
-
1207
- wp_send_json_success( $this->get_products_for_datalayer( $product_ids ) );
1208
  }
1209
 
1210
- public function get_products_for_datalayer( $product_ids )
1211
  {
1212
  $products = [];
1213
  foreach ( $product_ids as $key => $product_id ) {
@@ -1264,7 +1268,7 @@ class Pixel_Manager
1264
  $pmw_dependencies = [ 'jquery', 'wp-hooks' ];
1265
  // enable polyfill.io with filter
1266
 
1267
- if ( wpm_fs()->is__premium_only() && apply_filters( 'wpm_experimental_inject_polyfill_io', false ) ) {
1268
  wp_enqueue_script(
1269
  'polyfill-io',
1270
  'https://cdn.polyfill.io/v2/polyfill.min.js',
@@ -1413,6 +1417,10 @@ class Pixel_Manager
1413
  'scrollTrackingThresholds' => $this->options_obj->general->scroll_tracker_thresholds,
1414
  'pageId' => get_the_ID(),
1415
  'excludeDomains' => apply_filters( 'pmw_exclude_domains_from_tracking', [] ),
 
 
 
 
1416
  ];
1417
  }
1418
 
6
  use WCPM\Classes\Admin\Validations ;
7
  use WCPM\Classes\Data\GA4_Data_API ;
8
  use WCPM\Classes\Helpers ;
9
+ use WCPM\Classes\Options ;
10
  use WCPM\Classes\Shop ;
11
  use WCPM\Classes\Product ;
12
  use WCPM\Classes\Http\Facebook_CAPI ;
69
  */
70
  add_action( 'wp_head', function () {
71
  $this->inject_wpm_opening();
72
+ if ( wpm_fs()->can_use_premium_code__premium_only() && Environment_Check::get_instance()->is_woocommerce_active() && is_product() ) {
73
  if ( $this->options_obj->facebook->microdata ) {
74
  $this->microdata_product_id = ( new Facebook_Microdata( $this->options ) )->inject_schema( wc_get_product( get_the_ID() ) );
75
  }
92
  if ( $this->facebook_active ) {
93
  new Facebook_Pixel_Manager( $this->options );
94
  }
95
+ if ( wpm_fs()->can_use_premium_code__premium_only() && $this->is_tiktok_eapi_active__premium_only() ) {
96
  TikTok_EAPI::get_instance();
97
  }
98
  add_action( 'wp_head', function () {
276
  'methods' => 'POST',
277
  'callback' => function ( $request ) {
278
  $request_decoded = $request->get_json_params();
279
+ $this->get_products_for_datalayer( $request_decoded );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
  },
281
  'permission_callback' => function () {
282
  return true;
306
  ] );
307
  }
308
 
309
+ private function get_products_for_datalayer( $data )
310
+ {
311
+ $product_ids = Helpers::generic_sanitization( $data['productIds'] );
312
+ if ( !$product_ids ) {
313
+ wp_send_json_error( 'No product IDs provided.' );
314
+ }
315
+ if ( !is_array( $product_ids ) ) {
316
+ wp_send_json_error( 'Product IDs must be an array.' );
317
+ }
318
+ // Prevent server overload if too many products are requested
319
+ $product_ids = ( count( $product_ids ) > 50 ? array_slice( $product_ids, 0, 50 ) : $product_ids );
320
+ $products = $this->get_products_for_datalayer_by_product_ids( $product_ids );
321
+ // Check if a data layer products transient for this page exists
322
+ // If it does, add the products from the transient to $products
323
+
324
+ if ( get_transient( 'pmw_products_for_datalayer_' . $data['pageId'] ) ) {
325
+ $products_in_transient = get_transient( 'pmw_products_for_datalayer_' . $data['pageId'] );
326
+ // Merge the associative arrays with nested arrays $products and $products_in_transient preserving the keys
327
+ $products = array_replace_recursive( $products, $products_in_transient );
328
+ }
329
+
330
+ // Set transient with products for $data['pageId']
331
+ if ( 'cart' !== $data['pageType'] && 'checkout' !== $data['pageType'] && 'order_received_page' !== $data['pageType'] ) {
332
+ set_transient( 'pmw_products_for_datalayer_' . $data['pageId'], $products, MONTH_IN_SECONDS );
333
+ }
334
+ wp_send_json_success( $products );
335
+ }
336
+
337
  private function get_order_value_after_refunds( $order )
338
  {
339
  $refunds = $order->get_refunds();
414
  $options = $request->get_params();
415
  // Sanitize nested array $options
416
  $options = Helpers::generic_sanitization( $options );
417
+ if ( !is_array( $options ) ) {
418
+ wp_send_json_error( 'Invalid options. Not an array.' );
419
+ }
420
  // Validate imported options
421
+ if ( !Validations::validate_imported_options( $options ) ) {
422
+ // wc_get_logger()->error('Invalid Options. Options not saved', ['source' => 'wpm']);
 
 
 
 
 
 
423
  wp_send_json_error( [
424
+ 'message' => 'Invalid options. Didn\'t pass validation.',
425
  ] );
426
  }
427
+ // All good, save options
428
+ update_option( WPM_DB_OPTIONS_NAME, $options );
429
+ wp_send_json_success( [
430
+ 'message' => 'Options saved',
431
+ ] );
432
  }
433
 
434
  public function run_background_processes()
435
  {
436
 
437
+ if ( wpm_fs()->can_use_premium_code__premium_only() && Environment_Check::get_instance()->is_woocommerce_active() ) {
438
 
439
  if ( is_cart() || is_checkout() ) {
440
  if ( $this->options_obj->facebook->pixel_id && $this->options_obj->facebook->capi->token ) {
616
  'position' => 1,
617
  'viewItemListTrigger' => $this->view_item_list_trigger_settings(),
618
  'version' => [
619
+ 'number' => WPM_CURRENT_VERSION,
620
+ 'pro' => wpm_fs()->is__premium_only(),
621
+ 'eligibleForUpdates' => wpm_fs()->can_use_premium_code__premium_only(),
622
+ 'distro' => 'fms',
623
  ],
624
  ];
625
  /**
703
  'universal' => [
704
  'property_id' => $this->options_obj->google->analytics->universal->property_id,
705
  'parameters' => (object) $this->google->get_ga_ua_parameters( $this->options_obj->google->analytics->universal->property_id ),
706
+ 'mp_active' => wpm_fs()->can_use_premium_code__premium_only(),
707
  ],
708
  'ga4' => [
709
  'measurement_id' => $this->options_obj->google->analytics->ga4->measurement_id,
710
  'parameters' => (object) $this->google->get_ga4_parameters( $this->options_obj->google->analytics->ga4->measurement_id ),
711
+ 'mp_active' => $this->options_obj->google->analytics->ga4->api_secret && wpm_fs()->can_use_premium_code__premium_only(),
712
  'debug_mode' => $this->google->is_ga4_debug_mode_active(),
713
  ],
714
  'id_type' => $this->google->get_ga_id_type(),
715
+ 'eec' => wpm_fs()->can_use_premium_code__premium_only() && $this->google->is_google_analytics_active(),
716
  ];
717
  }
718
  if ( $this->google->is_google_optimize_active() ) {
744
  'advanced_matching' => (bool) $this->options_obj->facebook->capi->user_transparency->send_additional_client_identifiers,
745
  'exclusion_patterns' => apply_filters( 'pmw_facebook_tracking_exclusion_patterns', [] ),
746
  ];
747
+ if ( wpm_fs()->can_use_premium_code__premium_only() && Environment_Check::get_instance()->is_woocommerce_active() && is_product() && $this->options_obj->facebook->microdata ) {
748
  $data['microdata_product_id'] = $this->microdata_product_id;
749
  }
750
  return $data;
1205
 
1206
  public function ajax_pmw_get_product_ids()
1207
  {
1208
+ $data = Helpers::get_input_vars( INPUT_POST );
1209
+ // Change productIds back into an array
1210
+ $data['productIds'] = explode( ',', $data['productIds'] );
1211
+ $this->get_products_for_datalayer( $data );
 
 
 
 
 
 
 
1212
  }
1213
 
1214
+ public function get_products_for_datalayer_by_product_ids( $product_ids )
1215
  {
1216
  $products = [];
1217
  foreach ( $product_ids as $key => $product_id ) {
1268
  $pmw_dependencies = [ 'jquery', 'wp-hooks' ];
1269
  // enable polyfill.io with filter
1270
 
1271
+ if ( wpm_fs()->can_use_premium_code__premium_only() && apply_filters( 'wpm_experimental_inject_polyfill_io', false ) ) {
1272
  wp_enqueue_script(
1273
  'polyfill-io',
1274
  'https://cdn.polyfill.io/v2/polyfill.min.js',
1417
  'scrollTrackingThresholds' => $this->options_obj->general->scroll_tracker_thresholds,
1418
  'pageId' => get_the_ID(),
1419
  'excludeDomains' => apply_filters( 'pmw_exclude_domains_from_tracking', [] ),
1420
+ 'server2server' => [
1421
+ 'active' => Options::server_2_server_enabled(),
1422
+ 'ipExcludeList' => apply_filters( 'pmw_exclude_ips_from_server2server_events', [] ),
1423
+ ],
1424
  ];
1425
  }
1426
 
classes/pixels/facebook/class-facebook-pixel-manager.php CHANGED
@@ -15,7 +15,7 @@ class Facebook_Pixel_Manager
15
  public function __construct( $options )
16
  {
17
 
18
- if ( wpm_fs()->is__premium_only() && $options['facebook']['capi']['token'] ) {
19
  $this->facebook_capi = new Facebook_CAPI( $options );
20
  // Save the Facebook session identifiers on the order so that we can use them later when the order gets paid or completed
21
  // https://woocommerce.github.io/code-reference/files/woocommerce-includes-class-wc-checkout.html#source-view.403
15
  public function __construct( $options )
16
  {
17
 
18
+ if ( wpm_fs()->can_use_premium_code__premium_only() && $options['facebook']['capi']['token'] ) {
19
  $this->facebook_capi = new Facebook_CAPI( $options );
20
  // Save the Facebook session identifiers on the order so that we can use them later when the order gets paid or completed
21
  // https://woocommerce.github.io/code-reference/files/woocommerce-includes-class-wc-checkout.html#source-view.403
classes/pixels/google/class-google-pixel-manager.php CHANGED
@@ -58,7 +58,7 @@ class Google_Pixel_Manager
58
 
59
  public function inject_order_received_page_dedupe( $order, $order_total, $is_new_customer )
60
  {
61
- if ( $this->google_pixel->is_google_ads_active() && wpm_fs()->is__premium_only() ) {
62
  $this->save_gclid_in_order__premium_only( $order );
63
  }
64
  }
58
 
59
  public function inject_order_received_page_dedupe( $order, $order_total, $is_new_customer )
60
  {
61
+ if ( $this->google_pixel->is_google_ads_active() && wpm_fs()->can_use_premium_code__premium_only() ) {
62
  $this->save_gclid_in_order__premium_only( $order );
63
  }
64
  }
js/public/wpm-public.p1.min.js CHANGED
@@ -1,2 +1,2 @@
1
- (()=>{var e={164:()=>{jQuery(document).on("wpmLoadPixels",(()=>{var e,t,a,o,r,n,i,l,d;null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.facebook)||void 0===a||!a.pixel_id||null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.facebook)&&void 0!==n&&n.loaded||wpm.doesUrlContainPatterns(null===(i=wpmDataLayer)||void 0===i||null===(l=i.pixels)||void 0===l||null===(d=l.facebook)||void 0===d?void 0:d.exclusion_patterns)||wpm.canIFire("ads","facebook-ads")&&wpm.loadFacebookPixel()})),jQuery(document).on("wpmClientSideAddToCart",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","AddToCart",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideBeginCheckout",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","InitiateCheckout",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideAddToWishlist",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","AddToWishlist",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideViewItem",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","ViewContent",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideSearch",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","Search",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmLoadAlways",(()=>{try{var e,t,a;if(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.facebook)||void 0===a||!a.loaded)return;wpm.setFbUserData()}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideOrderReceivedPage",((e,t)=>{try{var a,o,r;if(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.facebook)||void 0===r||!r.loaded)return;fbq("track","Purchase",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}}))},1:()=>{!function(e,t,a){let o;e.loadFacebookPixel=()=>{try{wpmDataLayer.pixels.facebook.loaded=!0,t=window,a=document,o="script",t.fbq||(r=t.fbq=function(){r.callMethod?r.callMethod.apply(r,arguments):r.queue.push(arguments)},t._fbq||(t._fbq=r),r.push=r,r.loaded=!0,r.version="2.0",r.queue=[],(n=a.createElement(o)).async=!0,n.src="https://connect.facebook.net/en_US/fbevents.js",(i=a.getElementsByTagName(o)[0]).parentNode.insertBefore(n,i));let l={};e.isFbpSet()&&e.isFbAdvancedMatchingEnabled()&&(l={...e.getUserIdentifiersForFb()}),fbq("init",wpmDataLayer.pixels.facebook.pixel_id,l),fbq("track","PageView")}catch(o){console.error(o)}var t,a,o,r,n,i},e.getUserIdentifiersForFb=()=>{var e,t,a,o,r,n,i,l,d,s,c,u,p,m,g,y,w,v,_,f,h,L,D,k,b,C,x,j,S,I,P,Q,E,O,T,A,F,V,U,R,G,q,M,N,W;let B={};return null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.user)&&void 0!==t&&null!==(a=t.id)&&void 0!==a&&a.raw&&(B.external_id=wpmDataLayer.user.id.raw),null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.order)&&void 0!==r&&r.user_id&&(B.external_id=wpmDataLayer.order.user_id),null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.user)&&void 0!==i&&null!==(l=i.email)&&void 0!==l&&l.facebook&&(B.em=wpmDataLayer.user.email.facebook),null!==(d=wpmDataLayer)&&void 0!==d&&null!==(s=d.order)&&void 0!==s&&s.billing_email_hashed&&(B.em=wpmDataLayer.order.billing_email_hashed),null!==(c=wpmDataLayer)&&void 0!==c&&null!==(u=c.user)&&void 0!==u&&null!==(p=u.first_name)&&void 0!==p&&p.facebook&&(B.fn=wpmDataLayer.user.first_name.facebook),null!==(m=wpmDataLayer)&&void 0!==m&&null!==(g=m.order)&&void 0!==g&&g.billing_first_name&&(B.fn=wpmDataLayer.order.billing_first_name.toLowerCase()),null!==(y=wpmDataLayer)&&void 0!==y&&null!==(w=y.user)&&void 0!==w&&null!==(v=w.last_name)&&void 0!==v&&v.facebook&&(B.ln=wpmDataLayer.user.last_name.facebook),null!==(_=wpmDataLayer)&&void 0!==_&&null!==(f=_.order)&&void 0!==f&&f.billing_last_name&&(B.ln=wpmDataLayer.order.billing_last_name.toLowerCase()),null!==(h=wpmDataLayer)&&void 0!==h&&null!==(L=h.user)&&void 0!==L&&null!==(D=L.phone)&&void 0!==D&&D.facebook&&(B.ph=wpmDataLayer.user.phone.facebook),null!==(k=wpmDataLayer)&&void 0!==k&&null!==(b=k.order)&&void 0!==b&&b.billing_phone&&(B.ph=wpmDataLayer.order.billing_phone.replace("+","")),null!==(C=wpmDataLayer)&&void 0!==C&&null!==(x=C.user)&&void 0!==x&&null!==(j=x.city)&&void 0!==j&&j.facebook&&(B.ct=wpmDataLayer.user.city.facebook),null!==(S=wpmDataLayer)&&void 0!==S&&null!==(I=S.order)&&void 0!==I&&I.billing_city&&(B.ct=wpmDataLayer.order.billing_city.toLowerCase().replace(/ /g,"")),null!==(P=wpmDataLayer)&&void 0!==P&&null!==(Q=P.user)&&void 0!==Q&&null!==(E=Q.state)&&void 0!==E&&E.facebook&&(B.st=wpmDataLayer.user.state.facebook),null!==(O=wpmDataLayer)&&void 0!==O&&null!==(T=O.order)&&void 0!==T&&T.billing_state&&(B.st=wpmDataLayer.order.billing_state.toLowerCase().replace(/[a-zA-Z]{2}-/,"")),null!==(A=wpmDataLayer)&&void 0!==A&&null!==(F=A.user)&&void 0!==F&&null!==(V=F.postcode)&&void 0!==V&&V.facebook&&(B.zp=wpmDataLayer.user.postcode.facebook),null!==(U=wpmDataLayer)&&void 0!==U&&null!==(R=U.order)&&void 0!==R&&R.billing_postcode&&(B.zp=wpmDataLayer.order.billing_postcode),null!==(G=wpmDataLayer)&&void 0!==G&&null!==(q=G.user)&&void 0!==q&&null!==(M=q.country)&&void 0!==M&&M.facebook&&(B.country=wpmDataLayer.user.country.facebook),null!==(N=wpmDataLayer)&&void 0!==N&&null!==(W=N.order)&&void 0!==W&&W.billing_country&&(B.country=wpmDataLayer.order.billing_country.toLowerCase()),B},e.getFbRandomEventId=()=>(Math.random()+1).toString(36).substring(2),e.getFbUserData=()=>(o={...o,...e.getFbUserDataFromBrowser()},o),e.isFbAdvancedMatchingEnabled=()=>{var e,t,a;return!(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.facebook)||void 0===a||!a.advanced_matching)},e.setFbUserData=()=>{o=e.getFbUserDataFromBrowser()},e.getFbUserDataFromBrowser=()=>{let t={};var a,o,r;return e.getCookie("_fbp")&&e.isValidFbp(e.getCookie("_fbp"))&&(t.fbp=e.getCookie("_fbp")),e.getCookie("_fbc")&&e.isValidFbc(e.getCookie("_fbc"))&&(t.fbc=e.getCookie("_fbc")),e.isFbAdvancedMatchingEnabled()&&null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.user)&&void 0!==o&&null!==(r=o.id)&&void 0!==r&&r.raw&&(t.external_id=wpmDataLayer.user.id.raw),navigator.userAgent&&(t.client_user_agent=navigator.userAgent),t},e.isFbpSet=()=>!!e.getCookie("_fbp"),e.isValidFbp=e=>new RegExp(/^fb\.[0-2]\.\d{13}\.\d{8,20}$/).test(e),e.isValidFbc=e=>new RegExp(/^fb\.[0-2]\.\d{13}\.[\da-zA-Z_-]{8,}/).test(e),e.fbGetProductDataForCapiEvent=e=>({content_type:"product",content_name:e.name,content_ids:[e.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]],value:parseFloat(e.quantity*e.price),currency:e.currency}),e.facebookContentIds=()=>{let e=[];for(const[o,r]of Object.entries(wpmDataLayer.order.items)){var t,a;null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput&&0!==r.variation_id?e.push(String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])):e.push(String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))}return e},e.trackCustomFacebookEvent=function(t){let o=arguments.length>1&&arguments[1]!==a?arguments[1]:{};try{var r,n,i;if(null===(r=wpmDataLayer)||void 0===r||null===(n=r.pixels)||void 0===n||null===(i=n.facebook)||void 0===i||!i.loaded)return;let a=e.getFbRandomEventId();fbq("trackCustom",t,o,{eventID:a}),jQuery(document).trigger("wpmFbCapiEvent",{event_name:t,event_id:a,user_data:e.getFbUserData(),event_source_url:window.location.href,custom_data:o})}catch(e){console.error(e)}},e.fbGetContentIdsFromCart=()=>{let e=[];for(const t in wpmDataLayer.cart)e.push(wpmDataLayer.products[t].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]);return e}}(window.wpm=window.wpm||{},jQuery)},12:(e,t,a)=>{a(1),a(164)},165:()=>{jQuery(document).on("wpmViewItemList",(function(e,t){try{var a,o,r,n,i,l,d,s,c,u,p,m,g,y;if(jQuery.isEmptyObject(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(n=r.ads)||void 0===n?void 0:n.conversionIds))return;if(null===(i=wpmDataLayer)||void 0===i||null===(l=i.pixels)||void 0===l||null===(d=l.google)||void 0===d||null===(s=d.ads)||void 0===s||null===(c=s.dynamic_remarketing)||void 0===c||!c.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;if(null!==(u=wpmDataLayer)&&void 0!==u&&null!==(p=u.general)&&void 0!==p&&p.variationsOutput&&t.isVariable&&!1===wpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids)return;if(!t)return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers(),items:[{id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical}]};null!==(m=wpmDataLayer)&&void 0!==m&&null!==(g=m.user)&&void 0!==g&&null!==(y=g.id)&&void 0!==y&&y.raw&&(e.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","view_item_list",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmAddToCart",(function(e,t){try{var a,o,r,n,i,l,d,s,c,u,p,m;if(jQuery.isEmptyObject(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(n=r.ads)||void 0===n?void 0:n.conversionIds))return;if(null===(i=wpmDataLayer)||void 0===i||null===(l=i.pixels)||void 0===l||null===(d=l.google)||void 0===d||null===(s=d.ads)||void 0===s||null===(c=s.dynamic_remarketing)||void 0===c||!c.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers(),value:t.quantity*t.price,items:[{id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],quantity:t.quantity,price:t.price,google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical}]};null!==(u=wpmDataLayer)&&void 0!==u&&null!==(p=u.user)&&void 0!==p&&null!==(m=p.id)&&void 0!==m&&m.raw&&(e.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","add_to_cart",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmViewItem",(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;try{var a,o,r,n,i,l,d,s,c,u,p,m;if(jQuery.isEmptyObject(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(n=r.ads)||void 0===n?void 0:n.conversionIds))return;if(null===(i=wpmDataLayer)||void 0===i||null===(l=i.pixels)||void 0===l||null===(d=l.google)||void 0===d||null===(s=d.ads)||void 0===s||null===(c=s.dynamic_remarketing)||void 0===c||!c.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers()};t&&(e.value=(t.quantity?t.quantity:1)*t.price,e.items=[{id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],quantity:t.quantity?t.quantity:1,price:t.price,google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical}]),null!==(u=wpmDataLayer)&&void 0!==u&&null!==(p=u.user)&&void 0!==p&&null!==(m=p.id)&&void 0!==m&&m.raw&&(e.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","view_item",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmSearch",(function(){try{var e,t,a,o,r,n,i,l,d,s,c,u;if(jQuery.isEmptyObject(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.ads)||void 0===o?void 0:o.conversionIds))return;if(null===(r=wpmDataLayer)||void 0===r||null===(n=r.pixels)||void 0===n||null===(i=n.google)||void 0===i||null===(l=i.ads)||void 0===l||null===(d=l.dynamic_remarketing)||void 0===d||!d.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let g=[];for(const[e,t]of Object.entries(wpmDataLayer.products)){var p,m;if(null!==(p=wpmDataLayer)&&void 0!==p&&null!==(m=p.general)&&void 0!==m&&m.variationsOutput&&t.isVariable&&!1===wpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids)return;g.push({id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical})}let y={send_to:wpm.getGoogleAdsConversionIdentifiers(),items:g};null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&null!==(u=c.id)&&void 0!==u&&u.raw&&(y.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","view_search_results",y)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n,i,l,d,s,c,u;if(jQuery.isEmptyObject(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.ads)||void 0===o?void 0:o.conversionIds))return;if(null===(r=wpmDataLayer)||void 0===r||null===(n=r.pixels)||void 0===n||null===(i=n.google)||void 0===i||null===(l=i.ads)||void 0===l||null===(d=l.dynamic_remarketing)||void 0===d||!d.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let p={send_to:wpm.getGoogleAdsConversionIdentifiers(),value:wpmDataLayer.order.value_filtered,items:wpm.getGoogleAdsDynamicRemarketingOrderItems()};null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&null!==(u=c.id)&&void 0!==u&&u.raw&&(p.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","purchase",p)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmLogin",(function(){try{var e,t,a,o,r,n,i,l,d,s,c,u;if(jQuery.isEmptyObject(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.ads)||void 0===o?void 0:o.conversionIds))return;if(null===(r=wpmDataLayer)||void 0===r||null===(n=r.pixels)||void 0===n||null===(i=n.google)||void 0===i||null===(l=i.ads)||void 0===l||null===(d=l.dynamic_remarketing)||void 0===d||!d.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let p={send_to:wpm.getGoogleAdsConversionIdentifiers()};null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.user)&&void 0!==c&&null!==(u=c.id)&&void 0!==u&&u.raw&&(p.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","login",p)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n,i;if(jQuery.isEmptyObject(wpm.getGoogleAdsConversionIdentifiersWithLabel()))return;if(!wpm.googleConfigConditionsMet("ads"))return;let l={},d={};l={send_to:wpm.getGoogleAdsConversionIdentifiersWithLabel(),transaction_id:wpmDataLayer.order.number,value:wpmDataLayer.order.value_filtered,currency:wpmDataLayer.order.currency,new_customer:wpmDataLayer.order.new_customer},null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.order)&&void 0!==t&&t.clv_order_value_filtered&&(l.customer_lifetime_value=wpmDataLayer.order.clv_order_value_filtered),null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.user)&&void 0!==o&&null!==(r=o.id)&&void 0!==r&&r.raw&&(l.user_id=wpmDataLayer.user.id.raw),null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.order)&&void 0!==i&&i.aw_merchant_id&&(d={discount:wpmDataLayer.order.discount,aw_merchant_id:wpmDataLayer.order.aw_merchant_id,aw_feed_country:wpmDataLayer.order.aw_feed_country,aw_feed_language:wpmDataLayer.order.aw_feed_language,items:wpm.getGoogleAdsRegularOrderItems()}),wpm.gtagLoaded().then((function(){gtag("event","conversion",{...l,...d})}))}catch(e){console.error(e)}}))},42:()=>{!function(e,t,a){e.getGoogleAdsConversionIdentifiersWithLabel=function(){var e,t,a,o;let r=[];if(null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.ads)&&void 0!==o&&o.conversionIds)for(const[e,t]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))t&&r.push(e+"/"+t);return r},e.getGoogleAdsConversionIdentifiers=function(){let e=[];for(const[t,a]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))e.push(t);return e},e.getGoogleAdsRegularOrderItems=function(){let e=[];for(const[o,r]of Object.entries(wpmDataLayer.order.items)){var t,a;let o;o={quantity:r.quantity,price:r.price},null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput&&0!==r.variation_id?(o.id=String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(o)):(o.id=String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(o))}return e},e.getGoogleAdsDynamicRemarketingOrderItems=function(){let e=[];for(const[o,r]of Object.entries(wpmDataLayer.order.items)){var t,a;let o;o={quantity:r.quantity,price:r.price,google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical},null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput&&0!==r.variation_id?(o.id=String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(o)):(o.id=String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(o))}return e}}(window.wpm=window.wpm||{},jQuery)},190:(e,t,a)=>{a(42),a(165)},625:()=>{jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n,i,l,d,s;if(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.analytics)||void 0===o||null===(r=o.universal)||void 0===r||!r.property_id)return;if(null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.google)&&void 0!==l&&null!==(d=l.analytics)&&void 0!==d&&null!==(s=d.universal)&&void 0!==s&&s.mp_active)return;if(!wpm.googleConfigConditionsMet("analytics"))return;wpm.gtagLoaded().then((function(){gtag("event","purchase",{send_to:[wpmDataLayer.pixels.google.analytics.universal.property_id],transaction_id:wpmDataLayer.order.number,affiliation:wpmDataLayer.order.affiliation,currency:wpmDataLayer.order.currency,value:wpmDataLayer.order.value_regular,discount:wpmDataLayer.order.discount,tax:wpmDataLayer.order.tax,shipping:wpmDataLayer.order.shipping,coupon:wpmDataLayer.order.coupon,items:wpm.getGAUAOrderItems()})}))}catch(e){console.error(e)}}))},19:()=>{!function(e,t,a){e.getGAUAOrderItems=function(){let t=[];for(const[r,n]of Object.entries(wpmDataLayer.order.items)){var a,o;let r;r={quantity:n.quantity,price:n.price,name:n.name,currency:wpmDataLayer.order.currency,category:wpmDataLayer.products[n.id].category.join("/")},null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.general)&&void 0!==o&&o.variationsOutput&&0!==n.variation_id?(r.id=String(wpmDataLayer.products[n.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),r.variant=wpmDataLayer.products[n.variation_id].variant_name,r.brand=wpmDataLayer.products[n.variation_id].brand):(r.id=String(wpmDataLayer.products[n.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),r.brand=wpmDataLayer.products[n.id].brand),r=e.ga3AddListNameToProduct(r),t.push(r)}return t},e.ga3AddListNameToProduct=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:null;return e.list_name=wpmDataLayer.shop.list_name,t&&(e.list_position=t),e}}(window.wpm=window.wpm||{},jQuery)},562:(e,t,a)=>{a(19),a(625)},572:()=>{jQuery(document).on("wpmOrderReceivedPage",(function(){try{var e,t,a,o,r,n,i,l,d,s;if(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.analytics)||void 0===o||null===(r=o.ga4)||void 0===r||!r.measurement_id)return;if(null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.google)&&void 0!==l&&null!==(d=l.analytics)&&void 0!==d&&null!==(s=d.ga4)&&void 0!==s&&s.mp_active)return;if(!wpm.googleConfigConditionsMet("analytics"))return;wpm.gtagLoaded().then((function(){gtag("event","purchase",{send_to:[wpmDataLayer.pixels.google.analytics.ga4.measurement_id],transaction_id:wpmDataLayer.order.number,affiliation:wpmDataLayer.order.affiliation,currency:wpmDataLayer.order.currency,value:wpmDataLayer.order.value_regular,discount:wpmDataLayer.order.discount,tax:wpmDataLayer.order.tax,shipping:wpmDataLayer.order.shipping,coupon:wpmDataLayer.order.coupon,items:wpm.getGA4OrderItems()})}))}catch(e){console.error(e)}}))},228:()=>{!function(e,t,a){e.getGA4OrderItems=function(){let e=[];for(const[o,r]of Object.entries(wpmDataLayer.order.items)){var t,a;let o;o={quantity:r.quantity,price:r.price,item_name:r.name,currency:wpmDataLayer.order.currency,item_category:wpmDataLayer.products[r.id].category.join("/")},null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput&&0!==r.variation_id?(o.item_id=String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),o.item_variant=wpmDataLayer.products[r.variation_id].variant_name,o.item_brand=wpmDataLayer.products[r.variation_id].brand):(o.item_id=String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),o.item_brand=wpmDataLayer.products[r.id].brand),e.push(o)}return e}}(window.wpm=window.wpm||{},jQuery)},522:(e,t,a)=>{a(228),a(572)},774:(e,t,a)=>{a(562),a(522)},294:()=>{jQuery(document).on("wpmLoadPixels",(function(){var e,t,a;void 0===(null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a?void 0:a.state)&&(wpm.canGoogleLoad()?wpm.loadGoogle():wpm.logPreventedPixelLoading("google","analytics / ads"))}))},860:()=>{!function(e,t,a){e.googleConfigConditionsMet=function(t){var a,o,r,n;return!(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(n=r.consent_mode)||void 0===n||!n.active)||("category"===e.getConsentValues().mode?!0===e.getConsentValues().categories[t]:"pixel"===e.getConsentValues().mode&&e.getConsentValues().pixels.includes("google-"+t))},e.getVisitorConsentStatusAndUpdateGoogleConsentSettings=function(t){return"category"===e.getConsentValues().mode?(e.getConsentValues().categories.analytics&&(t.analytics_storage="granted"),e.getConsentValues().categories.ads&&(t.ad_storage="granted")):"pixel"===e.getConsentValues().mode&&(t.analytics_storage=e.getConsentValues().pixels.includes("google-analytics")?"granted":"denied",t.ad_storage=e.getConsentValues().pixels.includes("google-ads")?"granted":"denied"),t},e.updateGoogleConsentMode=function(){let e=!(arguments.length>0&&arguments[0]!==a)||arguments[0],t=!(arguments.length>1&&arguments[1]!==a)||arguments[1];try{if(!window.gtag||!wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent)return;gtag("consent","update",{analytics_storage:e?"granted":"denied",ad_storage:t?"granted":"denied"})}catch(e){console.error(e)}},e.fireGtagGoogleAds=function(){try{var e,t,a,o,r,n,i,l,d,s,c,u,p,m,g,y,w,v,_,f,h,L,D;if(wpmDataLayer.pixels.google.ads.state="loading",null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.ads)&&void 0!==o&&null!==(r=o.enhanced_conversions)&&void 0!==r&&r.active)for(const[e,t]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))gtag("config",e,{allow_enhanced_conversions:!0});else for(const[e,t]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))gtag("config",e);null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.google)&&void 0!==l&&null!==(d=l.ads)&&void 0!==d&&d.conversionIds&&null!==(s=wpmDataLayer)&&void 0!==s&&null!==(c=s.pixels)&&void 0!==c&&null!==(u=c.google)&&void 0!==u&&null!==(p=u.ads)&&void 0!==p&&p.phone_conversion_label&&null!==(m=wpmDataLayer)&&void 0!==m&&null!==(g=m.pixels)&&void 0!==g&&null!==(y=g.google)&&void 0!==y&&null!==(w=y.ads)&&void 0!==w&&w.phone_conversion_number&&gtag("config",Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]+"/"+wpmDataLayer.pixels.google.ads.phone_conversion_label,{phone_conversion_number:wpmDataLayer.pixels.google.ads.phone_conversion_number}),null!==(v=wpmDataLayer)&&void 0!==v&&null!==(_=v.shop)&&void 0!==_&&_.page_type&&"order_received_page"===wpmDataLayer.shop.page_type&&null!==(f=wpmDataLayer)&&void 0!==f&&null!==(h=f.order)&&void 0!==h&&null!==(L=h.google)&&void 0!==L&&null!==(D=L.ads)&&void 0!==D&&D.enhanced_conversion_data&&gtag("set","user_data",wpmDataLayer.order.google.ads.enhanced_conversion_data),wpmDataLayer.pixels.google.ads.state="ready"}catch(e){console.error(e)}},e.fireGtagGoogleAnalyticsUA=function(){try{wpmDataLayer.pixels.google.analytics.universal.state="loading",gtag("config",wpmDataLayer.pixels.google.analytics.universal.property_id,wpmDataLayer.pixels.google.analytics.universal.parameters),wpmDataLayer.pixels.google.analytics.universal.state="ready"}catch(e){console.error(e)}},e.fireGtagGoogleAnalyticsGA4=function(){try{var e,t,a,o,r;wpmDataLayer.pixels.google.analytics.ga4.state="loading";let n=wpmDataLayer.pixels.google.analytics.ga4.parameters;null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.analytics)&&void 0!==o&&null!==(r=o.ga4)&&void 0!==r&&r.debug_mode&&(n.debug_mode=!0),gtag("config",wpmDataLayer.pixels.google.analytics.ga4.measurement_id,n),wpmDataLayer.pixels.google.analytics.ga4.state="ready"}catch(e){console.error(e)}},e.isGoogleActive=function(){var e,t,a,o,r,n,i,l,d,s,c,u,p,m;return!(!(null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.analytics)&&void 0!==o&&null!==(r=o.universal)&&void 0!==r&&r.property_id||null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.google)&&void 0!==l&&null!==(d=l.analytics)&&void 0!==d&&null!==(s=d.ga4)&&void 0!==s&&s.measurement_id)&&jQuery.isEmptyObject(null===(c=wpmDataLayer)||void 0===c||null===(u=c.pixels)||void 0===u||null===(p=u.google)||void 0===p||null===(m=p.ads)||void 0===m?void 0:m.conversionIds))},e.getGoogleGtagId=function(){var e,t,a,o,r,n,i,l,d,s;return null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.google)&&void 0!==a&&null!==(o=a.analytics)&&void 0!==o&&null!==(r=o.universal)&&void 0!==r&&r.property_id?wpmDataLayer.pixels.google.analytics.universal.property_id:null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.google)&&void 0!==l&&null!==(d=l.analytics)&&void 0!==d&&null!==(s=d.ga4)&&void 0!==s&&s.measurement_id?wpmDataLayer.pixels.google.analytics.ga4.measurement_id:Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]},e.loadGoogle=function(){e.isGoogleActive()&&(wpmDataLayer.pixels.google.state="loading",e.loadScriptAndCacheIt("https://www.googletagmanager.com/gtag/js?id="+e.getGoogleGtagId()).then((function(t,a){try{var o,r,n,i,l,d,s,c,u,p,m,g,y,w,v,_,f,h,L,D,k,b;if(window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.google)&&void 0!==n&&null!==(i=n.consent_mode)&&void 0!==i&&i.active){var C,x,j,S;let t={ad_storage:wpmDataLayer.pixels.google.consent_mode.ad_storage,analytics_storage:wpmDataLayer.pixels.google.consent_mode.analytics_storage,wait_for_update:wpmDataLayer.pixels.google.consent_mode.wait_for_update};null!==(C=wpmDataLayer)&&void 0!==C&&null!==(x=C.pixels)&&void 0!==x&&null!==(j=x.google)&&void 0!==j&&null!==(S=j.consent_mode)&&void 0!==S&&S.region&&(t.region=wpmDataLayer.pixels.google.consent_mode.region),t=e.getVisitorConsentStatusAndUpdateGoogleConsentSettings(t),gtag("consent","default",t),gtag("set","ads_data_redaction",wpmDataLayer.pixels.google.consent_mode.ads_data_redaction),gtag("set","url_passthrough",wpmDataLayer.pixels.google.consent_mode.url_passthrough)}null!==(l=wpmDataLayer)&&void 0!==l&&null!==(d=l.pixels)&&void 0!==d&&null!==(s=d.google)&&void 0!==s&&null!==(c=s.linker)&&void 0!==c&&c.settings&&gtag("set","linker",wpmDataLayer.pixels.google.linker.settings),gtag("js",new Date),jQuery.isEmptyObject(null===(u=wpmDataLayer)||void 0===u||null===(p=u.pixels)||void 0===p||null===(m=p.google)||void 0===m||null===(g=m.ads)||void 0===g?void 0:g.conversionIds)||(e.googleConfigConditionsMet("ads")?e.fireGtagGoogleAds():e.logPreventedPixelLoading("google-ads","ads")),null!==(y=wpmDataLayer)&&void 0!==y&&null!==(w=y.pixels)&&void 0!==w&&null!==(v=w.google)&&void 0!==v&&null!==(_=v.analytics)&&void 0!==_&&null!==(f=_.universal)&&void 0!==f&&f.property_id&&(e.googleConfigConditionsMet("analytics")?e.fireGtagGoogleAnalyticsUA():e.logPreventedPixelLoading("google-universal-analytics","analytics")),null!==(h=wpmDataLayer)&&void 0!==h&&null!==(L=h.pixels)&&void 0!==L&&null!==(D=L.google)&&void 0!==D&&null!==(k=D.analytics)&&void 0!==k&&null!==(b=k.ga4)&&void 0!==b&&b.measurement_id&&(e.googleConfigConditionsMet("analytics")?e.fireGtagGoogleAnalyticsGA4():e.logPreventedPixelLoading("ga4","analytics")),wpmDataLayer.pixels.google.state="ready"}catch(e){console.error(e)}})))},e.canGoogleLoad=function(){var t,a,o,r;return!(null===(t=wpmDataLayer)||void 0===t||null===(a=t.pixels)||void 0===a||null===(o=a.google)||void 0===o||null===(r=o.consent_mode)||void 0===r||!r.active)||("category"===e.getConsentValues().mode?!(!e.getConsentValues().categories.ads&&!e.getConsentValues().categories.analytics):"pixel"===e.getConsentValues().mode?e.getConsentValues().pixels.includes("google-ads")||e.getConsentValues().pixels.includes("google-analytics"):(console.error("Couldn't find a valid load condition for Google mode in wpmConsentValues"),!1))},e.gtagLoaded=function(){return new Promise((function(e,t){var a,o,r;void 0===(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r?void 0:r.state)&&t();let n=0;!function a(){var o,r,i;return"ready"===(null===(o=wpmDataLayer)||void 0===o||null===(r=o.pixels)||void 0===r||null===(i=r.google)||void 0===i?void 0:i.state)?e():n>=5e3?t():(n+=200,void setTimeout(a,200))}()}))}}(window.wpm=window.wpm||{},jQuery)},580:(e,t,a)=>{a(860),a(294)},69:(e,t,a)=>{a(580),a(190),a(774),a(463)},945:()=>{jQuery(document).on("wpmLoadPixels",(function(){var e,t,a,o,r,n,i,l;null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.google)||void 0===a||null===(o=a.optimize)||void 0===o||!o.container_id||null!==(r=wpmDataLayer)&&void 0!==r&&null!==(n=r.pixels)&&void 0!==n&&null!==(i=n.google)&&void 0!==i&&null!==(l=i.optimize)&&void 0!==l&&l.loaded||wpm.canIFire("analytics","google-optimize")&&wpm.load_google_optimize_pixel()}))},962:()=>{!function(e,t,a){e.load_google_optimize_pixel=function(){try{wpmDataLayer.pixels.google.optimize.loaded=!0,e.loadScriptAndCacheIt("https://www.googleoptimize.com/optimize.js?id="+wpmDataLayer.pixels.google.optimize.container_id)}catch(e){console.error(e)}}}(window.wpm=window.wpm||{},jQuery)},463:(e,t,a)=>{a(962),a(945)},300:()=>{jQuery(document).on("wpmLoadPixels",(function(){var e,t,a,o,r,n,i,l,d;null===(e=wpmDataLayer)||void 0===e||null===(t=e.pixels)||void 0===t||null===(a=t.hotjar)||void 0===a||!a.site_id||null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.hotjar)&&void 0!==n&&n.loaded||!wpm.canIFire("analytics","hotjar")||null!==(i=wpmDataLayer)&&void 0!==i&&null!==(l=i.pixels)&&void 0!==l&&null!==(d=l.hotjar)&&void 0!==d&&d.loaded||wpm.load_hotjar_pixel()}))},376:()=>{!function(e,t,a){e.load_hotjar_pixel=function(){try{wpmDataLayer.pixels.hotjar.loaded=!0,e=window,t=document,e.hj=e.hj||function(){(e.hj.q=e.hj.q||[]).push(arguments)},e._hjSettings={hjid:wpmDataLayer.pixels.hotjar.site_id,hjsv:6},a=t.getElementsByTagName("head")[0],(o=t.createElement("script")).async=1,o.src="https://static.hotjar.com/c/hotjar-"+e._hjSettings.hjid+".js?sv="+e._hjSettings.hjsv,a.appendChild(o)}catch(e){console.error(e)}var e,t,a,o}}(window.wpm=window.wpm||{},jQuery)},787:(e,t,a)=>{a(376),a(300)},473:()=>{!function(e,t,a){let o=()=>{let t=e.getCookie("cmplz_statistics"),a=e.getCookie("cmplz_marketing");return!(!e.getCookie("cmplz_consent_status")&&!e.getCookie("cmplz_banner-status"))&&{analytics:"allow"===t,ads:"allow"===a,visitorHasChosen:!0}},r=()=>{let t=e.getCookie("cookielawinfo-checkbox-analytics")||e.getCookie("cookielawinfo-checkbox-analytiques"),a=e.getCookie("cookielawinfo-checkbox-advertisement")||e.getCookie("cookielawinfo-checkbox-performance")||e.getCookie("cookielawinfo-checkbox-publicite"),o=e.getCookie("CookieLawInfoConsent");return!(!t&&!a)&&{analytics:"yes"===t,ads:"yes"===a,visitorHasChosen:!!o}},n={categories:{},pixels:[],mode:"category",visitorHasChosen:!1};e.getConsentValues=()=>n,e.setConsentValueCategories=function(){let e=arguments.length>0&&arguments[0]!==a&&arguments[0],t=arguments.length>1&&arguments[1]!==a&&arguments[1];n.categories.analytics=e,n.categories.ads=t},e.updateConsentCookieValues=function(){let t,i=arguments.length>0&&arguments[0]!==a?arguments[0]:null,l=arguments.length>1&&arguments[1]!==a?arguments[1]:null,d=arguments.length>2&&arguments[2]!==a&&arguments[2];if(n.categories.analytics=!d,n.categories.ads=!d,i||l)return i&&(n.categories.analytics=!!i),void(l&&(n.categories.ads=!!l));if(t=e.getCookie("pmw_cookie_consent"))return t=JSON.parse(t),n.categories.analytics=!0===t.analytics,n.categories.ads=!0===t.ads,void(n.visitorHasChosen=!0);if(t=e.getCookie("CookieConsent"))return t=decodeURI(t),n.categories.analytics=t.indexOf("statistics:true")>=0,n.categories.ads=t.indexOf("marketing:true")>=0,void(n.visitorHasChosen=!0);if(t=e.getCookie("CookieScriptConsent"))return t=JSON.parse(t),"reject"===t.action?(n.categories.analytics=!1,n.categories.ads=!1):2===t.categories.length?(n.categories.analytics=!0,n.categories.ads=!0):(n.categories.analytics=t.categories.indexOf("performance")>=0,n.categories.ads=t.categories.indexOf("targeting")>=0),void(n.visitorHasChosen=!0);var s,c,u,p,m,g,y,w;if(t=e.getCookie("borlabs-cookie"))return t=decodeURI(t),t=JSON.parse(t),n.categories.analytics=!(null===(s=t)||void 0===s||null===(c=s.consents)||void 0===c||!c.statistics),n.categories.ads=!(null===(u=t)||void 0===u||null===(p=u.consents)||void 0===p||!p.marketing),n.visitorHasChosen=!0,n.pixels=[...(null===(m=t)||void 0===m||null===(g=m.consents)||void 0===g?void 0:g.statistics)||[],...(null===(y=t)||void 0===y||null===(w=y.consents)||void 0===w?void 0:w.marketing)||[]],void(n.mode="pixel");if(t=o())return n.categories.analytics=!0===t.analytics,n.categories.ads=!0===t.ads,void(n.visitorHasChosen=t.visitorHasChosen);if(t=e.getCookie("cookie_notice_accepted"))return n.categories.analytics=!0,n.categories.ads=!0,void(n.visitorHasChosen=!0);if(t=e.getCookie("hu-consent"))return t=JSON.parse(t),n.categories.analytics=!!t.categories[3],n.categories.ads=!!t.categories[4],void(n.visitorHasChosen=!0);if(t=r())return n.categories.analytics=!0===t.analytics,n.categories.ads=!0===t.ads,void(n.visitorHasChosen=!0===t.visitorHasChosen);if(t=e.getCookie("moove_gdpr_popup"))return t=JSON.parse(t),n.categories.analytics="1"===t.thirdparty,n.categories.ads="1"===t.advanced,void(n.visitorHasChosen=!0);if(t=e.getCookie("wpautoterms-cookies-notice")){if("1"!==t)return;return n.categories.analytics=!0,n.categories.ads=!0,void(n.visitorHasChosen=!0)}if(window.localStorage&&window.localStorage.getItem("uc_settings")){if(console.log("Usercentrics settings detected"),"undefined"==typeof UC_UI)return void window.addEventListener("UC_UI_INITIALIZED",(function(t){e.ucUiProcessConsent()}));if(UC_UI.areAllConsentsAccepted())return n.categories.analytics=!0,n.categories.ads=!0,void(n.visitorHasChosen=!0);e.ucUiProcessConsent()}if(t=e.getCookie("OptanonConsent")){let e=new URLSearchParams(t).get("groups").split(","),a={};return e.forEach((e=>{let t=e.split(":");a[t[0]]=t[1]})),n.categories.analytics="1"===groubsObject[2],n.categories.ads="1"===a[4],void(n.visitorHasChosen=!0)}},e.ucUiProcessConsent=function(){if("undefined"==typeof UC_UI)return;UC_UI.areAllConsentsAccepted()&&pmw.consentAcceptAll();const e=UC_UI.getSettingsLabels().categories.filter((e=>"Statistics"===e.label))[0].slug;pmw.consentAdjustSelectively({analytics:!UC_UI.getServicesBaseInfo().filter((t=>t.categorySlug===e&&!1===t.consent.status)).length>0,ads:!UC_UI.getServicesBaseInfo().filter((e=>"marketing"===e.categorySlug&&!1===e.consent.status)).length>0})},e.updateConsentCookieValues(),e.setConsentDefaultValuesToExplicit=()=>{n.categories={analytics:!1,ads:!1}},e.canIFire=(t,a)=>{let o;return"category"===n.mode?o=!!n.categories[t]:"pixel"===n.mode?(o=n.pixels.includes(a),!1===o&&"microsoft-ads"===a&&(o=n.pixels.includes("bing-ads"))):(console.error("Couldn't find a valid consent mode in wpmConsentValues"),o=!1),!!o||(e.logPreventedPixelLoading(a,t),!1)},e.logPreventedPixelLoading=(e,t)=>{var a,o,r;null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.shop)&&void 0!==o&&null!==(r=o.cookie_consent_mgmt)&&void 0!==r&&r.explicit_consent?console.log('Pixel Manager for WooCommerce: The "'+e+" (category: "+t+')" pixel has not fired because you have not given consent for it yet. (PMW is in explicit consent mode.)'):console.log('Pixel Manager for WooCommerce: The "'+e+" (category: "+t+')" pixel has not fired because you have removed consent for this pixel. (PMW is in implicit consent mode.)')},e.scriptTagObserver=new MutationObserver((a=>{a.forEach((a=>{let{addedNodes:o}=a;[...o].forEach((a=>{t(a).data("wpm-cookie-category")&&(e.shouldScriptBeActive(a)?e.unblockScript(a):e.blockScript(a))}))}))})),e.scriptTagObserver.observe(document.head,{childList:!0,subtree:!0}),document.addEventListener("DOMContentLoaded",(()=>e.scriptTagObserver.disconnect())),e.shouldScriptBeActive=e=>{var a,o,r,i;return!((wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent||n.visitorHasChosen)&&("category"!==n.mode||!t(e).data("wpm-cookie-category").split(",").some((e=>n.categories[e])))&&("pixel"!==n.mode||!n.pixels.includes(t(e).data("wpm-pixel-name")))&&("pixel"!==n.mode||"google"!==t(e).data("wpm-pixel-name")||!["google-analytics","google-ads"].some((e=>n.pixels.includes(e))))&&(null===(a=wpmDataLayer)||void 0===a||null===(o=a.pixels)||void 0===o||null===(r=o.google)||void 0===r||null===(i=r.consent_mode)||void 0===i||!i.active||"google"!==t(e).data("wpm-pixel-name")))},e.unblockScript=function(e){let o=arguments.length>1&&arguments[1]!==a&&arguments[1];o&&t(e).remove();let r=t(e).data("wpm-src");r&&t(e).attr("src",r),e.type="text/javascript",o&&t(e).appendTo("head"),document.dispatchEvent(new Event("wpmPreLoadPixels"))},e.blockScript=function(e){let o=arguments.length>1&&arguments[1]!==a&&arguments[1];o&&t(e).remove(),t(e).attr("src")&&t(e).removeAttr("src"),e.type="blocked/javascript",o&&t(e).appendTo("head")},e.unblockAllScripts=function(){let t=!(arguments.length>0&&arguments[0]!==a)||arguments[0],o=!(arguments.length>1&&arguments[1]!==a)||arguments[1];e.setConsentValueCategories(t,o),document.dispatchEvent(new Event("wpmPreLoadPixels"))},e.unblockSelectedPixels=()=>{document.dispatchEvent(new Event("wpmPreLoadPixels"))},e.explicitConsentStateAlreadySet=()=>{if(n.explicitConsentStateAlreadySet)return!0;n.explicitConsentStateAlreadySet=!0},document.addEventListener("borlabs-cookie-consent-saved",(()=>{e.updateConsentCookieValues(),"pixel"===n.mode?(e.unblockSelectedPixels(),e.updateGoogleConsentMode(n.pixels.includes("google-analytics"),n.pixels.includes("google-ads"))):(e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads))})),document.addEventListener("CookiebotOnAccept",(()=>{Cookiebot.consent.statistics&&(n.categories.analytics=!0),Cookiebot.consent.marketing&&(n.categories.ads=!0),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)}),!1),document.addEventListener("CookieScriptAccept",(t=>{t.detail.categories.includes("performance")&&(n.categories.analytics=!0),t.detail.categories.includes("targeting")&&(n.categories.ads=!0),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)})),document.addEventListener("CookieScriptAcceptAll",(()=>{e.setConsentValueCategories(!0,!0),e.unblockAllScripts(!0,!0),e.updateGoogleConsentMode(!0,!0)})),e.cmplzStatusChange=t=>{t.detail.categories.includes("statistics")&&e.updateConsentCookieValues(!0,null),t.detail.categories.includes("marketing")&&e.updateConsentCookieValues(null,!0),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)},document.addEventListener("cmplzStatusChange",e.cmplzStatusChange),document.addEventListener("cmplz_status_change",e.cmplzStatusChange),document.addEventListener("setCookieNotice",(()=>{e.updateConsentCookieValues(),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)})),e.huObserver=new MutationObserver((t=>{t.forEach((t=>{let{addedNodes:a}=t;[...a].forEach((t=>{"hu"===t.id&&document.querySelector(".hu-cookies-save").addEventListener("click",(()=>{e.updateConsentCookieValues(),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)}))}))}))})),window.hu&&e.huObserver.observe(document.documentElement||document.body,{childList:!0,subtree:!0}),window.addEventListener("ucEvent",(function(e){e.detail&&"consent_status"==e.detail.event&&(!0===e.detail["Google Ads Remarketing"]?console.log("Google Ads Remarketing has consent"):console.log("Google Ads Remarketing has no consent"))})),window.addEventListener("UC_UI_CMP_EVENT",(function(e){"ACCEPT_ALL"===e.detail.type&&pmw.consentAcceptAll(),"DENY_ALL"===e.detail.type&&pmw.consentRevokeAll(),"SAVE"===e.detail.type&&console.log("event.detail",e.detail)})),jQuery("#accept-recommended-btn-handler, #onetrust-accept-btn-handler").on("click",(function(){void 0!==window.OneTrust&&pmw.consentAcceptAll()})),jQuery(".ot-pc-refuse-all-handler, #onetrust-reject-all-handler").on("click",(function(){pmw.consentRevokeAll()})),jQuery(".save-preference-btn-handler.onetrust-close-btn-handler").on("click",(function(){location.reload()}))}(window.wpm=window.wpm||{},jQuery),function(e,t,a){e.consentAcceptAll=function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:{};t.duration=t.duration||365,e.consentSetCookie(!0,!0,t.duration),wpm.unblockAllScripts(!0,!0),wpm.updateGoogleConsentMode(!0,!0)},e.consentAdjustSelectively=t=>{t.analytics=t.analytics!==a?t.analytics:wpm.getConsentValues().categories.analytics,t.ads=t.ads!==a?t.ads:wpm.getConsentValues().categories.ads,t.duration=t.duration||365,e.consentSetCookie(t.analytics,t.ads,t.duration),wpm.unblockAllScripts(t.analytics,t.ads),wpm.updateGoogleConsentMode(t.analytics,t.ads)},e.consentRevokeAll=function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:{};t.duration=t.duration||365,wpm.setConsentValueCategories(!1,!1),e.consentSetCookie(!1,!1,t.duration),wpm.updateGoogleConsentMode(!1,!1)},e.consentSetCookie=function(e,t){let o=arguments.length>2&&arguments[2]!==a?arguments[2]:365;wpm.setCookie("pmw_cookie_consent",JSON.stringify({analytics:e,ads:t}),o)},jQuery(document).trigger("pmw_cookie_consent_management_loaded")}(window.pmw=window.pmw||{},jQuery)},299:()=>{jQuery(document).on("click",".remove_from_cart_button, .remove",(e=>{try{let t=new URL(jQuery(e.currentTarget).attr("href")),a=wpm.getProductIdByCartItemKeyUrl(t);wpm.removeProductFromCart(a)}catch(e){console.error(e)}}));let e=[".checkout-button",".cart-checkout-button",".button.checkout",".xoo-wsc-ft-btn-checkout",".elementor-button--checkout"].join(",");jQuery(document).on("click init_checkout",e,(()=>{jQuery(document).trigger("wpmBeginCheckout")})),jQuery(document).on("updated_cart_totals",(()=>{jQuery(document).trigger("wpmViewCart")})),jQuery(document).on("wpmLoad",(e=>{jQuery(document).on("payment_method_selected",(()=>{!1===wpm.paymentMethodSelected&&wpm.fireCheckoutProgress(3),wpm.fireCheckoutOption(3,jQuery("input[name='payment_method']:checked").val()),wpm.paymentMethodSelected=!0}))})),jQuery(document).on("wpmLoad",(()=>{try{wpm.doesWooCommerceCartExist()&&wpm.getCartItems()}catch(e){console.error(e)}})),jQuery(document).on("wpmLoad",(()=>{wpmDataLayer.products=wpmDataLayer.products||{};let e=wpm.getAddToCartLinkProductIds();wpm.getProductsFromBackend(e)})),jQuery(document).on("wpmLoad",(()=>{if(!wpm.getCookie("wpmReferrer")&&document.referrer){let e=new URL(document.referrer).hostname;e!==window.location.host&&wpm.setCookie("wpmReferrer",e)}})),jQuery(document).on("wpmLoad",(()=>{try{var e;if("undefined"!=typeof wpmDataLayer&&(null===(e=wpmDataLayer)||void 0===e||!e.wpmLoadFired)){var t,a,o;if(jQuery(document).trigger("wpmLoadAlways"),null!==(t=wpmDataLayer)&&void 0!==t&&t.shop)if("product"===wpmDataLayer.shop.page_type&&"variable"!==wpmDataLayer.shop.product_type&&wpm.getMainProductIdFromProductPage()){let e=wpm.getProductDataForViewItemEvent(wpm.getMainProductIdFromProductPage());jQuery(document).trigger("wpmViewItem",e)}else"product_category"===wpmDataLayer.shop.page_type?jQuery(document).trigger("wpmCategory"):"search"===wpmDataLayer.shop.page_type?jQuery(document).trigger("wpmSearch"):"cart"===wpmDataLayer.shop.page_type?jQuery(document).trigger("wpmViewCart"):"order_received_page"===wpmDataLayer.shop.page_type&&wpmDataLayer.order?wpm.isOrderIdStored(wpmDataLayer.order.id)||(jQuery(document).trigger("wpmOrderReceivedPage"),wpm.writeOrderIdToStorage(wpmDataLayer.order.id,wpmDataLayer.order.key),"function"==typeof wpm.acrRemoveCookie&&wpm.acrRemoveCookie()):jQuery(document).trigger("wpmEverywhereElse");else jQuery(document).trigger("wpmEverywhereElse");null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.user)&&void 0!==o&&o.id&&!wpm.hasLoginEventFired()&&(jQuery(document).trigger("wpmLogin"),wpm.setLoginEventFired()),wpmDataLayer.wpmLoadFired=!0}}catch(e){console.error(e)}})),jQuery(document).on("wpmLoad",(async()=>{window.sessionStorage&&window.sessionStorage.getItem("_pmw_endpoint_available")&&!JSON.parse(window.sessionStorage.getItem("_pmw_endpoint_available"))&&console.error("Pixel Manager for WooCommerce: REST endpoint is not available. Using admin-ajax.php instead.")})),jQuery(document).on("wpmPreLoadPixels",(()=>{var e,t,a;null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.shop)&&void 0!==t&&null!==(a=t.cookie_consent_mgmt)&&void 0!==a&&a.explicit_consent&&!wpm.explicitConsentStateAlreadySet()&&wpm.updateConsentCookieValues(null,null,!0),jQuery(document).trigger("wpmLoadPixels",{})})),jQuery(document).on("wpmAddToCart",((e,t)=>{var a,o,r,n,i,l;let d={event:"addToCart",product:t};null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.pixels)&&void 0!==o&&null!==(r=o.facebook)&&void 0!==r&&r.loaded&&(d.facebook={event_name:"AddToCart",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:wpm.fbGetProductDataForCapiEvent(t)}),null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.tiktok)&&void 0!==l&&l.loaded&&(d.tiktok={event:"AddToCart",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{value:t.price*t.quantity,currency:t.currency,contents:[{content_id:t.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],content_type:"product",content_name:t.name,quantity:t.quantity,price:t.price}]}}),jQuery(document).trigger("wpmClientSideAddToCart",d),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(d)})),jQuery(document).on("wpmBeginCheckout",(()=>{var e,t,a,o,r,n;let i={event:"beginCheckout"};var l;null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.facebook)&&void 0!==a&&a.loaded&&(i.facebook={event_name:"InitiateCheckout",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{}},null!==(l=wpmDataLayer)&&void 0!==l&&l.cart&&!jQuery.isEmptyObject(wpmDataLayer.cart)&&(i.facebook.custom_data={content_type:"product",content_ids:wpm.fbGetContentIdsFromCart(),value:wpm.getCartValue(),currency:wpmDataLayer.shop.currency})),null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.tiktok)&&void 0!==n&&n.loaded&&(i.tiktok={event:"InitiateCheckout",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser()}),jQuery(document).trigger("wpmClientSideBeginCheckout",i),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(i)})),jQuery(document).on("wpmAddToWishlist",((e,t)=>{var a,o,r,n,i,l;let d={event:"addToWishlist",product:t};null!==(a=wpmDataLayer)&&void 0!==a&&null!==(o=a.pixels)&&void 0!==o&&null!==(r=o.facebook)&&void 0!==r&&r.loaded&&(d.facebook={event_name:"AddToWishlist",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:wpm.fbGetProductDataForCapiEvent(t)}),null!==(n=wpmDataLayer)&&void 0!==n&&null!==(i=n.pixels)&&void 0!==i&&null!==(l=i.tiktok)&&void 0!==l&&l.loaded&&(d.tiktok={event:"AddToWishlist",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{value:t.price*t.quantity,currency:t.currency,contents:[{content_id:t.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],content_type:"product",content_name:t.name,quantity:t.quantity,price:t.price}]}}),jQuery(document).trigger("wpmClientSideAddToWishlist",d),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(d)})),jQuery(document).on("wpmViewItem",(function(e){var t,a,o,r,n,i;let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,d={event:"viewItem",product:l};null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.pixels)&&void 0!==a&&null!==(o=a.facebook)&&void 0!==o&&o.loaded&&(d.facebook={event_name:"ViewContent",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{}},l&&(d.facebook.custom_data=wpm.fbGetProductDataForCapiEvent(l))),null!==(r=wpmDataLayer)&&void 0!==r&&null!==(n=r.pixels)&&void 0!==n&&null!==(i=n.tiktok)&&void 0!==i&&i.loaded&&(d.tiktok={event:"ViewContent",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser()},l&&(d.tiktok.properties={value:l.price*l.quantity,currency:l.currency,contents:[{content_id:l.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],content_type:"product",content_name:l.name,quantity:l.quantity,price:l.price}]})),jQuery(document).trigger("wpmClientSideViewItem",d),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(d)})),jQuery(document).on("wpmSearch",(()=>{var e,t,a,o,r,n;let i={event:"search"};null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.facebook)&&void 0!==a&&a.loaded&&(i.facebook={event_name:"Search",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{search_string:wpm.getSearchTermFromUrl()}}),null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.tiktok)&&void 0!==n&&n.loaded&&(i.tiktok={event:"Search",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{query:wpm.getSearchTermFromUrl()}}),jQuery(document).trigger("wpmClientSideSearch",i),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(i)})),jQuery(document).on("wpmPlaceOrder",(()=>{var e,t,a;let o={event:"placeOrder"};null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.tiktok)&&void 0!==a&&a.loaded&&(o.tiktok={event:"PlaceAnOrder",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser()}),jQuery(document).trigger("wpmClientPlaceOrder",o),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(o)})),jQuery(document).on("wpmOrderReceivedPage",(()=>{var e,t,a,o,r,n;let i={event:"orderReceived"};null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.pixels)&&void 0!==t&&null!==(a=t.facebook)&&void 0!==a&&a.loaded&&(i.facebook={event_name:"Purchase",event_id:wpmDataLayer.order.id.toString(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{content_type:"product",value:wpmDataLayer.order.value_filtered,currency:wpmDataLayer.order.currency,content_ids:wpm.facebookContentIds()}}),null!==(o=wpmDataLayer)&&void 0!==o&&null!==(r=o.pixels)&&void 0!==r&&null!==(n=r.tiktok)&&void 0!==n&&n.loaded&&(i.tiktok={event:"CompletePayment",event_id:wpmDataLayer.order.id.toString(),context:wpm.getTikTokUserDataFromBrowser(),properties:{value:wpmDataLayer.order.value_filtered,currency:wpmDataLayer.order.currency,contents:wpm.getTikTokOrderItemIds()}}),jQuery(document).trigger("wpmClientSideOrderReceivedPage",i)}))},459:()=>{const e=[".add_to_cart_button:not(.product_type_variable)",".ajax_add_to_cart",".single_add_to_cart_button"].join(",");jQuery(e).on("click adding_to_cart",(e=>{try{let t,a=1;"product"===wpmDataLayer.shop.page_type?(void 0!==jQuery(e.currentTarget).attr("href")&&jQuery(e.currentTarget).attr("href").includes("add-to-cart")&&(t=jQuery(e.currentTarget).data("product_id"),wpm.addProductToCart(t,a)),"simple"===wpmDataLayer.shop.product_type&&(a=Number(jQuery(".input-text.qty").val()),a||0===a||(a=1),t=jQuery(e.currentTarget).val(),wpm.addProductToCart(t,a)),["variable","variable-subscription"].indexOf(wpmDataLayer.shop.product_type)>=0&&(a=Number(jQuery(".input-text.qty").val()),a||0===a||(a=1),t=jQuery("[name='variation_id']").val(),wpm.addProductToCart(t,a)),"grouped"===wpmDataLayer.shop.product_type&&jQuery(".woocommerce-grouped-product-list-item").each(((e,o)=>{a=Number(jQuery(o).find(".input-text.qty").val()),a||0===a||(a=1);let r=jQuery(o).attr("class");t=wpm.getPostIdFromString(r),wpm.addProductToCart(t,a)})),"bundle"===wpmDataLayer.shop.product_type&&(a=Number(jQuery(".input-text.qty").val()),a||0===a||(a=1),t=jQuery("input[name=add-to-cart]").val(),wpm.addProductToCart(t,a))):(t=jQuery(e.currentTarget).data("product_id"),wpm.addProductToCart(t,a))}catch(e){console.error(e)}})),jQuery("a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)").one("click",(e=>{try{if(jQuery(e.target).closest("a").attr("href")){let t=new URL(jQuery(e.currentTarget).attr("href"),window.location.origin);if(t.searchParams.has("add-to-cart")){let e=t.searchParams.get("add-to-cart");wpm.addProductToCart(e,1)}}}catch(e){console.error(e)}})),jQuery(".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product").on("click",(e=>{try{let t=jQuery(e.currentTarget).nextAll(".wpmProductId:first").data("id");if(t){if(t=wpm.getIdBasedOndVariationsOutputSetting(t),!t)throw Error("Wasn't able to retrieve a productId");if(wpmDataLayer.products&&wpmDataLayer.products[t]){let e=wpm.getProductDetailsFormattedForEvent(t);jQuery(document).trigger("wpmSelectContentGaUa",e),jQuery(document).trigger("wpmSelectItem",e)}}}catch(e){console.error(e)}})),jQuery("#billing_email").on("input",(e=>{wpm.isEmail(jQuery(e.currentTarget).val())&&(wpm.fireCheckoutProgress(2),wpm.emailSelected=!0)})),jQuery("form.checkout").on("checkout_place_order_success",(()=>{!1===wpm.emailSelected&&wpm.fireCheckoutProgress(2),!1===wpm.paymentMethodSelected&&(wpm.fireCheckoutProgress(3),wpm.fireCheckoutOption(3,jQuery("input[name='payment_method']:checked").val())),wpm.fireCheckoutProgress(4),jQuery(document).trigger("wpmPlaceOrder",{})})),jQuery("[name='update_cart']").on("click",(()=>{try{jQuery(".cart_item").each(((e,t)=>{let a=new URL(jQuery(t).find(".product-remove").find("a").attr("href")),o=wpm.getProductIdByCartItemKeyUrl(a),r=jQuery(t).find(".qty").val();0===r?wpm.removeProductFromCart(o):r<wpmDataLayer.cart[o].quantity?wpm.removeProductFromCart(o,wpmDataLayer.cart[o].quantity-r):r>wpmDataLayer.cart[o].quantity&&wpm.addProductToCart(o,r-wpmDataLayer.cart[o].quantity)}))}catch(e){console.error(e),wpm.getCartItemsFromBackend()}})),jQuery(".add_to_wishlist,.wl-add-to").on("click",(e=>{try{let t;if(jQuery(e.currentTarget).data("productid")?t=jQuery(e.currentTarget).data("productid"):jQuery(e.currentTarget).data("product-id")&&(t=jQuery(e.currentTarget).data("product-id")),!t)throw Error("Wasn't able to retrieve a productId");let a=wpm.getProductDetailsFormattedForEvent(t);jQuery(document).trigger("wpmAddToWishlist",a)}catch(e){console.error(e)}})),jQuery(".single_variation_wrap").on("show_variation",((e,t)=>{try{let e=wpm.getIdBasedOndVariationsOutputSetting(t.variation_id);if(!e)throw Error("Wasn't able to retrieve a productId");wpm.triggerViewItemEventPrep(e)}catch(e){console.error(e)}}))},584:()=>{!function(e,t,a){const o="_wpm_order_ids",r="_pmw_endpoint_available",n="pmw/v1/test/";function i(){return""!==e.getCookie(o)}e.emailSelected=!1,e.paymentMethodSelected=!1,e.useRestEndpoint=()=>e.isSessionStorageAvailable()&&e.isRestEndpointAvailable()&&e.isBelowRestErrorThreshold(),e.isBelowRestErrorThreshold=()=>window.sessionStorage.getItem(0)<=10,e.isRestEndpointAvailable=async()=>window.sessionStorage.getItem(r)?JSON.parse(window.sessionStorage.getItem(r)):await e.testEndpoint(),e.isSessionStorageAvailable=()=>!!window.sessionStorage,e.testEndpoint=async function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:e.root+n,o=arguments.length>1&&arguments[1]!==a?arguments[1]:r,i=await fetch(t,{method:"POST",mode:"cors",cache:"no-cache",keepalive:!0});return 200===i.status?(window.sessionStorage.setItem(o,JSON.stringify(!0)),!0):404===i.status||0===i.status?(window.sessionStorage.setItem(o,JSON.stringify(!1)),!1):void 0},e.isWpmRestEndpointAvailable=function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:r;return!!e.getCookie(t)},e.writeOrderIdToStorage=function(t,r){let n=arguments.length>2&&arguments[2]!==a?arguments[2]:"thankyou_page";if(window.Storage)if(null===localStorage.getItem(o)){let e=[];e.push(t),window.localStorage.setItem(o,JSON.stringify(e))}else{let e=JSON.parse(localStorage.getItem(o));e.includes(t)||(e.push(t),window.localStorage.setItem(o,JSON.stringify(e)))}else{let a=new Date;a.setDate(a.getDate()+365);let r=[];i()&&(r=JSON.parse(e.getCookie(o))),r.includes(t)||(r.push(t),document.cookie="_wpm_order_ids="+JSON.stringify(r)+";expires="+a.toUTCString())}"function"==typeof e.storeOrderIdOnServer&&wpmDataLayer.orderDeduplication&&e.storeOrderIdOnServer(r,n)},e.isOrderIdStored=t=>wpmDataLayer.orderDeduplication?window.Storage?null!==localStorage.getItem(o)&&JSON.parse(localStorage.getItem(o)).includes(t):!!i()&&JSON.parse(e.getCookie(o)).includes(t):(console.log("order duplication prevention: off"),!1),e.isEmail=e=>/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e),e.removeProductFromCart=function(t){let o=arguments.length>1&&arguments[1]!==a?arguments[1]:null;try{if(!t)throw Error("Wasn't able to retrieve a productId");if(!(t=e.getIdBasedOndVariationsOutputSetting(t)))throw Error("Wasn't able to retrieve a productId");let a;if(a=null==o?wpmDataLayer.cart[t].quantity:o,wpmDataLayer.cart[t]){let r=e.getProductDetailsFormattedForEvent(t,a);jQuery(document).trigger("wpmRemoveFromCart",r),null==o||wpmDataLayer.cart[t].quantity===o?(delete wpmDataLayer.cart[t],sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(wpmDataLayer.cart))):(wpmDataLayer.cart[t].quantity=wpmDataLayer.cart[t].quantity-a,sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(wpmDataLayer.cart)))}}catch(e){console.error(e)}},e.getIdBasedOndVariationsOutputSetting=e=>{try{var t,a;return null!==(t=wpmDataLayer)&&void 0!==t&&null!==(a=t.general)&&void 0!==a&&a.variationsOutput?e:wpmDataLayer.products[e].isVariation?wpmDataLayer.products[e].parentId:e}catch(e){console.error(e)}},e.addProductToCart=(t,a)=>{try{var o;if(!t)throw Error("Wasn't able to retrieve a productId");if(!(t=e.getIdBasedOndVariationsOutputSetting(t)))throw Error("Wasn't able to retrieve a productId");if(null!==(o=wpmDataLayer)&&void 0!==o&&o.products[t]){var r;let o=e.getProductDetailsFormattedForEvent(t,a);jQuery(document).trigger("wpmAddToCart",o),null!==(r=wpmDataLayer)&&void 0!==r&&r.cart[t]?wpmDataLayer.cart[t].quantity=wpmDataLayer.cart[t].quantity+a:("cart"in wpmDataLayer||(wpmDataLayer.cart={}),wpmDataLayer.cart[t]=e.getProductDetailsFormattedForEvent(t,a)),sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(wpmDataLayer.cart))}}catch(t){console.error(t),e.getCartItemsFromBackend()}},e.getCartItems=()=>{sessionStorage?sessionStorage.getItem("wpmDataLayerCart")&&"order_received_page"!==wpmDataLayer.shop.page_type?e.saveCartObjectToDataLayer(JSON.parse(sessionStorage.getItem("wpmDataLayerCart"))):sessionStorage.setItem("wpmDataLayerCart",JSON.stringify({})):e.getCartItemsFromBackend()},e.getCartItemsFromBackend=()=>{try{fetch(e.ajax_url,{method:"POST",cache:"no-cache",body:new URLSearchParams({action:"pmw_get_cart_items"}),keepalive:!0}).then((e=>{if(e.ok)return e.json();throw Error("Error getting cart items from backend")})).then((t=>{if(!t.success)throw Error("Error getting cart items from backend");t.data.cart||(t.data.cart={}),e.saveCartObjectToDataLayer(t.data.cart),sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(t.data.cart))}))}catch(e){console.error(e)}},e.getProductsFromBackend=async t=>{var a;if(null!==(a=wpmDataLayer)&&void 0!==a&&a.products&&(t=t.filter((e=>!(e in wpmDataLayer.products)))),t&&0!==t.length){try{let a;if(a=await e.isRestEndpointAvailable()?await fetch(e.root+"pmw/v1/products/",{method:"POST",cache:"no-cache",headers:{"Content-Type":"application/json"},body:JSON.stringify({pageId:wpmDataLayer.general.pageId,productIds:t})}):await fetch(e.ajax_url,{method:"POST",cache:"no-cache",body:new URLSearchParams({action:"pmw_get_product_ids",productIds:t})}),a.ok){let e=await a.json();e.success&&(wpmDataLayer.products=Object.assign({},wpmDataLayer.products,e.data))}else console.error("Error getting products from backend")}catch(e){console.error(e)}return!0}},e.saveCartObjectToDataLayer=e=>{wpmDataLayer.cart=e,wpmDataLayer.products=Object.assign({},wpmDataLayer.products,e)},e.triggerViewItemEventPrep=async t=>{wpmDataLayer.products&&wpmDataLayer.products[t]||await e.getProductsFromBackend([t]),e.triggerViewItemEvent(t)},e.triggerViewItemEvent=t=>{let a=e.getProductDetailsFormattedForEvent(t);jQuery(document).trigger("wpmViewItem",a)},e.triggerViewItemEventNoProduct=()=>{jQuery(document).trigger("wpmViewItem")},e.fireCheckoutOption=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:null,o=arguments.length>2&&arguments[2]!==a?arguments[2]:null,r={step:e,checkout_option:t,value:o};jQuery(document).trigger("wpmFireCheckoutOption",r)},e.fireCheckoutProgress=e=>{let t={step:e};jQuery(document).trigger("wpmFireCheckoutProgress",t)},e.getPostIdFromString=e=>{try{return e.match(/(post-)(\d+)/)[2]}catch(e){console.error(e)}},e.triggerViewItemList=t=>{if(!t)throw Error("Wasn't able to retrieve a productId");if(!(t=e.getIdBasedOndVariationsOutputSetting(t)))throw Error("Wasn't able to retrieve a productId");jQuery(document).trigger("wpmViewItemList",e.getProductDataForViewItemEvent(t))},e.getProductDataForViewItemEvent=t=>{if(!t)throw Error("Wasn't able to retrieve a productId");try{if(wpmDataLayer.products[t])return e.getProductDetailsFormattedForEvent(t)}catch(e){console.error(e)}},e.getMainProductIdFromProductPage=()=>{try{return["simple","variable","grouped","composite","bundle"].indexOf(wpmDataLayer.shop.product_type)>=0&&jQuery(".wpmProductId:first").data("id")}catch(e){console.error(e)}},e.viewItemListTriggerTestMode=e=>{jQuery(e).css({position:"relative"}),jQuery(e).append('<div id="viewItemListTriggerOverlay"></div>'),jQuery(e).find("#viewItemListTriggerOverlay").css({"z-index":"10",display:"block",position:"absolute",height:"100%",top:"0",left:"0",right:"0",opacity:wpmDataLayer.viewItemListTrigger.opacity,"background-color":wpmDataLayer.viewItemListTrigger.backgroundColor})},e.getSearchTermFromUrl=()=>{try{return new URLSearchParams(window.location.search).get("s")}catch(e){console.error(e)}};let l,d={};e.observerCallback=(t,a)=>{t.forEach((t=>{try{let o,r=jQuery(t.target).data("ioid");if(o=jQuery(t.target).next(".wpmProductId").length?jQuery(t.target).next(".wpmProductId").data("id"):jQuery(t.target).find(".wpmProductId").data("id"),!o)throw Error("wpmProductId element not found");t.isIntersecting?d[r]=setTimeout((()=>{e.triggerViewItemList(o),wpmDataLayer.viewItemListTrigger.testMode&&e.viewItemListTriggerTestMode(t.target),!1===wpmDataLayer.viewItemListTrigger.repeat&&a.unobserve(t.target)}),wpmDataLayer.viewItemListTrigger.timeout):(clearTimeout(d[r]),wpmDataLayer.viewItemListTrigger.testMode&&jQuery(t.target).find("#viewItemListTriggerOverlay").remove())}catch(e){console.error(e)}}))};let s,c=0,u=()=>{s=jQuery(".wpmProductId").map((function(e,t){return jQuery(t).parent().hasClass("type-product")||jQuery(t).parent().hasClass("product")||jQuery(t).parent().hasClass("product-item-inner")?jQuery(t).parent():jQuery(t).prev().hasClass("wc-block-grid__product")||jQuery(t).prev().hasClass("product")||jQuery(t).prev().hasClass("product-small")||jQuery(t).prev().hasClass("woocommerce-LoopProduct-link")?jQuery(this).prev():jQuery(t).closest(".product").length?jQuery(t).closest(".product"):void 0}))};e.startIntersectionObserverToWatch=()=>{try{e.urlHasParameter("vildemomode")&&(wpmDataLayer.viewItemListTrigger.testMode=!0),l=new IntersectionObserver(e.observerCallback,{threshold:wpmDataLayer.viewItemListTrigger.threshold}),u(),s.each(((e,t)=>{jQuery(t[0]).data("ioid",c++),l.observe(t[0])}))}catch(e){console.error(e)}},e.startProductsMutationObserverToWatch=()=>{try{let e=jQuery(".wpmProductId:eq(0)").parents().has(jQuery(".wpmProductId:eq(1)").parents()).first();e.length&&p.observe(e[0],{attributes:!0,childList:!0,characterData:!0})}catch(e){console.error(e)}};let p=new MutationObserver((e=>{e.forEach((e=>{let t=e.addedNodes;null!==t&&jQuery(t).each((function(){(jQuery(this).hasClass("type-product")||jQuery(this).hasClass("product-small")||jQuery(this).hasClass("wc-block-grid__product"))&&m(this)&&(jQuery(this).data("ioid",c++),l.observe(this))}))}))})),m=e=>!(!jQuery(e).find(".wpmProductId").length&&!jQuery(e).siblings(".wpmProductId").length);e.setCookie=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:"",o=arguments.length>2&&arguments[2]!==a?arguments[2]:null;if(o){let a=new Date;a.setTime(a.getTime()+24*o*60*60*1e3);let r="expires="+a.toUTCString();document.cookie=e+"="+t+";"+r+";path=/"}else document.cookie=e+"="+t+";path=/"},e.getCookie=e=>{let t=e+"=",a=decodeURIComponent(document.cookie).split(";");for(let e=0;e<a.length;e++){let o=a[e];for(;" "==o.charAt(0);)o=o.substring(1);if(0==o.indexOf(t))return o.substring(t.length,o.length)}return""},e.deleteCookie=t=>{e.setCookie(t,"",-1)},e.getWpmSessionData=()=>{if(window.sessionStorage){let e=window.sessionStorage.getItem("_wpm");return null!==e?JSON.parse(e):{}}return{}},e.setWpmSessionData=e=>{window.sessionStorage&&window.sessionStorage.setItem("_wpm",JSON.stringify(e))},e.storeOrderIdOnServer=async(t,a)=>{try{let o;o=await e.isRestEndpointAvailable()?await fetch(e.root+"pmw/v1/pixels-fired/",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":e.nonce_wp_rest},body:JSON.stringify({order_key:t,source:a}),keepalive:!0,cache:"no-cache"}):await fetch(e.ajax_url,{method:"POST",body:new URLSearchParams({action:"pmw_purchase_pixels_fired",order_key:t,source:a,nonce_ajax:e.nonce_ajax}),keepalive:!0});const r=await o.json();r.success?console.log("wpm.storeOrderIdOnServer success"):console.error("wpm.storeOrderIdOnServer error",r)}catch(e){console.error(e)}},e.getProductIdByCartItemKeyUrl=e=>{let t,a=new URLSearchParams(e.search).get("remove_item");return t=0===wpmDataLayer.cartItemKeys[a].variation_id?wpmDataLayer.cartItemKeys[a].product_id:wpmDataLayer.cartItemKeys[a].variation_id,t},e.getAddToCartLinkProductIds=()=>jQuery("a").map((function(){let e=jQuery(this).attr("href");if(e&&e.includes("?add-to-cart=")){let t=e.match(/(add-to-cart=)(\d+)/);if(t)return t[2]}})).get(),e.getProductDetailsFormattedForEvent=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:1,o={id:e.toString(),dyn_r_ids:wpmDataLayer.products[e].dyn_r_ids,name:wpmDataLayer.products[e].name,list_name:wpmDataLayer.shop.list_name,brand:wpmDataLayer.products[e].brand,category:wpmDataLayer.products[e].category,variant:wpmDataLayer.products[e].variant,list_position:wpmDataLayer.products[e].position,quantity:t,price:wpmDataLayer.products[e].price,currency:wpmDataLayer.shop.currency,isVariable:wpmDataLayer.products[e].isVariable,isVariation:wpmDataLayer.products[e].isVariation,parentId:wpmDataLayer.products[e].parentId};return o.isVariation&&(o.parentId_dyn_r_ids=wpmDataLayer.products[e].parentId_dyn_r_ids),o},e.setReferrerToCookie=()=>{e.getCookie("wpmReferrer")||e.setCookie("wpmReferrer",document.referrer)},e.getReferrerFromCookie=()=>e.getCookie("wpmReferrer")?e.getCookie("wpmReferrer"):null,e.getClidFromBrowser=function(){let t,o=arguments.length>0&&arguments[0]!==a?arguments[0]:"gclid";return t={gclid:"_gcl_aw",dclid:"_gcl_dc"},e.getCookie(t[o])?e.getCookie(t[o]).match(/(GCL.[\d]*.)(.*)/)[2]:""},e.getUserAgent=()=>navigator.userAgent,e.getViewPort=()=>({width:Math.max(document.documentElement.clientWidth||0,window.innerWidth||0),height:Math.max(document.documentElement.clientHeight||0,window.innerHeight||0)}),e.version=()=>{console.log(wpmDataLayer.version)},e.loadScriptAndCacheIt=e=>{let t={dataType:"script",cache:!0,url:e};return jQuery.ajax(t)},e.getOrderItemPrice=e=>(e.total+e.total_tax)/e.quantity,e.hasLoginEventFired=()=>{let t=e.getWpmSessionData();return null==t?void 0:t.loginEventFired},e.setLoginEventFired=()=>{let t=e.getWpmSessionData();t.loginEventFired=!0,e.setWpmSessionData(t)},e.wpmDataLayerExists=()=>new Promise((e=>{!function t(){if("undefined"!=typeof wpmDataLayer)return e();setTimeout(t,50)}()})),e.jQueryExists=()=>new Promise((e=>{!function t(){if("undefined"!=typeof jQuery)return e();setTimeout(t,100)}()})),e.pageLoaded=()=>new Promise((e=>{!function t(){if("complete"===document.readyState)return e();setTimeout(t,50)}()})),e.pageReady=()=>new Promise((e=>{!function t(){if("interactive"===document.readyState||"complete"===document.readyState)return e();setTimeout(t,50)}()})),e.isMiniCartActive=()=>{if(window.sessionStorage){for(const[e,t]of Object.entries(window.sessionStorage))if(e.includes("wc_fragments"))return!0;return!1}return!1},e.doesWooCommerceCartExist=()=>document.cookie.includes("woocommerce_items_in_cart"),e.urlHasParameter=e=>new URLSearchParams(window.location.search).has(e),e.hashAsync=(e,t)=>crypto.subtle.digest(e,new TextEncoder("utf-8").encode(t)).then((e=>Array.prototype.map.call(new Uint8Array(e),(e=>("00"+e.toString(16)).slice(-2))).join(""))),e.getCartValue=()=>{var e;let t=0;if(null!==(e=wpmDataLayer)&&void 0!==e&&e.cart)for(const e in wpmDataLayer.cart){let a=wpmDataLayer.cart[e];t+=a.quantity*a.price}return t},e.doesUrlContainPatterns=e=>{for(const t of e)if(new RegExp(t).test(window.location.href))return!0;return!1},e.excludeDomainFromTracking=()=>{var e,t;let a=["appspot.com","translate.google.com"];return null!==(e=wpmDataLayer)&&void 0!==e&&null!==(t=e.general)&&void 0!==t&&t.excludeDomains&&(a=[...a,...wpmDataLayer.general.excludeDomains]),!!a.some((e=>window.location.href.includes(e)))&&(console.debug("Pixel Manager for WooCommerce: Aborted due to excluded domain"),!0)},e.getRandomEventId=()=>(Math.random()+1).toString(36).substring(2);let g=!1;const y=()=>{!1===g&&jQuery(document).trigger("pmw:ready"),g=!0};jQuery(document).on("ready",(()=>{y()})),document.addEventListener("DOMContentLoaded",(()=>{y()}))}(window.wpm=window.wpm||{},jQuery)},534:(e,t,a)=>{a(584),a(473)},207:()=>{wpm.wpmDataLayerExists().then((()=>{console.log("Pixel Manager for WooCommerce: "+(wpmDataLayer.version.pro?"Pro":"Free")+" Version "+wpmDataLayer.version.number+" loaded"),wpm.excludeDomainFromTracking()||document.dispatchEvent(new Event("wpmPreLoadPixels"))})).then((()=>{wpm.pageLoaded().then((()=>{document.dispatchEvent(new Event("wpmLoad"))}))})),jQuery(document).on("pmw:ready",(()=>{wpm.wpmDataLayerExists().then((()=>{wpm.startIntersectionObserverToWatch(),wpm.startProductsMutationObserverToWatch()}))}))}},t={};function a(o){var r=t[o];if(void 0!==r)return r.exports;var n=t[o]={exports:{}};return e[o](n,n.exports,a),n.exports}a(534),wpm.jQueryExists().then((function(){jQuery(document).on("pmw:ready",(()=>{a(459)})),a(299),a(69),a(12),a(787),a(207)}))})();
2
  //# sourceMappingURL=wpm-public.p1.min.js.map
1
+ (()=>{var e={806:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.check=t.isSpecial=t.isReserved=t.isIPv4MappedAddress=t.isLocalhost=t.isPrivate=t.createChecker=t.isInSubnet=t.IPv6=t.IPv4=t.isIPv6=t.isIPv4=t.isIP=void 0;var r=a(403);t.IPv4=r;var o=a(653);t.IPv6=o;var n=a(375),i=a(375);function s(e,t){return d(t)(e)}function d(e){if(!Array.isArray(e))return d([e]);var t=e.reduce((function(e,t){var a=t.split("/")[0];return e[n.isIP(a)].push(t),e}),{0:[],4:[],6:[]});if(0!==t[0].length)throw new Error("some subnets are not valid IP addresses: "+t[0]);var a=r.createChecker(t[4]),i=o.createChecker(t[6]);return function(e){if(!n.isIP(e))throw new Error("not a valid IPv4 or IPv6 address: "+e);return n.isIPv6(e)&&o.isIPv4MappedAddress(e)?i(e)||a(o.extractMappedIpv4(e)):n.isIPv6(e)?i(e):a(e)}}Object.defineProperty(t,"isIP",{enumerable:!0,get:function(){return i.isIP}}),Object.defineProperty(t,"isIPv4",{enumerable:!0,get:function(){return i.isIPv4}}),Object.defineProperty(t,"isIPv6",{enumerable:!0,get:function(){return i.isIPv6}}),t.isInSubnet=s,t.createChecker=d,t.isPrivate=function(e){return n.isIPv6(e)?o.isIPv4MappedAddress(e)?r.isPrivate(o.extractMappedIpv4(e)):o.isPrivate(e):r.isPrivate(e)},t.isLocalhost=function(e){return n.isIPv6(e)?o.isIPv4MappedAddress(e)?r.isLocalhost(o.extractMappedIpv4(e)):o.isLocalhost(e):r.isLocalhost(e)},t.isIPv4MappedAddress=function(e){return!!n.isIPv6(e)&&o.isIPv4MappedAddress(e)},t.isReserved=function(e){return n.isIPv6(e)?o.isIPv4MappedAddress(e)?r.isReserved(o.extractMappedIpv4(e)):o.isReserved(e):r.isReserved(e)},t.isSpecial=function(e){return n.isIPv6(e)?o.isIPv4MappedAddress(e)?r.isSpecial(o.extractMappedIpv4(e)):o.isSpecial(e):r.isSpecial(e)},t.check=s},244:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={localhost:{ipv4:["127.0.0.0/8"],ipv6:["::1/128"]},private:{ipv4:["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16"],ipv6:["fe80::/10","fc00::/7"]},reserved:{ipv4:["0.0.0.0/8","100.64.0.0/10","169.254.0.0/16","192.0.0.0/24","192.0.2.0/24","192.88.99.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","224.0.0.0/4","240.0.0.0/4","255.255.255.255/32"],ipv6:["::/128","64:ff9b::/96","100::/64","2001::/32","2001:10::/28","2001:20::/28","2001:db8::/32","2002::/16","ff00::/8"]}}},403:function(e,t,a){"use strict";var r=this&&this.__spreadArrays||function(){for(var e=0,t=0,a=arguments.length;t<a;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<a;t++)for(var n=arguments[t],i=0,s=n.length;i<s;i++,o++)r[o]=n[i];return r};Object.defineProperty(t,"__esModule",{value:!0}),t.isSpecial=t.isReserved=t.isLocalhost=t.isPrivate=t.createChecker=t.isInSubnet=void 0;var o=a(375),n=a(244);function i(e){if(!o.isIPv4(e))throw new Error("not a valid IPv4 address: "+e);var t=e.split(".");return(parseInt(t[0],10)<<24)+(parseInt(t[1],10)<<16)+(parseInt(t[2],10)<<8)+parseInt(t[3],10)>>>0}function s(e){if(Array.isArray(e)){var t=e.map((function(e){return d(e)}));return function(e){var a=i(e);return t.some((function(e){return e(a)}))}}var a=d(e);return function(e){var t=i(e);return a(t)}}function d(e){var t=e.split("/"),a=t[0],r=t[1],o=parseInt(r,10);if(!a||!Number.isInteger(o))throw new Error("not a valid IPv4 subnet: "+e);if(o<0||o>32)throw new Error("not a valid IPv4 prefix length: "+o+" (from "+e+")");var n=i(a);return function(e){return 0===o||n>>32-o==e>>32-o}}t.isInSubnet=function(e,t){return s(t)(e)},t.createChecker=s;var c={};t.isPrivate=function(e){return"private"in c==0&&(c.private=s(n.default.private.ipv4)),c.private(e)},t.isLocalhost=function(e){return"localhost"in c==0&&(c.localhost=s(n.default.localhost.ipv4)),c.localhost(e)},t.isReserved=function(e){return"reserved"in c==0&&(c.reserved=s(n.default.reserved.ipv4)),c.reserved(e)},t.isSpecial=function(e){return"special"in c==0&&(c.special=s(r(n.default.private.ipv4,n.default.localhost.ipv4,n.default.reserved.ipv4))),c.special(e)}},653:function(e,t,a){"use strict";var r=this&&this.__spreadArrays||function(){for(var e=0,t=0,a=arguments.length;t<a;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<a;t++)for(var n=arguments[t],i=0,s=n.length;i<s;i++,o++)r[o]=n[i];return r};Object.defineProperty(t,"__esModule",{value:!0}),t.isSpecial=t.isReserved=t.isIPv4MappedAddress=t.isLocalhost=t.isPrivate=t.createChecker=t.isInSubnet=t.extractMappedIpv4=void 0;var o=a(375),n=a(244),i=/\./,s=/^(.+:ffff:)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?:%.+)?$/,d=/:/,c=/::/;function p(e){if(!o.isIPv6(e))throw new Error("not a valid IPv6 address: "+e);if(i.test(e))return p(function(e){var t=e.match(s);if(!t||!o.isIPv4(t[2]))throw new Error("not a mapped IPv4 address: "+e);var a=t[1],r=t[2].split(i).map((function(e){return parseInt(e,10)}));return""+a+((r[0]<<8)+r[1]).toString(16)+":"+((r[2]<<8)+r[3]).toString(16)}(e));var t=e.split(c),a=t[0],r=t[1],n=a&&a.split(d)||[],l=r&&r.split(d)||[],u=new Array(8-(n.length+l.length));return n.concat(u,l)}function l(e){if(Array.isArray(e)){var t=e.map((function(e){return u(e)}));return function(e){var a=p(e);return t.some((function(e){return e(a)}))}}var a=u(e);return function(e){var t=p(e);return a(t)}}function u(e){var t=e.split("/"),a=t[0],r=t[1],o=parseInt(r,10);if(!a||!Number.isInteger(o))throw new Error("not a valid IPv6 CIDR subnet: "+e);if(o<0||o>128)throw new Error("not a valid IPv6 prefix length: "+o+" (from "+e+")");var n=p(a);return function(e){for(var t=0;t<8;++t){var a=Math.min(o-16*t,16);if(a<=0)break;if((n[t]&&parseInt(n[t],16)||0)>>16-a!=(e[t]&&parseInt(e[t],16)||0)>>16-a)return!1}return!0}}t.extractMappedIpv4=function(e){var t=e.match(s);if(!t||!o.isIPv4(t[2]))throw new Error("not a mapped IPv4 address: "+e);return t[2]},t.isInSubnet=function(e,t){return l(t)(e)},t.createChecker=l;var m={};t.isPrivate=function(e){return"private"in m==0&&(m.private=l(n.default.private.ipv6)),m.private(e)},t.isLocalhost=function(e){return"localhost"in m==0&&(m.localhost=l(n.default.localhost.ipv6)),m.localhost(e)},t.isIPv4MappedAddress=function(e){if("mapped"in m==0&&(m.mapped=l("::ffff:0:0/96")),m.mapped(e)){var t=e.match(s);return Boolean(t&&o.isIPv4(t[2]))}return!1},t.isReserved=function(e){return"reserved"in m==0&&(m.reserved=l(n.default.reserved.ipv6)),m.reserved(e)},t.isSpecial=function(e){return"special"in m==0&&(m.special=l(r(n.default.private.ipv6,n.default.localhost.ipv6,n.default.reserved.ipv6))),m.special(e)}},375:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isIP=t.isIPv6=t.isIPv4=void 0;var a="(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])",r="("+a+"[.]){3}"+a,o=new RegExp("^"+r+"$"),n="(?:[0-9a-fA-F]{1,4})",i=new RegExp("^((?:"+n+":){7}(?:"+n+"|:)|(?:"+n+":){6}(?:"+r+"|:"+n+"|:)|(?:"+n+":){5}(?::"+r+"|(:"+n+"){1,2}|:)|(?:"+n+":){4}(?:(:"+n+"){0,1}:"+r+"|(:"+n+"){1,3}|:)|(?:"+n+":){3}(?:(:"+n+"){0,2}:"+r+"|(:"+n+"){1,4}|:)|(?:"+n+":){2}(?:(:"+n+"){0,3}:"+r+"|(:"+n+"){1,5}|:)|(?:"+n+":){1}(?:(:"+n+"){0,4}:"+r+"|(:"+n+"){1,6}|:)|(?::((?::"+n+"){0,5}:"+r+"|(?::"+n+"){1,7}|:)))(%[0-9a-zA-Z]{1,})?$");function s(e){return o.test(e)}function d(e){return i.test(e)}t.isIPv4=s,t.isIPv6=d,t.isIP=function(e){return s(e)?4:d(e)?6:0}},703:(e,t,a)=>{"use strict";a.r(t),a.d(t,{displayIP:()=>g,inRange:()=>u,isIP:()=>s,isRange:()=>l,isV4:()=>c,isV6:()=>p,searchIP:()=>m,storeIP:()=>m,version:()=>d});var r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==a.g?a.g:"undefined"!=typeof self?self:{};function o(e,t){return e(t={exports:{}},t.exports),t.exports}var n=o((function(e){(function(){var t,a,r,o,n,i,s,d;a={},null!==e&&e.exports?e.exports=a:this.ipaddr=a,s=function(e,t,a,r){var o,n;if(e.length!==t.length)throw new Error("ipaddr: cannot match CIDR for objects with different lengths");for(o=0;r>0;){if((n=a-r)<0&&(n=0),e[o]>>n!=t[o]>>n)return!1;r-=a,o+=1}return!0},a.subnetMatch=function(e,t,a){var r,o,n,i,s;for(n in null==a&&(a="unicast"),t)for(!(i=t[n])[0]||i[0]instanceof Array||(i=[i]),r=0,o=i.length;r<o;r++)if(s=i[r],e.kind()===s[0].kind()&&e.match.apply(e,s))return n;return a},a.IPv4=function(){function e(e){var t,a,r;if(4!==e.length)throw new Error("ipaddr: ipv4 octet count should be 4");for(t=0,a=e.length;t<a;t++)if(!(0<=(r=e[t])&&r<=255))throw new Error("ipaddr: ipv4 octet should fit in 8 bits");this.octets=e}return e.prototype.kind=function(){return"ipv4"},e.prototype.toString=function(){return this.octets.join(".")},e.prototype.toNormalizedString=function(){return this.toString()},e.prototype.toByteArray=function(){return this.octets.slice(0)},e.prototype.match=function(e,t){var a;if(void 0===t&&(e=(a=e)[0],t=a[1]),"ipv4"!==e.kind())throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one");return s(this.octets,e.octets,8,t)},e.prototype.SpecialRanges={unspecified:[[new e([0,0,0,0]),8]],broadcast:[[new e([255,255,255,255]),32]],multicast:[[new e([224,0,0,0]),4]],linkLocal:[[new e([169,254,0,0]),16]],loopback:[[new e([127,0,0,0]),8]],carrierGradeNat:[[new e([100,64,0,0]),10]],private:[[new e([10,0,0,0]),8],[new e([172,16,0,0]),12],[new e([192,168,0,0]),16]],reserved:[[new e([192,0,0,0]),24],[new e([192,0,2,0]),24],[new e([192,88,99,0]),24],[new e([198,51,100,0]),24],[new e([203,0,113,0]),24],[new e([240,0,0,0]),4]]},e.prototype.range=function(){return a.subnetMatch(this,this.SpecialRanges)},e.prototype.toIPv4MappedAddress=function(){return a.IPv6.parse("::ffff:"+this.toString())},e.prototype.prefixLengthFromSubnetMask=function(){var e,t,a,r,o,n,i;for(i={0:8,128:7,192:6,224:5,240:4,248:3,252:2,254:1,255:0},e=0,o=!1,t=a=3;a>=0;t=a+=-1){if(!((r=this.octets[t])in i))return null;if(n=i[r],o&&0!==n)return null;8!==n&&(o=!0),e+=n}return 32-e},e}(),r="(0?\\d+|0x[a-f0-9]+)",o={fourOctet:new RegExp("^"+r+"\\."+r+"\\."+r+"\\."+r+"$","i"),longValue:new RegExp("^"+r+"$","i")},a.IPv4.parser=function(e){var t,a,r,n,i;if(a=function(e){return"0"===e[0]&&"x"!==e[1]?parseInt(e,8):parseInt(e)},t=e.match(o.fourOctet))return function(){var e,o,n,i;for(i=[],e=0,o=(n=t.slice(1,6)).length;e<o;e++)r=n[e],i.push(a(r));return i}();if(t=e.match(o.longValue)){if((i=a(t[1]))>4294967295||i<0)throw new Error("ipaddr: address outside defined range");return function(){var e,t;for(t=[],n=e=0;e<=24;n=e+=8)t.push(i>>n&255);return t}().reverse()}return null},a.IPv6=function(){function e(e,t){var a,r,o,n,i,s;if(16===e.length)for(this.parts=[],a=r=0;r<=14;a=r+=2)this.parts.push(e[a]<<8|e[a+1]);else{if(8!==e.length)throw new Error("ipaddr: ipv6 part count should be 8 or 16");this.parts=e}for(o=0,n=(s=this.parts).length;o<n;o++)if(!(0<=(i=s[o])&&i<=65535))throw new Error("ipaddr: ipv6 part should fit in 16 bits");t&&(this.zoneId=t)}return e.prototype.kind=function(){return"ipv6"},e.prototype.toString=function(){return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/,"::")},e.prototype.toRFC5952String=function(){var e,t,a,r,o;for(r=/((^|:)(0(:|$)){2,})/g,o=this.toNormalizedString(),e=0,t=-1;a=r.exec(o);)a[0].length>t&&(e=a.index,t=a[0].length);return t<0?o:o.substring(0,e)+"::"+o.substring(e+t)},e.prototype.toByteArray=function(){var e,t,a,r,o;for(e=[],t=0,a=(o=this.parts).length;t<a;t++)r=o[t],e.push(r>>8),e.push(255&r);return e},e.prototype.toNormalizedString=function(){var e,t,a;return e=function(){var e,a,r,o;for(o=[],e=0,a=(r=this.parts).length;e<a;e++)t=r[e],o.push(t.toString(16));return o}.call(this).join(":"),a="",this.zoneId&&(a="%"+this.zoneId),e+a},e.prototype.toFixedLengthString=function(){var e,t,a;return e=function(){var e,a,r,o;for(o=[],e=0,a=(r=this.parts).length;e<a;e++)t=r[e],o.push(t.toString(16).padStart(4,"0"));return o}.call(this).join(":"),a="",this.zoneId&&(a="%"+this.zoneId),e+a},e.prototype.match=function(e,t){var a;if(void 0===t&&(e=(a=e)[0],t=a[1]),"ipv6"!==e.kind())throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one");return s(this.parts,e.parts,16,t)},e.prototype.SpecialRanges={unspecified:[new e([0,0,0,0,0,0,0,0]),128],linkLocal:[new e([65152,0,0,0,0,0,0,0]),10],multicast:[new e([65280,0,0,0,0,0,0,0]),8],loopback:[new e([0,0,0,0,0,0,0,1]),128],uniqueLocal:[new e([64512,0,0,0,0,0,0,0]),7],ipv4Mapped:[new e([0,0,0,0,0,65535,0,0]),96],rfc6145:[new e([0,0,0,0,65535,0,0,0]),96],rfc6052:[new e([100,65435,0,0,0,0,0,0]),96],"6to4":[new e([8194,0,0,0,0,0,0,0]),16],teredo:[new e([8193,0,0,0,0,0,0,0]),32],reserved:[[new e([8193,3512,0,0,0,0,0,0]),32]]},e.prototype.range=function(){return a.subnetMatch(this,this.SpecialRanges)},e.prototype.isIPv4MappedAddress=function(){return"ipv4Mapped"===this.range()},e.prototype.toIPv4Address=function(){var e,t,r;if(!this.isIPv4MappedAddress())throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4");return e=(r=this.parts.slice(-2))[0],t=r[1],new a.IPv4([e>>8,255&e,t>>8,255&t])},e.prototype.prefixLengthFromSubnetMask=function(){var e,t,a,r,o,n,i;for(i={0:16,32768:15,49152:14,57344:13,61440:12,63488:11,64512:10,65024:9,65280:8,65408:7,65472:6,65504:5,65520:4,65528:3,65532:2,65534:1,65535:0},e=0,o=!1,t=a=7;a>=0;t=a+=-1){if(!((r=this.parts[t])in i))return null;if(n=i[r],o&&0!==n)return null;16!==n&&(o=!0),e+=n}return 128-e},e}(),n="(?:[0-9a-f]+::?)+",d="%[0-9a-z]{1,}",i={zoneIndex:new RegExp(d,"i"),native:new RegExp("^(::)?("+n+")?([0-9a-f]+)?(::)?("+d+")?$","i"),transitional:new RegExp("^((?:"+n+")|(?:::)(?:"+n+")?)"+r+"\\."+r+"\\."+r+"\\."+r+"(%[0-9a-z]{1,})?$","i")},t=function(e,t){var a,r,o,n,s,d;if(e.indexOf("::")!==e.lastIndexOf("::"))return null;for((d=(e.match(i.zoneIndex)||[])[0])&&(d=d.substring(1),e=e.replace(/%.+$/,"")),a=0,r=-1;(r=e.indexOf(":",r+1))>=0;)a++;if("::"===e.substr(0,2)&&a--,"::"===e.substr(-2,2)&&a--,a>t)return null;for(s=t-a,n=":";s--;)n+="0:";return":"===(e=e.replace("::",n))[0]&&(e=e.slice(1)),":"===e[e.length-1]&&(e=e.slice(0,-1)),{parts:t=function(){var t,a,r,n;for(n=[],t=0,a=(r=e.split(":")).length;t<a;t++)o=r[t],n.push(parseInt(o,16));return n}(),zoneId:d}},a.IPv6.parser=function(e){var a,r,o,n,s,d,c;if(i.native.test(e))return t(e,8);if((n=e.match(i.transitional))&&(c=n[6]||"",(a=t(n[1].slice(0,-1)+c,6)).parts)){for(r=0,o=(d=[parseInt(n[2]),parseInt(n[3]),parseInt(n[4]),parseInt(n[5])]).length;r<o;r++)if(!(0<=(s=d[r])&&s<=255))return null;return a.parts.push(d[0]<<8|d[1]),a.parts.push(d[2]<<8|d[3]),{parts:a.parts,zoneId:a.zoneId}}return null},a.IPv4.isIPv4=a.IPv6.isIPv6=function(e){return null!==this.parser(e)},a.IPv4.isValid=function(e){try{return new this(this.parser(e)),!0}catch(e){return!1}},a.IPv4.isValidFourPartDecimal=function(e){return!(!a.IPv4.isValid(e)||!e.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/))},a.IPv6.isValid=function(e){var t;if("string"==typeof e&&-1===e.indexOf(":"))return!1;try{return new this((t=this.parser(e)).parts,t.zoneId),!0}catch(e){return!1}},a.IPv4.parse=function(e){var t;if(null===(t=this.parser(e)))throw new Error("ipaddr: string is not formatted like ip address");return new this(t)},a.IPv6.parse=function(e){var t;if(null===(t=this.parser(e)).parts)throw new Error("ipaddr: string is not formatted like ip address");return new this(t.parts,t.zoneId)},a.IPv4.parseCIDR=function(e){var t,a,r;if((a=e.match(/^(.+)\/(\d+)$/))&&(t=parseInt(a[2]))>=0&&t<=32)return r=[this.parse(a[1]),t],Object.defineProperty(r,"toString",{value:function(){return this.join("/")}}),r;throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range")},a.IPv4.subnetMaskFromPrefixLength=function(e){var t,a,r;if((e=parseInt(e))<0||e>32)throw new Error("ipaddr: invalid IPv4 prefix length");for(r=[0,0,0,0],a=0,t=Math.floor(e/8);a<t;)r[a]=255,a++;return t<4&&(r[t]=Math.pow(2,e%8)-1<<8-e%8),new this(r)},a.IPv4.broadcastAddressFromCIDR=function(e){var t,a,r,o,n;try{for(r=(t=this.parseCIDR(e))[0].toByteArray(),n=this.subnetMaskFromPrefixLength(t[1]).toByteArray(),o=[],a=0;a<4;)o.push(parseInt(r[a],10)|255^parseInt(n[a],10)),a++;return new this(o)}catch(e){throw new Error("ipaddr: the address does not have IPv4 CIDR format")}},a.IPv4.networkAddressFromCIDR=function(e){var t,a,r,o,n;try{for(r=(t=this.parseCIDR(e))[0].toByteArray(),n=this.subnetMaskFromPrefixLength(t[1]).toByteArray(),o=[],a=0;a<4;)o.push(parseInt(r[a],10)&parseInt(n[a],10)),a++;return new this(o)}catch(e){throw new Error("ipaddr: the address does not have IPv4 CIDR format")}},a.IPv6.parseCIDR=function(e){var t,a,r;if((a=e.match(/^(.+)\/(\d+)$/))&&(t=parseInt(a[2]))>=0&&t<=128)return r=[this.parse(a[1]),t],Object.defineProperty(r,"toString",{value:function(){return this.join("/")}}),r;throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range")},a.isValid=function(e){return a.IPv6.isValid(e)||a.IPv4.isValid(e)},a.parse=function(e){if(a.IPv6.isValid(e))return a.IPv6.parse(e);if(a.IPv4.isValid(e))return a.IPv4.parse(e);throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format")},a.parseCIDR=function(e){try{return a.IPv6.parseCIDR(e)}catch(t){try{return a.IPv4.parseCIDR(e)}catch(e){throw new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format")}}},a.fromByteArray=function(e){var t;if(4===(t=e.length))return new a.IPv4(e);if(16===t)return new a.IPv6(e);throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address")},a.process=function(e){var t;return"ipv6"===(t=this.parse(e)).kind()&&t.isIPv4MappedAddress()?t.toIPv4Address():t}}).call(r)})),i=o((function(e,t){const a=function(e){if(!o(e))throw new Error("Invalid address: "+e);const t=(e=e.toLowerCase()).split(/\:\:/g);if(t.length>2)throw new Error("Invalid address: "+e);let a=[];if(1==t.length){if(a=e.split(/\:/g),8!==a.length)throw new Error("Invalid address: "+e)}else if(2==t.length){const e=t[0],r=t[1],o=e.split(/\:/g),n=r.split(/\:/g);for(let e in o)a[e]=o[e];for(let e=n.length;e>0;--e)a[7-(n.length-e)]=n[e-1]}for(let e=0;e<8;++e)void 0===a[e]&&(a[e]="0000"),a[e]=n(a[e],"0",4);return a.join(":")},r=function(e){if(!o(e))throw new Error("Invalid address: "+e);const t=(e=(e=(e=(e=(e=(e=a(e)).replace(/0000/g,"g")).replace(/\:000/g,":")).replace(/\:00/g,":")).replace(/\:0/g,":")).replace(/g/g,"0")).split(/\:/g);let r=!1,n=-1,i=0,s=-1,d=0;for(let e=0;e<8;++e){const a=t[e];let o="0"===a;o&&!r&&(s=e),!o&&r&&(d=e-s),d>1&&d>i&&(n=s,i=d),r="0"===a}return r&&(d=8-s),d>1&&d>i&&(n=s,i=d),n>=0&&i>1&&t.splice(n,i,"g"),(e=(e=(e=(e=t.join(":")).replace(/\:g\:/g,"::")).replace(/\:g/g,"::")).replace(/g\:/g,"::")).replace(/g/g,"::")},o=function(e){return/^[a-f0-9\\:]+$/gi.test(e)},n=function(e,t,a){const r=t.repeat(a);return e.length<r.length&&(e=r.substring(0,r.length-e.length)+e),e},i=function(e){return parseInt(e,2).toString(16)},s=function(e){const t=a(e).split(":");let r="";for(const e of t)r+=n(parseInt(e,16).toString(2),"0",16);return r},d=function(e){const t=[];for(let a=0;a<8;++a){const r=e.substr(16*a,16),o=n(i(r),"0",4);t.push(o)}return t.join(":")};t.normalize=a,t.abbreviate=r,t.divideSubnet=function(e,t,a,i,c){if(!o(e))throw new Error("Invalid address: "+e);if(i*=1,a=(a*=1)||128,(t*=1)<1||a<1||t>128||a>128||t>a)throw new Error("Invalid masks.");const p=[],l=s(e).substr(0,t),u="0".repeat(128-a),m=Math.pow(2,a-t);for(let e=0;e<m&&!(i&&e>=i);++e){const o=n(e.toString(2),"0",a-t),i=d(l+o+u);c?p.push(r(i)):p.push(i)}return p},t.range=function(e,t,a,n){if(!o(e))throw new Error("Invalid address: "+e);if(a=(a*=1)||128,(t*=1)<1||a<1||t>128||a>128||t>a)throw new Error("Invalid masks.");const i=s(e).substr(0,t),c="0".repeat(128-a),p=i+"0".repeat(a-t)+c,l=i+"1".repeat(a-t)+c;return n?{start:r(d(p)),end:r(d(l)),size:Math.pow(2,a-t)}:{start:d(p),end:d(l),size:Math.pow(2,a-t)}},t.randomSubnet=function(e,t,a,n,i){if(!o(e))throw new Error("Invalid address: "+e);if(a=(a*=1)||128,n=(n*=1)||1,(t*=1)<1||a<1||t>128||a>128||t>a)throw new Error("Invalid masks.");const c=[],p=s(e).substr(0,t),l="0".repeat(128-a),u=Math.pow(2,a-t);for(let e=0;e<u&&e<n;++e){let e="";for(let r=0;r<a-t;++r)e+=Math.floor(2*Math.random());const o=d(p+e+l);i?c.push(r(o)):c.push(o)}return c},t.ptr=function(e,t){if(!o(e))throw new Error("Invalid address: "+e);if((t*=1)<1||t>128||Math.floor(t/4)!=t/4)throw new Error("Invalid masks.");return a(e).replace(/:/g,"").split("").reverse().slice(0,(128-t)/4).join(".")}}));function s(e){return n.isValid(e)}function d(e){try{var t=n.parse(e).kind();return"ipv4"===t?4:"ipv6"===t?6:0}catch(e){return 0}}function c(e){return 4===d(e)}function p(e){return 6===d(e)}function l(e){try{return n.parseCIDR(e),!0}catch(e){return!1}}function u(e,t){if("string"!=typeof t){if(t&&"object"==typeof t){for(var a in t)if(!0===u(e,t[a]))return!0;return!1}return!1}if(-1===t.indexOf("/"))return e=p(e)?i.normalize(e):e,s(t=p(t)?i.normalize(t):t)&&e===t;try{var r=t.split("/"),o=n.parse(e),d=n.parse(r[0]);return o.match(d,r[1])}catch(e){return!1}}function m(e){try{var t=n.parse(e),a=t.kind();return"ipv4"===a?e:"ipv6"===a?t.isIPv4MappedAddress()?t.toIPv4Address().toString():i.abbreviate(e):null}catch(e){return null}}function g(e){try{var t=n.parse(e),a=t.kind();return"ipv4"===a?e:"ipv6"===a?t.isIPv4MappedAddress()?t.toIPv4Address().toString():i.normalize(e):""}catch(e){return""}}i.normalize,i.abbreviate,i.divideSubnet,i.range,i.randomSubnet,i.ptr},164:()=>{jQuery(document).on("wpmLoadPixels",(()=>{!wpmDataLayer?.pixels?.facebook?.pixel_id||wpmDataLayer?.pixels?.facebook?.loaded||wpm.doesUrlContainPatterns(wpmDataLayer?.pixels?.facebook?.exclusion_patterns)||wpm.canIFire("ads","facebook-ads")&&wpm.loadFacebookPixel()})),jQuery(document).on("wpmClientSideAddToCart",((e,t)=>{try{if(!wpmDataLayer?.pixels?.facebook?.loaded)return;fbq("track","AddToCart",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideBeginCheckout",((e,t)=>{try{if(!wpmDataLayer?.pixels?.facebook?.loaded)return;fbq("track","InitiateCheckout",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideAddToWishlist",((e,t)=>{try{if(!wpmDataLayer?.pixels?.facebook?.loaded)return;fbq("track","AddToWishlist",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideViewItem",((e,t)=>{try{if(!wpmDataLayer?.pixels?.facebook?.loaded)return;fbq("track","ViewContent",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideSearch",((e,t)=>{try{if(!wpmDataLayer?.pixels?.facebook?.loaded)return;fbq("track","Search",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}})),jQuery(document).on("wpmLoadAlways",(()=>{try{if(!wpmDataLayer?.pixels?.facebook?.loaded)return;wpm.setFbUserData()}catch(e){console.error(e)}})),jQuery(document).on("wpmClientSideOrderReceivedPage",((e,t)=>{try{if(!wpmDataLayer?.pixels?.facebook?.loaded)return;fbq("track","Purchase",t.facebook.custom_data,{eventID:t.facebook.event_id})}catch(e){console.error(e)}}))},1:()=>{!function(e,t,a){let r;e.loadFacebookPixel=()=>{try{wpmDataLayer.pixels.facebook.loaded=!0,t=window,a=document,r="script",t.fbq||(o=t.fbq=function(){o.callMethod?o.callMethod.apply(o,arguments):o.queue.push(arguments)},t._fbq||(t._fbq=o),o.push=o,o.loaded=!0,o.version="2.0",o.queue=[],(n=a.createElement(r)).async=!0,n.src="https://connect.facebook.net/en_US/fbevents.js",(i=a.getElementsByTagName(r)[0]).parentNode.insertBefore(n,i));let s={};e.isFbpSet()&&e.isFbAdvancedMatchingEnabled()&&(s={...e.getUserIdentifiersForFb()}),fbq("init",wpmDataLayer.pixels.facebook.pixel_id,s),fbq("track","PageView")}catch(r){console.error(r)}var t,a,r,o,n,i},e.getUserIdentifiersForFb=()=>{let e={};return wpmDataLayer?.user?.id?.raw&&(e.external_id=wpmDataLayer.user.id.raw),wpmDataLayer?.order?.user_id&&(e.external_id=wpmDataLayer.order.user_id),wpmDataLayer?.user?.email?.facebook&&(e.em=wpmDataLayer.user.email.facebook),wpmDataLayer?.order?.billing_email_hashed&&(e.em=wpmDataLayer.order.billing_email_hashed),wpmDataLayer?.user?.first_name?.facebook&&(e.fn=wpmDataLayer.user.first_name.facebook),wpmDataLayer?.order?.billing_first_name&&(e.fn=wpmDataLayer.order.billing_first_name.toLowerCase()),wpmDataLayer?.user?.last_name?.facebook&&(e.ln=wpmDataLayer.user.last_name.facebook),wpmDataLayer?.order?.billing_last_name&&(e.ln=wpmDataLayer.order.billing_last_name.toLowerCase()),wpmDataLayer?.user?.phone?.facebook&&(e.ph=wpmDataLayer.user.phone.facebook),wpmDataLayer?.order?.billing_phone&&(e.ph=wpmDataLayer.order.billing_phone.replace("+","")),wpmDataLayer?.user?.city?.facebook&&(e.ct=wpmDataLayer.user.city.facebook),wpmDataLayer?.order?.billing_city&&(e.ct=wpmDataLayer.order.billing_city.toLowerCase().replace(/ /g,"")),wpmDataLayer?.user?.state?.facebook&&(e.st=wpmDataLayer.user.state.facebook),wpmDataLayer?.order?.billing_state&&(e.st=wpmDataLayer.order.billing_state.toLowerCase().replace(/[a-zA-Z]{2}-/,"")),wpmDataLayer?.user?.postcode?.facebook&&(e.zp=wpmDataLayer.user.postcode.facebook),wpmDataLayer?.order?.billing_postcode&&(e.zp=wpmDataLayer.order.billing_postcode),wpmDataLayer?.user?.country?.facebook&&(e.country=wpmDataLayer.user.country.facebook),wpmDataLayer?.order?.billing_country&&(e.country=wpmDataLayer.order.billing_country.toLowerCase()),e},e.getFbRandomEventId=()=>(Math.random()+1).toString(36).substring(2),e.getFbUserData=()=>(r={...r,...e.getFbUserDataFromBrowser()},r),e.isFbAdvancedMatchingEnabled=()=>!!wpmDataLayer?.pixels?.facebook?.advanced_matching,e.setFbUserData=()=>{r=e.getFbUserDataFromBrowser()},e.getFbUserDataFromBrowser=()=>{let t={};return e.getCookie("_fbp")&&e.isValidFbp(e.getCookie("_fbp"))&&(t.fbp=e.getCookie("_fbp")),e.getCookie("_fbc")&&e.isValidFbc(e.getCookie("_fbc"))&&(t.fbc=e.getCookie("_fbc")),e.isFbAdvancedMatchingEnabled()&&wpmDataLayer?.user?.id?.raw&&(t.external_id=wpmDataLayer.user.id.raw),navigator.userAgent&&(t.client_user_agent=navigator.userAgent),t},e.isFbpSet=()=>!!e.getCookie("_fbp"),e.isValidFbp=e=>new RegExp(/^fb\.[0-2]\.\d{13}\.\d{8,20}$/).test(e),e.isValidFbc=e=>new RegExp(/^fb\.[0-2]\.\d{13}\.[\da-zA-Z_-]{8,}/).test(e),e.fbGetProductDataForCapiEvent=e=>({content_type:"product",content_name:e.name,content_ids:[e.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]],value:parseFloat(e.quantity*e.price),currency:e.currency}),e.facebookContentIds=()=>{let e=[];for(const[t,a]of Object.entries(wpmDataLayer.order.items))wpmDataLayer?.general?.variationsOutput&&0!==a.variation_id?e.push(String(wpmDataLayer.products[a.variation_id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])):e.push(String(wpmDataLayer.products[a.id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]));return e},e.trackCustomFacebookEvent=function(t){let r=arguments.length>1&&arguments[1]!==a?arguments[1]:{};try{if(!wpmDataLayer?.pixels?.facebook?.loaded)return;let a=e.getFbRandomEventId();fbq("trackCustom",t,r,{eventID:a}),jQuery(document).trigger("wpmFbCapiEvent",{event_name:t,event_id:a,user_data:e.getFbUserData(),event_source_url:window.location.href,custom_data:r})}catch(e){console.error(e)}},e.fbGetContentIdsFromCart=()=>{let e=[];for(const t in wpmDataLayer.cart)e.push(wpmDataLayer.products[t].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]);return e}}(window.wpm=window.wpm||{},jQuery)},12:(e,t,a)=>{a(1),a(164)},165:()=>{jQuery(document).on("wpmViewItemList",(function(e,t){try{if(jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds))return;if(!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;if(wpmDataLayer?.general?.variationsOutput&&t.isVariable&&!1===wpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids)return;if(!t)return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers(),items:[{id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical}]};wpmDataLayer?.user?.id?.raw&&(e.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","view_item_list",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmAddToCart",(function(e,t){try{if(jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds))return;if(!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers(),value:t.quantity*t.price,items:[{id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],quantity:t.quantity,price:t.price,google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical}]};wpmDataLayer?.user?.id?.raw&&(e.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","add_to_cart",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmViewItem",(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;try{if(jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds))return;if(!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers()};t&&(e.value=(t.quantity?t.quantity:1)*t.price,e.items=[{id:t.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],quantity:t.quantity?t.quantity:1,price:t.price,google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical}]),wpmDataLayer?.user?.id?.raw&&(e.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","view_item",e)}))}catch(e){console.error(e)}})),jQuery(document).on("pmwEvent:Search",(function(){try{if(jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds))return;if(!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let e=[];for(const[t,a]of Object.entries(wpmDataLayer.products)){if(wpmDataLayer?.general?.variationsOutput&&a.isVariable&&!1===wpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids)return;e.push({id:a.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical})}let t={send_to:wpm.getGoogleAdsConversionIdentifiers(),items:e};wpmDataLayer?.user?.id?.raw&&(t.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","view_search_results",t)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmOrderReceivedPage",(function(){try{if(jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds))return;if(!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers(),value:wpmDataLayer.order.value_filtered,items:wpm.getGoogleAdsDynamicRemarketingOrderItems()};wpmDataLayer?.user?.id?.raw&&(e.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","purchase",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmLogin",(function(){try{if(jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds))return;if(!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status)return;if(!wpm.googleConfigConditionsMet("ads"))return;let e={send_to:wpm.getGoogleAdsConversionIdentifiers()};wpmDataLayer?.user?.id?.raw&&(e.user_id=wpmDataLayer.user.id.raw),wpm.gtagLoaded().then((function(){gtag("event","login",e)}))}catch(e){console.error(e)}})),jQuery(document).on("wpmOrderReceivedPage",(function(){try{if(jQuery.isEmptyObject(wpm.getGoogleAdsConversionIdentifiersWithLabel()))return;if(!wpm.googleConfigConditionsMet("ads"))return;let e={},t={};e={send_to:wpm.getGoogleAdsConversionIdentifiersWithLabel(),transaction_id:wpmDataLayer.order.number,value:wpmDataLayer.order.value_filtered,currency:wpmDataLayer.order.currency,new_customer:wpmDataLayer.order.new_customer},wpmDataLayer?.order?.clv_order_value_filtered&&(e.customer_lifetime_value=wpmDataLayer.order.clv_order_value_filtered),wpmDataLayer?.user?.id?.raw&&(e.user_id=wpmDataLayer.user.id.raw),wpmDataLayer?.order?.aw_merchant_id&&(t={discount:wpmDataLayer.order.discount,aw_merchant_id:wpmDataLayer.order.aw_merchant_id,aw_feed_country:wpmDataLayer.order.aw_feed_country,aw_feed_language:wpmDataLayer.order.aw_feed_language,items:wpm.getGoogleAdsRegularOrderItems()}),wpm.gtagLoaded().then((function(){gtag("event","conversion",{...e,...t})}))}catch(e){console.error(e)}}))},42:()=>{!function(e,t,a){e.getGoogleAdsConversionIdentifiersWithLabel=function(){let e=[];if(wpmDataLayer?.pixels?.google?.ads?.conversionIds)for(const[t,a]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))a&&e.push(t+"/"+a);return e},e.getGoogleAdsConversionIdentifiers=function(){let e=[];for(const[t,a]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))e.push(t);return e},e.getGoogleAdsRegularOrderItems=function(){let e=[];for(const[t,a]of Object.entries(wpmDataLayer.order.items)){let t;t={quantity:a.quantity,price:a.price},wpmDataLayer?.general?.variationsOutput&&0!==a.variation_id?(t.id=String(wpmDataLayer.products[a.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(t)):(t.id=String(wpmDataLayer.products[a.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(t))}return e},e.getGoogleAdsDynamicRemarketingOrderItems=function(){let e=[];for(const[t,a]of Object.entries(wpmDataLayer.order.items)){let t;t={quantity:a.quantity,price:a.price,google_business_vertical:wpmDataLayer.pixels.google.ads.google_business_vertical},wpmDataLayer?.general?.variationsOutput&&0!==a.variation_id?(t.id=String(wpmDataLayer.products[a.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(t)):(t.id=String(wpmDataLayer.products[a.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type]),e.push(t))}return e}}(window.wpm=window.wpm||{},jQuery)},190:(e,t,a)=>{a(42),a(165)},625:()=>{jQuery(document).on("wpmOrderReceivedPage",(function(){try{if(!wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id)return;if(wpmDataLayer?.pixels?.google?.analytics?.universal?.mp_active)return;if(!wpm.googleConfigConditionsMet("analytics"))return;wpm.gtagLoaded().then((function(){gtag("event","purchase",{send_to:[wpmDataLayer.pixels.google.analytics.universal.property_id],transaction_id:wpmDataLayer.order.number,affiliation:wpmDataLayer.order.affiliation,currency:wpmDataLayer.order.currency,value:wpmDataLayer.order.value_regular,discount:wpmDataLayer.order.discount,tax:wpmDataLayer.order.tax,shipping:wpmDataLayer.order.shipping,coupon:wpmDataLayer.order.coupon,items:wpm.getGAUAOrderItems()})}))}catch(e){console.error(e)}}))},19:()=>{!function(e,t,a){e.getGAUAOrderItems=function(){let t=[];for(const[a,r]of Object.entries(wpmDataLayer.order.items)){let a;a={quantity:r.quantity,price:r.price,name:r.name,currency:wpmDataLayer.order.currency,category:wpmDataLayer.products[r.id].category.join("/")},wpmDataLayer?.general?.variationsOutput&&0!==r.variation_id?(a.id=String(wpmDataLayer.products[r.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),a.variant=wpmDataLayer.products[r.variation_id].variant_name,a.brand=wpmDataLayer.products[r.variation_id].brand):(a.id=String(wpmDataLayer.products[r.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),a.brand=wpmDataLayer.products[r.id].brand),a=e.ga3AddListNameToProduct(a),t.push(a)}return t},e.ga3AddListNameToProduct=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:null;return e.list_name=wpmDataLayer.shop.list_name,t&&(e.list_position=t),e}}(window.wpm=window.wpm||{},jQuery)},562:(e,t,a)=>{a(19),a(625)},572:()=>{jQuery(document).on("wpmOrderReceivedPage",(function(){try{if(!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id)return;if(wpmDataLayer?.pixels?.google?.analytics?.ga4?.mp_active)return;if(!wpm.googleConfigConditionsMet("analytics"))return;wpm.gtagLoaded().then((function(){gtag("event","purchase",{send_to:[wpmDataLayer.pixels.google.analytics.ga4.measurement_id],transaction_id:wpmDataLayer.order.number,affiliation:wpmDataLayer.order.affiliation,currency:wpmDataLayer.order.currency,value:wpmDataLayer.order.value_regular,discount:wpmDataLayer.order.discount,tax:wpmDataLayer.order.tax,shipping:wpmDataLayer.order.shipping,coupon:wpmDataLayer.order.coupon,items:wpm.getGA4OrderItems()})}))}catch(e){console.error(e)}}))},228:()=>{!function(e,t,a){e.getGA4OrderItems=function(){let e=[];for(const[t,a]of Object.entries(wpmDataLayer.order.items)){let t;t={quantity:a.quantity,price:a.price,item_name:a.name,currency:wpmDataLayer.order.currency,item_category:wpmDataLayer.products[a.id].category.join("/")},wpmDataLayer?.general?.variationsOutput&&0!==a.variation_id?(t.item_id=String(wpmDataLayer.products[a.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),t.item_variant=wpmDataLayer.products[a.variation_id].variant_name,t.item_brand=wpmDataLayer.products[a.variation_id].brand):(t.item_id=String(wpmDataLayer.products[a.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type]),t.item_brand=wpmDataLayer.products[a.id].brand),e.push(t)}return e}}(window.wpm=window.wpm||{},jQuery)},522:(e,t,a)=>{a(228),a(572)},774:(e,t,a)=>{a(562),a(522)},294:()=>{jQuery(document).on("wpmLoadPixels",(function(){void 0===wpmDataLayer?.pixels?.google?.state&&(wpm.canGoogleLoad()?wpm.loadGoogle():wpm.logPreventedPixelLoading("google","analytics / ads"))}))},860:()=>{!function(e,t,a){e.googleConfigConditionsMet=t=>!!wpmDataLayer?.pixels?.google?.consent_mode?.active||("category"===e.getConsentValues().mode?!0===e.getConsentValues().categories[t]:"pixel"===e.getConsentValues().mode&&e.getConsentValues().pixels.includes("google-"+t)),e.getVisitorConsentStatusAndUpdateGoogleConsentSettings=t=>("category"===e.getConsentValues().mode?(e.getConsentValues().categories.analytics&&(t.analytics_storage="granted"),e.getConsentValues().categories.ads&&(t.ad_storage="granted")):"pixel"===e.getConsentValues().mode&&(t.analytics_storage=e.getConsentValues().pixels.includes("google-analytics")?"granted":"denied",t.ad_storage=e.getConsentValues().pixels.includes("google-ads")?"granted":"denied"),t),e.updateGoogleConsentMode=function(){let e=!(arguments.length>0&&arguments[0]!==a)||arguments[0],t=!(arguments.length>1&&arguments[1]!==a)||arguments[1];try{if(!window.gtag||!wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent)return;gtag("consent","update",{analytics_storage:e?"granted":"denied",ad_storage:t?"granted":"denied"})}catch(e){console.error(e)}},e.fireGtagGoogleAds=()=>{try{if(wpmDataLayer.pixels.google.ads.state="loading",wpmDataLayer?.pixels?.google?.ads?.enhanced_conversions?.active)for(const[e,t]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))gtag("config",e,{allow_enhanced_conversions:!0});else for(const[e,t]of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds))gtag("config",e);wpmDataLayer?.pixels?.google?.ads?.conversionIds&&wpmDataLayer?.pixels?.google?.ads?.phone_conversion_label&&wpmDataLayer?.pixels?.google?.ads?.phone_conversion_number&&gtag("config",Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]+"/"+wpmDataLayer.pixels.google.ads.phone_conversion_label,{phone_conversion_number:wpmDataLayer.pixels.google.ads.phone_conversion_number}),wpmDataLayer?.shop?.page_type&&"order_received_page"===wpmDataLayer.shop.page_type&&wpmDataLayer?.order?.google?.ads?.enhanced_conversion_data&&gtag("set","user_data",wpmDataLayer.order.google.ads.enhanced_conversion_data),wpmDataLayer.pixels.google.ads.state="ready"}catch(e){console.error(e)}},e.fireGtagGoogleAnalyticsUA=()=>{try{wpmDataLayer.pixels.google.analytics.universal.state="loading",gtag("config",wpmDataLayer.pixels.google.analytics.universal.property_id,wpmDataLayer.pixels.google.analytics.universal.parameters),wpmDataLayer.pixels.google.analytics.universal.state="ready"}catch(e){console.error(e)}},e.fireGtagGoogleAnalyticsGA4=()=>{try{wpmDataLayer.pixels.google.analytics.ga4.state="loading";let e=wpmDataLayer.pixels.google.analytics.ga4.parameters;wpmDataLayer?.pixels?.google?.analytics?.ga4?.debug_mode&&(e.debug_mode=!0),gtag("config",wpmDataLayer.pixels.google.analytics.ga4.measurement_id,e),wpmDataLayer.pixels.google.analytics.ga4.state="ready"}catch(e){console.error(e)}},e.isGoogleActive=()=>!(!wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id&&!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id&&jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)),e.getGoogleGtagId=()=>wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id?wpmDataLayer.pixels.google.analytics.universal.property_id:wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id?wpmDataLayer.pixels.google.analytics.ga4.measurement_id:Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0],e.loadGoogle=()=>{e.isGoogleActive()&&(wpmDataLayer.pixels.google.state="loading",e.loadScriptAndCacheIt("https://www.googletagmanager.com/gtag/js?id="+e.getGoogleGtagId()).then(((t,a)=>{try{if(window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},wpmDataLayer?.pixels?.google?.consent_mode?.active){let t={ad_storage:wpmDataLayer.pixels.google.consent_mode.ad_storage,analytics_storage:wpmDataLayer.pixels.google.consent_mode.analytics_storage,wait_for_update:wpmDataLayer.pixels.google.consent_mode.wait_for_update};wpmDataLayer?.pixels?.google?.consent_mode?.region&&(t.region=wpmDataLayer.pixels.google.consent_mode.region),t=e.getVisitorConsentStatusAndUpdateGoogleConsentSettings(t),gtag("consent","default",t),gtag("set","ads_data_redaction",wpmDataLayer.pixels.google.consent_mode.ads_data_redaction),gtag("set","url_passthrough",wpmDataLayer.pixels.google.consent_mode.url_passthrough)}wpmDataLayer?.pixels?.google?.linker?.settings&&gtag("set","linker",wpmDataLayer.pixels.google.linker.settings),gtag("js",new Date),jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)||(e.googleConfigConditionsMet("ads")?e.fireGtagGoogleAds():e.logPreventedPixelLoading("google-ads","ads")),wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id&&(e.googleConfigConditionsMet("analytics")?e.fireGtagGoogleAnalyticsUA():e.logPreventedPixelLoading("google-universal-analytics","analytics")),wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id&&(e.googleConfigConditionsMet("analytics")?e.fireGtagGoogleAnalyticsGA4():e.logPreventedPixelLoading("ga4","analytics")),wpmDataLayer.pixels.google.state="ready"}catch(e){console.error(e)}})))},e.canGoogleLoad=()=>!!wpmDataLayer?.pixels?.google?.consent_mode?.active||("category"===e.getConsentValues().mode?!(!e.getConsentValues().categories.ads&&!e.getConsentValues().categories.analytics):"pixel"===e.getConsentValues().mode?e.getConsentValues().pixels.includes("google-ads")||e.getConsentValues().pixels.includes("google-analytics"):(console.error("Couldn't find a valid load condition for Google mode in wpmConsentValues"),!1)),e.gtagLoaded=()=>new Promise(((e,t)=>{void 0===wpmDataLayer?.pixels?.google?.state&&t();let a=0;!function r(){return"ready"===wpmDataLayer?.pixels?.google?.state?e():a>=5e3?t():(a+=200,void setTimeout(r,200))}()}))}(window.wpm=window.wpm||{},jQuery)},580:(e,t,a)=>{a(860),a(294)},69:(e,t,a)=>{a(580),a(190),a(774),a(463)},945:()=>{jQuery(document).on("wpmLoadPixels",(function(){wpmDataLayer?.pixels?.google?.optimize?.container_id&&!wpmDataLayer?.pixels?.google?.optimize?.loaded&&wpm.canIFire("analytics","google-optimize")&&wpm.load_google_optimize_pixel()}))},962:()=>{!function(e,t,a){e.load_google_optimize_pixel=function(){try{wpmDataLayer.pixels.google.optimize.loaded=!0,e.loadScriptAndCacheIt("https://www.googleoptimize.com/optimize.js?id="+wpmDataLayer.pixels.google.optimize.container_id)}catch(e){console.error(e)}}}(window.wpm=window.wpm||{},jQuery)},463:(e,t,a)=>{a(962),a(945)},300:()=>{jQuery(document).on("wpmLoadPixels",(function(){wpmDataLayer?.pixels?.hotjar?.site_id&&!wpmDataLayer?.pixels?.hotjar?.loaded&&wpm.canIFire("analytics","hotjar")&&!wpmDataLayer?.pixels?.hotjar?.loaded&&wpm.load_hotjar_pixel()}))},376:()=>{!function(e,t,a){e.load_hotjar_pixel=function(){try{wpmDataLayer.pixels.hotjar.loaded=!0,e=window,t=document,e.hj=e.hj||function(){(e.hj.q=e.hj.q||[]).push(arguments)},e._hjSettings={hjid:wpmDataLayer.pixels.hotjar.site_id,hjsv:6},a=t.getElementsByTagName("head")[0],(r=t.createElement("script")).async=1,r.src="https://static.hotjar.com/c/hotjar-"+e._hjSettings.hjid+".js?sv="+e._hjSettings.hjsv,a.appendChild(r)}catch(e){console.error(e)}var e,t,a,r}}(window.wpm=window.wpm||{},jQuery)},787:(e,t,a)=>{a(376),a(300)},473:()=>{!function(e,t,a){let r=()=>{let t=e.getCookie("cmplz_statistics"),a=e.getCookie("cmplz_marketing");return!(!e.getCookie("cmplz_consent_status")&&!e.getCookie("cmplz_banner-status"))&&{analytics:"allow"===t,ads:"allow"===a,visitorHasChosen:!0}},o=()=>{let t=e.getCookie("cookielawinfo-checkbox-analytics")||e.getCookie("cookielawinfo-checkbox-analytiques"),a=e.getCookie("cookielawinfo-checkbox-advertisement")||e.getCookie("cookielawinfo-checkbox-performance")||e.getCookie("cookielawinfo-checkbox-publicite"),r=e.getCookie("CookieLawInfoConsent");return!(!t&&!a)&&{analytics:"yes"===t,ads:"yes"===a,visitorHasChosen:!!r}},n={categories:{},pixels:[],mode:"category",visitorHasChosen:!1};e.getConsentValues=()=>n,e.setConsentValueCategories=function(){let e=arguments.length>0&&arguments[0]!==a&&arguments[0],t=arguments.length>1&&arguments[1]!==a&&arguments[1];n.categories.analytics=e,n.categories.ads=t},e.updateConsentCookieValues=function(){let t,i=arguments.length>0&&arguments[0]!==a?arguments[0]:null,s=arguments.length>1&&arguments[1]!==a?arguments[1]:null,d=arguments.length>2&&arguments[2]!==a&&arguments[2];if(n.categories.analytics=!d,n.categories.ads=!d,i||s)return i&&(n.categories.analytics=!!i),void(s&&(n.categories.ads=!!s));if(t=e.getCookie("pmw_cookie_consent"))return t=JSON.parse(t),n.categories.analytics=!0===t.analytics,n.categories.ads=!0===t.ads,void(n.visitorHasChosen=!0);if(t=e.getCookie("CookieConsent"))return t=decodeURI(t),n.categories.analytics=t.indexOf("statistics:true")>=0,n.categories.ads=t.indexOf("marketing:true")>=0,void(n.visitorHasChosen=!0);if(t=e.getCookie("CookieScriptConsent"))return t=JSON.parse(t),"reject"===t.action?(n.categories.analytics=!1,n.categories.ads=!1):2===t.categories.length?(n.categories.analytics=!0,n.categories.ads=!0):(n.categories.analytics=t.categories.indexOf("performance")>=0,n.categories.ads=t.categories.indexOf("targeting")>=0),void(n.visitorHasChosen=!0);if(t=e.getCookie("borlabs-cookie"))return t=decodeURI(t),t=JSON.parse(t),n.categories.analytics=!!t?.consents?.statistics,n.categories.ads=!!t?.consents?.marketing,n.visitorHasChosen=!0,n.pixels=[...t?.consents?.statistics||[],...t?.consents?.marketing||[]],void(n.mode="pixel");if(t=r())return n.categories.analytics=!0===t.analytics,n.categories.ads=!0===t.ads,void(n.visitorHasChosen=t.visitorHasChosen);if(t=e.getCookie("cookie_notice_accepted"))return n.categories.analytics=!0,n.categories.ads=!0,void(n.visitorHasChosen=!0);if(t=e.getCookie("hu-consent"))return t=JSON.parse(t),n.categories.analytics=!!t.categories[3],n.categories.ads=!!t.categories[4],void(n.visitorHasChosen=!0);if(t=o())return n.categories.analytics=!0===t.analytics,n.categories.ads=!0===t.ads,void(n.visitorHasChosen=!0===t.visitorHasChosen);if(t=e.getCookie("moove_gdpr_popup"))return t=JSON.parse(t),n.categories.analytics="1"===t.thirdparty,n.categories.ads="1"===t.advanced,void(n.visitorHasChosen=!0);if(t=e.getCookie("wpautoterms-cookies-notice")){if("1"!==t)return;return n.categories.analytics=!0,n.categories.ads=!0,void(n.visitorHasChosen=!0)}if(window.localStorage&&window.localStorage.getItem("uc_settings")){if(console.log("Usercentrics settings detected"),"undefined"==typeof UC_UI)return void window.addEventListener("UC_UI_INITIALIZED",(function(t){e.ucUiProcessConsent()}));if(UC_UI.areAllConsentsAccepted())return n.categories.analytics=!0,n.categories.ads=!0,void(n.visitorHasChosen=!0);e.ucUiProcessConsent()}if(t=e.getCookie("OptanonConsent")){let e=new URLSearchParams(t).get("groups").split(","),a={};return e.forEach((e=>{let t=e.split(":");a[t[0]]=t[1]})),n.categories.analytics="1"===groubsObject[2],n.categories.ads="1"===a[4],void(n.visitorHasChosen=!0)}},e.ucUiProcessConsent=function(){if("undefined"==typeof UC_UI)return;UC_UI.areAllConsentsAccepted()&&pmw.consentAcceptAll();const e=UC_UI.getSettingsLabels().categories.filter((e=>"Statistics"===e.label))[0].slug;pmw.consentAdjustSelectively({analytics:!UC_UI.getServicesBaseInfo().filter((t=>t.categorySlug===e&&!1===t.consent.status)).length>0,ads:!UC_UI.getServicesBaseInfo().filter((e=>"marketing"===e.categorySlug&&!1===e.consent.status)).length>0})},e.updateConsentCookieValues(),e.setConsentDefaultValuesToExplicit=()=>{n.categories={analytics:!1,ads:!1}},e.canIFire=(t,a)=>{let r;return"category"===n.mode?r=!!n.categories[t]:"pixel"===n.mode?(r=n.pixels.includes(a),!1===r&&"microsoft-ads"===a&&(r=n.pixels.includes("bing-ads"))):(console.error("Couldn't find a valid consent mode in wpmConsentValues"),r=!1),!!r||(e.logPreventedPixelLoading(a,t),!1)},e.logPreventedPixelLoading=(e,t)=>{wpmDataLayer?.shop?.cookie_consent_mgmt?.explicit_consent?console.log('Pixel Manager for WooCommerce: The "'+e+" (category: "+t+')" pixel has not fired because you have not given consent for it yet. (PMW is in explicit consent mode.)'):console.log('Pixel Manager for WooCommerce: The "'+e+" (category: "+t+')" pixel has not fired because you have removed consent for this pixel. (PMW is in implicit consent mode.)')},e.scriptTagObserver=new MutationObserver((a=>{a.forEach((a=>{let{addedNodes:r}=a;[...r].forEach((a=>{t(a).data("wpm-cookie-category")&&(e.shouldScriptBeActive(a)?e.unblockScript(a):e.blockScript(a))}))}))})),e.scriptTagObserver.observe(document.head,{childList:!0,subtree:!0}),document.addEventListener("DOMContentLoaded",(()=>e.scriptTagObserver.disconnect())),e.shouldScriptBeActive=e=>!((wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent||n.visitorHasChosen)&&("category"!==n.mode||!t(e).data("wpm-cookie-category").split(",").some((e=>n.categories[e])))&&("pixel"!==n.mode||!n.pixels.includes(t(e).data("wpm-pixel-name")))&&("pixel"!==n.mode||"google"!==t(e).data("wpm-pixel-name")||!["google-analytics","google-ads"].some((e=>n.pixels.includes(e))))&&(!wpmDataLayer?.pixels?.google?.consent_mode?.active||"google"!==t(e).data("wpm-pixel-name"))),e.unblockScript=function(e){let r=arguments.length>1&&arguments[1]!==a&&arguments[1];r&&t(e).remove();let o=t(e).data("wpm-src");o&&t(e).attr("src",o),e.type="text/javascript",r&&t(e).appendTo("head"),document.dispatchEvent(new Event("wpmPreLoadPixels"))},e.blockScript=function(e){let r=arguments.length>1&&arguments[1]!==a&&arguments[1];r&&t(e).remove(),t(e).attr("src")&&t(e).removeAttr("src"),e.type="blocked/javascript",r&&t(e).appendTo("head")},e.unblockAllScripts=function(){let t=!(arguments.length>0&&arguments[0]!==a)||arguments[0],r=!(arguments.length>1&&arguments[1]!==a)||arguments[1];e.setConsentValueCategories(t,r),document.dispatchEvent(new Event("wpmPreLoadPixels"))},e.unblockSelectedPixels=()=>{document.dispatchEvent(new Event("wpmPreLoadPixels"))},e.explicitConsentStateAlreadySet=()=>{if(n.explicitConsentStateAlreadySet)return!0;n.explicitConsentStateAlreadySet=!0},document.addEventListener("borlabs-cookie-consent-saved",(()=>{e.updateConsentCookieValues(),"pixel"===n.mode?(e.unblockSelectedPixels(),e.updateGoogleConsentMode(n.pixels.includes("google-analytics"),n.pixels.includes("google-ads"))):(e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads))})),document.addEventListener("CookiebotOnAccept",(()=>{Cookiebot.consent.statistics&&(n.categories.analytics=!0),Cookiebot.consent.marketing&&(n.categories.ads=!0),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)}),!1),document.addEventListener("CookieScriptAccept",(t=>{t.detail.categories.includes("performance")&&(n.categories.analytics=!0),t.detail.categories.includes("targeting")&&(n.categories.ads=!0),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)})),document.addEventListener("CookieScriptAcceptAll",(()=>{e.setConsentValueCategories(!0,!0),e.unblockAllScripts(!0,!0),e.updateGoogleConsentMode(!0,!0)})),e.cmplzStatusChange=t=>{t.detail.categories.includes("statistics")&&e.updateConsentCookieValues(!0,null),t.detail.categories.includes("marketing")&&e.updateConsentCookieValues(null,!0),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)},document.addEventListener("cmplzStatusChange",e.cmplzStatusChange),document.addEventListener("cmplz_status_change",e.cmplzStatusChange),document.addEventListener("setCookieNotice",(()=>{e.updateConsentCookieValues(),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)})),e.huObserver=new MutationObserver((t=>{t.forEach((t=>{let{addedNodes:a}=t;[...a].forEach((t=>{"hu"===t.id&&document.querySelector(".hu-cookies-save").addEventListener("click",(()=>{e.updateConsentCookieValues(),e.unblockAllScripts(n.categories.analytics,n.categories.ads),e.updateGoogleConsentMode(n.categories.analytics,n.categories.ads)}))}))}))})),window.hu&&e.huObserver.observe(document.documentElement||document.body,{childList:!0,subtree:!0}),window.addEventListener("ucEvent",(function(e){e.detail&&"consent_status"==e.detail.event&&(!0===e.detail["Google Ads Remarketing"]?console.log("Google Ads Remarketing has consent"):console.log("Google Ads Remarketing has no consent"))})),window.addEventListener("UC_UI_CMP_EVENT",(function(e){"ACCEPT_ALL"===e.detail.type&&pmw.consentAcceptAll(),"DENY_ALL"===e.detail.type&&pmw.consentRevokeAll(),"SAVE"===e.detail.type&&console.log("event.detail",e.detail)})),jQuery("#accept-recommended-btn-handler, #onetrust-accept-btn-handler").on("click",(function(){void 0!==window.OneTrust&&pmw.consentAcceptAll()})),jQuery(".ot-pc-refuse-all-handler, #onetrust-reject-all-handler").on("click",(function(){pmw.consentRevokeAll()})),jQuery(".save-preference-btn-handler.onetrust-close-btn-handler").on("click",(function(){location.reload()}))}(window.wpm=window.wpm||{},jQuery),function(e,t,a){e.consentAcceptAll=function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:{};t.duration=t.duration||365,e.consentSetCookie(!0,!0,t.duration),wpm.unblockAllScripts(!0,!0),wpm.updateGoogleConsentMode(!0,!0)},e.consentAdjustSelectively=t=>{t.analytics=t.analytics!==a?t.analytics:wpm.getConsentValues().categories.analytics,t.ads=t.ads!==a?t.ads:wpm.getConsentValues().categories.ads,t.duration=t.duration||365,e.consentSetCookie(t.analytics,t.ads,t.duration),wpm.unblockAllScripts(t.analytics,t.ads),wpm.updateGoogleConsentMode(t.analytics,t.ads)},e.consentRevokeAll=function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:{};t.duration=t.duration||365,wpm.setConsentValueCategories(!1,!1),e.consentSetCookie(!1,!1,t.duration),wpm.updateGoogleConsentMode(!1,!1)},e.consentSetCookie=function(e,t){let r=arguments.length>2&&arguments[2]!==a?arguments[2]:365;wpm.setCookie("pmw_cookie_consent",JSON.stringify({analytics:e,ads:t}),r)},jQuery(document).trigger("pmw_cookie_consent_management_loaded")}(window.pmw=window.pmw||{},jQuery)},299:()=>{jQuery(document).on("click",".remove_from_cart_button, .remove",(e=>{try{let t=new URL(jQuery(e.currentTarget).attr("href")),a=wpm.getProductIdByCartItemKeyUrl(t);wpm.removeProductFromCart(a)}catch(e){console.error(e)}}));let e=[".checkout",".checkout-button",".cart-checkout-button",".button.checkout",".xoo-wsc-ft-btn-checkout",".elementor-button--checkout"].join(",");jQuery(document).on("click init_checkout",e,(()=>{jQuery(document).trigger("wpmBeginCheckout")})),jQuery(document).on("updated_cart_totals",(()=>{jQuery(document).trigger("wpmViewCart")})),jQuery(document).on("wpmLoad",(e=>{jQuery(document).on("payment_method_selected",(()=>{!1===wpm.paymentMethodSelected&&wpm.fireCheckoutProgress(3),wpm.fireCheckoutOption(3,jQuery("input[name='payment_method']:checked").val()),wpm.paymentMethodSelected=!0}))})),jQuery(document).on("wpmLoad",(()=>{try{wpm.doesWooCommerceCartExist()&&wpm.getCartItems()}catch(e){console.error(e)}})),jQuery(document).on("wpmLoad",(()=>{wpmDataLayer.products=wpmDataLayer.products||{};let e=wpm.getAddToCartLinkProductIds();wpm.getProductsFromBackend(e)})),jQuery(document).on("wpmLoad",(()=>{if(!wpm.getCookie("wpmReferrer")&&document.referrer){let e=new URL(document.referrer).hostname;e!==window.location.host&&wpm.setCookie("wpmReferrer",e)}})),jQuery(document).on("wpmLoad",(()=>{try{if("undefined"!=typeof wpmDataLayer&&!wpmDataLayer?.wpmLoadFired){if(jQuery(document).trigger("wpmLoadAlways"),wpmDataLayer?.shop)if("product"===wpmDataLayer.shop.page_type&&"variable"!==wpmDataLayer.shop.product_type&&wpm.getMainProductIdFromProductPage()){let e=wpm.getProductDataForViewItemEvent(wpm.getMainProductIdFromProductPage());jQuery(document).trigger("wpmViewItem",e)}else"product_category"===wpmDataLayer.shop.page_type?jQuery(document).trigger("wpmCategory"):"search"===wpmDataLayer.shop.page_type?jQuery(document).trigger("pmwEvent:Search"):"cart"===wpmDataLayer.shop.page_type?jQuery(document).trigger("wpmViewCart"):"order_received_page"===wpmDataLayer.shop.page_type?wpmDataLayer?.order&&!wpm.isOrderIdStored(wpmDataLayer.order.id)&&(jQuery(document).trigger("wpmOrderReceivedPage"),wpm.writeOrderIdToStorage(wpmDataLayer.order.id,wpmDataLayer.order.key),"function"==typeof wpm.acrRemoveCookie&&wpm.acrRemoveCookie()):jQuery(document).trigger("wpmEverywhereElse");else jQuery(document).trigger("wpmEverywhereElse");wpmDataLayer?.user?.id&&!wpm.hasLoginEventFired()&&(jQuery(document).trigger("wpmLogin"),wpm.setLoginEventFired()),wpmDataLayer.wpmLoadFired=!0}}catch(e){console.error(e)}})),jQuery(document).on("wpmLoad",(async()=>{window.sessionStorage&&window.sessionStorage.getItem("_pmw_endpoint_available")&&!JSON.parse(window.sessionStorage.getItem("_pmw_endpoint_available"))&&console.error("Pixel Manager for WooCommerce: REST endpoint is not available. Using admin-ajax.php instead.")})),jQuery(document).on("wpmPreLoadPixels",(()=>{wpmDataLayer?.shop?.cookie_consent_mgmt?.explicit_consent&&!wpm.explicitConsentStateAlreadySet()&&wpm.updateConsentCookieValues(null,null,!0),jQuery(document).trigger("wpmLoadPixels",{})})),jQuery(document).on("wpmAddToCart",((e,t)=>{let a={event:"addToCart",product:t};wpmDataLayer?.pixels?.facebook?.loaded&&(a.facebook={event_name:"AddToCart",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:wpm.fbGetProductDataForCapiEvent(t)}),wpmDataLayer?.pixels?.tiktok?.loaded&&(a.tiktok={event:"AddToCart",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{value:t.price*t.quantity,currency:t.currency,contents:[{content_id:t.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],content_type:"product",content_name:t.name,quantity:t.quantity,price:t.price}]}}),jQuery(document).trigger("wpmClientSideAddToCart",a),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(a)})),jQuery(document).on("wpmBeginCheckout",(()=>{let e={event:"beginCheckout"};wpmDataLayer?.pixels?.facebook?.loaded&&(e.facebook={event_name:"InitiateCheckout",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{}},wpmDataLayer?.cart&&!jQuery.isEmptyObject(wpmDataLayer.cart)&&(e.facebook.custom_data={content_type:"product",content_ids:wpm.fbGetContentIdsFromCart(),value:wpm.getCartValue(),currency:wpmDataLayer.shop.currency})),wpmDataLayer?.pixels?.tiktok?.loaded&&(e.tiktok={event:"InitiateCheckout",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser()}),jQuery(document).trigger("wpmClientSideBeginCheckout",e),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(e)})),jQuery(document).on("wpmAddToWishlist",((e,t)=>{let a={event:"addToWishlist",product:t};wpmDataLayer?.pixels?.facebook?.loaded&&(a.facebook={event_name:"AddToWishlist",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:wpm.fbGetProductDataForCapiEvent(t)}),wpmDataLayer?.pixels?.tiktok?.loaded&&(a.tiktok={event:"AddToWishlist",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{value:t.price*t.quantity,currency:t.currency,contents:[{content_id:t.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],content_type:"product",content_name:t.name,quantity:t.quantity,price:t.price}]}}),jQuery(document).trigger("wpmClientSideAddToWishlist",a),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(a)})),jQuery(document).on("wpmViewItem",(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,a={event:"viewItem",product:t};wpmDataLayer?.pixels?.facebook?.loaded&&(a.facebook={event_name:"ViewContent",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{}},t&&(a.facebook.custom_data=wpm.fbGetProductDataForCapiEvent(t))),wpmDataLayer?.pixels?.tiktok?.loaded&&(a.tiktok={event:"ViewContent",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser()},t&&(a.tiktok.properties={value:t.price*t.quantity,currency:t.currency,contents:[{content_id:t.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],content_type:"product",content_name:t.name,quantity:t.quantity,price:t.price}]})),jQuery(document).trigger("wpmClientSideViewItem",a),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(a)})),jQuery(document).on("pmwEvent:Search",(()=>{let e={event:"search"};wpmDataLayer?.pixels?.facebook?.loaded&&(e.facebook={event_name:"Search",event_id:wpm.getFbRandomEventId(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{search_string:wpm.getSearchTermFromUrl()}}),wpmDataLayer?.pixels?.tiktok?.loaded&&(e.tiktok={event:"Search",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser(),properties:{query:wpm.getSearchTermFromUrl()}}),jQuery(document).trigger("wpmClientSideSearch",e),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(e)})),jQuery(document).on("wpmPlaceOrder",(()=>{let e={event:"placeOrder"};wpmDataLayer?.pixels?.tiktok?.loaded&&(e.tiktok={event:"PlaceAnOrder",event_id:wpm.getRandomEventId(),context:wpm.getTikTokUserDataFromBrowser()}),jQuery(document).trigger("wpmClientPlaceOrder",e),"function"==typeof wpm.sendEventPayloadToServer&&wpm.sendEventPayloadToServer(e)})),jQuery(document).on("wpmOrderReceivedPage",(()=>{let e={event:"orderReceived"};wpmDataLayer?.pixels?.facebook?.loaded&&(e.facebook={event_name:"Purchase",event_id:wpmDataLayer.order.id.toString(),user_data:wpm.getFbUserData(),event_source_url:window.location.href,custom_data:{content_type:"product",value:wpmDataLayer.order.value_filtered,currency:wpmDataLayer.order.currency,content_ids:wpm.facebookContentIds()}}),wpmDataLayer?.pixels?.tiktok?.loaded&&(e.tiktok={event:"CompletePayment",event_id:wpmDataLayer.order.id.toString(),context:wpm.getTikTokUserDataFromBrowser(),properties:{value:wpmDataLayer.order.value_filtered,currency:wpmDataLayer.order.currency,contents:wpm.getTikTokOrderItemIds()}}),jQuery(document).trigger("wpmClientSideOrderReceivedPage",e)})),jQuery(document).on("pmw:ready",(async()=>{wpm.startIntersectionObserverToWatch(),wpm.startProductsMutationObserverToWatch()}))},459:()=>{const e=[".add_to_cart_button:not(.product_type_variable)",".ajax_add_to_cart",".single_add_to_cart_button"].join(",");jQuery(e).on("click adding_to_cart",(e=>{try{let t,a=1;"product"===wpmDataLayer.shop.page_type?(void 0!==jQuery(e.currentTarget).attr("href")&&jQuery(e.currentTarget).attr("href").includes("add-to-cart")&&(t=jQuery(e.currentTarget).data("product_id"),wpm.addProductToCart(t,a)),"simple"===wpmDataLayer.shop.product_type&&(a=Number(jQuery(".input-text.qty").val()),a||0===a||(a=1),t=jQuery(e.currentTarget).val(),wpm.addProductToCart(t,a)),["variable","variable-subscription"].indexOf(wpmDataLayer.shop.product_type)>=0&&(a=Number(jQuery(".input-text.qty").val()),a||0===a||(a=1),t=jQuery("[name='variation_id']").val(),wpm.addProductToCart(t,a)),"grouped"===wpmDataLayer.shop.product_type&&jQuery(".woocommerce-grouped-product-list-item").each(((e,r)=>{a=Number(jQuery(r).find(".input-text.qty").val()),a||0===a||(a=1);let o=jQuery(r).attr("class");t=wpm.getPostIdFromString(o),wpm.addProductToCart(t,a)})),"bundle"===wpmDataLayer.shop.product_type&&(a=Number(jQuery(".input-text.qty").val()),a||0===a||(a=1),t=jQuery("input[name=add-to-cart]").val(),wpm.addProductToCart(t,a))):(t=jQuery(e.currentTarget).data("product_id"),wpm.addProductToCart(t,a))}catch(e){console.error(e)}})),jQuery("a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)").one("click",(e=>{try{if(jQuery(e.target).closest("a").attr("href")){let t=new URL(jQuery(e.currentTarget).attr("href"),window.location.origin);if(t.searchParams.has("add-to-cart")){let e=t.searchParams.get("add-to-cart");wpm.addProductToCart(e,1)}}}catch(e){console.error(e)}})),jQuery(".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product").on("click",(e=>{try{let t=jQuery(e.currentTarget).nextAll(".wpmProductId:first").data("id");if(t){if(t=wpm.getIdBasedOndVariationsOutputSetting(t),!t)throw Error("Wasn't able to retrieve a productId");if(wpmDataLayer.products&&wpmDataLayer.products[t]){let e=wpm.getProductDetailsFormattedForEvent(t);jQuery(document).trigger("wpmSelectContentGaUa",e),jQuery(document).trigger("wpmSelectItem",e)}}}catch(e){console.error(e)}})),jQuery("#billing_email").on("input",(e=>{wpm.isEmail(jQuery(e.currentTarget).val())&&(wpm.fireCheckoutProgress(2),wpm.emailSelected=!0)})),jQuery("form.checkout").on("checkout_place_order_success",(()=>{!1===wpm.emailSelected&&wpm.fireCheckoutProgress(2),!1===wpm.paymentMethodSelected&&(wpm.fireCheckoutProgress(3),wpm.fireCheckoutOption(3,jQuery("input[name='payment_method']:checked").val())),wpm.fireCheckoutProgress(4),jQuery(document).trigger("wpmPlaceOrder",{})})),jQuery("[name='update_cart']").on("click",(()=>{try{jQuery(".cart_item").each(((e,t)=>{let a=new URL(jQuery(t).find(".product-remove").find("a").attr("href")),r=wpm.getProductIdByCartItemKeyUrl(a),o=jQuery(t).find(".qty").val();0===o?wpm.removeProductFromCart(r):o<wpmDataLayer.cart[r].quantity?wpm.removeProductFromCart(r,wpmDataLayer.cart[r].quantity-o):o>wpmDataLayer.cart[r].quantity&&wpm.addProductToCart(r,o-wpmDataLayer.cart[r].quantity)}))}catch(e){console.error(e),wpm.getCartItemsFromBackend()}})),jQuery(".add_to_wishlist,.wl-add-to").on("click",(e=>{try{let t;if(jQuery(e.currentTarget).data("productid")?t=jQuery(e.currentTarget).data("productid"):jQuery(e.currentTarget).data("product-id")&&(t=jQuery(e.currentTarget).data("product-id")),!t)throw Error("Wasn't able to retrieve a productId");let a=wpm.getProductDetailsFormattedForEvent(t);jQuery(document).trigger("wpmAddToWishlist",a)}catch(e){console.error(e)}})),jQuery(".single_variation_wrap").on("show_variation",((e,t)=>{try{let e=wpm.getIdBasedOndVariationsOutputSetting(t.variation_id);if(!e)throw Error("Wasn't able to retrieve a productId");wpm.triggerViewItemEventPrep(e)}catch(e){console.error(e)}}))},584:()=>{!function(e,t,a){const r="_wpm_order_ids",o="_pmw_endpoint_available",n="pmw/v1/test/";function i(){return""!==e.getCookie(r)}e.emailSelected=!1,e.paymentMethodSelected=!1,e.useRestEndpoint=()=>e.isSessionStorageAvailable()&&e.isRestEndpointAvailable()&&e.isBelowRestErrorThreshold(),e.isBelowRestErrorThreshold=()=>window.sessionStorage.getItem(0)<=10,e.isRestEndpointAvailable=async()=>window.sessionStorage.getItem(o)?JSON.parse(window.sessionStorage.getItem(o)):await e.testEndpoint(),e.isSessionStorageAvailable=()=>!!window.sessionStorage,e.testEndpoint=async function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:e.root+n,r=arguments.length>1&&arguments[1]!==a?arguments[1]:o,i=await fetch(t,{method:"POST",mode:"cors",cache:"no-cache",keepalive:!0});return 200===i.status?(window.sessionStorage.setItem(r,JSON.stringify(!0)),!0):404===i.status||0===i.status?(window.sessionStorage.setItem(r,JSON.stringify(!1)),!1):void 0},e.isWpmRestEndpointAvailable=function(){let t=arguments.length>0&&arguments[0]!==a?arguments[0]:o;return!!e.getCookie(t)},e.writeOrderIdToStorage=function(t,o){let n=arguments.length>2&&arguments[2]!==a?arguments[2]:"thankyou_page";if(window.Storage)if(null===localStorage.getItem(r)){let e=[];e.push(t),window.localStorage.setItem(r,JSON.stringify(e))}else{let e=JSON.parse(localStorage.getItem(r));e.includes(t)||(e.push(t),window.localStorage.setItem(r,JSON.stringify(e)))}else{let a=new Date;a.setDate(a.getDate()+365);let o=[];i()&&(o=JSON.parse(e.getCookie(r))),o.includes(t)||(o.push(t),document.cookie="_wpm_order_ids="+JSON.stringify(o)+";expires="+a.toUTCString())}"function"==typeof e.storeOrderIdOnServer&&wpmDataLayer.orderDeduplication&&e.storeOrderIdOnServer(o,n)},e.isOrderIdStored=t=>wpmDataLayer.orderDeduplication?window.Storage?null!==localStorage.getItem(r)&&JSON.parse(localStorage.getItem(r)).includes(t):!!i()&&JSON.parse(e.getCookie(r)).includes(t):(console.log("order duplication prevention: off"),!1),e.isEmail=e=>/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e),e.removeProductFromCart=async function(t){let r=arguments.length>1&&arguments[1]!==a?arguments[1]:null;try{if(!t)throw Error("Wasn't able to retrieve a productId");if(!(t=e.getIdBasedOndVariationsOutputSetting(t)))throw Error("Wasn't able to retrieve a productId");let a;a=null==r?wpmDataLayer.cart[t].quantity:r,wpmDataLayer.cart[t]||await e.getProductsFromBackend([t]);let o=e.getProductDetailsFormattedForEvent(t,a);jQuery(document).trigger("wpmRemoveFromCart",o),null==r||wpmDataLayer.cart[t].quantity===r?(delete wpmDataLayer.cart[t],sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(wpmDataLayer.cart))):(wpmDataLayer.cart[t].quantity=wpmDataLayer.cart[t].quantity-a,sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(wpmDataLayer.cart)))}catch(e){console.error(e)}},e.getIdBasedOndVariationsOutputSetting=e=>{try{return wpmDataLayer?.general?.variationsOutput?e:wpmDataLayer.products[e].isVariation?wpmDataLayer.products[e].parentId:e}catch(e){console.error(e)}},e.addProductToCart=async(t,a)=>{try{if(!t)throw Error("Wasn't able to retrieve a productId");if(!(t=e.getIdBasedOndVariationsOutputSetting(t)))throw Error("Wasn't able to retrieve a productId");wpmDataLayer?.products[t]||await e.getProductsFromBackend([t]);let r=e.getProductDetailsFormattedForEvent(t,a);jQuery(document).trigger("wpmAddToCart",r),wpmDataLayer?.cart[t]?wpmDataLayer.cart[t].quantity=wpmDataLayer.cart[t].quantity+a:("cart"in wpmDataLayer||(wpmDataLayer.cart={}),wpmDataLayer.cart[t]=e.getProductDetailsFormattedForEvent(t,a)),sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(wpmDataLayer.cart))}catch(t){console.error(t),e.getCartItemsFromBackend()}},e.getCartItems=()=>{sessionStorage?sessionStorage.getItem("wpmDataLayerCart")&&"order_received_page"!==wpmDataLayer.shop.page_type?e.saveCartObjectToDataLayer(JSON.parse(sessionStorage.getItem("wpmDataLayerCart"))):sessionStorage.setItem("wpmDataLayerCart",JSON.stringify({})):e.getCartItemsFromBackend()},e.getCartItemsFromBackend=()=>{try{fetch(e.ajax_url,{method:"POST",cache:"no-cache",body:new URLSearchParams({action:"pmw_get_cart_items"}),keepalive:!0}).then((e=>{if(e.ok)return e.json();throw Error("Error getting cart items from backend")})).then((t=>{if(!t.success)throw Error("Error getting cart items from backend");t.data.cart||(t.data.cart={}),e.saveCartObjectToDataLayer(t.data.cart),sessionStorage&&sessionStorage.setItem("wpmDataLayerCart",JSON.stringify(t.data.cart))}))}catch(e){console.error(e)}},e.getProductsFromBackend=async t=>{if(wpmDataLayer?.products&&(t=t.filter((e=>!(e in wpmDataLayer.products)))),t&&0!==t.length){try{let a;if(a=await e.isRestEndpointAvailable()?await fetch(e.root+"pmw/v1/products/",{method:"POST",cache:"no-cache",headers:{"Content-Type":"application/json"},body:JSON.stringify({pageId:wpmDataLayer.general.pageId,pageType:wpmDataLayer.shop.page_type,productIds:t})}):await fetch(e.ajax_url,{method:"POST",cache:"no-cache",body:new URLSearchParams({action:"pmw_get_product_ids",pageId:wpmDataLayer.general.pageId,pageType:wpmDataLayer.shop.page_type,productIds:t})}),a.ok){let e=await a.json();e.success&&(wpmDataLayer.products=Object.assign({},wpmDataLayer.products,e.data))}else console.error("Error getting products from backend")}catch(e){console.error(e)}return!0}},e.saveCartObjectToDataLayer=e=>{wpmDataLayer.cart=e,wpmDataLayer.products=Object.assign({},wpmDataLayer.products,e)},e.triggerViewItemEventPrep=async t=>{wpmDataLayer.products&&wpmDataLayer.products[t]||await e.getProductsFromBackend([t]),e.triggerViewItemEvent(t)},e.triggerViewItemEvent=t=>{let a=e.getProductDetailsFormattedForEvent(t);jQuery(document).trigger("wpmViewItem",a)},e.triggerViewItemEventNoProduct=()=>{jQuery(document).trigger("wpmViewItem")},e.fireCheckoutOption=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:null,r=arguments.length>2&&arguments[2]!==a?arguments[2]:null,o={step:e,checkout_option:t,value:r};jQuery(document).trigger("wpmFireCheckoutOption",o)},e.fireCheckoutProgress=e=>{let t={step:e};jQuery(document).trigger("wpmFireCheckoutProgress",t)},e.getPostIdFromString=e=>{try{return e.match(/(post-)(\d+)/)[2]}catch(e){console.error(e)}},e.triggerViewItemList=t=>{if(!t)throw Error("Wasn't able to retrieve a productId");if(!(t=e.getIdBasedOndVariationsOutputSetting(t)))throw Error("Wasn't able to retrieve a productId");jQuery(document).trigger("wpmViewItemList",e.getProductDataForViewItemEvent(t))},e.getProductDataForViewItemEvent=t=>{if(!t)throw Error("Wasn't able to retrieve a productId");try{if(wpmDataLayer.products[t])return e.getProductDetailsFormattedForEvent(t)}catch(e){console.error(e)}},e.getMainProductIdFromProductPage=()=>{try{return["simple","variable","grouped","composite","bundle"].indexOf(wpmDataLayer.shop.product_type)>=0&&jQuery(".wpmProductId:first").data("id")}catch(e){console.error(e)}},e.viewItemListTriggerTestMode=e=>{jQuery(e).css({position:"relative"}),jQuery(e).append('<div id="viewItemListTriggerOverlay"></div>'),jQuery(e).find("#viewItemListTriggerOverlay").css({"z-index":"10",display:"block",position:"absolute",height:"100%",top:"0",left:"0",right:"0",opacity:wpmDataLayer.viewItemListTrigger.opacity,"background-color":wpmDataLayer.viewItemListTrigger.backgroundColor})},e.getSearchTermFromUrl=()=>{try{return new URLSearchParams(window.location.search).get("s")}catch(e){console.error(e)}};let s,d={};e.observerCallback=(t,a)=>{t.forEach((t=>{try{let r,o=jQuery(t.target).data("ioid");if(r=jQuery(t.target).next(".wpmProductId").length?jQuery(t.target).next(".wpmProductId").data("id"):jQuery(t.target).find(".wpmProductId").data("id"),!r)throw Error("wpmProductId element not found");t.isIntersecting?d[o]=setTimeout((()=>{e.triggerViewItemList(r),wpmDataLayer.viewItemListTrigger.testMode&&e.viewItemListTriggerTestMode(t.target),!1===wpmDataLayer.viewItemListTrigger.repeat&&a.unobserve(t.target)}),wpmDataLayer.viewItemListTrigger.timeout):(clearTimeout(d[o]),wpmDataLayer.viewItemListTrigger.testMode&&jQuery(t.target).find("#viewItemListTriggerOverlay").remove())}catch(e){console.error(e)}}))};let c,p=0,l=()=>{c=jQuery(".wpmProductId").map((function(e,t){return jQuery(t).parent().hasClass("type-product")||jQuery(t).parent().hasClass("product")||jQuery(t).parent().hasClass("product-item-inner")?jQuery(t).parent():jQuery(t).prev().hasClass("wc-block-grid__product")||jQuery(t).prev().hasClass("product")||jQuery(t).prev().hasClass("product-small")||jQuery(t).prev().hasClass("woocommerce-LoopProduct-link")?jQuery(this).prev():jQuery(t).closest(".product").length?jQuery(t).closest(".product"):void 0}))};e.startIntersectionObserverToWatch=()=>{try{e.urlHasParameter("vildemomode")&&(wpmDataLayer.viewItemListTrigger.testMode=!0),s=new IntersectionObserver(e.observerCallback,{threshold:wpmDataLayer.viewItemListTrigger.threshold}),l(),c.each(((e,t)=>{jQuery(t[0]).data("ioid",p++),s.observe(t[0])}))}catch(e){console.error(e)}},e.startProductsMutationObserverToWatch=()=>{try{let e=jQuery(".wpmProductId:eq(0)").parents().has(jQuery(".wpmProductId:eq(1)").parents()).first();e.length&&u.observe(e[0],{attributes:!0,childList:!0,characterData:!0})}catch(e){console.error(e)}};let u=new MutationObserver((e=>{e.forEach((e=>{let t=e.addedNodes;null!==t&&jQuery(t).each((function(){(jQuery(this).hasClass("type-product")||jQuery(this).hasClass("product-small")||jQuery(this).hasClass("wc-block-grid__product"))&&m(this)&&(jQuery(this).data("ioid",p++),s.observe(this))}))}))})),m=e=>!(!jQuery(e).find(".wpmProductId").length&&!jQuery(e).siblings(".wpmProductId").length);e.setCookie=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:"",r=arguments.length>2&&arguments[2]!==a?arguments[2]:null;if(r){let a=new Date;a.setTime(a.getTime()+24*r*60*60*1e3);let o="expires="+a.toUTCString();document.cookie=e+"="+t+";"+o+";path=/"}else document.cookie=e+"="+t+";path=/"},e.getCookie=e=>{let t=e+"=",a=decodeURIComponent(document.cookie).split(";");for(let e=0;e<a.length;e++){let r=a[e];for(;" "==r.charAt(0);)r=r.substring(1);if(0==r.indexOf(t))return r.substring(t.length,r.length)}return""},e.deleteCookie=t=>{e.setCookie(t,"",-1)},e.getWpmSessionData=()=>{if(window.sessionStorage){let e=window.sessionStorage.getItem("_wpm");return null!==e?JSON.parse(e):{}}return{}},e.setWpmSessionData=e=>{window.sessionStorage&&window.sessionStorage.setItem("_wpm",JSON.stringify(e))},e.storeOrderIdOnServer=async(t,a)=>{try{let r;r=await e.isRestEndpointAvailable()?await fetch(e.root+"pmw/v1/pixels-fired/",{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":e.nonce_wp_rest},body:JSON.stringify({order_key:t,source:a}),keepalive:!0,cache:"no-cache"}):await fetch(e.ajax_url,{method:"POST",body:new URLSearchParams({action:"pmw_purchase_pixels_fired",order_key:t,source:a,nonce_ajax:e.nonce_ajax}),keepalive:!0});const o=await r.json();o.success?console.log("wpm.storeOrderIdOnServer success"):console.error("wpm.storeOrderIdOnServer error",o)}catch(e){console.error(e)}},e.getProductIdByCartItemKeyUrl=e=>{let t,a=new URLSearchParams(e.search).get("remove_item");return t=0===wpmDataLayer.cartItemKeys[a].variation_id?wpmDataLayer.cartItemKeys[a].product_id:wpmDataLayer.cartItemKeys[a].variation_id,t},e.getAddToCartLinkProductIds=()=>jQuery("a").map((function(){let e=jQuery(this).attr("href");if(e&&e.includes("?add-to-cart=")){let t=e.match(/(add-to-cart=)(\d+)/);if(t)return t[2]}})).get(),e.getProductDetailsFormattedForEvent=function(e){let t=arguments.length>1&&arguments[1]!==a?arguments[1]:1,r={id:e.toString(),dyn_r_ids:wpmDataLayer.products[e].dyn_r_ids,name:wpmDataLayer.products[e].name,list_name:wpmDataLayer.shop.list_name,brand:wpmDataLayer.products[e].brand,category:wpmDataLayer.products[e].category,variant:wpmDataLayer.products[e].variant,list_position:wpmDataLayer.products[e].position,quantity:t,price:wpmDataLayer.products[e].price,currency:wpmDataLayer.shop.currency,isVariable:wpmDataLayer.products[e].isVariable,isVariation:wpmDataLayer.products[e].isVariation,parentId:wpmDataLayer.products[e].parentId};return r.isVariation&&(r.parentId_dyn_r_ids=wpmDataLayer.products[e].parentId_dyn_r_ids),r},e.setReferrerToCookie=()=>{e.getCookie("wpmReferrer")||e.setCookie("wpmReferrer",document.referrer)},e.getReferrerFromCookie=()=>e.getCookie("wpmReferrer")?e.getCookie("wpmReferrer"):null,e.getClidFromBrowser=function(){let t,r=arguments.length>0&&arguments[0]!==a?arguments[0]:"gclid";return t={gclid:"_gcl_aw",dclid:"_gcl_dc"},e.getCookie(t[r])?e.getCookie(t[r]).match(/(GCL.[\d]*.)(.*)/)[2]:""},e.getUserAgent=()=>navigator.userAgent,e.getViewPort=()=>({width:Math.max(document.documentElement.clientWidth||0,window.innerWidth||0),height:Math.max(document.documentElement.clientHeight||0,window.innerHeight||0)}),e.version=()=>{console.log(wpmDataLayer.version)},e.loadScriptAndCacheIt=e=>{let t={dataType:"script",cache:!0,url:e};return jQuery.ajax(t)},e.getOrderItemPrice=e=>(e.total+e.total_tax)/e.quantity,e.hasLoginEventFired=()=>e.getWpmSessionData()?.loginEventFired,e.setLoginEventFired=()=>{let t=e.getWpmSessionData();t.loginEventFired=!0,e.setWpmSessionData(t)},e.pageLoaded=async()=>new Promise((e=>{!function t(){if("complete"===document.readyState)return e();setTimeout(t,50)}()})),e.pageReady=()=>new Promise((e=>{!function t(){if("interactive"===document.readyState||"complete"===document.readyState)return e();setTimeout(t,50)}()})),e.isMiniCartActive=()=>{if(window.sessionStorage){for(const[e,t]of Object.entries(window.sessionStorage))if(e.includes("wc_fragments"))return!0;return!1}return!1},e.doesWooCommerceCartExist=()=>document.cookie.includes("woocommerce_items_in_cart"),e.urlHasParameter=e=>new URLSearchParams(window.location.search).has(e),e.hashAsync=(e,t)=>crypto.subtle.digest(e,new TextEncoder("utf-8").encode(t)).then((e=>Array.prototype.map.call(new Uint8Array(e),(e=>("00"+e.toString(16)).slice(-2))).join(""))),e.getCartValue=()=>{let e=0;if(wpmDataLayer?.cart)for(const t in wpmDataLayer.cart){let a=wpmDataLayer.cart[t];e+=a.quantity*a.price}return e},e.doesUrlContainPatterns=e=>{for(const t of e)if(new RegExp(t).test(window.location.href))return!0;return!1},e.excludeDomainFromTracking=()=>{let e=["appspot.com","translate.google.com"];return wpmDataLayer?.general?.excludeDomains&&(e=[...e,...wpmDataLayer.general.excludeDomains]),!!e.some((e=>window.location.href.includes(e)))&&(console.debug("Pixel Manager for WooCommerce: Aborted due to excluded domain"),!0)},e.getRandomEventId=()=>(Math.random()+1).toString(36).substring(2),e.pmwConsoleMessage=()=>{let e="Pixel Manager for WooCommerce: ";e+=wpmDataLayer.version.pro?"pro":"free",e+=" | distro: "+wpmDataLayer.version.distro,"fms"===wpmDataLayer.version.distro&&wpmDataLayer.version.pro&&(e+=" | active license: "+(wpmDataLayer.version.eligibleForUpdates?"yes":"no")),e+=" | version: "+wpmDataLayer.version.number,console.log(e)},e.canLoadPremiumFeatures=()=>"fms"===wpmDataLayer.version.distro&&wpmDataLayer.version.pro&&wpmDataLayer.version.eligibleForUpdates||"wcm"===wpmDataLayer.version.distro;let g=!1;e.triggerDomReadyEvent=()=>{!1===g&&jQuery(document).trigger("pmw:ready"),g=!0},jQuery(document).on("ready",(()=>{e.triggerDomReadyEvent()})),document.addEventListener("DOMContentLoaded",(()=>{e.triggerDomReadyEvent()}))}(window.wpm=window.wpm||{},jQuery)},534:(e,t,a)=>{a(584),a(473),a(260)},424:()=>{!function(e,t,a){e.jQueryExists=async()=>new Promise((e=>{!function t(){if("undefined"!=typeof jQuery)return e();setTimeout(t,100)}()})),e.wpmDataLayerExists=async()=>new Promise((e=>{!function t(){if("undefined"!=typeof wpmDataLayer)return e();setTimeout(t,50)}()}))}(window.wpm=window.wpm||{},jQuery)},260:(e,t,a)=>{!function(e,t,r){e.ipCheck=async()=>{if(window.sessionStorage&&sessionStorage.getItem("pmw_ip_valid"))return!!JSON.parse(sessionStorage.getItem("pmw_ip_valid"));const e=await fetch("https://www.cloudflare.com/cdn-cgi/trace");let t=await e.text();return t=t.trim().split("\n").reduce(((e,t)=>(e[(t=t.split("="))[0]]=t[1],e)),{}),o(t.ip)?(window.sessionStorage&&window.sessionStorage.setItem("pmw_ip_valid",JSON.stringify(!1)),!1):(window.sessionStorage&&window.sessionStorage.setItem("pmw_ip_valid",JSON.stringify(!0)),!0)};const o=e=>{const{isInSubnet:t}=a(806);for(const a of i())if(n(a))try{if(t(e,a))return!0}catch(e){console.error(e)}else if(e===a)return!0;return!1},n=e=>{const{isRange:t}=a(703);return t(e)},i=()=>{let e=[];return Array.isArray(wpmDataLayer.general.server2server.ipExcludeList)&&(e=wpmDataLayer.general.server2server.ipExcludeList),[].concat(["2001:4860:4801:10::/64","2001:4860:4801:11::/64","2001:4860:4801:12::/64","2001:4860:4801:13::/64","2001:4860:4801:14::/64","2001:4860:4801:15::/64","2001:4860:4801:16::/64","2001:4860:4801:17::/64","2001:4860:4801:18::/64","2001:4860:4801:19::/64","2001:4860:4801:1a::/64","2001:4860:4801:1b::/64","2001:4860:4801:20::/64","2001:4860:4801:21::/64","2001:4860:4801:22::/64","2001:4860:4801:23::/64","2001:4860:4801:24::/64","2001:4860:4801:25::/64","2001:4860:4801:26::/64","2001:4860:4801:27::/64","2001:4860:4801:28::/64","2001:4860:4801:29::/64","2001:4860:4801:2::/64","2001:4860:4801:2a::/64","2001:4860:4801:2b::/64","2001:4860:4801:2c::/64","2001:4860:4801:2d::/64","2001:4860:4801:2e::/64","2001:4860:4801:2f::/64","2001:4860:4801:30::/64","2001:4860:4801:31::/64","2001:4860:4801:32::/64","2001:4860:4801:33::/64","2001:4860:4801:34::/64","2001:4860:4801:35::/64","2001:4860:4801:36::/64","2001:4860:4801:37::/64","2001:4860:4801:38::/64","2001:4860:4801:39::/64","2001:4860:4801:3::/64","2001:4860:4801:3a::/64","2001:4860:4801:3b::/64","2001:4860:4801:3c::/64","2001:4860:4801:3d::/64","2001:4860:4801:3e::/64","2001:4860:4801:40::/64","2001:4860:4801:41::/64","2001:4860:4801:42::/64","2001:4860:4801:43::/64","2001:4860:4801:44::/64","2001:4860:4801:45::/64","2001:4860:4801:46::/64","2001:4860:4801:47::/64","2001:4860:4801:48::/64","2001:4860:4801:49::/64","2001:4860:4801:4a::/64","2001:4860:4801:50::/64","2001:4860:4801:51::/64","2001:4860:4801:53::/64","2001:4860:4801:60::/64","2001:4860:4801:61::/64","2001:4860:4801:62::/64","2001:4860:4801:63::/64","2001:4860:4801:64::/64","2001:4860:4801:65::/64","2001:4860:4801:66::/64","2001:4860:4801:67::/64","2001:4860:4801:68::/64","2001:4860:4801:69::/64","2001:4860:4801:6a::/64","2001:4860:4801:6b::/64","2001:4860:4801:6c::/64","2001:4860:4801:6d::/64","2001:4860:4801:6e::/64","2001:4860:4801:6f::/64","2001:4860:4801:70::/64","2001:4860:4801:71::/64","2001:4860:4801:72::/64","2001:4860:4801:73::/64","2001:4860:4801:74::/64","2001:4860:4801:75::/64","2001:4860:4801:76::/64","2001:4860:4801:77::/64","2001:4860:4801:80::/64","2001:4860:4801:81::/64","2001:4860:4801:82::/64","2001:4860:4801:83::/64","2001:4860:4801:84::/64","2001:4860:4801:85::/64","2001:4860:4801:86::/64","2001:4860:4801:90::/64","2001:4860:4801:91::/64","2001:4860:4801:92::/64","2001:4860:4801::/64","2001:4860:4801:c::/64","2001:4860:4801:f::/64","34.100.182.96/28","34.101.50.144/28","34.118.254.0/28","34.118.66.0/28","34.126.178.96/28","34.146.150.144/28","34.147.110.144/28","34.151.74.144/28","34.152.50.64/28","34.154.114.144/28","34.155.98.32/28","34.165.18.176/28","34.175.160.64/28","34.176.130.16/28","34.64.82.64/28","34.65.242.112/28","34.80.50.80/28","34.88.194.0/28","34.89.10.80/28","34.89.198.80/28","34.96.162.48/28","35.247.243.240/28","66.249.64.0/27","66.249.64.128/27","66.249.64.160/27","66.249.64.192/27","66.249.64.224/27","66.249.64.32/27","66.249.64.64/27","66.249.64.96/27","66.249.65.0/27","66.249.65.128/27","66.249.65.160/27","66.249.65.192/27","66.249.65.224/27","66.249.65.32/27","66.249.65.64/27","66.249.65.96/27","66.249.66.0/27","66.249.66.128/27","66.249.66.192/27","66.249.66.32/27","66.249.66.64/27","66.249.68.0/27","66.249.68.32/27","66.249.68.64/27","66.249.69.0/27","66.249.69.128/27","66.249.69.160/27","66.249.69.192/27","66.249.69.224/27","66.249.69.32/27","66.249.69.64/27","66.249.69.96/27","66.249.70.0/27","66.249.70.128/27","66.249.70.160/27","66.249.70.192/27","66.249.70.224/27","66.249.70.32/27","66.249.70.64/27","66.249.70.96/27","66.249.71.0/27","66.249.71.128/27","66.249.71.160/27","66.249.71.192/27","66.249.71.32/27","66.249.71.64/27","66.249.71.96/27","66.249.72.0/27","66.249.72.128/27","66.249.72.160/27","66.249.72.192/27","66.249.72.224/27","66.249.72.32/27","66.249.72.64/27","66.249.72.96/27","66.249.73.0/27","66.249.73.128/27","66.249.73.160/27","66.249.73.192/27","66.249.73.224/27","66.249.73.32/27","66.249.73.64/27","66.249.73.96/27","66.249.74.0/27","66.249.74.32/27","66.249.74.64/27","66.249.74.96/27","66.249.75.0/27","66.249.75.128/27","66.249.75.160/27","66.249.75.192/27","66.249.75.224/27","66.249.75.32/27","66.249.75.64/27","66.249.75.96/27","66.249.76.0/27","66.249.76.128/27","66.249.76.160/27","66.249.76.192/27","66.249.76.224/27","66.249.76.32/27","66.249.76.64/27","66.249.76.96/27","66.249.77.0/27","66.249.77.128/27","66.249.77.32/27","66.249.77.64/27","66.249.77.96/27","66.249.79.0/27","66.249.79.128/27","66.249.79.160/27","66.249.79.192/27","66.249.79.224/27","66.249.79.32/27","66.249.79.64/27","66.249.79.96/27"],["69.63.176.0/20","66.220.144.0/20","66.220.144.0/21","69.63.184.0/21","69.63.176.0/21","74.119.76.0/22","69.171.255.0/24","173.252.64.0/18","69.171.224.0/19","69.171.224.0/20","103.4.96.0/22","173.252.64.0/19","31.13.64.0/18","31.13.24.0/21","66.220.152.0/21","69.171.239.0/24","69.171.240.0/20","31.13.64.0/19","31.13.64.0/24","31.13.65.0/24","31.13.67.0/24","31.13.68.0/24","31.13.69.0/24","31.13.70.0/24","31.13.71.0/24","31.13.72.0/24","31.13.73.0/24","31.13.74.0/24","31.13.75.0/24","31.13.76.0/24","31.13.77.0/24","31.13.96.0/19","31.13.66.0/24","173.252.96.0/19","69.63.178.0/24","31.13.78.0/24","31.13.79.0/24","31.13.80.0/24","31.13.82.0/24","31.13.83.0/24","31.13.84.0/24","31.13.85.0/24","31.13.86.0/24","31.13.87.0/24","31.13.88.0/24","31.13.89.0/24","31.13.91.0/24","31.13.92.0/24","31.13.93.0/24","31.13.94.0/24","31.13.95.0/24","31.13.81.0/24","179.60.192.0/22","179.60.192.0/24","179.60.193.0/24","179.60.194.0/24","179.60.195.0/24","185.60.216.0/22","45.64.40.0/22","185.60.216.0/24","185.60.217.0/24","185.60.218.0/24","185.60.219.0/24","129.134.0.0/16","157.240.0.0/16","157.240.8.0/24","157.240.0.0/24","157.240.1.0/24","157.240.2.0/24","157.240.3.0/24","157.240.5.0/24","157.240.6.0/24","157.240.7.0/24","157.240.9.0/24","157.240.10.0/24","157.240.16.0/24","157.240.19.0/24","157.240.11.0/24","157.240.12.0/24","157.240.13.0/24","157.240.14.0/24","157.240.15.0/24","157.240.17.0/24","157.240.18.0/24","157.240.20.0/24","157.240.21.0/24","157.240.22.0/24","157.240.23.0/24","157.240.0.0/17","69.171.250.0/24","204.15.20.0/22","157.240.192.0/24","157.240.198.0/24","102.132.96.0/20","102.132.96.0/24","102.132.97.0/24","157.240.26.0/24","157.240.27.0/24","157.240.28.0/24","157.240.29.0/24","157.240.30.0/24","129.134.28.0/24","129.134.29.0/24","157.240.208.0/24","157.240.193.0/24","157.240.194.0/24","157.240.195.0/24","157.240.197.0/24","157.240.196.0/24","157.240.200.0/24","157.240.201.0/24","157.240.203.0/24","157.240.204.0/24","157.240.205.0/24","157.240.206.0/24","157.240.207.0/24","157.240.209.0/24","157.240.210.0/24","157.240.211.0/24","157.240.212.0/24","157.240.213.0/24","157.240.214.0/24","157.240.215.0/24","157.240.216.0/24","157.240.222.0/24","129.134.30.0/24","129.134.31.0/24","129.134.30.0/23","129.134.25.0/24","129.134.26.0/24","129.134.27.0/24","102.132.99.0/24","102.132.101.0/24","129.134.64.0/24","129.134.65.0/24","129.134.66.0/24","129.134.67.0/24","157.240.219.0/24","157.240.217.0/24","157.240.218.0/24","157.240.199.0/24","129.134.127.0/24","157.240.223.0/24","157.240.192.0/18","157.240.221.0/24","157.240.220.0/24","173.252.88.0/21","129.134.68.0/24","129.134.69.0/24","129.134.70.0/24","157.240.24.0/24","157.240.25.0/24","102.132.100.0/24","157.240.31.0/24","157.240.224.0/24","129.134.71.0/24","157.240.225.0/24","157.240.226.0/24","157.240.227.0/24","129.134.0.0/17","129.134.72.0/24","129.134.73.0/24","129.134.74.0/24","185.89.218.0/24","185.89.219.0/24","185.89.218.0/23","157.240.228.0/24","157.240.229.0/24","129.134.76.0/24","129.134.75.0/24","157.240.239.0/24","157.240.240.0/24","157.240.241.0/24","157.240.231.0/24","157.240.232.0/24","157.240.233.0/24","157.240.234.0/24","157.240.235.0/24","157.240.236.0/24","129.134.77.0/24","129.134.78.0/24","129.134.79.0/24","157.240.237.0/24","157.240.238.0/24","157.240.242.0/24","157.240.243.0/24","129.134.112.0/24","157.240.100.0/24","157.240.98.0/24","157.240.96.0/24","157.240.99.0/24","157.240.101.0/24","129.134.113.0/24","129.134.114.0/24","157.240.97.0/24","129.134.115.0/24","157.240.244.0/24","157.240.245.0/24","157.240.246.0/24","157.240.247.0/24","157.240.248.0/24","157.240.249.0/24","157.240.250.0/24","163.70.128.0/17","163.77.128.0/17","157.240.251.0/24","157.240.252.0/24","157.240.253.0/24","147.75.208.0/20","157.240.254.0/24","185.89.219.0/24","185.89.218.0/24","185.89.218.0/23","185.89.216.0/22","147.75.208.0/20","204.15.20.0/22","69.63.176.0/20","69.63.176.0/21","69.63.184.0/21","66.220.144.0/20","69.63.176.0/20","2620:0:1c00::/40","2a03:2880::/32","2a03:2880:fffe::/48","2a03:2880:ffff::/48","2620:0:1cff::/48","2a03:2880:f001::/48","2a03:2880:f003::/48","2a03:2880:f004::/48","2a03:2880:f005::/48","2a03:2880:f006::/48","2a03:2880:f007::/48","2a03:2880:f008::/48","2a03:2880:f00a::/48","2a03:2880:f00c::/48","2a03:2880:f00d::/48","2a03:2880:f00e::/48","2a03:2880:f00f::/48","2a03:2880:f010::/48","2a03:2880:f011::/48","2a03:2880:f012::/48","2a03:2880:f013::/48","2a03:2880:f016::/48","2a03:2880:f017::/48","2a03:2880:f019::/48","2a03:2880:f01b::/48","2a03:2880:f01c::/48","2a03:2880:f01f::/48","2a03:2880:1000::/36","2a03:2880:2000::/36","2a03:2880:3000::/36","2a03:2880:4000::/36","2a03:2880:5000::/36","2a03:2880:6000::/36","2a03:2880:7000::/36","2a03:2880:f021::/48","2a03:2880:f023::/48","2a03:2880:f024::/48","2a03:2880:f027::/48","2a03:2880:f028::/48","2a03:2880:f029::/48","2a03:2880:f02b::/48","2a03:2880:f02c::/48","2a03:2880:f02d::/48","2a03:2880:f02e::/48","2a03:2880:f02f::/48","2a03:2880:f030::/48","2a03:2880:f031::/48","2a03:2880:f032::/48","2a03:2880:f033::/48","2a03:2880:f034::/48","2a03:2880:f035::/48","2a03:2880:f036::/48","2a03:2880:f037::/48","2a03:2880:f038::/48","2a03:2880:f03a::/48","2a03:2880:f03b::/48","2a03:2880:f03d::/48","2a03:2880:f03e::/48","2a03:2880:f03f::/48","2401:db00::/32","2a03:2880::/36","2a03:2880:f101::/48","2a03:2880:f201::/48","2a03:2880:f103::/48","2a03:2880:f203::/48","2a03:2880:f104::/48","2a03:2880:f204::/48","2a03:2880:f107::/48","2a03:2880:f207::/48","2a03:2880:f108::/48","2a03:2880:f208::/48","2a03:2880:f10a::/48","2a03:2880:f20a::/48","2a03:2880:f10d::/48","2a03:2880:f20d::/48","2a03:2880:f10e::/48","2a03:2880:f20e::/48","2a03:2880:f10f::/48","2a03:2880:f20f::/48","2a03:2880:f110::/48","2a03:2880:f210::/48","2a03:2880:f111::/48","2a03:2880:f211::/48","2a03:2880:f112::/48","2a03:2880:f212::/48","2a03:2880:f116::/48","2a03:2880:f216::/48","2a03:2880:f117::/48","2a03:2880:f217::/48","2a03:2880:f119::/48","2a03:2880:f219::/48","2a03:2880:f11f::/48","2a03:2880:f21f::/48","2a03:2880:f121::/48","2a03:2880:f221::/48","2a03:2880:f123::/48","2a03:2880:f223::/48","2a03:2880:f10c::/48","2a03:2880:f20c::/48","2a03:2880:f105::/48","2a03:2880:f205::/48","2a03:2880:f106::/48","2a03:2880:f206::/48","2a03:2880:f11b::/48","2a03:2880:f21b::/48","2a03:2880:f113::/48","2a03:2880:f213::/48","2a03:2880:f11c::/48","2a03:2880:f21c::/48","2a03:2880:f128::/48","2a03:2880:f228::/48","2a03:2880:f02a::/48","2a03:2880:f12a::/48","2a03:2880:f22a::/48","2a03:2880:f12f::/48","2a03:2880:f22f::/48","2a03:2880:f124::/48","2a03:2880:f127::/48","2a03:2880:f129::/48","2a03:2880:f12b::/48","2a03:2880:f12c::/48","2a03:2880:f12d::/48","2a03:2880:f12e::/48","2a03:2880:f130::/48","2a03:2880:f131::/48","2a03:2880:f132::/48","2a03:2880:f133::/48","2a03:2880:f134::/48","2a03:2880:f135::/48","2a03:2880:f136::/48","2a03:2880:f137::/48","2a03:2880:f138::/48","2a03:2880:f13a::/48","2a03:2880:f13b::/48","2a03:2880:f13d::/48","2a03:2880:f13e::/48","2a03:2880:f13f::/48","2a03:2880:f224::/48","2a03:2880:f227::/48","2a03:2880:f229::/48","2a03:2880:f22b::/48","2a03:2880:f22c::/48","2a03:2880:f22d::/48","2a03:2880:f22e::/48","2a03:2880:f230::/48","2a03:2880:f231::/48","2a03:2880:f232::/48","2a03:2880:f233::/48","2a03:2880:f234::/48","2a03:2880:f235::/48","2a03:2880:f236::/48","2a03:2880:f237::/48","2a03:2880:f238::/48","2a03:2880:f23a::/48","2a03:2880:f23b::/48","2a03:2880:f23d::/48","2a03:2880:f23e::/48","2a03:2880:f23f::/48","2a03:2880:f0ff::/48","2a03:2880:f1ff::/48","2a03:2880:f2ff::/48","2a03:2880:f044::/48","2a03:2880:f144::/48","2a03:2880:f244::/48","2a03:2880:f042::/48","2a03:2880:f043::/48","2a03:2880:f045::/48","2a03:2880:f046::/48","2a03:2880:f047::/48","2a03:2880:f048::/48","2a03:2880:f04a::/48","2a03:2880:f04c::/48","2a03:2880:f04b::/48","2a03:2880:f04d::/48","2a03:2880:f259::/48","2a03:2880:f258::/48","2a03:2880:f257::/48","2a03:2880:f256::/48","2a03:2880:f255::/48","2a03:2880:f254::/48","2a03:2880:f253::/48","2a03:2880:f252::/48","2a03:2880:f250::/48","2a03:2880:f24f::/48","2a03:2880:f24d::/48","2a03:2880:f24e::/48","2a03:2880:f24c::/48","2a03:2880:f24b::/48","2a03:2880:f24a::/48","2a03:2880:f248::/48","2a03:2880:f247::/48","2a03:2880:f246::/48","2a03:2880:f245::/48","2a03:2880:f243::/48","2a03:2880:f242::/48","2a03:2880:f241::/48","2a03:2880:f240::/48","2a03:2880:f159::/48","2a03:2880:f158::/48","2a03:2880:f157::/48","2a03:2880:f156::/48","2a03:2880:f155::/48","2a03:2880:f154::/48","2a03:2880:f153::/48","2a03:2880:f152::/48","2a03:2880:f150::/48","2a03:2880:f14f::/48","2a03:2880:f14e::/48","2a03:2880:f14d::/48","2a03:2880:f14c::/48","2a03:2880:f14b::/48","2a03:2880:f14a::/48","2a03:2880:f148::/48","2a03:2880:f147::/48","2a03:2880:f146::/48","2a03:2880:f145::/48","2a03:2880:f143::/48","2a03:2880:f142::/48","2a03:2880:f141::/48","2a03:2880:f140::/48","2a03:2880:f059::/48","2a03:2880:f058::/48","2a03:2880:f057::/48","2a03:2880:f056::/48","2a03:2880:f055::/48","2a03:2880:f054::/48","2a03:2880:f053::/48","2a03:2880:f052::/48","2a03:2880:f050::/48","2a03:2880:f04f::/48","2a03:2880:f04e::/48","2a03:2880:ff0b::/48","2a03:2880:ff0c::/48","2a03:2880:f040::/48","2a03:2880:f041::/48","2a03:2880:f0fc::/48","2a03:2880:f0fd::/48","2a03:2880:f0fc::/47","2a03:2880:f1fc::/48","2a03:2880:f1fd::/48","2a03:2880:f1fc::/47","2a03:2880:ff08::/48","2a03:2880:ff09::/48","2a03:2880:ff0a::/48","2a03:2880:f05e::/48","2a03:2880:f15e::/48","2a03:2880:f25e::/48","2620:0:1cfa::/48","2a03:2880:f05b::/48","2a03:2880:f05a::/48","2a03:2880:f25a::/48","2a03:2880:f15c::/48","2a03:2880:f000::/36","2a03:2880:f05d::/48","2a03:2880:f25c::/48","2a03:2880:f05c::/48","2a03:2880:f260::/48","2a03:2880:f060::/48","2a03:2880:f160::/48","2a03:2880:f15d::/48","2a03:2880:f25b::/48","2a03:2880:f25d::/48","2a03:2880:f15b::/48","2a03:2880:f15a::/48","2a03:2880:f161::/48","2a03:2880:f061::/48","2a03:2880:f261::/48","2a03:2881::/32","2a03:2881::/48","2a03:2881:1::/48","2a03:2881:2::/48","2a03:2881:3::/48","2a03:2880:f162::/48","2a03:2880:f262::/48","2a03:2881:4000::/48","2a03:2881:4003::/48","2a03:2881:4001::/48","2a03:2881:4002::/48","2a03:2880:f065::/48","2a03:2880:f163::/48","2a03:2880:f066::/48","2a03:2880:f263::/48","2a03:2880:f264::/48","2a03:2880:f164::/48","2a03:2880:f067::/48","2a03:2880:f165::/48","2a03:2880:f265::/48","2a03:2880:f068::/48","2a03:2881:4004::/48","2a03:2880:f06a::/48","2a03:2880:f266::/48","2a03:2880:f166::/48","2a03:2880:f267::/48","2a03:2880:f06b::/48","2a03:2880:f167::/48","2a03:2881:4006::/48","2a03:2881:7::/48","2a03:2881:9::/48","2a03:2881:8::/48","2a03:2881:4::/48","2a03:2881:6::/48","2a03:2881:5::/48","2a03:2881:a::/48","2a03:2880:f268::/48","2a03:2880:f06d::/48","2a03:2880:f168::/48","2a03:2881:b::/48","2a03:2881:c::/48","2a03:2881:4007::/48","2a03:2880:f269::/48","2a03:2880:f169::/48","2a03:2880:f06f::/48","2a03:2880:f26a::/48","2a03:2880:f16a::/48","2a03:2880:f070::/48","2a03:2881:d::/48","2a03:2881:e::/48","2a03:2880:f071::/48","2a03:2880:f16b::/48","2a03:2880:f26b::/48","2a03:2881:4008::/48","2a03:2881:10::/48","2a03:2881:f::/48","2a03:2881:11::/48","2a03:2880:f26c::/48","2a03:2880:f16c::/48","2a03:2880:f073::/48","2a03:2880:f16d::/48","2a03:2880:f074::/48","2a03:2880:f26d::/48","2a03:2881:4009::/48","2a03:2880:f26e::/48","2a03:2880:f16e::/48","2a03:2880:f076::/48","2a03:2880:f16f::/48","2a03:2880:f26f::/48","2a03:2880:f077::/48","2a03:2881:12::/48","2a03:2881:13::/48","2a03:2881:17::/48","2a03:2881:15::/48","2a03:2881:18::/48","2a03:2881:14::/48","2a03:2881:16::/48","2a03:2881:19::/48","2a03:2881:4005::/48","2a03:2880:f078::/48","2a03:2880:f170::/48","2a03:2880:f270::/48","2a03:2881:400a::/48","2a03:2881:400c::/48","2a03:2881:400b::/48","2a03:2881:400d::/48","2a03:2881:1a::/48","2a03:2881:1c::/48","2a03:2881:1b::/48","2a03:2880:f271::/48","2a03:2880:f07d::/48","2a03:2880:f171::/48","2a03:2880:f07e::/48","2a03:2880:f172::/48","2a03:2880:f272::/48","2a03:2880:f080::/48","2a03:2880:f173::/48","2a03:2880:f273::/48","2a03:2880:f081::/48","2a03:2880:f174::/48","2a03:2880:f274::/48","2a03:2880:f175::/48","2a03:2880:f275::/48","2a03:2880:f082::/48","2a03:2880:f176::/48","2a03:2880:f276::/48","2a03:2880:f083::/48","2a03:2880:f277::/48","2a03:2880:f084::/48","2a03:2880:f177::/48","2a03:2881:1e::/48","2a03:2880:f085::/48","2a03:2880:f178::/48","2a03:2880:f278::/48","2a03:2880:f179::/48","2a03:2880:f086::/48","2a03:2880:f279::/48","2a03:2880:f17a::/48","2a03:2880:f08a::/48","2a03:2880:f27a::/48","2a03:2881:48::/45","2a10:f781:10:cee0::/64","2a03:83e0::/32"],["199.16.156.0/22","199.59.148.0/22","192.133.76.0/22"],["157.55.39.0/24","207.46.13.0/24","40.77.167.0/24","13.66.139.0/24","13.66.144.0/24","52.167.144.0/24","13.67.10.16/28","13.69.66.240/28","13.71.172.224/28","139.217.52.0/28","191.233.204.224/28","20.36.108.32/28","20.43.120.16/28","40.79.131.208/28","40.79.186.176/28","52.231.148.0/28","20.79.107.240/28","51.105.67.0/28","20.125.163.80/28","40.77.188.0/22","65.55.210.0/24","199.30.24.0/23","40.77.202.0/24","40.77.139.0/25","20.74.197.0/28"],["54.236.1.1/32","54.236.1.2/31","54.236.1.4/30","54.236.1.8/29","54.236.1.16/28","54.236.1.32/27","54.236.1.64/26","54.236.1.128/25"],["18.203.61.76","18.203.176.135","52.17.197.221"],["204.236.235.245","75.101.186.145"],["18.207.141.103","52.1.113.12"],["180.76.15.0/24","119.63.196.0/24","115.239.212.0/24","119.63.199.0/24","122.81.208.0/22","123.125.71.0/24","180.76.4.0/24","180.76.5.0/24","180.76.6.0/24","185.10.104.0/24","220.181.108.0/24","220.181.51.0/24","111.13.102.0/24","123.125.67.144/29","123.125.67.152/31","61.135.169.0/24","123.125.68.68/30","123.125.68.72/29","123.125.68.80/28","123.125.68.96/30","202.46.48.0/20","220.181.38.0/24","123.125.68.80/30","123.125.68.84/31","123.125.68.0/24"],["20.191.45.212","40.88.21.235","40.76.173.151","40.76.163.7","20.185.79.47","52.142.26.175","20.185.79.15","52.142.24.149","40.76.162.208","40.76.163.23","40.76.162.191","40.76.162.247"],["5.255.250.0/24","37.9.87.0/24","67.195.37.0/24","67.195.50.0/24","67.195.110.0/24","67.195.111.0/24","67.195.112.0/23","67.195.114.0/24","67.195.115.0/24","68.180.224.0/21","72.30.132.0/24","72.30.142.0/24","72.30.161.0/24","72.30.196.0/24","72.30.198.0/24","74.6.254.0/24","74.6.8.0/24","74.6.13.0/24","74.6.17.0/24","74.6.18.0/24","74.6.22.0/24","74.6.27.0/24","74.6.168.0/24","77.88.5.0/24","77.88.47.0/24","93.158.161.0/24","98.137.72.0/24","98.137.206.0/24","98.137.207.0/24","98.139.168.0/24","114.111.95.0/24","124.83.159.0/24","124.83.179.0/24","124.83.223.0/24","141.8.144.0/24","183.79.63.0/24","183.79.92.0/24","203.216.255.0/24","211.14.11.0/24"],["100.43.90.0/24","37.9.115.0/24","37.140.165.0/24","77.88.22.0/25","77.88.29.0/24","77.88.31.0/24","77.88.59.0/24","84.201.146.0/24","84.201.148.0/24","84.201.149.0/24","87.250.243.0/24","87.250.253.0/24","93.158.147.0/24","93.158.148.0/24","93.158.151.0/24","93.158.153.0/32","95.108.128.0/24","95.108.138.0/24","95.108.150.0/23","95.108.158.0/24","95.108.156.0/24","95.108.188.128/25","95.108.234.0/24","95.108.248.0/24","100.43.80.0/24","130.193.62.0/24","141.8.153.0/24","178.154.165.0/24","178.154.166.128/25","178.154.173.29","178.154.200.158","178.154.202.0/24","178.154.205.0/24","178.154.239.0/24","178.154.243.0/24","37.9.84.253","199.21.99.99","178.154.162.29","178.154.203.251","178.154.211.250","178.154.171.0/24","178.154.200.0/24","178.154.244.0/24","178.154.246.0/24","95.108.181.0/24","95.108.246.252","5.45.254.0/24","5.255.253.0/24","37.140.141.0/24","37.140.188.0/24","100.43.81.0/24","100.43.85.0/24","100.43.91.0/24","199.21.99.0/24","2a02:6b8:b000::/32","2a02:6b8:b010::/32","2a02:6b8:b011::/32","2a02:6b8:c0e::/32"],["220.181.125.0/24","123.126.51.64/27","123.126.51.96/28","123.126.68.25","61.135.189.74","61.135.189.75"],["61.135.249.200/29","61.135.249.208/28"],e)}}(window.wpm=window.wpm||{},jQuery)},791:()=>{wp.hooks.addAction("experimental__woocommerce_blocks-cart-add-item","pixel-manager-for-woocommerce",(e=>{wpm.addProductToCart(e.product.id,1)})),wp.hooks.addAction("experimental__woocommerce_blocks-cart-set-item-quantity","pixel-manager-for-woocommerce",(e=>{e.quantity>e.product.quantity&&wpm.addProductToCart(e.product.id,e.quantity-e.product.quantity),e.quantity<e.product.quantity&&wpm.removeProductFromCart(e.product.id,e.product.quantity-e.quantity)})),wp.hooks.addAction("experimental__woocommerce_blocks-cart-remove-item","pixel-manager-for-woocommerce",(e=>{wpm.removeProductFromCart(e.product.id,e.quantity)})),wp.hooks.addAction("experimental__woocommerce_blocks-checkout-submit","pixel-manager-for-woocommerce",(()=>{jQuery(document).trigger("wpmPlaceOrder",{})}))}},t={};function a(r){var o=t[r];if(void 0!==o)return o.exports;var n=t[r]={exports:{}};return e[r].call(n.exports,n,n.exports,a),n.exports}a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(async()=>{a(424),await wpm.jQueryExists(),await wpm.wpmDataLayerExists(),a(534),jQuery(document).on("pmw:ready",(()=>{a(459)})),a(299),a(791),wpm.pmwConsoleMessage(),wpm.excludeDomainFromTracking()||(a(69),a(12),a(787),document.dispatchEvent(new Event("wpmPreLoadPixels")),document.dispatchEvent(new Event("wpmLoad")),await wpm.pageLoaded(),wpm.triggerDomReadyEvent())})()})();
2
  //# sourceMappingURL=wpm-public.p1.min.js.map
js/public/wpm-public.p1.min.js.br CHANGED
Binary file
js/public/wpm-public.p1.min.js.gz CHANGED
Binary file
js/public/wpm-public.p1.min.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wpm-public.p1.min.js","mappings":"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","sources":["webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/cookie_consent.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/event_listeners_on_ready.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/functions_loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/init.js","webpack://Pixel-Manager-for-WooCommerce/webpack/bootstrap","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/main.js"],"sourcesContent":["/**\n * All event listeners\n *\n * https://developers.facebook.com/docs/meta-pixel/reference\n * */\n\n// Load pixel event\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (\n\t\twpmDataLayer?.pixels?.facebook?.pixel_id\n\t\t&& !wpmDataLayer?.pixels?.facebook?.loaded\n\t\t&& !wpm.doesUrlContainPatterns(wpmDataLayer?.pixels?.facebook?.exclusion_patterns)\n\t) {\n\t\tif (wpm.canIFire(\"ads\", \"facebook-ads\")) wpm.loadFacebookPixel()\n\t}\n})\n\n// AddToCart event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideAddToCart\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"AddToCart\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// InitiateCheckout event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideBeginCheckout\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"InitiateCheckout\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// AddToWishlist event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideAddToWishlist\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"AddToWishlist\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// ViewContent event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideViewItem\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"ViewContent\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n\n// view search event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideSearch\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"Search\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// load always event\njQuery(document).on(\"wpmLoadAlways\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\twpm.setFbUserData()\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// view order received page event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideOrderReceivedPage\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"Purchase\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n","/**\n * Add functions for Facebook\n * */\n\n(function (wpm, $, undefined) {\n\n\tlet fbUserData\n\n\twpm.loadFacebookPixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.facebook.loaded = true\n\n\t\t\t// @formatter:off\n\t\t\t!function(f,b,e,v,n,t,s)\n\t\t\t{if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n\t\t\t\tn.callMethod.apply(n,arguments):n.queue.push(arguments)};\n\t\t\t\tif(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n\t\t\t\tn.queue=[];t=b.createElement(e);t.async=!0;\n\t\t\t\tt.src=v;s=b.getElementsByTagName(e)[0];\n\t\t\t\ts.parentNode.insertBefore(t,s)}(window, document,'script',\n\t\t\t\t'https://connect.facebook.net/en_US/fbevents.js');\n\t\t\t// @formatter:on\n\n\t\t\tlet data = {}\n\n\t\t\t// Add user identifiers to data,\n\t\t\t// and only if fbp was set\n\t\t\tif (wpm.isFbpSet() && wpm.isFbAdvancedMatchingEnabled()) {\n\t\t\t\tdata = {...wpm.getUserIdentifiersForFb()}\n\t\t\t}\n\n\t\t\tfbq(\"init\", wpmDataLayer.pixels.facebook.pixel_id, data)\n\t\t\tfbq(\"track\", \"PageView\")\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// https://developers.facebook.com/docs/meta-pixel/advanced/advanced-matching\n\twpm.getUserIdentifiersForFb = () => {\n\n\t\tlet data = {}\n\n\t\t// external ID\n\t\tif (wpmDataLayer?.user?.id?.raw) data.external_id = wpmDataLayer.user.id.raw\n\t\tif (wpmDataLayer?.order?.user_id) data.external_id = wpmDataLayer.order.user_id\n\n\t\t// email\n\t\tif (wpmDataLayer?.user?.email?.facebook) data.em = wpmDataLayer.user.email.facebook\n\t\tif (wpmDataLayer?.order?.billing_email_hashed) data.em = wpmDataLayer.order.billing_email_hashed\n\n\t\t// first name\n\t\tif (wpmDataLayer?.user?.first_name?.facebook) data.fn = wpmDataLayer.user.first_name.facebook\n\t\tif (wpmDataLayer?.order?.billing_first_name) data.fn = wpmDataLayer.order.billing_first_name.toLowerCase()\n\n\t\t// last name\n\t\tif (wpmDataLayer?.user?.last_name?.facebook) data.ln = wpmDataLayer.user.last_name.facebook\n\t\tif (wpmDataLayer?.order?.billing_last_name) data.ln = wpmDataLayer.order.billing_last_name.toLowerCase()\n\n\t\t// phone\n\t\tif (wpmDataLayer?.user?.phone?.facebook) data.ph = wpmDataLayer.user.phone.facebook\n\t\tif (wpmDataLayer?.order?.billing_phone) data.ph = wpmDataLayer.order.billing_phone.replace(\"+\", \"\")\n\n\t\t// city\n\t\tif (wpmDataLayer?.user?.city?.facebook) data.ct = wpmDataLayer.user.city.facebook\n\t\tif (wpmDataLayer?.order?.billing_city) data.ct = wpmDataLayer.order.billing_city.toLowerCase().replace(/ /g, \"\")\n\n\t\t// state\n\t\tif (wpmDataLayer?.user?.state?.facebook) data.st = wpmDataLayer.user.state.facebook\n\t\tif (wpmDataLayer?.order?.billing_state) data.st = wpmDataLayer.order.billing_state.toLowerCase().replace(/[a-zA-Z]{2}-/, \"\")\n\n\t\t// postcode\n\t\tif (wpmDataLayer?.user?.postcode?.facebook) data.zp = wpmDataLayer.user.postcode.facebook\n\t\tif (wpmDataLayer?.order?.billing_postcode) data.zp = wpmDataLayer.order.billing_postcode\n\n\t\t// country\n\t\tif (wpmDataLayer?.user?.country?.facebook) data.country = wpmDataLayer.user.country.facebook\n\t\tif (wpmDataLayer?.order?.billing_country) data.country = wpmDataLayer.order.billing_country.toLowerCase()\n\n\t\treturn data\n\t}\n\n\twpm.getFbRandomEventId = () => (Math.random() + 1).toString(36).substring(2)\n\n\twpm.getFbUserData = () => {\n\n\t\t/**\n\t\t * We need to cache the FB user data for InitiateCheckout\n\t\t * where getting the user data from the browser is too slow\n\t\t * using wpm.getCookie().\n\t\t *\n\t\t * And we need the object merge because the ViewContent hit happens too fast\n\t\t * after adding a variation to the cart because the function to cache\n\t\t * the user data is too slow.\n\t\t *\n\t\t * But we can get the user_data using wpm.getCookie()\n\t\t * because we don't move away from the page and can wait for the browser\n\t\t * to get it.\n\t\t *\n\t\t * Also, the merge ensures that new data will be added to fbUserData if new\n\t\t * data is being added later, like user ID, or fbc.\n\t\t */\n\n\t\tfbUserData = {...fbUserData, ...wpm.getFbUserDataFromBrowser()}\n\n\t\treturn fbUserData\n\t}\n\n\twpm.isFbAdvancedMatchingEnabled = () => {\n\t\tif (wpmDataLayer?.pixels?.facebook?.advanced_matching) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.setFbUserData = () => {\n\t\tfbUserData = wpm.getFbUserDataFromBrowser()\n\t}\n\n\twpm.getFbUserDataFromBrowser = () => {\n\n\t\tlet\n\t\t\tdata = {}\n\n\t\tif (wpm.getCookie(\"_fbp\") && wpm.isValidFbp(wpm.getCookie(\"_fbp\"))) {\n\t\t\tdata.fbp = wpm.getCookie(\"_fbp\")\n\t\t}\n\n\t\tif (wpm.getCookie(\"_fbc\") && wpm.isValidFbc(wpm.getCookie(\"_fbc\"))) {\n\t\t\tdata.fbc = wpm.getCookie(\"_fbc\")\n\t\t}\n\n\t\tif (wpm.isFbAdvancedMatchingEnabled()) {\n\t\t\tif (wpmDataLayer?.user?.id?.raw) data.external_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\tif (navigator.userAgent) data.client_user_agent = navigator.userAgent\n\n\t\treturn data\n\t}\n\n\twpm.isFbpSet = () => {\n\t\treturn !!wpm.getCookie(\"_fbp\")\n\t}\n\n\t// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/\n\twpm.isValidFbp = fbp => {\n\n\t\tlet re = new RegExp(/^fb\\.[0-2]\\.\\d{13}\\.\\d{8,20}$/)\n\n\t\treturn re.test(fbp)\n\t}\n\n\t// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/\n\twpm.isValidFbc = fbc => {\n\n\t\tlet re = new RegExp(/^fb\\.[0-2]\\.\\d{13}\\.[\\da-zA-Z_-]{8,}/)\n\n\t\treturn re.test(fbc)\n\t}\n\n\t// wpm.fbViewContent = (product = null) => {\n\t//\n\t// \ttry {\n\t// \t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\t//\n\t// \t\tlet eventId = wpm.getFbRandomEventId()\n\t//\n\t// \t\tlet data = {}\n\t//\n\t// \t\tif (product) {\n\t// \t\t\tdata.content_type = \"product\"\n\t// \t\t\tdata.content_name = product.name\n\t// \t\t\t// data.content_category = product.category\n\t// \t\t\tdata.content_ids = product.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]\n\t// \t\t\tdata.currency = wpmDataLayer.shop.currency\n\t// \t\t\tdata.value = product.price\n\t// \t\t}\n\t//\n\t// \t\tfbq(\"track\", \"ViewContent\", data, {\n\t// \t\t\teventID: eventId,\n\t// \t\t})\n\t//\n\t// \t\tlet capiData = {\n\t// \t\t\tevent_name : \"ViewContent\",\n\t// \t\t\tevent_id : eventId,\n\t// \t\t\tuser_data : wpm.getFbUserData(),\n\t// \t\t\tevent_source_url: window.location.href,\n\t// \t\t}\n\t//\n\t// \t\tif (product) {\n\t// \t\t\tproduct[\"currency\"] = wpmDataLayer.shop.currency\n\t// \t\t\tcapiData.custom_data = wpm.fbGetProductDataForCapiEvent(product)\n\t// \t\t}\n\t//\n\t// \t\tjQuery(document).trigger(\"wpmFbCapiEvent\", capiData)\n\t// \t} catch (e) {\n\t// \t\tconsole.error(e)\n\t// \t}\n\t// }\n\n\twpm.fbGetProductDataForCapiEvent = product => {\n\t\treturn {\n\t\t\tcontent_type: \"product\",\n\t\t\tcontent_name: product.name,\n\t\t\tcontent_ids : [\n\t\t\t\tproduct.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type],\n\t\t\t],\n\t\t\tvalue : parseFloat(product.quantity * product.price),\n\t\t\tcurrency : product.currency,\n\t\t}\n\t}\n\n\twpm.facebookContentIds = () => {\n\t\tlet prodIds = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))\n\t\t\t} else {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))\n\t\t\t}\n\t\t}\n\n\t\treturn prodIds\n\t}\n\n\twpm.trackCustomFacebookEvent = (eventName, customData = {}) => {\n\t\ttry {\n\t\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\t\tlet eventId = wpm.getFbRandomEventId()\n\n\t\t\tfbq(\"trackCustom\", eventName, customData, {\n\t\t\t\teventID: eventId,\n\t\t\t})\n\n\t\t\tjQuery(document).trigger(\"wpmFbCapiEvent\", {\n\t\t\t\tevent_name : eventName,\n\t\t\t\tevent_id : eventId,\n\t\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\t\tevent_source_url: window.location.href,\n\t\t\t\tcustom_data : customData,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fbGetContentIdsFromCart = () => {\n\n\t\tlet content_ids = []\n\n\t\tfor (const key in wpmDataLayer.cart) {\n\t\t\tcontent_ids.push(wpmDataLayer.products[key].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])\n\t\t}\n\n\t\treturn content_ids\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Facebook loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// require(\"./event_listeners_premium\")\n// #endif\n\n","/**\n * Load Google Ads event listeners\n * */\n\n// view_item_list event\njQuery(document).on(\"wpmViewItemList\", function (event, product) {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\n\t\tif (\n\t\t\twpmDataLayer?.general?.variationsOutput &&\n\t\t\tproduct.isVariable &&\n\t\t\twpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids === false\n\t\t) return\n\n\t\t// try to prevent that WC sends cached hits to Google\n\t\tif (!product) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\titems : [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}],\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_item_list\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add_to_cart event\njQuery(document).on(\"wpmAddToCart\", function (event, product) {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\tvalue : product.quantity * product.price,\n\t\t\titems : [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tquantity : product.quantity,\n\t\t\t\tprice : product.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}],\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"add_to_cart\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view_item event\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t}\n\n\t\tif (product) {\n\t\t\tdata.value = (product.quantity ? product.quantity : 1) * product.price\n\t\t\tdata.items = [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tquantity : (product.quantity ? product.quantity : 1),\n\t\t\t\tprice : product.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}]\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_item\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view search event\njQuery(document).on(\"wpmSearch\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\n\t\tlet products = []\n\n\t\tfor (const [key, product] of Object.entries(wpmDataLayer.products)) {\n\n\t\t\tif (\n\t\t\t\twpmDataLayer?.general?.variationsOutput &&\n\t\t\t\tproduct.isVariable &&\n\t\t\t\twpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids === false\n\t\t\t) return\n\n\t\t\tproducts.push({\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t})\n\t\t}\n\n\t\t// console.log(products);\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\t// value : 1 * product.price,\n\t\t\titems: products,\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_search_results\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view order received page event\n// TODO distinguish with or without cart data active\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\titems : wpm.getGoogleAdsDynamicRemarketingOrderItems(),\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", data)\n\t\t})\n\n\t\t// console.log(wpm.getGoogleAdsDynamicRemarketingOrderItems())\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// user log in event\njQuery(document).on(\"wpmLogin\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"login\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// conversion event\n// new_customer parameter: https://support.google.com/google-ads/answer/9917012\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpm.getGoogleAdsConversionIdentifiersWithLabel())) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data_basic = {}\n\t\tlet data_with_cart = {}\n\n\t\tdata_basic = {\n\t\t\tsend_to : wpm.getGoogleAdsConversionIdentifiersWithLabel(),\n\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\tnew_customer : wpmDataLayer.order.new_customer,\n\t\t}\n\n\t\tif (wpmDataLayer?.order?.clv_order_value_filtered) {\n\t\t\tdata_basic.customer_lifetime_value = wpmDataLayer.order.clv_order_value_filtered\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata_basic.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\tif (wpmDataLayer?.order?.aw_merchant_id) {\n\t\t\tdata_with_cart = {\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\taw_merchant_id : wpmDataLayer.order.aw_merchant_id,\n\t\t\t\taw_feed_country : wpmDataLayer.order.aw_feed_country,\n\t\t\t\taw_feed_language: wpmDataLayer.order.aw_feed_language,\n\t\t\t\titems : wpm.getGoogleAdsRegularOrderItems(),\n\t\t\t}\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"conversion\", {...data_basic, ...data_with_cart})\n\t\t})\n\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Load Google Ads functions\n * */\n\n(function (wpm, $, undefined) {\n\n\n\twpm.getGoogleAdsConversionIdentifiersWithLabel = function () {\n\n\t\tlet conversionIdentifiers = []\n\n\t\tif (wpmDataLayer?.pixels?.google?.ads?.conversionIds) {\n\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\tif (item) {\n\t\t\t\t\tconversionIdentifiers.push(key + \"/\" + item)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn conversionIdentifiers\n\t}\n\n\twpm.getGoogleAdsConversionIdentifiers = function () {\n\n\t\tlet conversionIdentifiers = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\tconversionIdentifiers.push(key)\n\t\t}\n\n\t\treturn conversionIdentifiers\n\t}\n\n\twpm.getGoogleAdsRegularOrderItems = function () {\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity: item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n\twpm.getGoogleAdsDynamicRemarketingOrderItems = function () {\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google Ads\n */\n\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Load Google Universal Analytics (GA3) event listeners\n * */\n\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) return\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.mp_active) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", {\n\t\t\t\tsend_to : [wpmDataLayer.pixels.google.analytics.universal.property_id],\n\t\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\t\taffiliation : wpmDataLayer.order.affiliation,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tvalue : wpmDataLayer.order.value_regular,\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\ttax : wpmDataLayer.order.tax,\n\t\t\t\tshipping : wpmDataLayer.order.shipping,\n\t\t\t\tcoupon : wpmDataLayer.order.coupon,\n\t\t\t\titems : wpm.getGAUAOrderItems(),\n\t\t\t})\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Add functions for Google Analytics Universal\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getGAUAOrderItems = function () {\n\n\t\t// \"id\" : \"34\",\n\t\t// \"name\" : \"Hoodie\",\n\t\t// \"brand\" : \"\",\n\t\t// \"category\" : \"Hoodies\",\n\t\t// \"list_position\": 1,\n\t\t// \"price\" : 45,\n\t\t// \"quantity\" : 1,\n\t\t// \"variant\" : \"Color: blue | Logo: yes\"\n\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity: item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\tname : item.name,\n\t\t\t\tcurrency: wpmDataLayer.order.currency,\n\t\t\t\tcategory: wpmDataLayer.products[item.id].category.join(\"/\"),\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.variant = wpmDataLayer.products[item.variation_id].variant_name\n\t\t\t\torderItem.brand = wpmDataLayer.products[item.variation_id].brand\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.brand = wpmDataLayer.products[item.id].brand\n\t\t\t}\n\n\t\t\torderItem = wpm.ga3AddListNameToProduct(orderItem)\n\n\t\t\torderItems.push(orderItem)\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n\twpm.ga3AddListNameToProduct = function (item_data, productPosition = null) {\n\n\t\t// if (wpm.ga3CanProductListBeSet(item_data.id)) {\n\t\t// \titem_data.listname = wpmDataLayer.shop.list_name\n\t\t//\n\t\t// \tif (productPosition) {\n\t\t// \t\titem_data.list_position = productPosition\n\t\t// \t}\n\t\t// }\n\n\t\titem_data.list_name = wpmDataLayer.shop.list_name\n\n\t\tif (productPosition) {\n\t\t\titem_data.list_position = productPosition\n\t\t}\n\n\t\treturn item_data\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Google Universal Analytics (GA3) loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// require(\"./event_listeners_premium\")\n// #endif\n","/**\n * Load GA4 event listeners\n * */\n\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.mp_active) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", {\n\t\t\t\tsend_to : [wpmDataLayer.pixels.google.analytics.ga4.measurement_id],\n\t\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\t\taffiliation : wpmDataLayer.order.affiliation,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tvalue : wpmDataLayer.order.value_regular,\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\ttax : wpmDataLayer.order.tax,\n\t\t\t\tshipping : wpmDataLayer.order.shipping,\n\t\t\t\tcoupon : wpmDataLayer.order.coupon,\n\t\t\t\titems : wpm.getGA4OrderItems(),\n\t\t\t})\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Load GA4 functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getGA4OrderItems = function () {\n\n\t\t// \"item_id\" : \"34\",\n\t\t// \"item_name\" : \"Hoodie\",\n\t\t// \"quantity\" : 1,\n\t\t// \"item_brand\" : \"\",\n\t\t// \"item_variant\" : \"Color: blue | Logo: yes\",\n\t\t// \"price\" : 45,\n\t\t// \"currency\" : \"CHF\",\n\t\t// \"item_category\": \"Hoodies\"\n\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\titem_name : item.name,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\titem_category: wpmDataLayer.products[item.id].category.join(\"/\"),\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.item_id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.item_variant = wpmDataLayer.products[item.variation_id].variant_name\n\t\t\t\torderItem.item_brand = wpmDataLayer.products[item.variation_id].brand\n\t\t\t} else {\n\n\t\t\t\torderItem.item_id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.item_brand = wpmDataLayer.products[item.id].brand\n\t\t\t}\n\n\t\t\torderItems.push(orderItem)\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * GA4 loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// require(\"./event_listeners_premium\")\n// #endif\n","/**\n * Google Analytics loader\n */\n\nrequire(\"./ga3/loader\")\nrequire(\"./ga4/loader\")\n","/**\n * Load Google base event listeners\n */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (typeof wpmDataLayer?.pixels?.google?.state === \"undefined\") {\n\t\tif (wpm.canGoogleLoad()) {\n\t\t\twpm.loadGoogle()\n\t\t} else {\n\t\t\twpm.logPreventedPixelLoading(\"google\", \"analytics / ads\")\n\t\t}\n\t}\n})\n","/**\n * Load Google base functions\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.googleConfigConditionsMet = function (type) {\n\n\t\t// always returns true if Google Consent Mode is active\n\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\t\t\treturn true\n\t\t} else if (wpm.getConsentValues().mode === \"category\") {\n\t\t\treturn wpm.getConsentValues().categories[type] === true\n\t\t} else if (wpm.getConsentValues().mode === \"pixel\") {\n\t\t\treturn wpm.getConsentValues().pixels.includes(\"google-\" + type)\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.getVisitorConsentStatusAndUpdateGoogleConsentSettings = function (google_consent_settings) {\n\n\t\tif (wpm.getConsentValues().mode === \"category\") {\n\n\t\t\tif (wpm.getConsentValues().categories.analytics) google_consent_settings.analytics_storage = \"granted\"\n\t\t\tif (wpm.getConsentValues().categories.ads) google_consent_settings.ad_storage = \"granted\"\n\t\t} else if ((wpm.getConsentValues().mode === \"pixel\")) {\n\n\t\t\tgoogle_consent_settings.analytics_storage = wpm.getConsentValues().pixels.includes(\"google-analytics\") ? \"granted\" : \"denied\"\n\t\t\tgoogle_consent_settings.ad_storage = wpm.getConsentValues().pixels.includes(\"google-ads\") ? \"granted\" : \"denied\"\n\t\t}\n\n\t\treturn google_consent_settings\n\t}\n\n\twpm.updateGoogleConsentMode = function (analytics = true, ads = true) {\n\n\t\ttry {\n\t\t\tif (\n\t\t\t\t!window.gtag ||\n\t\t\t\t!wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent\n\t\t\t) return\n\n\t\t\tgtag(\"consent\", \"update\", {\n\t\t\t\tanalytics_storage: analytics ? \"granted\" : \"denied\",\n\t\t\t\tad_storage : ads ? \"granted\" : \"denied\",\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAds = function () {\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.ads.state = \"loading\"\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.ads?.enhanced_conversions?.active) {\n\t\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\t\tgtag(\"config\", key, {\"allow_enhanced_conversions\": true})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\t\tgtag(\"config\", key)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.ads?.conversionIds && wpmDataLayer?.pixels?.google?.ads?.phone_conversion_label && wpmDataLayer?.pixels?.google?.ads?.phone_conversion_number) {\n\t\t\t\tgtag(\"config\", Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0] + \"/\" + wpmDataLayer.pixels.google.ads.phone_conversion_label, {\n\t\t\t\t\tphone_conversion_number: wpmDataLayer.pixels.google.ads.phone_conversion_number,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// ! enhanced_conversion_data needs to set on the window object\n\t\t\t// https://support.google.com/google-ads/answer/9888145#zippy=%2Cvalidate-your-implementation-using-chrome-developer-tools\n\t\t\tif (wpmDataLayer?.shop?.page_type && \"order_received_page\" === wpmDataLayer.shop.page_type && wpmDataLayer?.order?.google?.ads?.enhanced_conversion_data) {\n\t\t\t\t// window.enhanced_conversion_data = wpmDataLayer.order.google.ads.enhanced_conversion_data\n\n\t\t\t\tgtag(\"set\", \"user_data\", wpmDataLayer.order.google.ads.enhanced_conversion_data)\n\t\t\t}\n\n\t\t\twpmDataLayer.pixels.google.ads.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAnalyticsUA = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.analytics.universal.state = \"loading\"\n\n\t\t\tgtag(\"config\", wpmDataLayer.pixels.google.analytics.universal.property_id, wpmDataLayer.pixels.google.analytics.universal.parameters)\n\t\t\twpmDataLayer.pixels.google.analytics.universal.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAnalyticsGA4 = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.analytics.ga4.state = \"loading\"\n\n\t\t\tlet parameters = wpmDataLayer.pixels.google.analytics.ga4.parameters\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.debug_mode) {\n\t\t\t\tparameters.debug_mode = true\n\t\t\t}\n\n\t\t\tgtag(\"config\", wpmDataLayer.pixels.google.analytics.ga4.measurement_id, parameters)\n\n\t\t\twpmDataLayer.pixels.google.analytics.ga4.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.isGoogleActive = function () {\n\n\t\tif (\n\t\t\twpmDataLayer?.pixels?.google?.analytics?.universal?.property_id ||\n\t\t\twpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id ||\n\t\t\t!jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)\n\t\t) {\n\t\t\treturn true\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.getGoogleGtagId = function () {\n\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) {\n\t\t\treturn wpmDataLayer.pixels.google.analytics.universal.property_id\n\t\t} else if (wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) {\n\t\t\treturn wpmDataLayer.pixels.google.analytics.ga4.measurement_id\n\t\t} else {\n\t\t\treturn Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]\n\t\t}\n\t}\n\n\n\twpm.loadGoogle = function () {\n\n\t\tif (wpm.isGoogleActive()) {\n\n\t\t\twpmDataLayer.pixels.google.state = \"loading\"\n\n\t\t\twpm.loadScriptAndCacheIt(\"https://www.googletagmanager.com/gtag/js?id=\" + wpm.getGoogleGtagId())\n\t\t\t\t.then(function (script, textStatus) {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Initiate Google dataLayer and gtag\n\t\t\t\t\t\twindow.dataLayer = window.dataLayer || []\n\t\t\t\t\t\twindow.gtag = function gtag() {\n\t\t\t\t\t\t\tdataLayer.push(arguments)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Consent Mode\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\n\t\t\t\t\t\t\tlet google_consent_settings = {\n\t\t\t\t\t\t\t\t\"ad_storage\" : wpmDataLayer.pixels.google.consent_mode.ad_storage,\n\t\t\t\t\t\t\t\t\"analytics_storage\": wpmDataLayer.pixels.google.consent_mode.analytics_storage,\n\t\t\t\t\t\t\t\t\"wait_for_update\" : wpmDataLayer.pixels.google.consent_mode.wait_for_update,\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.region) {\n\t\t\t\t\t\t\t\tgoogle_consent_settings.region = wpmDataLayer.pixels.google.consent_mode.region\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgoogle_consent_settings = wpm.getVisitorConsentStatusAndUpdateGoogleConsentSettings(google_consent_settings)\n\n\t\t\t\t\t\t\tgtag(\"consent\", \"default\", google_consent_settings)\n\t\t\t\t\t\t\tgtag(\"set\", \"ads_data_redaction\", wpmDataLayer.pixels.google.consent_mode.ads_data_redaction)\n\t\t\t\t\t\t\tgtag(\"set\", \"url_passthrough\", wpmDataLayer.pixels.google.consent_mode.url_passthrough)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Linker\n\t\t\t\t\t\t// https://developers.google.com/gtagjs/devguide/linker\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.linker?.settings) {\n\t\t\t\t\t\t\tgtag(\"set\", \"linker\", wpmDataLayer.pixels.google.linker.settings)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgtag(\"js\", new Date())\n\n\t\t\t\t\t\t// Google Ads loader\n\t\t\t\t\t\tif (!jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) { // Only run if the pixel has set up\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"ads\")) { \t\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAds()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"google-ads\", \"ads\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Universal Analytics loader\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) { \t\t// Only run if the pixel has set up\n\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"analytics\")) {\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAnalyticsUA()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"google-universal-analytics\", \"analytics\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// GA4 loader\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) { \t\t\t// Only run if the pixel has set up\n\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"analytics\")) {\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAnalyticsGA4()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"ga4\", \"analytics\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twpmDataLayer.pixels.google.state = \"ready\"\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(e)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n\n\twpm.canGoogleLoad = function () {\n\n\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\t\t\treturn true\n\t\t} else if (\"category\" === wpm.getConsentValues().mode) {\n\t\t\treturn !!(wpm.getConsentValues().categories[\"ads\"] || wpm.getConsentValues().categories[\"analytics\"])\n\t\t} else if (\"pixel\" === wpm.getConsentValues().mode) {\n\t\t\treturn wpm.getConsentValues().pixels.includes(\"google-ads\") || wpm.getConsentValues().pixels.includes(\"google-analytics\")\n\t\t} else {\n\t\t\tconsole.error(\"Couldn't find a valid load condition for Google mode in wpmConsentValues\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.gtagLoaded = function () {\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (typeof wpmDataLayer?.pixels?.google?.state === \"undefined\") reject()\n\n\t\t\tlet startTime = 0\n\t\t\tlet timeout = 5000\n\t\t\tlet frequency = 200;\n\n\t\t\t(function wait() {\n\t\t\t\tif (wpmDataLayer?.pixels?.google?.state === \"ready\") return resolve()\n\t\t\t\tif (startTime >= timeout) return reject()\n\t\t\t\tstartTime += frequency\n\t\t\t\tsetTimeout(wait, frequency)\n\t\t\t})()\n\t\t})\n\t}\n\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google base\n */\n\n// Load base\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// require(\"./event_listeners_premium\")\n// #endif\n","/**\n * Load Google\n */\n\n// Load base\nrequire(\"./base/loader\")\n\n//Load additional Google libraries\nrequire(\"./ads/loader\")\nrequire(\"./analytics/loader\")\nrequire(\"./optimize/loader\")\n\n\n","/**\n * Load Google Optimize event listeners\n */\n\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (wpmDataLayer?.pixels?.google?.optimize?.container_id && !wpmDataLayer?.pixels?.google?.optimize?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"google-optimize\")) wpm.load_google_optimize_pixel()\n\t}\n})\n","/**\n * Load Google Optimize functions\n */\n\n\n(function (wpm, $, undefined) {\n\n\twpm.load_google_optimize_pixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.optimize.loaded = true\n\n\t\t\twpm.loadScriptAndCacheIt(\"https://www.googleoptimize.com/optimize.js?id=\" + wpmDataLayer.pixels.google.optimize.container_id)\n\t\t\t// .then(function (script, textStatus) {\n\t\t\t// \t\tconsole.log('Google Optimize loaded')\n\t\t\t// });\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Load Google Optimize\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Load Hotjar event listeners\n */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (wpmDataLayer?.pixels?.hotjar?.site_id && !wpmDataLayer?.pixels?.hotjar?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"hotjar\") && !wpmDataLayer?.pixels?.hotjar?.loaded) wpm.load_hotjar_pixel()\n\t}\n})\n","/**\n * Load Hotjar functions\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.load_hotjar_pixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.hotjar.loaded = true;\n\n\t\t\t// @formatter:off\n\t\t\t(function(h,o,t,j,a,r){\n\t\t\t\th.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n\t\t\t\th._hjSettings={hjid:wpmDataLayer.pixels.hotjar.site_id,hjsv:6};\n\t\t\t\ta=o.getElementsByTagName('head')[0];\n\t\t\t\tr=o.createElement('script');r.async=1;\n\t\t\t\tr.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\n\t\t\t\ta.appendChild(r);\n\t\t\t})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\n\t\t\t// @formatter:on\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Hotjar loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Consent Mode functions\n */\n\n(function (wpm, $, undefined) {\n\n\t/**\n\t * Handle Cookie Management Platforms\n\t */\n\n\tlet getComplianzCookies = () => {\n\n\t\tlet cmplz_statistics = wpm.getCookie(\"cmplz_statistics\")\n\t\tlet cmplz_marketing = wpm.getCookie(\"cmplz_marketing\")\n\t\tlet cmplz_consent_status = wpm.getCookie(\"cmplz_consent_status\") || wpm.getCookie(\"cmplz_banner-status\")\n\n\t\tif (cmplz_consent_status) {\n\t\t\treturn {\n\t\t\t\tanalytics : cmplz_statistics === \"allow\",\n\t\t\t\tads : cmplz_marketing === \"allow\",\n\t\t\t\tvisitorHasChosen: true,\n\t\t\t}\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tlet getCookieLawInfoCookies = () => {\n\n\t\tlet analyticsCookie = wpm.getCookie(\"cookielawinfo-checkbox-analytics\") || wpm.getCookie(\"cookielawinfo-checkbox-analytiques\")\n\t\tlet adsCookie = wpm.getCookie(\"cookielawinfo-checkbox-advertisement\") || wpm.getCookie(\"cookielawinfo-checkbox-performance\") || wpm.getCookie(\"cookielawinfo-checkbox-publicite\")\n\t\tlet visitorHasChosen = wpm.getCookie(\"CookieLawInfoConsent\")\n\n\t\tif (analyticsCookie || adsCookie) {\n\n\t\t\treturn {\n\t\t\t\tanalytics : analyticsCookie === \"yes\",\n\t\t\t\tads : adsCookie === \"yes\",\n\t\t\t\tvisitorHasChosen: !!visitorHasChosen,\n\t\t\t}\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t/**\n\t * Initialize and set default values\n\t */\n\n\tlet\n\t\twpmConsentValues = {}\n\twpmConsentValues.categories = {}\n\twpmConsentValues.pixels = []\n\twpmConsentValues.mode = \"category\"\n\twpmConsentValues.visitorHasChosen = false\n\n\t// Return current consent values\n\twpm.getConsentValues = () => wpmConsentValues\n\n\twpm.setConsentValueCategories = (analytics = false, ads = false) => {\n\t\twpmConsentValues.categories.analytics = analytics\n\t\twpmConsentValues.categories.ads = ads\n\t}\n\n\t// Update the PMW consent values with values coming from a CMP\n\twpm.updateConsentCookieValues = (analytics = null, ads = null, explicitConsent = false) => {\n\n\t\t// ad_storage\n\t\t// analytics_storage\n\t\t// functionality_storage\n\t\t// personalization_storage\n\t\t// security_storage\n\n\t\tlet cookie\n\n\t\t/**\n\t\t * Setup defaults\n\t\t */\n\n\t\t// consentValues.categories.analytics = true\n\t\t// consentValues.categories.ads = true\n\n\t\twpmConsentValues.categories.analytics = !explicitConsent\n\t\twpmConsentValues.categories.ads = !explicitConsent\n\n\n\t\tif (analytics || ads) {\n\n\t\t\tif (analytics) {\n\t\t\t\twpmConsentValues.categories.analytics = !!analytics\n\t\t\t}\n\n\t\t\tif (ads) {\n\t\t\t\twpmConsentValues.categories.ads = !!ads\n\t\t\t}\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * PMW Cookie Consent\n\t\t *\n\t\t * Must be before every other CMP for the case that one of the included CMPs\n\t\t * decides to implement the PMW cookie consent API. In that case\n\t\t * the PMW consent cookie must take precedence.\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"pmw_cookie_consent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookiebot\n\t\t * https://wordpress.org/plugins/cookiebot/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"CookieConsent\")) {\n\n\t\t\tcookie = decodeURI(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.indexOf(\"statistics:true\") >= 0\n\t\t\twpmConsentValues.categories.ads = cookie.indexOf(\"marketing:true\") >= 0\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Script\n\t\t * https://wordpress.org/plugins/cookie-script-com/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"CookieScriptConsent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\tif (cookie.action === \"reject\") {\n\t\t\t\twpmConsentValues.categories.analytics = false\n\t\t\t\twpmConsentValues.categories.ads = false\n\t\t\t} else if (cookie.categories.length === 2) {\n\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t} else {\n\t\t\t\twpmConsentValues.categories.analytics = cookie.categories.indexOf(\"performance\") >= 0\n\t\t\t\twpmConsentValues.categories.ads = cookie.categories.indexOf(\"targeting\") >= 0\n\t\t\t}\n\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Borlabs Cookie\n\t\t * https://borlabs.io/borlabs-cookie/\n\t\t */\n\t\tif (cookie = wpm.getCookie(\"borlabs-cookie\")) {\n\n\t\t\tcookie = decodeURI(cookie)\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = !!cookie?.consents?.statistics\n\t\t\twpmConsentValues.categories.ads = !!cookie?.consents?.marketing\n\t\t\twpmConsentValues.visitorHasChosen = true\n\t\t\twpmConsentValues.pixels = [...cookie?.consents?.statistics || [], ...cookie?.consents?.marketing || []]\n\t\t\twpmConsentValues.mode = \"pixel\"\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Complianz Cookie\n\t\t * https://wordpress.org/plugins/complianz-gdpr/\n\t\t */\n\n\t\tif (cookie = getComplianzCookies()) {\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Compliance (free version)\n\t\t * https://wordpress.org/plugins/cookie-notice/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"cookie_notice_accepted\")) {\n\n\t\t\twpmConsentValues.categories.analytics = true\n\t\t\twpmConsentValues.categories.ads = true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Compliance (pro version)\n\t\t * https://wordpress.org/plugins/cookie-notice/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"hu-consent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = !!cookie.categories[\"3\"]\n\t\t\twpmConsentValues.categories.ads = !!cookie.categories[\"4\"]\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * CookieYes, GDPR Cookie Consent (Cookie Law Info)\n\t\t * https://wordpress.org/plugins/cookie-law-info/\n\t\t */\n\n\t\tif (cookie = getCookieLawInfoCookies()) {\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen === true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * GDPR Cookie Compliance Plugin by Moove Agency\n\t\t * https://wordpress.org/plugins/gdpr-cookie-compliance/\n\t\t *\n\t\t * TODO write documentation on how to set up the plugin in order for this to work properly\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"moove_gdpr_popup\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.thirdparty === \"1\"\n\t\t\twpmConsentValues.categories.ads = cookie.advanced === \"1\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * WP AutoTerms\n\t\t * https://wordpress.org/plugins/auto-terms-of-service-and-privacy-policy/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"wpautoterms-cookies-notice\")) {\n\n\t\t\tif (cookie !== \"1\") return\n\n\t\t\twpmConsentValues.categories.analytics = true\n\t\t\twpmConsentValues.categories.ads = true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Usercentrics\n\t\t *\n\t\t * https://usercentrics.com/\n\t\t * https://docs.usercentrics.com/#/cmp-v2-ui-api\n\t\t * https://docs.usercentrics.com/#/cmp-v2-ui-api?id=getservicesbaseinfo\n\t\t */\n\n\t\tif (window.localStorage && window.localStorage.getItem(\"uc_settings\")) {\n\n\t\t\tconsole.log(\"Usercentrics settings detected\")\n\n\t\t\tif (typeof UC_UI === \"undefined\") {\n\n\t\t\t\t// register event to block unblock after UC_UI library is loaded\n\t\t\t\twindow.addEventListener(\"UC_UI_INITIALIZED\", function (event) {\n\t\t\t\t\twpm.ucUiProcessConsent()\n\t\t\t\t})\n\n\t\t\t\t// Don't continue because in here the UC_UI library is not loaded yet\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (UC_UI.areAllConsentsAccepted()) {\n\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\twpm.ucUiProcessConsent()\n\t\t}\n\n\t\t/**\n\t\t * OneTrust\n\t\t *\n\t\t * https://www.onetrust.com/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"OptanonConsent\")) {\n\n\t\t\t// console.log(\"OneTrust settings detected\")\n\n\t\t\tlet params = new URLSearchParams(cookie)\n\t\t\tlet groups = params.get(\"groups\").split(\",\")\n\n\t\t\t// Groups is an array like this ['1:1', '2:0', '3:1', '4:1']. Make it an object with key value pairs\n\t\t\tlet groupsObject = {}\n\t\t\tgroups.forEach((group) => {\n\n\t\t\t\tlet groupArray = group.split(\":\")\n\t\t\t\tgroupsObject[groupArray[0]] = groupArray[1]\n\t\t\t})\n\n\t\t\t// group mapping\n\t\t\t// 1 = necessary\n\t\t\t// 2 = analytics\n\t\t\t// 3 = functional\n\t\t\t// 4 = ads\n\n\t\t\twpmConsentValues.categories.analytics = groubsObject[\"2\"] === \"1\"\n\t\t\twpmConsentValues.categories.ads = groupsObject[\"4\"] === \"1\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Only run after having made sure that the UC_UI library is loaded\n\twpm.ucUiProcessConsent = function () {\n\n\t\tif (typeof UC_UI === \"undefined\") return\n\n\t\tif (UC_UI.areAllConsentsAccepted()) {\n\t\t\tpmw.consentAcceptAll()\n\t\t}\n\n\t\tconst ucStatisticsSlug = UC_UI.getSettingsLabels().categories.filter(data => data.label === \"Statistics\")[0].slug\n\n\t\tpmw.consentAdjustSelectively(\n\t\t\t{\n\t\t\t\tanalytics: !UC_UI.getServicesBaseInfo().filter(data => data.categorySlug === ucStatisticsSlug && data.consent.status === false).length > 0,\n\t\t\t\tads : !UC_UI.getServicesBaseInfo().filter(data => data.categorySlug === \"marketing\" && data.consent.status === false).length > 0,\n\t\t\t},\n\t\t)\n\t}\n\n\twpm.updateConsentCookieValues()\n\n\twpm.setConsentDefaultValuesToExplicit = () => {\n\t\twpmConsentValues.categories = {\n\t\t\tanalytics: false,\n\t\t\tads : false,\n\t\t}\n\t}\n\n\twpm.canIFire = (category, pixelName) => {\n\n\t\tlet canIFireMode\n\n\t\tif (\"category\" === wpmConsentValues.mode) {\n\t\t\tcanIFireMode = !!wpmConsentValues.categories[category]\n\t\t} else if (\"pixel\" === wpmConsentValues.mode) {\n\t\t\tcanIFireMode = wpmConsentValues.pixels.includes(pixelName)\n\n\t\t\t// If a user sets \"bing-ads\" in Borlabs Cookie instead of\n\t\t\t// \"microsoft-ads\" in the Borlabs settings, we need to check\n\t\t\t// for that too.\n\t\t\tif (false === canIFireMode && \"microsoft-ads\" === pixelName) {\n\t\t\t\tcanIFireMode = wpmConsentValues.pixels.includes(\"bing-ads\")\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error(\"Couldn't find a valid consent mode in wpmConsentValues\")\n\t\t\tcanIFireMode = false\n\t\t}\n\n\t\tif (canIFireMode) {\n\t\t\treturn true\n\t\t} else {\n\t\t\tif (true || wpm.urlHasParameter(\"debugConsentMode\")) {\n\t\t\t\twpm.logPreventedPixelLoading(pixelName, category)\n\t\t\t}\n\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.logPreventedPixelLoading = (pixelName, category) => {\n\n\t\tif (wpmDataLayer?.shop?.cookie_consent_mgmt?.explicit_consent) {\n\t\t\tconsole.log(\"Pixel Manager for WooCommerce: The \\\"\" + pixelName + \" (category: \" + category + \")\\\" pixel has not fired because you have not given consent for it yet. (PMW is in explicit consent mode.)\")\n\t\t} else {\n\t\t\tconsole.log(\"Pixel Manager for WooCommerce: The \\\"\" + pixelName + \" (category: \" + category + \")\\\" pixel has not fired because you have removed consent for this pixel. (PMW is in implicit consent mode.)\")\n\t\t}\n\t}\n\n\t/**\n\t * Runs through each script in <head> and blocks / unblocks it according to the plugin settings\n\t * and user consent.\n\t */\n\n\t// https://stackoverflow.com/q/65453565/4688612\n\twpm.scriptTagObserver = new MutationObserver((mutations) => {\n\t\tmutations.forEach(({addedNodes}) => {\n\t\t\t[...addedNodes]\n\t\t\t\t.forEach(node => {\n\n\t\t\t\t\tif ($(node).data(\"wpm-cookie-category\")) {\n\n\t\t\t\t\t\t// If the pixel category has been approved > unblock\n\t\t\t\t\t\t// If the pixel belongs to more than one category, then unblock if one of the categories has been approved\n\t\t\t\t\t\t// If no category has been approved, but the Google Consent Mode is active, then only unblock the Google scripts\n\n\t\t\t\t\t\tif (wpm.shouldScriptBeActive(node)) {\n\t\t\t\t\t\t\twpm.unblockScript(node)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twpm.blockScript(node)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t})\n\n\twpm.scriptTagObserver.observe(document.head, {childList: true, subtree: true})\n\t// jQuery(document).on(\"DOMContentLoaded\", () => wpm.scriptTagObserver.disconnect())\n\tdocument.addEventListener(\"DOMContentLoaded\", () => wpm.scriptTagObserver.disconnect())\n\n\twpm.shouldScriptBeActive = node => {\n\n\t\tif (\n\t\t\twpmDataLayer.shop.cookie_consent_mgmt.explicit_consent ||\n\t\t\twpmConsentValues.visitorHasChosen\n\t\t) {\n\n\t\t\tif (wpmConsentValues.mode === \"category\" && $(node).data(\"wpm-cookie-category\").split(\",\").some(element => wpmConsentValues.categories[element])) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmConsentValues.mode === \"pixel\" && wpmConsentValues.pixels.includes($(node).data(\"wpm-pixel-name\"))) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmConsentValues.mode === \"pixel\" && $(node).data(\"wpm-pixel-name\") === \"google\" && [\"google-analytics\", \"google-ads\"].some(element => wpmConsentValues.pixels.includes(element))) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmDataLayer?.pixels?.google?.consent_mode?.active && $(node).data(\"wpm-pixel-name\") === \"google\") {\n\t\t\t\treturn true\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\treturn true\n\t\t}\n\t}\n\n\n\twpm.unblockScript = (scriptNode, removeAttach = false) => {\n\n\t\tif (removeAttach) $(scriptNode).remove()\n\n\t\tlet wpmSrc = $(scriptNode).data(\"wpm-src\")\n\t\tif (wpmSrc) $(scriptNode).attr(\"src\", wpmSrc)\n\n\t\tscriptNode.type = \"text/javascript\"\n\n\t\tif (removeAttach) $(scriptNode).appendTo(\"head\")\n\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.blockScript = (scriptNode, removeAttach = false) => {\n\n\t\tif (removeAttach) $(scriptNode).remove()\n\n\t\tif ($(scriptNode).attr(\"src\")) $(scriptNode).removeAttr(\"src\")\n\t\tscriptNode.type = \"blocked/javascript\"\n\n\t\tif (removeAttach) $(scriptNode).appendTo(\"head\")\n\t}\n\n\twpm.unblockAllScripts = (analytics = true, ads = true) => {\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\twpm.setConsentValueCategories(analytics, ads)\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.unblockSelectedPixels = () => {\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.explicitConsentStateAlreadySet = () => {\n\n\t\tif (wpmConsentValues.explicitConsentStateAlreadySet) {\n\t\t\treturn true\n\t\t} else {\n\t\t\twpmConsentValues.explicitConsentStateAlreadySet = true\n\t\t}\n\t}\n\n\n\t/**\n\t * Block or unblock scripts for each CMP immediately after cookie consent has been updated\n\t * by the visitor.\n\t */\n\n\t/**\n\t * Borlabs Cookie\n\t * If visitor accepts cookies in Borlabs Cookie unblock the scripts\n\t */\n\tdocument.addEventListener(\"borlabs-cookie-consent-saved\", () => {\n\t\twpm.updateConsentCookieValues()\n\n\t\tif (wpmConsentValues.mode === \"pixel\") {\n\n\t\t\twpm.unblockSelectedPixels()\n\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.pixels.includes(\"google-analytics\"), wpmConsentValues.pixels.includes(\"google-ads\"))\n\t\t} else {\n\n\t\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t}\n\t})\n\n\t/**\n\t * Cookiebot\n\t * \tIf visitor accepts cookies in Cookiebot unblock the scripts\n\t * \thttps://www.cookiebot.com/en/developer/\n\t */\n\tdocument.addEventListener(\"CookiebotOnAccept\", () => {\n\t\tif (Cookiebot.consent.statistics) wpmConsentValues.categories.analytics = true\n\t\tif (Cookiebot.consent.marketing) wpmConsentValues.categories.ads = true\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\n\t}, false)\n\n\t/**\n\t * Cookie Script\n\t * If visitor accepts cookies in Cookie Script unblock the scripts\n\t * https://support.cookie-script.com/article/20-custom-events\n\t */\n\t// jQuery(document).on(\"CookieScriptAccept\", e => {\n\tdocument.addEventListener(\"CookieScriptAccept\", e => {\n\n\t\tif (e.detail.categories.includes(\"performance\")) wpmConsentValues.categories.analytics = true\n\t\tif (e.detail.categories.includes(\"targeting\")) wpmConsentValues.categories.ads = true\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\t/**\n\t * Cookie Script\n\t * If visitor accepts cookies in Cookie Script unblock the scripts\n\t * https://support.cookie-script.com/\n\t */\n\t// jQuery(document).on(\"CookieScriptAcceptAll\", () => {\n\tdocument.addEventListener(\"CookieScriptAcceptAll\", () => {\n\n\t\twpm.setConsentValueCategories(true, true)\n\t\twpm.unblockAllScripts(true, true)\n\t\twpm.updateGoogleConsentMode(true, true)\n\t})\n\n\t/**\n\t * Complianz Cookie\n\t *\n\t * If visitor accepts cookies in Complianz unblock the scripts\n\t */\n\n\twpm.cmplzStatusChange = (cmplzConsentData) => {\n\n\t\tif (cmplzConsentData.detail.categories.includes(\"statistics\")) wpm.updateConsentCookieValues(true, null)\n\t\tif (cmplzConsentData.detail.categories.includes(\"marketing\")) wpm.updateConsentCookieValues(null, true)\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t}\n\n\t// jQuery(document).on(\"cmplzStatusChange\", wpm.cmplzStatusChange)\n\tdocument.addEventListener(\"cmplzStatusChange\", wpm.cmplzStatusChange)\n\t// jQuery(document).on(\"cmplz_status_change\", wpm.cmplzStatusChange)\n\tdocument.addEventListener(\"cmplz_status_change\", wpm.cmplzStatusChange)\n\n\t// Cookie Compliance by hu-manity.co (free and pro)\n\t// If visitor accepts cookies in Cookie Notice by hu-manity.co unblock the scripts (free version)\n\t// https://wordpress.org/support/topic/events-on-consent-change/#post-15202792\n\t// jQuery(document).on(\"setCookieNotice\", () => {\n\tdocument.addEventListener(\"setCookieNotice\", () => {\n\t\twpm.updateConsentCookieValues()\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\t/**\n\t * Cookie Compliance by hu-manity.co (free and pro)\n\t * If visitor accepts cookies in Cookie Notice by hu-manity.co unblock the scripts (pro version)\n\t * https://wordpress.org/support/topic/events-on-consent-change/#post-15202792\n\t * Because Cookie Notice has no documented API or event that is being triggered on consent save or update\n\t * we have to solve this by using a mutation observer.\n\t *\n\t * @type {MutationObserver}\n\t */\n\n\twpm.huObserver = new MutationObserver(mutations => {\n\t\tmutations.forEach(({addedNodes}) => {\n\t\t\t[...addedNodes]\n\t\t\t\t.forEach(node => {\n\n\t\t\t\t\tif (node.id === \"hu\") {\n\n\t\t\t\t\t\t// jQuery(\".hu-cookies-save\").on(\"click\", function () {\n\t\t\t\t\t\t// jQuery(\".hu-cookies-save\") in pure JavaScript\n\t\t\t\t\t\tdocument.querySelector(\".hu-cookies-save\").addEventListener(\"click\", () => {\n\t\t\t\t\t\t\twpm.updateConsentCookieValues()\n\t\t\t\t\t\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\t\t\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t})\n\n\tif (window.hu) {\n\t\twpm.huObserver.observe(document.documentElement || document.body, {childList: true, subtree: true})\n\t}\n\n\t/**\n\t * Usercentrics Event Listeners\n\t *\n\t * https://docs.usercentrics.com/#/v2-events?id=usage-as-window-event\n\t */\n\n\twindow.addEventListener(\"ucEvent\", function (e) {\n\t\tif (e.detail && e.detail.event == \"consent_status\") {\n\t\t\t// check for consent status of service \"Google Ads Remarketing\"\n\t\t\tif (e.detail[\"Google Ads Remarketing\"] === true) {\n\t\t\t\tconsole.log(\"Google Ads Remarketing has consent\")\n\t\t\t} else {\n\t\t\t\tconsole.log(\"Google Ads Remarketing has no consent\")\n\t\t\t}\n\t\t}\n\t})\n\n\t// https://docs.usercentrics.com/#/v2-events?id=uc_ui_cmp_event\n\twindow.addEventListener(\"UC_UI_CMP_EVENT\", function (event) {\n\n\t\tif (event.detail.type === \"ACCEPT_ALL\") {\n\t\t\t// console.log('accept all');\n\n\t\t\tpmw.consentAcceptAll()\n\t\t}\n\n\t\tif (event.detail.type === \"DENY_ALL\") {\n\t\t\tpmw.consentRevokeAll()\n\t\t}\n\n\t\tif (event.detail.type === \"SAVE\") {\n\t\t\tconsole.log(\"event.detail\", event.detail)\n\t\t}\n\t})\n\n\n\t/**\n\t * OneTrust Event Listeners\n\t *\n\t * CookiePro by OneTrust doesn't emit any events when the user accepts or declines cookies.\n\t */\n\n\t// There are two accept all buttons. One in the first banner and one in the settings window. Both have different identifiers.\n\tjQuery(\"#accept-recommended-btn-handler, #onetrust-accept-btn-handler\").on(\"click\", function () {\n\n\t\t// If OneTrust is not loaded, return\n\t\tif (typeof window.OneTrust === \"undefined\") return\n\n\t\tpmw.consentAcceptAll()\n\t})\n\n\t// There are two revoke all buttons. One in the first banner and one in the settings window. Both have different identifiers.\n\tjQuery(\".ot-pc-refuse-all-handler, #onetrust-reject-all-handler\").on(\"click\", function () {\n\t\tpmw.consentRevokeAll()\n\t})\n\n\t// There is one save button that saves mixed consent. It is in the settings window. We reload the page after saving to reflect the changes.\n\tjQuery(\".save-preference-btn-handler.onetrust-close-btn-handler\").on(\"click\", function () {\n\t\tlocation.reload()\n\n\t\t// OneTrust.OnConsentChanged(function (e) {\n\t\t// \tpmw.consentAdjustSelectively({\n\t\t// \t\tanalytics: e.detail.includes(\"2\"),\n\t\t// \t\tads : e.detail.includes(\"4\"),\n\t\t// \t})\n\t\t// })\n\t})\n\n\n}(window.wpm = window.wpm || {}, jQuery));\n\n\n(function (pmw, $, undefined) {\n\n\t/**\n\t * Pixel Manager Cookie Consent API\n\t */\n\n\t// Accept consent for all cookies\n\tpmw.consentAcceptAll = (settings = {}) => {\n\n\t\tsettings.duration = settings.duration || 365\n\n\t\tpmw.consentSetCookie(true, true, settings.duration)\n\t\twpm.unblockAllScripts(true, true)\n\t\twpm.updateGoogleConsentMode(true, true)\n\t}\n\n\t// Accept consent selectively\n\tpmw.consentAdjustSelectively = (settings) => {\n\n\t\t// If settings.analytics is set, keep it, otherwise set it to wpm.getConsentValues().categories.analytics\n\t\tsettings.analytics = settings.analytics !== undefined ? settings.analytics : wpm.getConsentValues().categories.analytics\n\t\tsettings.ads = settings.ads !== undefined ? settings.ads : wpm.getConsentValues().categories.ads\n\t\tsettings.duration = settings.duration || 365\n\n\t\tpmw.consentSetCookie(settings.analytics, settings.ads, settings.duration)\n\t\twpm.unblockAllScripts(settings.analytics, settings.ads)\n\t\twpm.updateGoogleConsentMode(settings.analytics, settings.ads)\n\t}\n\n\t// Remove consent for all cookies\n\tpmw.consentRevokeAll = (settings = {}) => {\n\n\t\tsettings.duration = settings.duration || 365\n\n\t\twpm.setConsentValueCategories(false, false)\n\t\tpmw.consentSetCookie(false, false, settings.duration)\n\t\twpm.updateGoogleConsentMode(false, false)\n\t}\n\n\t// Set a cookie called pmw_cookie_consent with the value of pmw_cookie_consent\n\t// and set the default expiration date to 1 year from now\n\tpmw.consentSetCookie = (analytics, ads, duration = 365) => {\n\t\twpm.setCookie(\"pmw_cookie_consent\", JSON.stringify({analytics, ads}), duration)\n\t}\n\n\t// Trigger an event once the PMW consent management has been loaded\n\tjQuery(document).trigger(\"pmw_cookie_consent_management_loaded\")\n\n}(window.pmw = window.pmw || {}, jQuery))\n","/**\n * remove_from_cart event\n *\n * Cannot be attached directly because the mini cart doesn't necessarily contain the remove button on page load.\n */\njQuery(document).on(\"click\", \".remove_from_cart_button, .remove\", (event) => {\n\n\t// console.log(\"remove_from_cart event\" + new Date().getTime())\n\n\ttry {\n\n\t\tlet url = new URL(jQuery(event.currentTarget).attr(\"href\"))\n\t\tlet productId = wpm.getProductIdByCartItemKeyUrl(url)\n\n\t\twpm.removeProductFromCart(productId)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * begin_checkout event\n *\n * Cannot be attached directly because the mini cart doesn't necessarily contain the remove button on page load.\n */\nlet checkoutButtonClasses = [\n\t// \".checkout\",\n\t\".checkout-button\",\n\t\".cart-checkout-button\",\n\t\".button.checkout\",\n\t\".xoo-wsc-ft-btn-checkout\", // https://xootix.com/side-cart-for-woocommerce/\n\t\".elementor-button--checkout\",\n].join(\",\")\n\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"click init_checkout\", checkoutButtonClasses, () => {\n\n\t// console.log(\"init_checkout at: \" + new Date().getTime())\n\n\tjQuery(document).trigger(\"wpmBeginCheckout\")\n})\n\njQuery(document).on(\"updated_cart_totals\", () => {\n\tjQuery(document).trigger(\"wpmViewCart\")\n})\n\n/**\n * Set up PWM events\n */\n\n// track checkout option event: purchase click\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"wpmLoad\", (event) => {\n\tjQuery(document).on(\"payment_method_selected\", () => {\n\n\t\tif (false === wpm.paymentMethodSelected) {\n\t\t\twpm.fireCheckoutProgress(3)\n\t\t}\n\n\t\twpm.fireCheckoutOption(3, jQuery(\"input[name='payment_method']:checked\").val())\n\t\twpm.paymentMethodSelected = true\n\t})\n})\n\n// populate the wpmDataLayer with the cart items\njQuery(document).on(\"wpmLoad\", () => {\n\n\ttry {\n\t\t// When a new session is initiated there are no items in the cart,\n\t\t// so we can save the call to get the cart items\n\t\tif (wpm.doesWooCommerceCartExist()) wpm.getCartItems()\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// get all add-to-cart= products from backend\njQuery(document).on(\"wpmLoad\", () => {\n\n\twpmDataLayer.products = wpmDataLayer.products || {}\n\n\t// scan page for add-to-cart= links\n\tlet productIds = wpm.getAddToCartLinkProductIds()\n\n\twpm.getProductsFromBackend(productIds)\n})\n\n/**\n * Save the referrer into a cookie\n */\n\njQuery(document).on(\"wpmLoad\", () => {\n\n\t// can't use session storage as we can't read it from the server\n\tif (!wpm.getCookie(\"wpmReferrer\")) {\n\n\t\tif (document.referrer) {\n\t\t\tlet referrerUrl = new URL(document.referrer)\n\t\t\tlet referrerHostname = referrerUrl.hostname\n\n\t\t\tif (referrerHostname !== window.location.host) {\n\t\t\t\twpm.setCookie(\"wpmReferrer\", referrerHostname)\n\t\t\t}\n\t\t}\n\t}\n})\n\n\n/**\n * Create our own load event in order to better handle script flow execution when JS \"optimizers\" shuffle the code.\n */\njQuery(document).on(\"wpmLoad\", () => {\n\t// document.addEventListener(\"wpmLoad\", function () {\n\ttry {\n\t\tif (typeof wpmDataLayer != \"undefined\" && !wpmDataLayer?.wpmLoadFired) {\n\n\t\t\tjQuery(document).trigger(\"wpmLoadAlways\")\n\n\t\t\tif (wpmDataLayer?.shop) {\n\t\t\t\tif (\n\t\t\t\t\t\"product\" === wpmDataLayer.shop.page_type &&\n\t\t\t\t\t\"variable\" !== wpmDataLayer.shop.product_type &&\n\t\t\t\t\twpm.getMainProductIdFromProductPage()\n\t\t\t\t) {\n\t\t\t\t\tlet product = wpm.getProductDataForViewItemEvent(wpm.getMainProductIdFromProductPage())\n\t\t\t\t\tjQuery(document).trigger(\"wpmViewItem\", product)\n\t\t\t\t} else if (\"product_category\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmCategory\")\n\t\t\t\t} else if (\"search\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmSearch\")\n\t\t\t\t} else if (\"cart\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmViewCart\")\n\t\t\t\t} else if (\"order_received_page\" === wpmDataLayer.shop.page_type && wpmDataLayer.order) {\n\t\t\t\t\tif (!wpm.isOrderIdStored(wpmDataLayer.order.id)) {\n\t\t\t\t\t\tjQuery(document).trigger(\"wpmOrderReceivedPage\")\n\t\t\t\t\t\twpm.writeOrderIdToStorage(wpmDataLayer.order.id, wpmDataLayer.order.key)\n\t\t\t\t\t\tif (typeof wpm.acrRemoveCookie === \"function\") wpm.acrRemoveCookie()\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(document).trigger(\"wpmEverywhereElse\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tjQuery(document).trigger(\"wpmEverywhereElse\")\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.user?.id && !wpm.hasLoginEventFired()) {\n\t\t\t\tjQuery(document).trigger(\"wpmLogin\")\n\t\t\t\twpm.setLoginEventFired()\n\t\t\t}\n\n\t\t\t// /**\n\t\t\t// * Load mini cart fragments into a wpm session storage key,\n\t\t\t// * after the document load event.\n\t\t\t// */\n\t\t\t// jQuery(document).ajaxSend(function (event, jqxhr, settings) {\n\t\t\t// \t// console.log('settings.url: ' + settings.url);\n\t\t\t//\n\t\t\t// \tif (settings.url.includes(\"get_refreshed_fragments\") && sessionStorage) {\n\t\t\t// \t\tif (!sessionStorage.getItem(\"wpmMiniCartActive\")) {\n\t\t\t// \t\t\tsessionStorage.setItem(\"wpmMiniCartActive\", JSON.stringify(true))\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// })\n\n\t\t\twpmDataLayer.wpmLoadFired = true\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\njQuery(document).on(\"wpmLoad\", async () => {\n\n\tif (\n\t\twindow.sessionStorage &&\n\t\twindow.sessionStorage.getItem(\"_pmw_endpoint_available\") &&\n\t\t!JSON.parse(window.sessionStorage.getItem(\"_pmw_endpoint_available\"))\n\t) {\n\t\tconsole.error(\"Pixel Manager for WooCommerce: REST endpoint is not available. Using admin-ajax.php instead.\")\n\t}\n})\n\n\n/**\n * Load all pixels\n */\njQuery(document).on(\"wpmPreLoadPixels\", () => {\n\n\tif (wpmDataLayer?.shop?.cookie_consent_mgmt?.explicit_consent && !wpm.explicitConsentStateAlreadySet()) {\n\t\twpm.updateConsentCookieValues(null, null, true)\n\t}\n\n\tjQuery(document).trigger(\"wpmLoadPixels\", {})\n})\n\n\n/**\n * All ecommerce events\n */\n\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"addToCart\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\t// If Facebook pixel is loaded, add Facebook server to server event data to the payload\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"AddToCart\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : wpm.fbGetProductDataForCapiEvent(product),\n\t\t}\n\t}\n\n\t// TikTok\n\t// https://ads.tiktok.com/gateway/docs/index?identify_key=c0138ffadd90a955c1f0670a56fe348d1d40680b3c89461e09f78ed26785164b&language=ENGLISH&doc_id=1739585702922241#item-link-Adding%20parameters%20to%20event%20code\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"AddToCart\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideAddToCart\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmBeginCheckout\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"beginCheckout\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"InitiateCheckout\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {},\n\t\t}\n\n\t\tif (wpmDataLayer?.cart && !jQuery.isEmptyObject(wpmDataLayer.cart)) {\n\t\t\tpayload.facebook.custom_data = {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tcontent_ids : wpm.fbGetContentIdsFromCart(),\n\t\t\t\tvalue : wpm.getCartValue(),\n\t\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\t}\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"InitiateCheckout\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideBeginCheckout\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmAddToWishlist\", (event, product) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"addToWishlist\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"AddToWishlist\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : wpm.fbGetProductDataForCapiEvent(product),\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"AddToWishlist\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideAddToWishlist\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"viewItem\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"ViewContent\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {},\n\t\t}\n\n\t\tif (product) {\n\t\t\tpayload.facebook.custom_data = wpm.fbGetProductDataForCapiEvent(product)\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"ViewContent\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\n\t\tif (product) {\n\t\t\tpayload.tiktok.properties = {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideViewItem\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmSearch\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"search\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"Search\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {\n\t\t\t\tsearch_string: wpm.getSearchTermFromUrl(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"Search\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tquery: wpm.getSearchTermFromUrl(),\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideSearch\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmPlaceOrder\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"placeOrder\",\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"PlaceAnOrder\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientPlaceOrder\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"orderReceived\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"Purchase\",\n\t\t\tevent_id : wpmDataLayer.order.id.toString(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tcontent_ids : wpm.facebookContentIds(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"CompletePayment\",\n\t\t\tevent_id : wpmDataLayer.order.id.toString(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\t\tcurrency: wpmDataLayer.order.currency,\n\t\t\t\tcontents: wpm.getTikTokOrderItemIds(),\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideOrderReceivedPage\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// ! No server-to-server event is sent for this event because it is compiled and sent from the server directly\n})\n\n\n\n\n\n","/**\n * Register event listeners\n */\n\n\n/**\n * add_to_cart event\n *\n * WC is inconsistent with events that emit add-to-cart events.\n * adding_to_cart and added_to_are legacy events. Also, they only work\n * on Ajax buttons on shop pages.\n */\n\nconst addToCartSelectors = [\n\t\".add_to_cart_button:not(.product_type_variable)\",\n\t\".ajax_add_to_cart\",\n\t\".single_add_to_cart_button\",\n].join(\",\")\n\njQuery(addToCartSelectors).on(\"click adding_to_cart\", (event) => {\n\t// console log current time\n\t// console.log(\"add_to_cart event fired at: \" + new Date().getTime())\n\n\ttry {\n\n\t\t// console.log(\"add_to_cart event detected\")\n\n\t\tlet quantity = 1,\n\t\t\tproductId\n\n\t\t// Only process on product pages\n\t\tif (wpmDataLayer.shop.page_type === \"product\") {\n\n\t\t\t// First process related and upsell products\n\t\t\tif (typeof jQuery(event.currentTarget).attr(\"href\") !== \"undefined\" && jQuery(event.currentTarget).attr(\"href\").includes(\"add-to-cart\")) {\n\n\t\t\t\tproductId = jQuery(event.currentTarget).data(\"product_id\")\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is simple product\n\t\t\tif (wpmDataLayer.shop.product_type === \"simple\") {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(event.currentTarget).val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is variable product or variable-subscription\n\t\t\tif ([\"variable\", \"variable-subscription\"].indexOf(wpmDataLayer.shop.product_type) >= 0) {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(\"[name='variation_id']\").val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is grouped product\n\t\t\tif (wpmDataLayer.shop.product_type === \"grouped\") {\n\n\t\t\t\tjQuery(\".woocommerce-grouped-product-list-item\").each((index, element) => {\n\n\t\t\t\t\tquantity = Number(jQuery(element).find(\".input-text.qty\").val())\n\t\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\t\tlet classes = jQuery(element).attr(\"class\")\n\t\t\t\t\tproductId = wpm.getPostIdFromString(classes)\n\n\t\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// If is bundle product\n\t\t\tif (wpmDataLayer.shop.product_type === \"bundle\") {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(\"input[name=add-to-cart]\").val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"product_id\")\n\t\t\twpm.addProductToCart(productId, quantity)\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * If someone clicks anywhere on a custom /?add-to-cart=123 link\n * trigger the add to cart event\n */\n\n// jQuery(document).one(\"click\", \"a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)\", (event) => {\njQuery(\"a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)\").one(\"click\", (event) => {\n\n\ttry {\n\t\tif (jQuery(event.target).closest(\"a\").attr(\"href\")) {\n\n\t\t\tlet url = new URL(jQuery(event.currentTarget).attr(\"href\"), window.location.origin)\n\n\t\t\tif (url.searchParams.has(\"add-to-cart\")) {\n\n\t\t\t\tlet productId = url.searchParams.get(\"add-to-cart\")\n\t\t\t\twpm.addProductToCart(productId, 1)\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// select item event\n// jQuery(document).on(\"click\", \".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product\", (event) => {\njQuery(\".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product\").on(\"click\", (event) => {\n\n\ttry {\n\n\t\t/**\n\t\t * On some pages the event fires multiple times, and on product pages\n\t\t * even on page load. Using e.stopPropagation helps to prevent this,\n\t\t * but I don't know why. We don't even have to use this, since only a real\n\t\t * product click yields a valid productId. So we filter the invalid click\n\t\t * events out later down in the code. I'll keep it that way because this is\n\t\t * the most compatible way across shops.\n\t\t *\n\t\t * e.stopPropagation();\n\t\t * */\n\n\t\tlet productId = jQuery(event.currentTarget).nextAll(\".wpmProductId:first\").data(\"id\")\n\n\t\t/**\n\t\t * On product pages, for some reason, the click event is triggered on the main product on page load.\n\t\t * In that case no ID is found. But we can discard it, since we only want to trigger the event on\n\t\t * related products, which are found below.\n\t\t */\n\n\t\tif (productId) {\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tif (wpmDataLayer.products && wpmDataLayer.products[productId]) {\n\n\t\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\t\t\t\tjQuery(document).trigger(\"wpmSelectContentGaUa\", product)\n\t\t\t\tjQuery(document).trigger(\"wpmSelectItem\", product)\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// checkout_progress event\n// track checkout option event: entered valid billing email\n// jQuery(document).on(\"input\", \"#billing_email\", (event) => {\njQuery(\"#billing_email\").on(\"input\", (event) => {\n\n\tif (wpm.isEmail(jQuery(event.currentTarget).val())) {\n\t\t// wpm.fireCheckoutOption(2);\n\t\twpm.fireCheckoutProgress(2)\n\t\twpm.emailSelected = true\n\t}\n})\n\n\n/**\n * Place order button\n *\n * Track checkout option event: purchase click\n * https://stackoverflow.com/a/34112407/4688612\n * jQuery(document).one(\"click\", \"#place_order\", () => {\n *\n * Has to be hooked after document ready !\n */\njQuery(\"form.checkout\").on(\"checkout_place_order_success\", () => {\n\n\t// console log current time\n\t// console.log(\"checkout_place_order_success event fired at: \" + new Date().getTime())\n\n\tif (false === wpm.emailSelected) {\n\t\twpm.fireCheckoutProgress(2)\n\t}\n\n\tif (false === wpm.paymentMethodSelected) {\n\t\twpm.fireCheckoutProgress(3)\n\t\twpm.fireCheckoutOption(3, jQuery(\"input[name='payment_method']:checked\").val())\n\t}\n\n\twpm.fireCheckoutProgress(4)\n\n\tjQuery(document).trigger(\"wpmPlaceOrder\", {})\n})\n\n/**\n * Update cart event\n *\n * Has to be hooked after document ready !\n */\njQuery(\"[name='update_cart']\").on(\"click\", () => {\n\n\ttry {\n\t\tjQuery(\".cart_item\").each((index, element) => {\n\n\t\t\tlet url = new URL(jQuery(element).find(\".product-remove\").find(\"a\").attr(\"href\"))\n\t\t\tlet productId = wpm.getProductIdByCartItemKeyUrl(url)\n\n\t\t\tlet quantity = jQuery(element).find(\".qty\").val()\n\n\t\t\tif (quantity === 0) {\n\t\t\t\twpm.removeProductFromCart(productId)\n\t\t\t} else if (quantity < wpmDataLayer.cart[productId].quantity) {\n\t\t\t\twpm.removeProductFromCart(productId, wpmDataLayer.cart[productId].quantity - quantity)\n\t\t\t} else if (quantity > wpmDataLayer.cart[productId].quantity) {\n\t\t\t\twpm.addProductToCart(productId, quantity - wpmDataLayer.cart[productId].quantity)\n\t\t\t}\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t\twpm.getCartItemsFromBackend()\n\t}\n})\n\n// add_to_wishlist\njQuery(\".add_to_wishlist,.wl-add-to\").on(\"click\", event => {\n\n\ttry {\n\n\t\tlet productId\n\n\t\tif (jQuery(event.currentTarget).data(\"productid\")) { // for the WooCommerce wishlist plugin\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"productid\")\n\t\t} else if (jQuery(event.currentTarget).data(\"product-id\")) { // for the YITH wishlist plugin\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"product-id\")\n\t\t}\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\n\t\tjQuery(document).trigger(\"wpmAddToWishlist\", product)\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Called when the user selects all the required dropdowns / attributes\n *\n * Has to be hooked after document ready !\n *\n * https://stackoverflow.com/a/27849208/4688612\n * https://stackoverflow.com/a/65065335/4688612\n */\n\njQuery(\".single_variation_wrap\").on(\"show_variation\", (event, variation) => {\n\n\ttry {\n\t\tlet productId = wpm.getIdBasedOndVariationsOutputSetting(variation.variation_id)\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\twpm.triggerViewItemEventPrep(productId)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Called on variable products when no selection has been done yet\n * or when the visitor deselects his choice.\n *\n * Has to be hooked after document ready !\n */\n\n// jQuery(function () {\n//\n// \tjQuery(\".single_variation_wrap\").on(\"hide_variation\", function () {\n//\n// \t\ttry {\n// \t\t\tlet classes = jQuery(\"body\").attr(\"class\")\n// \t\t\tlet productId = classes.match(/(postid-)(\\d+)/)[2]\n//\n// \t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n//\n// \t\t\t/**\n// \t\t\t * If we have a variable product with no preset,\n// \t\t\t * and variations output is enabled,\n// \t\t\t * then we send a viewItem event with the first\n// \t\t\t * variation we find for the parent.\n// \t\t\t * If variations output is disabled,\n// \t\t\t * we just send the parent ID.\n// \t\t\t *\n// \t\t\t * And if Facebook microdata is active, use the\n// \t\t\t * microdata product ID.\n// \t\t\t */\n//\n// \t\t\tif (\n// \t\t\t\t\"variable\" === wpmDataLayer.shop.product_type &&\n// \t\t\t\twpmDataLayer?.general?.variationsOutput\n// \t\t\t) {\n// \t\t\t\tfor (const [key, product] of Object.entries(wpmDataLayer.products)) {\n// \t\t\t\t\tif (\"parentId\" in product) {\n//\n// \t\t\t\t\t\tproductId = product.id\n// \t\t\t\t\t\tbreak\n// \t\t\t\t\t}\n// \t\t\t\t}\n//\n// \t\t\t\tif (wpmDataLayer?.pixels?.facebook?.microdata_product_id) {\n// \t\t\t\t\tproductId = wpmDataLayer.pixels.facebook.microdata_product_id\n// \t\t\t\t}\n// \t\t\t}\n//\n// \t\t\t// console.log(\"hmm\")\n// \t\t\twpm.triggerViewItemEventPrep(productId)\n//\n// \t\t} catch (e) {\n// \t\t\tconsole.error(e)\n// \t\t}\n// \t})\n// })\n\n// jQuery(function () {\n//\n// \tjQuery(\".single_variation_wrap\").on(\"hide_variation\", function () {\n// \t\tjQuery(document).trigger(\"wpmviewitem\")\n// \t})\n// })\n","/**\n * Create a wpm namespace under which all functions are declared\n */\n\n// https://stackoverflow.com/a/5947280/4688612\n\n(function (wpm, $, undefined) {\n\n\tconst wpmDeduper = {\n\t\tkeyName : \"_wpm_order_ids\",\n\t\tcookieExpiresDays: 365,\n\t}\n\n\tconst wpmRestSettings = {\n\t\t// cookiesAvailable : '_wpm_cookies_are_available',\n\t\tcookiePmwRestEndpointAvailable: \"_pmw_endpoint_available\",\n\t\trestEndpointPost : \"pmw/v1/test/\",\n\t\trestFails : 0,\n\t\trestFailsThreshold : 10,\n\t}\n\n\twpm.emailSelected = false\n\twpm.paymentMethodSelected = false\n\n\t// wpm.checkIfCookiesAvailable = function () {\n\t//\n\t// // read the cookie if previously set, if it is return true, otherwise continue\n\t// if (wpm.getCookie(wpmRestSettings.cookiesAvailable)) {\n\t// return true;\n\t// }\n\t//\n\t// // set the cookie for the session\n\t// Cookies.set(wpmRestSettings.cookiesAvailable, true);\n\t//\n\t// // read cookie, true if ok, false if not ok\n\t// return !!wpm.getCookie(wpmRestSettings.cookiesAvailable);\n\t// }\n\n\twpm.useRestEndpoint = () => {\n\n\t\t// only if sessionStorage is available\n\n\t\t// only if REST API endpoint is generally accessible\n\t\t// check in sessionStorage if we checked before and return answer\n\t\t// otherwise check if the endpoint is available, save answer in sessionStorage and return answer\n\n\t\t// only if not too many REST API errors happened\n\n\t\treturn wpm.isSessionStorageAvailable() &&\n\t\t\twpm.isRestEndpointAvailable() &&\n\t\t\twpm.isBelowRestErrorThreshold()\n\t}\n\n\twpm.isBelowRestErrorThreshold = () => window.sessionStorage.getItem(wpmRestSettings.restFails) <= wpmRestSettings.restFailsThreshold\n\n\twpm.isRestEndpointAvailable = async () => {\n\n\t\tif (window.sessionStorage.getItem(wpmRestSettings.cookiePmwRestEndpointAvailable)) {\n\t\t\treturn JSON.parse(window.sessionStorage.getItem(wpmRestSettings.cookiePmwRestEndpointAvailable))\n\t\t} else {\n\t\t\treturn await wpm.testEndpoint()\n\t\t}\n\t}\n\n\twpm.isSessionStorageAvailable = () => !!window.sessionStorage\n\n\t// Test the endpoint by sending a POST request\n\twpm.testEndpoint = async (\n\t\turl = wpm.root + wpmRestSettings.restEndpointPost,\n\t\tcookieName = wpmRestSettings.cookiePmwRestEndpointAvailable,\n\t) => {\n\n\t\tlet response = await fetch(url, {\n\t\t\tmethod : \"POST\",\n\t\t\tmode : \"cors\",\n\t\t\tcache : \"no-cache\",\n\t\t\tkeepalive: true,\n\t\t})\n\n\t\tif (response.status === 200) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(true))\n\t\t\treturn true\n\t\t} else if (response.status === 404) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(false))\n\t\t\treturn false\n\t\t} else if (response.status === 0) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(false))\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.isWpmRestEndpointAvailable = (cookieName = wpmRestSettings.cookiePmwRestEndpointAvailable) => !!wpm.getCookie(cookieName)\n\n\twpm.writeOrderIdToStorage = (orderId, orderKey, source = \"thankyou_page\", expireDays = 365) => {\n\n\t\t// save the order ID in the browser storage\n\n\t\tif (!window.Storage) {\n\t\t\tlet expiresDate = new Date()\n\t\t\texpiresDate.setDate(expiresDate.getDate() + wpmDeduper.cookieExpiresDays)\n\n\t\t\tlet ids = []\n\t\t\tif (checkCookie()) {\n\t\t\t\tids = JSON.parse(wpm.getCookie(wpmDeduper.keyName))\n\t\t\t}\n\n\t\t\tif (!ids.includes(orderId)) {\n\t\t\t\tids.push(orderId)\n\t\t\t\tdocument.cookie = wpmDeduper.keyName + \"=\" + JSON.stringify(ids) + \";expires=\" + expiresDate.toUTCString()\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (localStorage.getItem(wpmDeduper.keyName) === null) {\n\t\t\t\tlet ids = []\n\t\t\t\tids.push(orderId)\n\t\t\t\twindow.localStorage.setItem(wpmDeduper.keyName, JSON.stringify(ids))\n\n\t\t\t} else {\n\t\t\t\tlet ids = JSON.parse(localStorage.getItem(wpmDeduper.keyName))\n\t\t\t\tif (!ids.includes(orderId)) {\n\t\t\t\t\tids.push(orderId)\n\t\t\t\t\twindow.localStorage.setItem(wpmDeduper.keyName, JSON.stringify(ids))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof wpm.storeOrderIdOnServer === \"function\" && wpmDataLayer.orderDeduplication) {\n\t\t\twpm.storeOrderIdOnServer( orderKey, source)\n\t\t}\n\t}\n\n\tfunction checkCookie() {\n\t\tlet key = wpm.getCookie(wpmDeduper.keyName)\n\t\treturn key !== \"\"\n\t}\n\n\twpm.isOrderIdStored = orderId => {\n\n\t\tif (wpmDataLayer.orderDeduplication) {\n\n\t\t\tif (!window.Storage) {\n\n\t\t\t\tif (checkCookie()) {\n\t\t\t\t\tlet ids = JSON.parse(wpm.getCookie(wpmDeduper.keyName))\n\t\t\t\t\treturn ids.includes(orderId)\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (localStorage.getItem(wpmDeduper.keyName) !== null) {\n\t\t\t\t\tlet ids = JSON.parse(localStorage.getItem(wpmDeduper.keyName))\n\t\t\t\t\treturn ids.includes(orderId)\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.log(\"order duplication prevention: off\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.isEmail = email => {\n\n\t\t// https://emailregex.com/\n\n\t\tlet regex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n\n\t\treturn regex.test(email)\n\t}\n\n\twpm.removeProductFromCart = (productId, quantityToRemove = null) => {\n\n\t\ttry {\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tlet quantity\n\n\t\t\tif (quantityToRemove == null) {\n\t\t\t\tquantity = wpmDataLayer.cart[productId].quantity\n\t\t\t} else {\n\t\t\t\tquantity = quantityToRemove\n\t\t\t}\n\n\t\t\tif (wpmDataLayer.cart[productId]) {\n\n\t\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\n\t\t\t\tjQuery(document).trigger(\"wpmRemoveFromCart\", product)\n\n\t\t\t\tif (quantityToRemove == null || wpmDataLayer.cart[productId].quantity === quantityToRemove) {\n\n\t\t\t\t\tdelete wpmDataLayer.cart[productId]\n\n\t\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t\t} else {\n\n\t\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity - quantity\n\n\t\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\t// console.log('getting cart from back end');\n\t\t\t// wpm.getCartItemsFromBackend();\n\t\t\t// console.log('getting cart from back end done');\n\t\t}\n\t}\n\n\twpm.getIdBasedOndVariationsOutputSetting = productId => {\n\n\t\ttry {\n\t\t\tif (wpmDataLayer?.general?.variationsOutput) {\n\n\t\t\t\treturn productId\n\t\t\t} else {\n\t\t\t\tif (wpmDataLayer.products[productId].isVariation) {\n\n\t\t\t\t\treturn wpmDataLayer.products[productId].parentId\n\t\t\t\t} else {\n\n\t\t\t\t\treturn productId\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// add_to_cart\n\twpm.addProductToCart = (productId, quantity) => {\n\n\t\ttry {\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tif (wpmDataLayer?.products[productId]) {\n\n\t\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\n\t\t\t\tjQuery(document).trigger(\"wpmAddToCart\", product)\n\n\t\t\t\t// add product to cart wpmDataLayer['cart']\n\n\t\t\t\t// if the product already exists in the object, only add the additional quantity\n\t\t\t\t// otherwise create that product object in the wpmDataLayer['cart']\n\t\t\t\tif (wpmDataLayer?.cart[productId]) {\n\n\t\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity + quantity\n\t\t\t\t} else {\n\n\t\t\t\t\tif (!(\"cart\" in wpmDataLayer)) wpmDataLayer.cart = {}\n\n\t\t\t\t\twpmDataLayer.cart[productId] = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\t\t\t\t}\n\n\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\n\t\t\t// fallback if wpmDataLayer.cart and wpmDataLayer.products got out of sync in case cart caching has an issue\n\t\t\twpm.getCartItemsFromBackend()\n\t\t}\n\t}\n\n\twpm.getCartItems = () => {\n\n\t\tif (sessionStorage) {\n\t\t\tif (!sessionStorage.getItem(\"wpmDataLayerCart\") || wpmDataLayer.shop.page_type === \"order_received_page\") {\n\t\t\t\tsessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify({}))\n\t\t\t} else {\n\t\t\t\twpm.saveCartObjectToDataLayer(JSON.parse(sessionStorage.getItem(\"wpmDataLayerCart\")))\n\t\t\t}\n\t\t} else {\n\t\t\twpm.getCartItemsFromBackend()\n\t\t}\n\t}\n\n\t// get all cart items from the backend\n\twpm.getCartItemsFromBackend = () => {\n\t\ttry {\n\n\t\t\t/**\n\t\t\t * Can't use a REST API endpoint, as the cart session will not be loaded if the\n\t\t\t * endpoint is called.\n\t\t\t *\n\t\t\t * https://wordpress.org/support/topic/wc-cart-is-null-in-custom-rest-api/#post-11442843\n\t\t\t */\n\n\t\t\t/**\n\t\t\t * Get the cart items from the backend the data object using fetch API\n\t\t\t * and log success or error messages\n\t\t\t * and url encoded data\n\t\t\t */\n\t\t\tfetch(wpm.ajax_url, {\n\t\t\t\tmethod : \"POST\",\n\t\t\t\tcache : \"no-cache\",\n\t\t\t\tbody : new URLSearchParams({action: \"pmw_get_cart_items\"}),\n\t\t\t\tkeepalive: true,\n\t\t\t})\n\t\t\t\t.then(response => {\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\treturn response.json()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow Error(\"Error getting cart items from backend\")\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.then(data => {\n\n\t\t\t\t\tif (data.success) {\n\n\t\t\t\t\t\tif (!data.data[\"cart\"]) data.data[\"cart\"] = {}\n\n\t\t\t\t\t\twpm.saveCartObjectToDataLayer(data.data[\"cart\"])\n\n\t\t\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(data.data[\"cart\"]))\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow Error(\"Error getting cart items from backend\")\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// get productIds from the backend\n\twpm.getProductsFromBackend = async productIds => {\n\n\t\tif (wpmDataLayer?.products) {\n\t\t\t// If productIds already exists as key in wpmDataLayer.products, remove it from the array\n\t\t\tproductIds = productIds.filter(productId => !(productId in wpmDataLayer.products))\n\t\t}\n\n\t\t// if no products IDs are in the object, don't try to get anything from the server\n\t\tif (!productIds || productIds.length === 0) return\n\n\t\ttry {\n\n\t\t\tlet response\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) {\n\t\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/products/\", {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\tpageId : wpmDataLayer.general.pageId,\n\t\t\t\t\t\tproductIds: productIds,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t} else {\n\n\t\t\t\t// Get the product details from the backend the data object using fetch API\n\t\t\t\t// and log success or error messages\n\t\t\t\t// and url encoded data\n\t\t\t\tresponse = await fetch(wpm.ajax_url, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t\tbody : new URLSearchParams({\n\t\t\t\t\t\taction : \"pmw_get_product_ids\",\n\t\t\t\t\t\tproductIds: productIds,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (response.ok) {\n\t\t\t\tlet responseData = await response.json()\n\t\t\t\tif (responseData.success) {\n\t\t\t\t\twpmDataLayer.products = Object.assign({}, wpmDataLayer.products, responseData.data)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Error getting products from backend\")\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\n\t\treturn true\n\t}\n\n\twpm.saveCartObjectToDataLayer = cartObject => {\n\n\t\twpmDataLayer.cart = cartObject\n\t\twpmDataLayer.products = Object.assign({}, wpmDataLayer.products, cartObject)\n\t}\n\n\twpm.triggerViewItemEventPrep = async productId => {\n\n\t\tif (wpmDataLayer.products && wpmDataLayer.products[productId]) {\n\n\t\t\twpm.triggerViewItemEvent(productId)\n\t\t} else {\n\t\t\tawait wpm.getProductsFromBackend([productId])\n\t\t\twpm.triggerViewItemEvent(productId)\n\t\t}\n\t}\n\n\twpm.triggerViewItemEvent = productId => {\n\n\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\t\tjQuery(document).trigger(\"wpmViewItem\", product)\n\t}\n\n\twpm.triggerViewItemEventNoProduct = () => {\n\t\tjQuery(document).trigger(\"wpmViewItem\")\n\t}\n\n\twpm.fireCheckoutOption = (step, checkout_option = null, value = null) => {\n\n\t\tlet data = {\n\t\t\tstep : step,\n\t\t\tcheckout_option: checkout_option,\n\t\t\tvalue : value,\n\t\t}\n\n\t\tjQuery(document).trigger(\"wpmFireCheckoutOption\", data)\n\t}\n\n\twpm.fireCheckoutProgress = step => {\n\n\t\tlet data = {\n\t\t\tstep: step,\n\t\t}\n\n\t\tjQuery(document).trigger(\"wpmFireCheckoutProgress\", data)\n\t}\n\n\twpm.getPostIdFromString = string => {\n\n\t\ttry {\n\t\t\treturn string.match(/(post-)(\\d+)/)[2]\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.triggerViewItemList = productId => {\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tjQuery(document).trigger(\"wpmViewItemList\", wpm.getProductDataForViewItemEvent(productId))\n\t}\n\n\twpm.getProductDataForViewItemEvent = productId => {\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\ttry {\n\t\t\tif (wpmDataLayer.products[productId]) {\n\n\t\t\t\treturn wpm.getProductDetailsFormattedForEvent(productId)\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getMainProductIdFromProductPage = () => {\n\n\t\ttry {\n\t\t\tif ([\"simple\", \"variable\", \"grouped\", \"composite\", \"bundle\"].indexOf(wpmDataLayer.shop.product_type) >= 0) {\n\t\t\t\treturn jQuery(\".wpmProductId:first\").data(\"id\")\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.viewItemListTriggerTestMode = target => {\n\n\t\tjQuery(target).css({\"position\": \"relative\"})\n\t\tjQuery(target).append(\"<div id=\\\"viewItemListTriggerOverlay\\\"></div>\")\n\t\tjQuery(target).find(\"#viewItemListTriggerOverlay\").css({\n\t\t\t\"z-index\" : \"10\",\n\t\t\t\"display\" : \"block\",\n\t\t\t\"position\" : \"absolute\",\n\t\t\t\"height\" : \"100%\",\n\t\t\t\"top\" : \"0\",\n\t\t\t\"left\" : \"0\",\n\t\t\t\"right\" : \"0\",\n\t\t\t\"opacity\" : wpmDataLayer.viewItemListTrigger.opacity,\n\t\t\t\"background-color\": wpmDataLayer.viewItemListTrigger.backgroundColor,\n\t\t})\n\t}\n\n\twpm.getSearchTermFromUrl = () => {\n\n\t\ttry {\n\t\t\tlet urlParameters = new URLSearchParams(window.location.search)\n\t\t\treturn urlParameters.get(\"s\")\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// we need this to track timeouts for intersection observers\n\tlet ioTimeouts = {}\n\n\twpm.observerCallback = (entries, observer) => {\n\n\t\tentries.forEach((entry) => {\n\n\t\t\ttry {\n\t\t\t\tlet productId\n\n\t\t\t\tlet elementId = jQuery(entry.target).data(\"ioid\")\n\n\t\t\t\t// Get the productId from next element, if wpmProductId is a sibling, like in Gutenberg blocks\n\t\t\t\t// otherwise go search in children, like in regular WC loop items\n\t\t\t\tif (jQuery(entry.target).next(\".wpmProductId\").length) {\n\t\t\t\t\t// console.log('test 1');\n\t\t\t\t\tproductId = jQuery(entry.target).next(\".wpmProductId\").data(\"id\")\n\t\t\t\t} else {\n\t\t\t\t\tproductId = jQuery(entry.target).find(\".wpmProductId\").data(\"id\")\n\t\t\t\t}\n\n\n\t\t\t\tif (!productId) throw Error(\"wpmProductId element not found\")\n\n\t\t\t\tif (entry.isIntersecting) {\n\n\t\t\t\t\tioTimeouts[elementId] = setTimeout(() => {\n\n\t\t\t\t\t\twpm.triggerViewItemList(productId)\n\t\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.testMode) wpm.viewItemListTriggerTestMode(entry.target)\n\t\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.repeat === false) observer.unobserve(entry.target)\n\t\t\t\t\t}, wpmDataLayer.viewItemListTrigger.timeout)\n\n\t\t\t\t} else {\n\n\t\t\t\t\tclearTimeout(ioTimeouts[elementId])\n\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.testMode) jQuery(entry.target).find(\"#viewItemListTriggerOverlay\").remove()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e)\n\t\t\t}\n\t\t})\n\t}\n\n\t// fire view_item_list only on products that have become visible\n\tlet io\n\tlet ioid = 0\n\tlet allIoElementsToWatch\n\n\tlet getAllElementsToWatch = () => {\n\n\t\tallIoElementsToWatch = jQuery(\".wpmProductId\")\n\t\t\t.map(function (i, elem) {\n\n\t\t\t\tif (\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"type-product\") ||\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"product\") ||\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"product-item-inner\")\n\t\t\t\t) {\n\t\t\t\t\treturn jQuery(elem).parent()\n\t\t\t\t} else if (\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"wc-block-grid__product\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"product\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"product-small\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"woocommerce-LoopProduct-link\")\n\t\t\t\t) {\n\t\t\t\t\treturn jQuery(this).prev()\n\t\t\t\t} else if (jQuery(elem).closest(\".product\").length) {\n\t\t\t\t\treturn jQuery(elem).closest(\".product\")\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\twpm.startIntersectionObserverToWatch = () => {\n\n\t\ttry {\n\t\t\t// enable view_item_list test mode from browser\n\t\t\tif (wpm.urlHasParameter(\"vildemomode\")) wpmDataLayer.viewItemListTrigger.testMode = true\n\n\t\t\t// set up intersection observer\n\t\t\tio = new IntersectionObserver(wpm.observerCallback, {\n\t\t\t\tthreshold: wpmDataLayer.viewItemListTrigger.threshold,\n\t\t\t})\n\n\t\t\tgetAllElementsToWatch()\n\n\t\t\tallIoElementsToWatch.each((i, elem) => {\n\n\t\t\t\tjQuery(elem[0]).data(\"ioid\", ioid++)\n\n\t\t\t\tio.observe(elem[0])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// watch DOM for new lazy loaded products and add them to the intersection observer\n\twpm.startProductsMutationObserverToWatch = () => {\n\n\t\ttry {\n\t\t\t// Pass in the target node, as well as the observer options\n\n\t\t\t// selects the most common parent node\n\t\t\t// https://stackoverflow.com/a/7648323/4688612\n\t\t\tlet productsNode = jQuery(\".wpmProductId:eq(0)\").parents().has(jQuery(\".wpmProductId:eq(1)\").parents()).first()\n\n\t\t\tif (productsNode.length) {\n\t\t\t\tproductsMutationObserver.observe(productsNode[0], {\n\t\t\t\t\tattributes : true,\n\t\t\t\t\tchildList : true,\n\t\t\t\t\tcharacterData: true,\n\t\t\t\t})\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// Create an observer instance\n\tlet productsMutationObserver = new MutationObserver(mutations => {\n\n\t\tmutations.forEach(mutation => {\n\t\t\tlet newNodes = mutation.addedNodes // DOM NodeList\n\t\t\tif (newNodes !== null) { // If there are new nodes added\n\t\t\t\tlet nodes = jQuery(newNodes) // jQuery set\n\t\t\t\tnodes.each(function () {\n\t\t\t\t\tif (\n\t\t\t\t\t\tjQuery(this).hasClass(\"type-product\") ||\n\t\t\t\t\t\tjQuery(this).hasClass(\"product-small\") ||\n\t\t\t\t\t\tjQuery(this).hasClass(\"wc-block-grid__product\")\n\t\t\t\t\t) {\n\t\t\t\t\t\t// check if the node has a child or sibling wpmProductId\n\t\t\t\t\t\t// if yes add it to the intersectionObserver\n\t\t\t\t\t\tif (hasWpmProductIdElement(this)) {\n\t\t\t\t\t\t\tjQuery(this).data(\"ioid\", ioid++)\n\t\t\t\t\t\t\tio.observe(this)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t})\n\n\tlet hasWpmProductIdElement = elem =>\n\t\t!!(jQuery(elem).find(\".wpmProductId\").length ||\n\t\t\tjQuery(elem).siblings(\".wpmProductId\").length)\n\n\twpm.setCookie = (cookieName, cookieValue = \"\", expiryDays = null) => {\n\n\t\tif (expiryDays) {\n\n\t\t\tlet d = new Date()\n\t\t\td.setTime(d.getTime() + (expiryDays * 24 * 60 * 60 * 1000))\n\t\t\tlet expires = \"expires=\" + d.toUTCString()\n\t\t\tdocument.cookie = cookieName + \"=\" + cookieValue + \";\" + expires + \";path=/\"\n\t\t} else {\n\t\t\tdocument.cookie = cookieName + \"=\" + cookieValue + \";path=/\"\n\t\t}\n\t}\n\n\twpm.getCookie = cookieName => {\n\n\t\tlet name = cookieName + \"=\"\n\t\tlet decodedCookie = decodeURIComponent(document.cookie)\n\t\tlet ca = decodedCookie.split(\";\")\n\n\t\tfor (let i = 0; i < ca.length; i++) {\n\n\t\t\tlet c = ca[i]\n\n\t\t\twhile (c.charAt(0) == \" \") {\n\t\t\t\tc = c.substring(1)\n\t\t\t}\n\n\t\t\tif (c.indexOf(name) == 0) {\n\t\t\t\treturn c.substring(name.length, c.length)\n\t\t\t}\n\t\t}\n\n\t\treturn \"\"\n\t}\n\n\twpm.deleteCookie = cookieName => {\n\t\twpm.setCookie(cookieName, \"\", -1)\n\t}\n\n\twpm.getWpmSessionData = () => {\n\n\t\tif (window.sessionStorage) {\n\n\t\t\tlet data = window.sessionStorage.getItem(\"_wpm\")\n\n\t\t\tif (data !== null) {\n\t\t\t\treturn JSON.parse(data)\n\t\t\t} else {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t} else {\n\t\t\treturn {}\n\t\t}\n\t}\n\n\twpm.setWpmSessionData = data => {\n\t\tif (window.sessionStorage) {\n\t\t\twindow.sessionStorage.setItem(\"_wpm\", JSON.stringify(data))\n\t\t}\n\t}\n\n\twpm.storeOrderIdOnServer = async ( orderKey, source) => {\n\n\t\ttry {\n\n\t\t\tlet response\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) {\n\n\t\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/pixels-fired/\", {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\theaders : {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t\t\"X-WP-Nonce\" : wpm.nonce_wp_rest,\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\t// order_id: orderId,\n\t\t\t\t\t\torder_key: orderKey,\n\t\t\t\t\t\tsource : source,\n\t\t\t\t\t\t// nonce : wpm.pmw_nonce,\n\t\t\t\t\t}),\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t})\n\n\t\t\t} else {\n\t\t\t\t// save the state in the database\n\n\t\t\t\t// Send the data object with ajax request\n\t\t\t\t// and log success or error using fetch API and url encoded\n\t\t\t\tresponse = await fetch(wpm.ajax_url, {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\tbody : new URLSearchParams({\n\t\t\t\t\t\taction : \"pmw_purchase_pixels_fired\",\n\t\t\t\t\t\t// order_id: orderId,\n\t\t\t\t\t\torder_key: orderKey,\n\t\t\t\t\t\tsource : source,\n\t\t\t\t\t\tnonce_ajax : wpm.nonce_ajax,\n\t\t\t\t\t}),\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst responseJson = await response.json()\n\n\t\t\tif (responseJson.success) {\n\t\t\t\tconsole.log(\"wpm.storeOrderIdOnServer success\")\n\t\t\t} else {\n\t\t\t\tconsole.error(\"wpm.storeOrderIdOnServer error\", responseJson)\n\t\t\t}\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getProductIdByCartItemKeyUrl = url => {\n\n\t\tlet searchParams = new URLSearchParams(url.search)\n\t\tlet cartItemKey = searchParams.get(\"remove_item\")\n\n\t\tlet productId\n\n\t\tif (wpmDataLayer.cartItemKeys[cartItemKey][\"variation_id\"] === 0) {\n\t\t\tproductId = wpmDataLayer.cartItemKeys[cartItemKey][\"product_id\"]\n\t\t} else {\n\t\t\tproductId = wpmDataLayer.cartItemKeys[cartItemKey][\"variation_id\"]\n\t\t}\n\n\t\treturn productId\n\t}\n\n\twpm.getAddToCartLinkProductIds = () =>\n\t\tjQuery(\"a\").map(function () {\n\t\t\tlet href = jQuery(this).attr(\"href\")\n\n\t\t\tif (href && href.includes(\"?add-to-cart=\")) {\n\t\t\t\tlet matches = href.match(/(add-to-cart=)(\\d+)/)\n\t\t\t\tif (matches) return matches[2]\n\t\t\t}\n\t\t}).get()\n\n\twpm.getProductDetailsFormattedForEvent = (productId, quantity = 1) => {\n\n\t\tlet product = {\n\t\t\tid : productId.toString(),\n\t\t\tdyn_r_ids : wpmDataLayer.products[productId].dyn_r_ids,\n\t\t\tname : wpmDataLayer.products[productId].name,\n\t\t\tlist_name : wpmDataLayer.shop.list_name,\n\t\t\tbrand : wpmDataLayer.products[productId].brand,\n\t\t\tcategory : wpmDataLayer.products[productId].category,\n\t\t\tvariant : wpmDataLayer.products[productId].variant,\n\t\t\tlist_position: wpmDataLayer.products[productId].position,\n\t\t\tquantity : quantity,\n\t\t\tprice : wpmDataLayer.products[productId].price,\n\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\tisVariable : wpmDataLayer.products[productId].isVariable,\n\t\t\tisVariation : wpmDataLayer.products[productId].isVariation,\n\t\t\tparentId : wpmDataLayer.products[productId].parentId,\n\t\t}\n\n\t\tif (product.isVariation) product[\"parentId_dyn_r_ids\"] = wpmDataLayer.products[productId].parentId_dyn_r_ids\n\n\t\treturn product\n\t}\n\n\twpm.setReferrerToCookie = () => {\n\n\t\t// can't use session storage as we can't read it from the server\n\t\tif (!wpm.getCookie(\"wpmReferrer\")) {\n\t\t\twpm.setCookie(\"wpmReferrer\", document.referrer)\n\t\t}\n\t}\n\n\twpm.getReferrerFromCookie = () => {\n\n\t\tif (wpm.getCookie(\"wpmReferrer\")) {\n\t\t\treturn wpm.getCookie(\"wpmReferrer\")\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t}\n\n\twpm.getClidFromBrowser = (clidId = \"gclid\") => {\n\n\t\tlet clidCookieId\n\n\t\tclidCookieId = {\n\t\t\tgclid: \"_gcl_aw\",\n\t\t\tdclid: \"_gcl_dc\",\n\t\t}\n\n\t\tif (wpm.getCookie(clidCookieId[clidId])) {\n\n\t\t\tlet clidCookie = wpm.getCookie(clidCookieId[clidId])\n\t\t\tlet matches = clidCookie.match(/(GCL.[\\d]*.)(.*)/)\n\t\t\treturn matches[2]\n\t\t} else {\n\t\t\treturn \"\"\n\t\t}\n\t}\n\n\twpm.getUserAgent = () => navigator.userAgent\n\n\twpm.getViewPort = () => ({\n\t\twidth : Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),\n\t\theight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0),\n\t})\n\n\n\twpm.version = () => {\n\t\tconsole.log(wpmDataLayer.version)\n\t}\n\n\t/**\n\t * https://api.jquery.com/jquery.getscript/\n\t *\n\t * Switched back to jQuery.ajax as the fetch method on some sites returned a type error\n\t * Possible reasons are:\n\t * * CORS mismatch\n\t * * The user is using an ad blocker\n\t */\n\n\twpm.loadScriptAndCacheIt = url => {\n\n\t\t// Get and load the script using fetch API, if possible from cache, and return it without using eval\n\t\t// return fetch(url, {\n\t\t// \tmethod : \"GET\",\n\t\t// \tcache : \"default\",\n\t\t// \tkeepalive: true,\n\t\t// })\n\t\t// \t.then(response => {\n\t\t// \t\tif (response.ok) {\n\t\t// \t\t\t// console.log(\"response\", response)\n\t\t// \t\t\treturn response.text()\n\t\t// \t\t\t// console.log(\"wpm.loadScriptAndCacheIt success: \" + url)\n\t\t// \t\t} else {\n\t\t// \t\t\tthrow new Error(\"Network response was not ok: \" + url)\n\t\t// \t\t}\n\t\t// \t})\n\t\t// \t.then(script => {\n\t\t// \t\t// Execute the script\n\t\t// \t\t// console.error(\"executing script: \" + script)\n\t\t// \t\teval(script)\n\t\t// \t\t// console.log(\"executed script: \" + script)\n\t\t// \t})\n\t\t// \t.catch(e => {\n\t\t// \t\tconsole.error(e)\n\t\t// \t})\n\n\t\tlet options = {\n\t\t\tdataType: \"script\",\n\t\t\tcache : true,\n\t\t\turl : url,\n\t\t}\n\n\t\treturn jQuery.ajax(options)\n\t}\n\n\twpm.getOrderItemPrice = orderItem => (orderItem.total + orderItem.total_tax) / orderItem.quantity\n\n\twpm.hasLoginEventFired = () => {\n\t\tlet data = wpm.getWpmSessionData()\n\t\treturn data?.loginEventFired\n\t}\n\n\twpm.setLoginEventFired = () => {\n\t\tlet data = wpm.getWpmSessionData()\n\t\tdata[\"loginEventFired\"] = true\n\t\twpm.setWpmSessionData(data)\n\t}\n\n\twpm.wpmDataLayerExists = () => new Promise(resolve => {\n\t\t(function waitForVar() {\n\t\t\tif (typeof wpmDataLayer !== \"undefined\") return resolve()\n\t\t\tsetTimeout(waitForVar, 50)\n\t\t})()\n\t})\n\n\twpm.jQueryExists = () => new Promise(resolve => {\n\t\t(function waitForjQuery() {\n\t\t\tif (typeof jQuery !== \"undefined\") return resolve()\n\t\t\tsetTimeout(waitForjQuery, 100)\n\t\t})()\n\t})\n\n\twpm.pageLoaded = () => new Promise(resolve => {\n\t\t(function waitForVar() {\n\t\t\tif (\"complete\" === document.readyState) return resolve()\n\t\t\tsetTimeout(waitForVar, 50)\n\t\t})()\n\t})\n\n\twpm.pageReady = () => {\n\t\treturn new Promise(resolve => {\n\t\t\t(function waitForVar() {\n\t\t\t\tif (\"interactive\" === document.readyState || \"complete\" === document.readyState) return resolve()\n\t\t\t\tsetTimeout(waitForVar, 50)\n\t\t\t})()\n\t\t})\n\t}\n\n\twpm.isMiniCartActive = () => {\n\t\tif (window.sessionStorage) {\n\t\t\tfor (const [key, value] of Object.entries(window.sessionStorage)) {\n\t\t\t\tif (key.includes(\"wc_fragments\")) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.doesWooCommerceCartExist = () => document.cookie.includes(\"woocommerce_items_in_cart\")\n\n\twpm.urlHasParameter = parameter => {\n\t\tlet urlParams = new URLSearchParams(window.location.search)\n\t\treturn urlParams.has(parameter)\n\t}\n\n\t// https://stackoverflow.com/a/60606893/4688612\n\twpm.hashAsync = (algo, str) => {\n\t\treturn crypto.subtle.digest(algo, new TextEncoder(\"utf-8\").encode(str)).then(buf => {\n\t\t\treturn Array.prototype.map.call(new Uint8Array(buf), x => ((\"00\" + x.toString(16)).slice(-2))).join(\"\")\n\t\t})\n\t}\n\n\twpm.getCartValue = () => {\n\n\t\tlet value = 0\n\n\t\tif (wpmDataLayer?.cart) {\n\n\t\t\tfor (const key in wpmDataLayer.cart) {\n\t\t\t\t// content_ids.push(wpmDataLayer.products[key].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])\n\n\t\t\t\tlet product = wpmDataLayer.cart[key]\n\n\t\t\t\tvalue += product.quantity * product.price\n\t\t\t}\n\t\t}\n\n\t\treturn value\n\t}\n\n\t/**\n\t * Detect if the current URL contains at least one pattern\n\t *\n\t * @param patterns\n\t * @returns {boolean}\n\t */\n\twpm.doesUrlContainPatterns = patterns => {\n\n\t\tfor (const pattern of patterns) {\n\t\t\tif (new RegExp(pattern).test(window.location.href)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\t/**\n\t * Detect if the current URL contains at least one pattern that is on the tracking exclusion list\n\t *\n\t * https://www.linkedin.com/pulse/how-remove-google-robot-problem-via-gtm-facebook-pixel-hjelpdahl/\n\t * https://www.youtube.com/watch?v=b4I1ePZt8Z0\n\t *\n\t * @returns {boolean}\n\t */\n\twpm.excludeDomainFromTracking = () => {\n\n\t\tlet excludeDomains = [\n\t\t\t\"appspot.com\",\n\t\t\t\"translate.google.com\",\n\t\t]\n\n\t\tif (wpmDataLayer?.general?.excludeDomains) {\n\t\t\texcludeDomains = [...excludeDomains, ...wpmDataLayer.general.excludeDomains]\n\t\t}\n\n\t\t// Abort if URL contains excluded domains\n\t\tif (excludeDomains.some(domain => window.location.href.includes(domain))) {\n\t\t\tconsole.debug(\"Pixel Manager for WooCommerce: Aborted due to excluded domain\")\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.getRandomEventId = () => (Math.random() + 1).toString(36).substring(2)\n\n\tlet jQueryReadyFired = false\n\n\tconst triggerDomReadyEvent = () => {\n\t\tif (jQueryReadyFired === false) jQuery(document).trigger(\"pmw:ready\")\n\t\tjQueryReadyFired = true\n\t}\n\n\tjQuery(document).on(\"ready\", () => {\n\t\ttriggerDomReadyEvent()\n\t})\n\n\tdocument.addEventListener(\"DOMContentLoaded\", () => {\n\t\ttriggerDomReadyEvent()\n\t})\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load all WPM functions\n *\n * Ignore event listeners. They need to be loaded after\n * we made sure that jQuery has been loaded.\n */\n\nrequire(\"./functions\")\nrequire(\"./cookie_consent\")\n\n// #if process.env.TIER === 'premium'\n// require(\"./functions_premium\")\n// #endif\n","/**\n * After WPM is loaded\n * we first check if wpmDataLayer is loaded,\n * and as soon as it is, we load the pixels,\n * and as soon as the page load is complete,\n * we fire the wpmLoad event.\n *\n * @param {{pro:bool}} wpmDataLayer.version\n *\n * https://stackoverflow.com/a/25868457/4688612\n * https://stackoverflow.com/a/44093516/4688612\n */\n\nwpm.wpmDataLayerExists()\n\t.then(() => {\n\t\tconsole.log(\"Pixel Manager for WooCommerce: \" + (wpmDataLayer.version.pro ? \"Pro\" : \"Free\") + \" Version \" + wpmDataLayer.version.number + \" loaded\")\n\n\t\tif (wpm.excludeDomainFromTracking()) return\n\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t})\n\t.then(() => {\n\t\twpm.pageLoaded().then(() => {\n\t\t\tdocument.dispatchEvent(new Event(\"wpmLoad\"))\n\t\t})\n\t})\n\n\n/**\n * Run when page is ready\n */\n\n// wpm.pageReady().then(() => {\njQuery(document).on(\"pmw:ready\", () => {\n\n\t/**\n\t * Run as soon as wpm namespace is loaded\n\t */\n\n\twpm.wpmDataLayerExists()\n\t\t.then(() => {\n\t\t\t// watch for products visible in viewport\n\t\t\twpm.startIntersectionObserverToWatch()\n\n\t\t\t// watch for lazy loaded products\n\t\t\twpm.startProductsMutationObserverToWatch()\n\t\t})\n})\n\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Load all essential scripts first\n */\n\nrequire(\"./wpm/functions_loader\")\n\n// Only load the event listeners after jQuery has been loaded for sure\nwpm.jQueryExists().then(function () {\n\n\tjQuery(document).on(\"pmw:ready\", () => {\n\t\trequire(\"./wpm/event_listeners_on_ready\")\n\t})\n\n\trequire(\"./wpm/event_listeners\")\n\n\t// require(\"./wpm/wc_hooks\")\n\n\trequire(\"./google/loader\")\n\trequire(\"./facebook/loader\")\n\trequire(\"./hotjar/loader\")\n\n\t/**\n\t * Load all premium scripts\n\t */\n\n\t// #if process.env.TIER === 'premium'\n// \trequire(\"./wpm/event_listeners_premium\")\n// \trequire(\"./microsoft-ads/loader\")\n// \trequire(\"./pinterest/loader\")\n// \trequire(\"./snapchat/loader\")\n// \trequire(\"./tiktok/loader\")\n// \trequire(\"./twitter/loader\")\n\t// #endif\n\n\n\t/**\n\t * Initiate WPM.\n\t *\n\t * It makes sure that the script flow gets executed correctly,\n\t * no matter how JS \"optimizers\" shuffle the code.\n\t */\n\n\trequire(\"./wpm/init\")\n})\n\n"],"names":["jQuery","document","on","wpmDataLayer","pixels","facebook","pixel_id","loaded","wpm","doesUrlContainPatterns","exclusion_patterns","canIFire","loadFacebookPixel","event","payload","fbq","custom_data","eventID","event_id","error","console","setFbUserData","$","undefined","fbUserData","f","window","b","e","n","callMethod","apply","arguments","queue","push","_fbq","version","t","createElement","async","src","s","getElementsByTagName","parentNode","insertBefore","data","isFbpSet","isFbAdvancedMatchingEnabled","getUserIdentifiersForFb","user","id","raw","external_id","order","user_id","email","em","billing_email_hashed","first_name","fn","billing_first_name","toLowerCase","last_name","ln","billing_last_name","phone","ph","billing_phone","replace","city","ct","billing_city","state","st","billing_state","postcode","zp","billing_postcode","country","billing_country","getFbRandomEventId","Math","random","toString","substring","getFbUserData","getFbUserDataFromBrowser","advanced_matching","getCookie","isValidFbp","fbp","isValidFbc","fbc","navigator","userAgent","client_user_agent","RegExp","test","fbGetProductDataForCapiEvent","product","content_type","content_name","name","content_ids","dyn_r_ids","dynamic_remarketing","id_type","value","parseFloat","quantity","price","currency","facebookContentIds","prodIds","key","item","Object","entries","items","general","variationsOutput","variation_id","String","products","trackCustomFacebookEvent","eventName","customData","eventId","trigger","event_name","user_data","event_source_url","location","href","fbGetContentIdsFromCart","cart","require","isEmptyObject","google","ads","conversionIds","status","googleConfigConditionsMet","isVariable","send_events_with_parent_ids","send_to","getGoogleAdsConversionIdentifiers","google_business_vertical","gtagLoaded","then","gtag","value_filtered","getGoogleAdsDynamicRemarketingOrderItems","getGoogleAdsConversionIdentifiersWithLabel","data_basic","data_with_cart","transaction_id","number","new_customer","clv_order_value_filtered","customer_lifetime_value","aw_merchant_id","discount","aw_feed_country","aw_feed_language","getGoogleAdsRegularOrderItems","conversionIdentifiers","orderItems","orderItem","analytics","universal","property_id","mp_active","affiliation","value_regular","tax","shipping","coupon","getGAUAOrderItems","category","join","variant","variant_name","brand","ga3AddListNameToProduct","item_data","productPosition","list_name","shop","list_position","ga4","measurement_id","getGA4OrderItems","item_name","item_category","item_id","item_variant","item_brand","canGoogleLoad","loadGoogle","logPreventedPixelLoading","type","consent_mode","active","getConsentValues","mode","categories","includes","getVisitorConsentStatusAndUpdateGoogleConsentSettings","google_consent_settings","analytics_storage","ad_storage","updateGoogleConsentMode","cookie_consent_mgmt","explicit_consent","fireGtagGoogleAds","enhanced_conversions","phone_conversion_label","phone_conversion_number","keys","page_type","enhanced_conversion_data","fireGtagGoogleAnalyticsUA","parameters","fireGtagGoogleAnalyticsGA4","debug_mode","isGoogleActive","getGoogleGtagId","loadScriptAndCacheIt","script","textStatus","dataLayer","wait_for_update","region","ads_data_redaction","url_passthrough","linker","settings","Date","Promise","resolve","reject","startTime","wait","setTimeout","optimize","container_id","load_google_optimize_pixel","hotjar","site_id","load_hotjar_pixel","h","o","hj","q","_hjSettings","hjid","hjsv","a","r","appendChild","getComplianzCookies","cmplz_statistics","cmplz_marketing","visitorHasChosen","getCookieLawInfoCookies","analyticsCookie","adsCookie","wpmConsentValues","setConsentValueCategories","updateConsentCookieValues","cookie","explicitConsent","JSON","parse","decodeURI","indexOf","action","length","consents","statistics","marketing","thirdparty","advanced","localStorage","getItem","log","UC_UI","addEventListener","ucUiProcessConsent","areAllConsentsAccepted","groups","URLSearchParams","get","split","groupsObject","forEach","group","groupArray","groubsObject","pmw","consentAcceptAll","ucStatisticsSlug","getSettingsLabels","filter","label","slug","consentAdjustSelectively","getServicesBaseInfo","categorySlug","consent","setConsentDefaultValuesToExplicit","pixelName","canIFireMode","scriptTagObserver","MutationObserver","mutations","addedNodes","node","shouldScriptBeActive","unblockScript","blockScript","observe","head","childList","subtree","disconnect","some","element","scriptNode","removeAttach","remove","wpmSrc","attr","appendTo","dispatchEvent","Event","removeAttr","unblockAllScripts","unblockSelectedPixels","explicitConsentStateAlreadySet","Cookiebot","detail","cmplzStatusChange","cmplzConsentData","huObserver","querySelector","hu","documentElement","body","consentRevokeAll","OneTrust","reload","duration","consentSetCookie","setCookie","stringify","url","URL","currentTarget","productId","getProductIdByCartItemKeyUrl","removeProductFromCart","checkoutButtonClasses","paymentMethodSelected","fireCheckoutProgress","fireCheckoutOption","val","doesWooCommerceCartExist","getCartItems","productIds","getAddToCartLinkProductIds","getProductsFromBackend","referrer","referrerHostname","hostname","host","wpmLoadFired","product_type","getMainProductIdFromProductPage","getProductDataForViewItemEvent","isOrderIdStored","writeOrderIdToStorage","acrRemoveCookie","hasLoginEventFired","setLoginEventFired","sessionStorage","tiktok","getRandomEventId","context","getTikTokUserDataFromBrowser","properties","contents","content_id","sendEventPayloadToServer","getCartValue","search_string","getSearchTermFromUrl","query","getTikTokOrderItemIds","addToCartSelectors","addProductToCart","Number","each","index","find","classes","getPostIdFromString","one","target","closest","origin","searchParams","has","nextAll","getIdBasedOndVariationsOutputSetting","Error","getProductDetailsFormattedForEvent","isEmail","emailSelected","getCartItemsFromBackend","variation","triggerViewItemEventPrep","wpmDeduper","wpmRestSettings","checkCookie","useRestEndpoint","isSessionStorageAvailable","isRestEndpointAvailable","isBelowRestErrorThreshold","testEndpoint","root","cookieName","response","fetch","method","cache","keepalive","setItem","isWpmRestEndpointAvailable","orderId","orderKey","source","Storage","ids","expiresDate","setDate","getDate","toUTCString","storeOrderIdOnServer","orderDeduplication","quantityToRemove","isVariation","parentId","saveCartObjectToDataLayer","ajax_url","ok","json","success","headers","pageId","responseData","assign","cartObject","triggerViewItemEvent","triggerViewItemEventNoProduct","step","checkout_option","string","match","triggerViewItemList","viewItemListTriggerTestMode","css","append","viewItemListTrigger","opacity","backgroundColor","search","io","ioTimeouts","observerCallback","observer","entry","elementId","next","isIntersecting","testMode","repeat","unobserve","timeout","clearTimeout","allIoElementsToWatch","ioid","getAllElementsToWatch","map","i","elem","parent","hasClass","prev","this","startIntersectionObserverToWatch","urlHasParameter","IntersectionObserver","threshold","startProductsMutationObserverToWatch","productsNode","parents","first","productsMutationObserver","attributes","characterData","mutation","newNodes","hasWpmProductIdElement","siblings","cookieValue","expiryDays","d","setTime","getTime","expires","ca","decodeURIComponent","c","charAt","deleteCookie","getWpmSessionData","setWpmSessionData","nonce_wp_rest","order_key","nonce_ajax","responseJson","cartItemKey","cartItemKeys","matches","position","parentId_dyn_r_ids","setReferrerToCookie","getReferrerFromCookie","getClidFromBrowser","clidCookieId","clidId","gclid","dclid","getUserAgent","getViewPort","width","max","clientWidth","innerWidth","height","clientHeight","innerHeight","options","dataType","ajax","getOrderItemPrice","total","total_tax","loginEventFired","wpmDataLayerExists","waitForVar","jQueryExists","waitForjQuery","pageLoaded","readyState","pageReady","isMiniCartActive","parameter","hashAsync","algo","str","crypto","subtle","digest","TextEncoder","encode","buf","Array","prototype","call","Uint8Array","x","slice","patterns","pattern","excludeDomainFromTracking","excludeDomains","domain","debug","jQueryReadyFired","triggerDomReadyEvent","pro","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__"],"sourceRoot":""}
1
+ {"version":3,"file":"wpm-public.p1.min.js","mappings":"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E,MAAOxhB,GACRP,QAAQD,MAAMQ,EACf,MAEA,GAAItR,IAAO8yB,EAAQ,OAAO,EAI5B,OAAO,CAAK,EAGPE,EAASF,IAEd,MAAM,QAAC5jB,GAAWiI,EAAQ,KAE1B,OAAOjI,EAAQ4jB,EAAO,EAGjBC,EAAe,KAmiCpB,IAAIE,EAAuB,GAO3B,OAJIvzB,MAAMC,QAAQmQ,aAAaoG,QAAQgd,cAAcC,iBACpDF,EAAsBnjB,aAAaoG,QAAQgd,cAAcC,eAriCxC,GAwiCDrvB,OAniCF,CACd,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,wBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,wBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,sBACA,wBACA,wBACA,mBACA,mBACA,kBACA,iBACA,mBACA,oBACA,oBACA,mBACA,kBACA,oBACA,kBACA,mBACA,mBACA,mBACA,iBACA,mBACA,iBACA,iBACA,iBACA,kBACA,kBACA,oBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,kBACA,kBACA,iBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,kBACA,kBACA,kBACA,iBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,mBAGgB,CAChB,iBACA,kBACA,kBACA,iBACA,iBACA,iBACA,kBACA,kBACA,kBACA,kBACA,gBACA,kBACA,gBACA,gBACA,kBACA,kBACA,kBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,kBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,gBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,kBACA,iBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,kBACA,mBACA,kBACA,mBACA,mBACA,mBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,mBACA,mBACA,mBACA,kBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,kBACA,iBACA,mBACA,iBACA,sBACA,sBACA,mBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,iBACA,iBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,mBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,iBACA,iBACA,mBACA,mBACA,mBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,sBACA,sBACA,sBACA,mBACA,mBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,mBACA,mBACA,sBACA,sBACA,sBACA,sBACA,oBACA,mBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,oBACA,oBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,oBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,oBACA,yBACA,kBAGe,CACf,kBACA,kBACA,mBAGY,CACZ,iBACA,iBACA,iBACA,iBACA,iBACA,kBACA,iBACA,kBACA,mBACA,kBACA,qBACA,kBACA,kBACA,mBACA,mBACA,kBACA,mBACA,iBACA,mBACA,iBACA,iBACA,iBACA,iBACA,iBACA,kBAGiB,CACjB,gBACA,gBACA,gBACA,gBACA,iBACA,iBACA,iBACA,mBAGc,CACd,eACA,iBACA,iBAGa,CACb,kBACA,kBAGc,CACd,iBACA,eAGa,CACb,iBACA,kBACA,mBACA,kBACA,kBACA,kBACA,gBACA,gBACA,gBACA,kBACA,mBACA,kBACA,kBACA,oBACA,oBACA,kBACA,mBACA,mBACA,mBACA,mBACA,iBACA,kBACA,mBACA,mBACA,mBAGkB,CAClB,gBACA,eACA,gBACA,cACA,eACA,gBACA,eACA,gBACA,gBACA,eACA,gBACA,iBAGa,CACb,iBACA,eACA,iBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,iBACA,gBACA,cACA,eACA,eACA,eACA,eACA,eACA,gBACA,eACA,gBACA,kBACA,iBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,mBACA,kBAGc,CA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","sources":["webpack://Pixel-Manager-for-WooCommerce/../../src/index.ts","webpack://Pixel-Manager-for-WooCommerce/../../src/ipRange.ts","webpack://Pixel-Manager-for-WooCommerce/../../src/ipv4.ts","webpack://Pixel-Manager-for-WooCommerce/../../src/ipv6.ts","webpack://Pixel-Manager-for-WooCommerce/../../src/util.ts","webpack://Pixel-Manager-for-WooCommerce/../node_modules/ipaddr.js/lib/ipaddr.js","webpack://Pixel-Manager-for-WooCommerce/../node_modules/ip6/ip6.js","webpack://Pixel-Manager-for-WooCommerce/../src/range-check.ts","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/facebook/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/ads/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga3/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/ga4/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/analytics/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/base/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/google/optimize/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/hotjar/loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/cookie_consent.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/event_listeners.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/event_listeners_on_ready.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/functions.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/functions_loader.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/functions_main.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/ip_check.js","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/wpm/wc_hooks.js","webpack://Pixel-Manager-for-WooCommerce/webpack/bootstrap","webpack://Pixel-Manager-for-WooCommerce/webpack/runtime/define property getters","webpack://Pixel-Manager-for-WooCommerce/webpack/runtime/global","webpack://Pixel-Manager-for-WooCommerce/webpack/runtime/hasOwnProperty shorthand","webpack://Pixel-Manager-for-WooCommerce/webpack/runtime/make namespace object","webpack://Pixel-Manager-for-WooCommerce/./src/js/public/main.js"],"sourcesContent":[null,null,null,null,null,"(function() {\n var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;\n\n ipaddr = {};\n\n root = this;\n\n if ((typeof module !== \"undefined\" && module !== null) && module.exports) {\n module.exports = ipaddr;\n } else {\n root['ipaddr'] = ipaddr;\n }\n\n matchCIDR = function(first, second, partSize, cidrBits) {\n var part, shift;\n if (first.length !== second.length) {\n throw new Error(\"ipaddr: cannot match CIDR for objects with different lengths\");\n }\n part = 0;\n while (cidrBits > 0) {\n shift = partSize - cidrBits;\n if (shift < 0) {\n shift = 0;\n }\n if (first[part] >> shift !== second[part] >> shift) {\n return false;\n }\n cidrBits -= partSize;\n part += 1;\n }\n return true;\n };\n\n ipaddr.subnetMatch = function(address, rangeList, defaultName) {\n var k, len, rangeName, rangeSubnets, subnet;\n if (defaultName == null) {\n defaultName = 'unicast';\n }\n for (rangeName in rangeList) {\n rangeSubnets = rangeList[rangeName];\n if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {\n rangeSubnets = [rangeSubnets];\n }\n for (k = 0, len = rangeSubnets.length; k < len; k++) {\n subnet = rangeSubnets[k];\n if (address.kind() === subnet[0].kind()) {\n if (address.match.apply(address, subnet)) {\n return rangeName;\n }\n }\n }\n }\n return defaultName;\n };\n\n ipaddr.IPv4 = (function() {\n function IPv4(octets) {\n var k, len, octet;\n if (octets.length !== 4) {\n throw new Error(\"ipaddr: ipv4 octet count should be 4\");\n }\n for (k = 0, len = octets.length; k < len; k++) {\n octet = octets[k];\n if (!((0 <= octet && octet <= 255))) {\n throw new Error(\"ipaddr: ipv4 octet should fit in 8 bits\");\n }\n }\n this.octets = octets;\n }\n\n IPv4.prototype.kind = function() {\n return 'ipv4';\n };\n\n IPv4.prototype.toString = function() {\n return this.octets.join(\".\");\n };\n\n IPv4.prototype.toNormalizedString = function() {\n return this.toString();\n };\n\n IPv4.prototype.toByteArray = function() {\n return this.octets.slice(0);\n };\n\n IPv4.prototype.match = function(other, cidrRange) {\n var ref;\n if (cidrRange === void 0) {\n ref = other, other = ref[0], cidrRange = ref[1];\n }\n if (other.kind() !== 'ipv4') {\n throw new Error(\"ipaddr: cannot match ipv4 address with non-ipv4 one\");\n }\n return matchCIDR(this.octets, other.octets, 8, cidrRange);\n };\n\n IPv4.prototype.SpecialRanges = {\n unspecified: [[new IPv4([0, 0, 0, 0]), 8]],\n broadcast: [[new IPv4([255, 255, 255, 255]), 32]],\n multicast: [[new IPv4([224, 0, 0, 0]), 4]],\n linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],\n loopback: [[new IPv4([127, 0, 0, 0]), 8]],\n carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],\n \"private\": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],\n reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]\n };\n\n IPv4.prototype.range = function() {\n return ipaddr.subnetMatch(this, this.SpecialRanges);\n };\n\n IPv4.prototype.toIPv4MappedAddress = function() {\n return ipaddr.IPv6.parse(\"::ffff:\" + (this.toString()));\n };\n\n IPv4.prototype.prefixLengthFromSubnetMask = function() {\n var cidr, i, k, octet, stop, zeros, zerotable;\n zerotable = {\n 0: 8,\n 128: 7,\n 192: 6,\n 224: 5,\n 240: 4,\n 248: 3,\n 252: 2,\n 254: 1,\n 255: 0\n };\n cidr = 0;\n stop = false;\n for (i = k = 3; k >= 0; i = k += -1) {\n octet = this.octets[i];\n if (octet in zerotable) {\n zeros = zerotable[octet];\n if (stop && zeros !== 0) {\n return null;\n }\n if (zeros !== 8) {\n stop = true;\n }\n cidr += zeros;\n } else {\n return null;\n }\n }\n return 32 - cidr;\n };\n\n return IPv4;\n\n })();\n\n ipv4Part = \"(0?\\\\d+|0x[a-f0-9]+)\";\n\n ipv4Regexes = {\n fourOctet: new RegExp(\"^\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"$\", 'i'),\n longValue: new RegExp(\"^\" + ipv4Part + \"$\", 'i')\n };\n\n ipaddr.IPv4.parser = function(string) {\n var match, parseIntAuto, part, shift, value;\n parseIntAuto = function(string) {\n if (string[0] === \"0\" && string[1] !== \"x\") {\n return parseInt(string, 8);\n } else {\n return parseInt(string);\n }\n };\n if (match = string.match(ipv4Regexes.fourOctet)) {\n return (function() {\n var k, len, ref, results;\n ref = match.slice(1, 6);\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(parseIntAuto(part));\n }\n return results;\n })();\n } else if (match = string.match(ipv4Regexes.longValue)) {\n value = parseIntAuto(match[1]);\n if (value > 0xffffffff || value < 0) {\n throw new Error(\"ipaddr: address outside defined range\");\n }\n return ((function() {\n var k, results;\n results = [];\n for (shift = k = 0; k <= 24; shift = k += 8) {\n results.push((value >> shift) & 0xff);\n }\n return results;\n })()).reverse();\n } else {\n return null;\n }\n };\n\n ipaddr.IPv6 = (function() {\n function IPv6(parts, zoneId) {\n var i, k, l, len, part, ref;\n if (parts.length === 16) {\n this.parts = [];\n for (i = k = 0; k <= 14; i = k += 2) {\n this.parts.push((parts[i] << 8) | parts[i + 1]);\n }\n } else if (parts.length === 8) {\n this.parts = parts;\n } else {\n throw new Error(\"ipaddr: ipv6 part count should be 8 or 16\");\n }\n ref = this.parts;\n for (l = 0, len = ref.length; l < len; l++) {\n part = ref[l];\n if (!((0 <= part && part <= 0xffff))) {\n throw new Error(\"ipaddr: ipv6 part should fit in 16 bits\");\n }\n }\n if (zoneId) {\n this.zoneId = zoneId;\n }\n }\n\n IPv6.prototype.kind = function() {\n return 'ipv6';\n };\n\n IPv6.prototype.toString = function() {\n return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::');\n };\n\n IPv6.prototype.toRFC5952String = function() {\n var bestMatchIndex, bestMatchLength, match, regex, string;\n regex = /((^|:)(0(:|$)){2,})/g;\n string = this.toNormalizedString();\n bestMatchIndex = 0;\n bestMatchLength = -1;\n while ((match = regex.exec(string))) {\n if (match[0].length > bestMatchLength) {\n bestMatchIndex = match.index;\n bestMatchLength = match[0].length;\n }\n }\n if (bestMatchLength < 0) {\n return string;\n }\n return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength);\n };\n\n IPv6.prototype.toByteArray = function() {\n var bytes, k, len, part, ref;\n bytes = [];\n ref = this.parts;\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n bytes.push(part >> 8);\n bytes.push(part & 0xff);\n }\n return bytes;\n };\n\n IPv6.prototype.toNormalizedString = function() {\n var addr, part, suffix;\n addr = ((function() {\n var k, len, ref, results;\n ref = this.parts;\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(part.toString(16));\n }\n return results;\n }).call(this)).join(\":\");\n suffix = '';\n if (this.zoneId) {\n suffix = '%' + this.zoneId;\n }\n return addr + suffix;\n };\n\n IPv6.prototype.toFixedLengthString = function() {\n var addr, part, suffix;\n addr = ((function() {\n var k, len, ref, results;\n ref = this.parts;\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(part.toString(16).padStart(4, '0'));\n }\n return results;\n }).call(this)).join(\":\");\n suffix = '';\n if (this.zoneId) {\n suffix = '%' + this.zoneId;\n }\n return addr + suffix;\n };\n\n IPv6.prototype.match = function(other, cidrRange) {\n var ref;\n if (cidrRange === void 0) {\n ref = other, other = ref[0], cidrRange = ref[1];\n }\n if (other.kind() !== 'ipv6') {\n throw new Error(\"ipaddr: cannot match ipv6 address with non-ipv6 one\");\n }\n return matchCIDR(this.parts, other.parts, 16, cidrRange);\n };\n\n IPv6.prototype.SpecialRanges = {\n unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],\n linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10],\n multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8],\n loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],\n uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7],\n ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96],\n rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96],\n rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96],\n '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16],\n teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32],\n reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]]\n };\n\n IPv6.prototype.range = function() {\n return ipaddr.subnetMatch(this, this.SpecialRanges);\n };\n\n IPv6.prototype.isIPv4MappedAddress = function() {\n return this.range() === 'ipv4Mapped';\n };\n\n IPv6.prototype.toIPv4Address = function() {\n var high, low, ref;\n if (!this.isIPv4MappedAddress()) {\n throw new Error(\"ipaddr: trying to convert a generic ipv6 address to ipv4\");\n }\n ref = this.parts.slice(-2), high = ref[0], low = ref[1];\n return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);\n };\n\n IPv6.prototype.prefixLengthFromSubnetMask = function() {\n var cidr, i, k, part, stop, zeros, zerotable;\n zerotable = {\n 0: 16,\n 32768: 15,\n 49152: 14,\n 57344: 13,\n 61440: 12,\n 63488: 11,\n 64512: 10,\n 65024: 9,\n 65280: 8,\n 65408: 7,\n 65472: 6,\n 65504: 5,\n 65520: 4,\n 65528: 3,\n 65532: 2,\n 65534: 1,\n 65535: 0\n };\n cidr = 0;\n stop = false;\n for (i = k = 7; k >= 0; i = k += -1) {\n part = this.parts[i];\n if (part in zerotable) {\n zeros = zerotable[part];\n if (stop && zeros !== 0) {\n return null;\n }\n if (zeros !== 16) {\n stop = true;\n }\n cidr += zeros;\n } else {\n return null;\n }\n }\n return 128 - cidr;\n };\n\n return IPv6;\n\n })();\n\n ipv6Part = \"(?:[0-9a-f]+::?)+\";\n\n zoneIndex = \"%[0-9a-z]{1,}\";\n\n ipv6Regexes = {\n zoneIndex: new RegExp(zoneIndex, 'i'),\n \"native\": new RegExp(\"^(::)?(\" + ipv6Part + \")?([0-9a-f]+)?(::)?(\" + zoneIndex + \")?$\", 'i'),\n transitional: new RegExp((\"^((?:\" + ipv6Part + \")|(?:::)(?:\" + ipv6Part + \")?)\") + (ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part) + (\"(\" + zoneIndex + \")?$\"), 'i')\n };\n\n expandIPv6 = function(string, parts) {\n var colonCount, lastColon, part, replacement, replacementCount, zoneId;\n if (string.indexOf('::') !== string.lastIndexOf('::')) {\n return null;\n }\n zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0];\n if (zoneId) {\n zoneId = zoneId.substring(1);\n string = string.replace(/%.+$/, '');\n }\n colonCount = 0;\n lastColon = -1;\n while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {\n colonCount++;\n }\n if (string.substr(0, 2) === '::') {\n colonCount--;\n }\n if (string.substr(-2, 2) === '::') {\n colonCount--;\n }\n if (colonCount > parts) {\n return null;\n }\n replacementCount = parts - colonCount;\n replacement = ':';\n while (replacementCount--) {\n replacement += '0:';\n }\n string = string.replace('::', replacement);\n if (string[0] === ':') {\n string = string.slice(1);\n }\n if (string[string.length - 1] === ':') {\n string = string.slice(0, -1);\n }\n parts = (function() {\n var k, len, ref, results;\n ref = string.split(\":\");\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(parseInt(part, 16));\n }\n return results;\n })();\n return {\n parts: parts,\n zoneId: zoneId\n };\n };\n\n ipaddr.IPv6.parser = function(string) {\n var addr, k, len, match, octet, octets, zoneId;\n if (ipv6Regexes['native'].test(string)) {\n return expandIPv6(string, 8);\n } else if (match = string.match(ipv6Regexes['transitional'])) {\n zoneId = match[6] || '';\n addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);\n if (addr.parts) {\n octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];\n for (k = 0, len = octets.length; k < len; k++) {\n octet = octets[k];\n if (!((0 <= octet && octet <= 255))) {\n return null;\n }\n }\n addr.parts.push(octets[0] << 8 | octets[1]);\n addr.parts.push(octets[2] << 8 | octets[3]);\n return {\n parts: addr.parts,\n zoneId: addr.zoneId\n };\n }\n }\n return null;\n };\n\n ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {\n return this.parser(string) !== null;\n };\n\n ipaddr.IPv4.isValid = function(string) {\n var e;\n try {\n new this(this.parser(string));\n return true;\n } catch (error1) {\n e = error1;\n return false;\n }\n };\n\n ipaddr.IPv4.isValidFourPartDecimal = function(string) {\n if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$/)) {\n return true;\n } else {\n return false;\n }\n };\n\n ipaddr.IPv6.isValid = function(string) {\n var addr, e;\n if (typeof string === \"string\" && string.indexOf(\":\") === -1) {\n return false;\n }\n try {\n addr = this.parser(string);\n new this(addr.parts, addr.zoneId);\n return true;\n } catch (error1) {\n e = error1;\n return false;\n }\n };\n\n ipaddr.IPv4.parse = function(string) {\n var parts;\n parts = this.parser(string);\n if (parts === null) {\n throw new Error(\"ipaddr: string is not formatted like ip address\");\n }\n return new this(parts);\n };\n\n ipaddr.IPv6.parse = function(string) {\n var addr;\n addr = this.parser(string);\n if (addr.parts === null) {\n throw new Error(\"ipaddr: string is not formatted like ip address\");\n }\n return new this(addr.parts, addr.zoneId);\n };\n\n ipaddr.IPv4.parseCIDR = function(string) {\n var maskLength, match, parsed;\n if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n maskLength = parseInt(match[2]);\n if (maskLength >= 0 && maskLength <= 32) {\n parsed = [this.parse(match[1]), maskLength];\n Object.defineProperty(parsed, 'toString', {\n value: function() {\n return this.join('/');\n }\n });\n return parsed;\n }\n }\n throw new Error(\"ipaddr: string is not formatted like an IPv4 CIDR range\");\n };\n\n ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {\n var filledOctetCount, j, octets;\n prefix = parseInt(prefix);\n if (prefix < 0 || prefix > 32) {\n throw new Error('ipaddr: invalid IPv4 prefix length');\n }\n octets = [0, 0, 0, 0];\n j = 0;\n filledOctetCount = Math.floor(prefix / 8);\n while (j < filledOctetCount) {\n octets[j] = 255;\n j++;\n }\n if (filledOctetCount < 4) {\n octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8);\n }\n return new this(octets);\n };\n\n ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {\n var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n try {\n cidr = this.parseCIDR(string);\n ipInterfaceOctets = cidr[0].toByteArray();\n subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n octets = [];\n i = 0;\n while (i < 4) {\n octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);\n i++;\n }\n return new this(octets);\n } catch (error1) {\n error = error1;\n throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n }\n };\n\n ipaddr.IPv4.networkAddressFromCIDR = function(string) {\n var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n try {\n cidr = this.parseCIDR(string);\n ipInterfaceOctets = cidr[0].toByteArray();\n subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n octets = [];\n i = 0;\n while (i < 4) {\n octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));\n i++;\n }\n return new this(octets);\n } catch (error1) {\n error = error1;\n throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n }\n };\n\n ipaddr.IPv6.parseCIDR = function(string) {\n var maskLength, match, parsed;\n if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n maskLength = parseInt(match[2]);\n if (maskLength >= 0 && maskLength <= 128) {\n parsed = [this.parse(match[1]), maskLength];\n Object.defineProperty(parsed, 'toString', {\n value: function() {\n return this.join('/');\n }\n });\n return parsed;\n }\n }\n throw new Error(\"ipaddr: string is not formatted like an IPv6 CIDR range\");\n };\n\n ipaddr.isValid = function(string) {\n return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);\n };\n\n ipaddr.parse = function(string) {\n if (ipaddr.IPv6.isValid(string)) {\n return ipaddr.IPv6.parse(string);\n } else if (ipaddr.IPv4.isValid(string)) {\n return ipaddr.IPv4.parse(string);\n } else {\n throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 format\");\n }\n };\n\n ipaddr.parseCIDR = function(string) {\n var e;\n try {\n return ipaddr.IPv6.parseCIDR(string);\n } catch (error1) {\n e = error1;\n try {\n return ipaddr.IPv4.parseCIDR(string);\n } catch (error1) {\n e = error1;\n throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 CIDR format\");\n }\n }\n };\n\n ipaddr.fromByteArray = function(bytes) {\n var length;\n length = bytes.length;\n if (length === 4) {\n return new ipaddr.IPv4(bytes);\n } else if (length === 16) {\n return new ipaddr.IPv6(bytes);\n } else {\n throw new Error(\"ipaddr: the binary input is neither an IPv6 nor IPv4 address\");\n }\n };\n\n ipaddr.process = function(string) {\n var addr;\n addr = this.parse(string);\n if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) {\n return addr.toIPv4Address();\n } else {\n return addr;\n }\n };\n\n}).call(this);\n","/**\n * Created by elgs on 3/5/16.\n */\nconst normalize = function (a) {\n if (!_validate(a)) {\n throw new Error('Invalid address: ' + a);\n }\n a = a.toLowerCase()\n\n const nh = a.split(/\\:\\:/g);\n if (nh.length > 2) {\n throw new Error('Invalid address: ' + a);\n }\n\n let sections = [];\n if (nh.length == 1) {\n // full mode\n sections = a.split(/\\:/g);\n if (sections.length !== 8) {\n throw new Error('Invalid address: ' + a);\n }\n } else if (nh.length == 2) {\n // compact mode\n const n = nh[0];\n const h = nh[1];\n const ns = n.split(/\\:/g);\n const hs = h.split(/\\:/g);\n for (let i in ns) {\n sections[i] = ns[i];\n }\n for (let i = hs.length; i > 0; --i) {\n sections[7 - (hs.length - i)] = hs[i - 1];\n }\n }\n for (let i = 0; i < 8; ++i) {\n if (sections[i] === undefined) {\n sections[i] = '0000';\n }\n sections[i] = _leftPad(sections[i], '0', 4);\n }\n return sections.join(':');\n};\n\nconst abbreviate = function (a) {\n if (!_validate(a)) {\n throw new Error('Invalid address: ' + a);\n }\n a = normalize(a);\n a = a.replace(/0000/g, 'g');\n a = a.replace(/\\:000/g, ':');\n a = a.replace(/\\:00/g, ':');\n a = a.replace(/\\:0/g, ':');\n a = a.replace(/g/g, '0');\n const sections = a.split(/\\:/g);\n let zPreviousFlag = false;\n let zeroStartIndex = -1;\n let zeroLength = 0;\n let zStartIndex = -1;\n let zLength = 0;\n for (let i = 0; i < 8; ++i) {\n const section = sections[i];\n let zFlag = (section === '0');\n if (zFlag && !zPreviousFlag) {\n zStartIndex = i;\n }\n if (!zFlag && zPreviousFlag) {\n zLength = i - zStartIndex;\n }\n if (zLength > 1 && zLength > zeroLength) {\n zeroStartIndex = zStartIndex;\n zeroLength = zLength;\n }\n zPreviousFlag = (section === '0');\n }\n if (zPreviousFlag) {\n zLength = 8 - zStartIndex;\n }\n if (zLength > 1 && zLength > zeroLength) {\n zeroStartIndex = zStartIndex;\n zeroLength = zLength;\n }\n //console.log(zeroStartIndex, zeroLength);\n //console.log(sections);\n if (zeroStartIndex >= 0 && zeroLength > 1) {\n sections.splice(zeroStartIndex, zeroLength, 'g');\n }\n //console.log(sections);\n a = sections.join(':');\n //console.log(a);\n a = a.replace(/\\:g\\:/g, '::');\n a = a.replace(/\\:g/g, '::');\n a = a.replace(/g\\:/g, '::');\n a = a.replace(/g/g, '::');\n //console.log(a);\n return a;\n};\n\n// Basic validation\nconst _validate = function (a) {\n return /^[a-f0-9\\\\:]+$/ig.test(a);\n};\n\nconst _leftPad = function (d, p, n) {\n const padding = p.repeat(n);\n if (d.length < padding.length) {\n d = padding.substring(0, padding.length - d.length) + d;\n }\n return d;\n};\n\nconst _hex2bin = function (hex) {\n return parseInt(hex, 16).toString(2)\n};\nconst _bin2hex = function (bin) {\n return parseInt(bin, 2).toString(16)\n};\n\nconst _addr2bin = function (addr) {\n const nAddr = normalize(addr);\n const sections = nAddr.split(\":\");\n let binAddr = '';\n for (const section of sections) {\n binAddr += _leftPad(_hex2bin(section), '0', 16);\n }\n return binAddr;\n};\n\nconst _bin2addr = function (bin) {\n const addr = [];\n for (let i = 0; i < 8; ++i) {\n const binPart = bin.substr(i * 16, 16);\n const hexSection = _leftPad(_bin2hex(binPart), '0', 4);\n addr.push(hexSection);\n }\n return addr.join(':');\n};\n\nconst divideSubnet = function (addr, mask0, mask1, limit, abbr) {\n if (!_validate(addr)) {\n throw new Error('Invalid address: ' + addr);\n }\n mask0 *= 1;\n mask1 *= 1;\n limit *= 1;\n mask1 = mask1 || 128;\n if (mask0 < 1 || mask1 < 1 || mask0 > 128 || mask1 > 128 || mask0 > mask1) {\n throw new Error('Invalid masks.');\n }\n const ret = [];\n const binAddr = _addr2bin(addr);\n const binNetPart = binAddr.substr(0, mask0);\n const binHostPart = '0'.repeat(128 - mask1);\n const numSubnets = Math.pow(2, mask1 - mask0);\n for (let i = 0; i < numSubnets; ++i) {\n if (!!limit && i >= limit) {\n break;\n }\n const binSubnet = _leftPad(i.toString(2), '0', mask1 - mask0);\n const binSubAddr = binNetPart + binSubnet + binHostPart;\n const hexAddr = _bin2addr(binSubAddr);\n if (!!abbr) {\n ret.push(abbreviate(hexAddr));\n } else {\n ret.push(hexAddr);\n }\n\n }\n // console.log(numSubnets);\n // console.log(binNetPart, binSubnetPart, binHostPart);\n // console.log(binNetPart.length, binSubnetPart.length, binHostPart.length);\n // console.log(ret.length);\n return ret;\n};\n\nconst range = function (addr, mask0, mask1, abbr) {\n if (!_validate(addr)) {\n throw new Error('Invalid address: ' + addr);\n }\n mask0 *= 1;\n mask1 *= 1;\n mask1 = mask1 || 128;\n if (mask0 < 1 || mask1 < 1 || mask0 > 128 || mask1 > 128 || mask0 > mask1) {\n throw new Error('Invalid masks.');\n }\n const binAddr = _addr2bin(addr);\n const binNetPart = binAddr.substr(0, mask0);\n const binHostPart = '0'.repeat(128 - mask1);\n const binStartAddr = binNetPart + '0'.repeat(mask1 - mask0) + binHostPart;\n const binEndAddr = binNetPart + '1'.repeat(mask1 - mask0) + binHostPart;\n if (!!abbr) {\n return {\n start: abbreviate(_bin2addr(binStartAddr)),\n end: abbreviate(_bin2addr(binEndAddr)),\n size: Math.pow(2, mask1 - mask0)\n };\n } else {\n return {\n start: _bin2addr(binStartAddr),\n end: _bin2addr(binEndAddr),\n size: Math.pow(2, mask1 - mask0)\n };\n }\n};\n\nconst randomSubnet = function (addr, mask0, mask1, limit, abbr) {\n if (!_validate(addr)) {\n throw new Error('Invalid address: ' + addr);\n }\n mask0 *= 1;\n mask1 *= 1;\n limit *= 1;\n mask1 = mask1 || 128;\n limit = limit || 1;\n if (mask0 < 1 || mask1 < 1 || mask0 > 128 || mask1 > 128 || mask0 > mask1) {\n throw new Error('Invalid masks.');\n }\n const ret = [];\n const binAddr = _addr2bin(addr);\n const binNetPart = binAddr.substr(0, mask0);\n const binHostPart = '0'.repeat(128 - mask1);\n const numSubnets = Math.pow(2, mask1 - mask0);\n for (let i = 0; i < numSubnets && i < limit; ++i) {\n // generate an binary string with length of mask1 - mask0\n let binSubnet = '';\n for (let j = 0; j < mask1 - mask0; ++j) {\n binSubnet += Math.floor(Math.random() * 2);\n }\n const binSubAddr = binNetPart + binSubnet + binHostPart;\n const hexAddr = _bin2addr(binSubAddr);\n if (!!abbr) {\n ret.push(abbreviate(hexAddr));\n } else {\n ret.push(hexAddr);\n }\n }\n // console.log(numSubnets);\n // console.log(binNetPart, binSubnetPart, binHostPart);\n // console.log(binNetPart.length, binSubnetPart.length, binHostPart.length);\n // console.log(ret.length);\n return ret;\n};\n\nconst ptr = function (addr, mask) {\n if (!_validate(addr)) {\n throw new Error('Invalid address: ' + addr);\n }\n mask *= 1;\n if (mask < 1 || mask > 128 || Math.floor(mask / 4) != mask / 4) {\n throw new Error('Invalid masks.');\n }\n const fullAddr = normalize(addr);\n const reverse = fullAddr.replace(/:/g, '').split('').reverse();\n return reverse.slice(0, (128 - mask) / 4).join('.');\n};\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n exports.normalize = normalize;\n exports.abbreviate = abbreviate;\n exports.divideSubnet = divideSubnet;\n exports.range = range;\n exports.randomSubnet = randomSubnet;\n exports.ptr = ptr;\n} else {\n window.normalize = normalize;\n window.abbreviate = abbreviate;\n window.divideSubnet = divideSubnet;\n window.range = range;\n window.randomSubnet = randomSubnet;\n window.ptr = ptr;\n}\n","import ipaddr from 'ipaddr.js';\n// @ts-ignore: Can't find a @types/ip6 package\nimport ip6 from 'ip6';\n\nexport function isIP(addr: string) {\n return ipaddr.isValid(addr);\n}\n\nexport function version(addr: string): number {\n try {\n const parse_addr = ipaddr.parse(addr);\n const kind = parse_addr.kind();\n\n if (kind === 'ipv4') {\n return 4; //IPv4\n } else if (kind === 'ipv6') {\n return 6; //IPv6\n } else {\n /* istanbul ignore next */\n return 0; //not 4 or 6\n }\n } catch (err) {\n return 0; //not 4 or 6\n }\n}\n\nexport function isV4(addr: string) {\n return version(addr) === 4;\n}\n\nexport function isV6(addr: string) {\n return version(addr) === 6;\n}\n\nexport function isRange(range: string) {\n try {\n const cidr = ipaddr.parseCIDR(range);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nexport function inRange(addr: string, range: string | string[]) {\n if (typeof range === 'string') {\n if (range.indexOf('/') !== -1) {\n try {\n const range_data = range.split('/');\n\n const parse_addr = ipaddr.parse(addr);\n const parse_range = ipaddr.parse(range_data[0]);\n\n //@ts-ignore: It works.\n return parse_addr.match(parse_range, range_data[1]);\n } catch (err) {\n return false;\n }\n } else {\n addr = isV6(addr) ? ip6.normalize(addr) : addr; //v6 normalize addr\n range = isV6(range) ? ip6.normalize(range) : range; //v6 normalize range\n\n return isIP(range as string) && addr === range;\n }\n } else if (range && typeof range === 'object') {\n //list\n for (const check_range in range) {\n if (inRange(addr, range[check_range]) === true) {\n return true;\n }\n }\n return false;\n } else {\n return false;\n }\n}\n\nexport function storeIP(addr: string) {\n try {\n var parse_addr = ipaddr.parse(addr);\n var kind = parse_addr.kind();\n\n if (kind === 'ipv4') {\n //is a plain v4 address\n return addr;\n } else if (kind === 'ipv6') {\n //@ts-ignore: it exists!\n if (parse_addr.isIPv4MappedAddress()) {\n //convert v4 mapped to v6 addresses to a v4 in it's original format\n //@ts-ignore: it exists!\n return parse_addr.toIPv4Address().toString();\n } //is a v6, abbreviate it\n else {\n return ip6.abbreviate(addr);\n }\n } else {\n return null; //invalid IP address\n }\n } catch (err) {\n return null; //invalid IP address\n }\n}\n\n// searchIP is a aliases of storeIP\nexport { storeIP as searchIP };\n\nexport function displayIP(addr: string) {\n try {\n var parse_addr = ipaddr.parse(addr);\n var kind = parse_addr.kind();\n\n if (kind === 'ipv4') {\n //is a plain v4 address\n return addr;\n } else if (kind === 'ipv6') {\n //@ts-ignore: it exists!\n if (parse_addr.isIPv4MappedAddress()) {\n //convert v4 mapped to v6 addresses to a v4 in it's original format\n //@ts-ignore: it exists!\n return parse_addr.toIPv4Address().toString();\n } //is a v6, normalize it\n else {\n return ip6.normalize(addr);\n }\n } else {\n return ''; //invalid IP address\n }\n } catch (err) {\n return ''; //invalid IP address\n }\n}\n","/**\n * All event listeners\n *\n * https://developers.facebook.com/docs/meta-pixel/reference\n * */\n\n// Load pixel event\njQuery(document).on(\"wpmLoadPixels\", () => {\n\n\tif (\n\t\twpmDataLayer?.pixels?.facebook?.pixel_id\n\t\t&& !wpmDataLayer?.pixels?.facebook?.loaded\n\t\t&& !wpm.doesUrlContainPatterns(wpmDataLayer?.pixels?.facebook?.exclusion_patterns)\n\t) {\n\t\tif (wpm.canIFire(\"ads\", \"facebook-ads\")) wpm.loadFacebookPixel()\n\t}\n})\n\n// AddToCart event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideAddToCart\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"AddToCart\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// InitiateCheckout event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideBeginCheckout\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"InitiateCheckout\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// AddToWishlist event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideAddToWishlist\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"AddToWishlist\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// ViewContent event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideViewItem\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"ViewContent\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n\n// view search event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideSearch\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"Search\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// load always event\njQuery(document).on(\"wpmLoadAlways\", () => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\twpm.setFbUserData()\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n\n// view order received page event\n// https://developers.facebook.com/docs/meta-pixel/reference\njQuery(document).on(\"wpmClientSideOrderReceivedPage\", (event, payload) => {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\tfbq(\"track\", \"Purchase\", payload.facebook.custom_data, {\n\t\t\teventID: payload.facebook.event_id,\n\t\t})\n\t} catch (error) {\n\t\tconsole.error(error)\n\t}\n})\n","/**\n * Add functions for Facebook\n * */\n\n(function (wpm, $, undefined) {\n\n\tlet fbUserData\n\n\twpm.loadFacebookPixel = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.facebook.loaded = true\n\n\t\t\t// @formatter:off\n\t\t\t!function(f,b,e,v,n,t,s)\n\t\t\t{if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n\t\t\t\tn.callMethod.apply(n,arguments):n.queue.push(arguments)};\n\t\t\t\tif(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n\t\t\t\tn.queue=[];t=b.createElement(e);t.async=!0;\n\t\t\t\tt.src=v;s=b.getElementsByTagName(e)[0];\n\t\t\t\ts.parentNode.insertBefore(t,s)}(window, document,'script',\n\t\t\t\t'https://connect.facebook.net/en_US/fbevents.js');\n\t\t\t// @formatter:on\n\n\t\t\tlet data = {}\n\n\t\t\t// Add user identifiers to data,\n\t\t\t// and only if fbp was set\n\t\t\tif (wpm.isFbpSet() && wpm.isFbAdvancedMatchingEnabled()) {\n\t\t\t\tdata = {...wpm.getUserIdentifiersForFb()}\n\t\t\t}\n\n\t\t\tfbq(\"init\", wpmDataLayer.pixels.facebook.pixel_id, data)\n\t\t\tfbq(\"track\", \"PageView\")\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// https://developers.facebook.com/docs/meta-pixel/advanced/advanced-matching\n\twpm.getUserIdentifiersForFb = () => {\n\n\t\tlet data = {}\n\n\t\t// external ID\n\t\tif (wpmDataLayer?.user?.id?.raw) data.external_id = wpmDataLayer.user.id.raw\n\t\tif (wpmDataLayer?.order?.user_id) data.external_id = wpmDataLayer.order.user_id\n\n\t\t// email\n\t\tif (wpmDataLayer?.user?.email?.facebook) data.em = wpmDataLayer.user.email.facebook\n\t\tif (wpmDataLayer?.order?.billing_email_hashed) data.em = wpmDataLayer.order.billing_email_hashed\n\n\t\t// first name\n\t\tif (wpmDataLayer?.user?.first_name?.facebook) data.fn = wpmDataLayer.user.first_name.facebook\n\t\tif (wpmDataLayer?.order?.billing_first_name) data.fn = wpmDataLayer.order.billing_first_name.toLowerCase()\n\n\t\t// last name\n\t\tif (wpmDataLayer?.user?.last_name?.facebook) data.ln = wpmDataLayer.user.last_name.facebook\n\t\tif (wpmDataLayer?.order?.billing_last_name) data.ln = wpmDataLayer.order.billing_last_name.toLowerCase()\n\n\t\t// phone\n\t\tif (wpmDataLayer?.user?.phone?.facebook) data.ph = wpmDataLayer.user.phone.facebook\n\t\tif (wpmDataLayer?.order?.billing_phone) data.ph = wpmDataLayer.order.billing_phone.replace(\"+\", \"\")\n\n\t\t// city\n\t\tif (wpmDataLayer?.user?.city?.facebook) data.ct = wpmDataLayer.user.city.facebook\n\t\tif (wpmDataLayer?.order?.billing_city) data.ct = wpmDataLayer.order.billing_city.toLowerCase().replace(/ /g, \"\")\n\n\t\t// state\n\t\tif (wpmDataLayer?.user?.state?.facebook) data.st = wpmDataLayer.user.state.facebook\n\t\tif (wpmDataLayer?.order?.billing_state) data.st = wpmDataLayer.order.billing_state.toLowerCase().replace(/[a-zA-Z]{2}-/, \"\")\n\n\t\t// postcode\n\t\tif (wpmDataLayer?.user?.postcode?.facebook) data.zp = wpmDataLayer.user.postcode.facebook\n\t\tif (wpmDataLayer?.order?.billing_postcode) data.zp = wpmDataLayer.order.billing_postcode\n\n\t\t// country\n\t\tif (wpmDataLayer?.user?.country?.facebook) data.country = wpmDataLayer.user.country.facebook\n\t\tif (wpmDataLayer?.order?.billing_country) data.country = wpmDataLayer.order.billing_country.toLowerCase()\n\n\t\treturn data\n\t}\n\n\twpm.getFbRandomEventId = () => (Math.random() + 1).toString(36).substring(2)\n\n\twpm.getFbUserData = () => {\n\n\t\t/**\n\t\t * We need to cache the FB user data for InitiateCheckout\n\t\t * where getting the user data from the browser is too slow\n\t\t * using wpm.getCookie().\n\t\t *\n\t\t * And we need the object merge because the ViewContent hit happens too fast\n\t\t * after adding a variation to the cart because the function to cache\n\t\t * the user data is too slow.\n\t\t *\n\t\t * But we can get the user_data using wpm.getCookie()\n\t\t * because we don't move away from the page and can wait for the browser\n\t\t * to get it.\n\t\t *\n\t\t * Also, the merge ensures that new data will be added to fbUserData if new\n\t\t * data is being added later, like user ID, or fbc.\n\t\t */\n\n\t\tfbUserData = {...fbUserData, ...wpm.getFbUserDataFromBrowser()}\n\n\t\treturn fbUserData\n\t}\n\n\twpm.isFbAdvancedMatchingEnabled = () => {\n\t\tif (wpmDataLayer?.pixels?.facebook?.advanced_matching) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.setFbUserData = () => {\n\t\tfbUserData = wpm.getFbUserDataFromBrowser()\n\t}\n\n\twpm.getFbUserDataFromBrowser = () => {\n\n\t\tlet\n\t\t\tdata = {}\n\n\t\tif (wpm.getCookie(\"_fbp\") && wpm.isValidFbp(wpm.getCookie(\"_fbp\"))) {\n\t\t\tdata.fbp = wpm.getCookie(\"_fbp\")\n\t\t}\n\n\t\tif (wpm.getCookie(\"_fbc\") && wpm.isValidFbc(wpm.getCookie(\"_fbc\"))) {\n\t\t\tdata.fbc = wpm.getCookie(\"_fbc\")\n\t\t}\n\n\t\tif (wpm.isFbAdvancedMatchingEnabled()) {\n\t\t\tif (wpmDataLayer?.user?.id?.raw) data.external_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\tif (navigator.userAgent) data.client_user_agent = navigator.userAgent\n\n\t\treturn data\n\t}\n\n\twpm.isFbpSet = () => {\n\t\treturn !!wpm.getCookie(\"_fbp\")\n\t}\n\n\t// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/\n\twpm.isValidFbp = fbp => {\n\n\t\tlet re = new RegExp(/^fb\\.[0-2]\\.\\d{13}\\.\\d{8,20}$/)\n\n\t\treturn re.test(fbp)\n\t}\n\n\t// https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/\n\twpm.isValidFbc = fbc => {\n\n\t\tlet re = new RegExp(/^fb\\.[0-2]\\.\\d{13}\\.[\\da-zA-Z_-]{8,}/)\n\n\t\treturn re.test(fbc)\n\t}\n\n\t// wpm.fbViewContent = (product = null) => {\n\t//\n\t// \ttry {\n\t// \t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\t//\n\t// \t\tlet eventId = wpm.getFbRandomEventId()\n\t//\n\t// \t\tlet data = {}\n\t//\n\t// \t\tif (product) {\n\t// \t\t\tdata.content_type = \"product\"\n\t// \t\t\tdata.content_name = product.name\n\t// \t\t\t// data.content_category = product.category\n\t// \t\t\tdata.content_ids = product.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]\n\t// \t\t\tdata.currency = wpmDataLayer.shop.currency\n\t// \t\t\tdata.value = product.price\n\t// \t\t}\n\t//\n\t// \t\tfbq(\"track\", \"ViewContent\", data, {\n\t// \t\t\teventID: eventId,\n\t// \t\t})\n\t//\n\t// \t\tlet capiData = {\n\t// \t\t\tevent_name : \"ViewContent\",\n\t// \t\t\tevent_id : eventId,\n\t// \t\t\tuser_data : wpm.getFbUserData(),\n\t// \t\t\tevent_source_url: window.location.href,\n\t// \t\t}\n\t//\n\t// \t\tif (product) {\n\t// \t\t\tproduct[\"currency\"] = wpmDataLayer.shop.currency\n\t// \t\t\tcapiData.custom_data = wpm.fbGetProductDataForCapiEvent(product)\n\t// \t\t}\n\t//\n\t// \t\tjQuery(document).trigger(\"wpmFbCapiEvent\", capiData)\n\t// \t} catch (e) {\n\t// \t\tconsole.error(e)\n\t// \t}\n\t// }\n\n\twpm.fbGetProductDataForCapiEvent = product => {\n\t\treturn {\n\t\t\tcontent_type: \"product\",\n\t\t\tcontent_name: product.name,\n\t\t\tcontent_ids : [\n\t\t\t\tproduct.dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type],\n\t\t\t],\n\t\t\tvalue : parseFloat(product.quantity * product.price),\n\t\t\tcurrency : product.currency,\n\t\t}\n\t}\n\n\twpm.facebookContentIds = () => {\n\t\tlet prodIds = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))\n\t\t\t} else {\n\t\t\t\tprodIds.push(String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type]))\n\t\t\t}\n\t\t}\n\n\t\treturn prodIds\n\t}\n\n\twpm.trackCustomFacebookEvent = (eventName, customData = {}) => {\n\t\ttry {\n\t\t\tif (!wpmDataLayer?.pixels?.facebook?.loaded) return\n\n\t\t\tlet eventId = wpm.getFbRandomEventId()\n\n\t\t\tfbq(\"trackCustom\", eventName, customData, {\n\t\t\t\teventID: eventId,\n\t\t\t})\n\n\t\t\tjQuery(document).trigger(\"wpmFbCapiEvent\", {\n\t\t\t\tevent_name : eventName,\n\t\t\t\tevent_id : eventId,\n\t\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\t\tevent_source_url: window.location.href,\n\t\t\t\tcustom_data : customData,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fbGetContentIdsFromCart = () => {\n\n\t\tlet content_ids = []\n\n\t\tfor (const key in wpmDataLayer.cart) {\n\t\t\tcontent_ids.push(wpmDataLayer.products[key].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])\n\t\t}\n\n\t\treturn content_ids\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Facebook loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// if (wpm.canLoadPremiumFeatures()) {\n// \trequire(\"./functions_premium\")\n// \trequire(\"./event_listeners_premium\")\n// }\n// #endif\n\n","/**\n * Load Google Ads event listeners\n * */\n\n// view_item_list event\njQuery(document).on(\"wpmViewItemList\", function (event, product) {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\n\t\tif (\n\t\t\twpmDataLayer?.general?.variationsOutput &&\n\t\t\tproduct.isVariable &&\n\t\t\twpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids === false\n\t\t) return\n\n\t\t// try to prevent that WC sends cached hits to Google\n\t\tif (!product) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\titems : [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}],\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_item_list\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// add_to_cart event\njQuery(document).on(\"wpmAddToCart\", function (event, product) {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\tvalue : product.quantity * product.price,\n\t\t\titems : [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tquantity : product.quantity,\n\t\t\t\tprice : product.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}],\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"add_to_cart\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// view_item event\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t}\n\n\t\tif (product) {\n\t\t\tdata.value = (product.quantity ? product.quantity : 1) * product.price\n\t\t\tdata.items = [{\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tquantity : (product.quantity ? product.quantity : 1),\n\t\t\t\tprice : product.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}]\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_item\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view search event\njQuery(document).on(\"pmwEvent:Search\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\n\t\tlet products = []\n\n\t\tfor (const [key, product] of Object.entries(wpmDataLayer.products)) {\n\n\t\t\tif (\n\t\t\t\twpmDataLayer?.general?.variationsOutput &&\n\t\t\t\tproduct.isVariable &&\n\t\t\t\twpmDataLayer.pixels.google.ads.dynamic_remarketing.send_events_with_parent_ids === false\n\t\t\t) return\n\n\t\t\tproducts.push({\n\t\t\t\tid : product.dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type],\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t})\n\t\t}\n\n\t\t// console.log(products);\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\t// value : 1 * product.price,\n\t\t\titems: products,\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"view_search_results\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// view order received page event\n// TODO distinguish with or without cart data active\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\titems : wpm.getGoogleAdsDynamicRemarketingOrderItems(),\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", data)\n\t\t})\n\n\t\t// console.log(wpm.getGoogleAdsDynamicRemarketingOrderItems())\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// user log in event\njQuery(document).on(\"wpmLogin\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) return\n\t\tif (!wpmDataLayer?.pixels?.google?.ads?.dynamic_remarketing?.status) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data = {\n\t\t\tsend_to: wpm.getGoogleAdsConversionIdentifiers(),\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"login\", data)\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// conversion event\n// new_customer parameter: https://support.google.com/google-ads/answer/9917012\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (jQuery.isEmptyObject(wpm.getGoogleAdsConversionIdentifiersWithLabel())) return\n\t\tif (!wpm.googleConfigConditionsMet(\"ads\")) return\n\n\t\tlet data_basic = {}\n\t\tlet data_with_cart = {}\n\n\t\tdata_basic = {\n\t\t\tsend_to : wpm.getGoogleAdsConversionIdentifiersWithLabel(),\n\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\tnew_customer : wpmDataLayer.order.new_customer,\n\t\t}\n\n\t\tif (wpmDataLayer?.order?.clv_order_value_filtered) {\n\t\t\tdata_basic.customer_lifetime_value = wpmDataLayer.order.clv_order_value_filtered\n\t\t}\n\n\t\tif (wpmDataLayer?.user?.id?.raw) {\n\t\t\tdata_basic.user_id = wpmDataLayer.user.id.raw\n\t\t}\n\n\t\tif (wpmDataLayer?.order?.aw_merchant_id) {\n\t\t\tdata_with_cart = {\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\taw_merchant_id : wpmDataLayer.order.aw_merchant_id,\n\t\t\t\taw_feed_country : wpmDataLayer.order.aw_feed_country,\n\t\t\t\taw_feed_language: wpmDataLayer.order.aw_feed_language,\n\t\t\t\titems : wpm.getGoogleAdsRegularOrderItems(),\n\t\t\t}\n\t\t}\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"conversion\", {...data_basic, ...data_with_cart})\n\t\t})\n\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Load Google Ads functions\n * */\n\n(function (wpm, $, undefined) {\n\n\n\twpm.getGoogleAdsConversionIdentifiersWithLabel = function () {\n\n\t\tlet conversionIdentifiers = []\n\n\t\tif (wpmDataLayer?.pixels?.google?.ads?.conversionIds) {\n\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\tif (item) {\n\t\t\t\t\tconversionIdentifiers.push(key + \"/\" + item)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn conversionIdentifiers\n\t}\n\n\twpm.getGoogleAdsConversionIdentifiers = function () {\n\n\t\tlet conversionIdentifiers = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\tconversionIdentifiers.push(key)\n\t\t}\n\n\t\treturn conversionIdentifiers\n\t}\n\n\twpm.getGoogleAdsRegularOrderItems = function () {\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity: item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n\twpm.getGoogleAdsDynamicRemarketingOrderItems = function () {\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\tgoogle_business_vertical: wpmDataLayer.pixels.google.ads.google_business_vertical,\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.ads.dynamic_remarketing.id_type])\n\t\t\t\torderItems.push(orderItem)\n\t\t\t}\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google Ads\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Load Google Universal Analytics (GA3) event listeners\n * */\n\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) return\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.mp_active) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", {\n\t\t\t\tsend_to : [wpmDataLayer.pixels.google.analytics.universal.property_id],\n\t\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\t\taffiliation : wpmDataLayer.order.affiliation,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tvalue : wpmDataLayer.order.value_regular,\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\ttax : wpmDataLayer.order.tax,\n\t\t\t\tshipping : wpmDataLayer.order.shipping,\n\t\t\t\tcoupon : wpmDataLayer.order.coupon,\n\t\t\t\titems : wpm.getGAUAOrderItems(),\n\t\t\t})\n\t\t})\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Add functions for Google Analytics Universal\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getGAUAOrderItems = function () {\n\n\t\t// \"id\" : \"34\",\n\t\t// \"name\" : \"Hoodie\",\n\t\t// \"brand\" : \"\",\n\t\t// \"category\" : \"Hoodies\",\n\t\t// \"list_position\": 1,\n\t\t// \"price\" : 45,\n\t\t// \"quantity\" : 1,\n\t\t// \"variant\" : \"Color: blue | Logo: yes\"\n\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity: item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\tname : item.name,\n\t\t\t\tcurrency: wpmDataLayer.order.currency,\n\t\t\t\tcategory: wpmDataLayer.products[item.id].category.join(\"/\"),\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.variant = wpmDataLayer.products[item.variation_id].variant_name\n\t\t\t\torderItem.brand = wpmDataLayer.products[item.variation_id].brand\n\t\t\t} else {\n\n\t\t\t\torderItem.id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.brand = wpmDataLayer.products[item.id].brand\n\t\t\t}\n\n\t\t\torderItem = wpm.ga3AddListNameToProduct(orderItem)\n\n\t\t\torderItems.push(orderItem)\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n\twpm.ga3AddListNameToProduct = function (item_data, productPosition = null) {\n\n\t\t// if (wpm.ga3CanProductListBeSet(item_data.id)) {\n\t\t// \titem_data.listname = wpmDataLayer.shop.list_name\n\t\t//\n\t\t// \tif (productPosition) {\n\t\t// \t\titem_data.list_position = productPosition\n\t\t// \t}\n\t\t// }\n\n\t\titem_data.list_name = wpmDataLayer.shop.list_name\n\n\t\tif (productPosition) {\n\t\t\titem_data.list_position = productPosition\n\t\t}\n\n\t\treturn item_data\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Google Universal Analytics (GA3) loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// if (wpm.canLoadPremiumFeatures()) {\n// \trequire(\"./functions_premium\")\n// \trequire(\"./event_listeners_premium\")\n// }\n// #endif\n","/**\n * Load GA4 event listeners\n * */\n\n\n// view order received page event\njQuery(document).on(\"wpmOrderReceivedPage\", function () {\n\n\ttry {\n\t\tif (!wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) return\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.mp_active) return\n\t\tif (!wpm.googleConfigConditionsMet(\"analytics\")) return\n\n\t\twpm.gtagLoaded().then(function () {\n\t\t\tgtag(\"event\", \"purchase\", {\n\t\t\t\tsend_to : [wpmDataLayer.pixels.google.analytics.ga4.measurement_id],\n\t\t\t\ttransaction_id: wpmDataLayer.order.number,\n\t\t\t\taffiliation : wpmDataLayer.order.affiliation,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tvalue : wpmDataLayer.order.value_regular,\n\t\t\t\tdiscount : wpmDataLayer.order.discount,\n\t\t\t\ttax : wpmDataLayer.order.tax,\n\t\t\t\tshipping : wpmDataLayer.order.shipping,\n\t\t\t\tcoupon : wpmDataLayer.order.coupon,\n\t\t\t\titems : wpm.getGA4OrderItems(),\n\t\t\t})\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n","/**\n * Load GA4 functions\n * */\n\n(function (wpm, $, undefined) {\n\n\twpm.getGA4OrderItems = function () {\n\n\t\t// \"item_id\" : \"34\",\n\t\t// \"item_name\" : \"Hoodie\",\n\t\t// \"quantity\" : 1,\n\t\t// \"item_brand\" : \"\",\n\t\t// \"item_variant\" : \"Color: blue | Logo: yes\",\n\t\t// \"price\" : 45,\n\t\t// \"currency\" : \"CHF\",\n\t\t// \"item_category\": \"Hoodies\"\n\n\n\t\tlet orderItems = []\n\n\t\tfor (const [key, item] of Object.entries(wpmDataLayer.order.items)) {\n\n\t\t\tlet orderItem\n\n\t\t\torderItem = {\n\t\t\t\tquantity : item.quantity,\n\t\t\t\tprice : item.price,\n\t\t\t\titem_name : item.name,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\titem_category: wpmDataLayer.products[item.id].category.join(\"/\"),\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.general?.variationsOutput && 0 !== item.variation_id) {\n\n\t\t\t\torderItem.item_id = String(wpmDataLayer.products[item.variation_id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.item_variant = wpmDataLayer.products[item.variation_id].variant_name\n\t\t\t\torderItem.item_brand = wpmDataLayer.products[item.variation_id].brand\n\t\t\t} else {\n\n\t\t\t\torderItem.item_id = String(wpmDataLayer.products[item.id].dyn_r_ids[wpmDataLayer.pixels.google.analytics.id_type])\n\t\t\t\torderItem.item_brand = wpmDataLayer.products[item.id].brand\n\t\t\t}\n\n\t\t\torderItems.push(orderItem)\n\t\t}\n\n\t\treturn orderItems\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * GA4 loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// if (wpm.canLoadPremiumFeatures()) {\n// \trequire(\"./functions_premium\")\n// \trequire(\"./event_listeners_premium\")\n// }\n// #endif\n","/**\n * Google Analytics loader\n */\n\nrequire(\"./ga3/loader\")\nrequire(\"./ga4/loader\")\n","/**\n * Load Google base event listeners\n */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (typeof wpmDataLayer?.pixels?.google?.state === \"undefined\") {\n\t\tif (wpm.canGoogleLoad()) {\n\t\t\twpm.loadGoogle()\n\t\t} else {\n\t\t\twpm.logPreventedPixelLoading(\"google\", \"analytics / ads\")\n\t\t}\n\t}\n})\n","/**\n * Load Google base functions\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.googleConfigConditionsMet = (type) => {\n\n\t\t// always returns true if Google Consent Mode is active\n\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\t\t\treturn true\n\t\t} else if (wpm.getConsentValues().mode === \"category\") {\n\t\t\treturn wpm.getConsentValues().categories[type] === true\n\t\t} else if (wpm.getConsentValues().mode === \"pixel\") {\n\t\t\treturn wpm.getConsentValues().pixels.includes(\"google-\" + type)\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.getVisitorConsentStatusAndUpdateGoogleConsentSettings = (google_consent_settings) => {\n\n\t\tif (wpm.getConsentValues().mode === \"category\") {\n\n\t\t\tif (wpm.getConsentValues().categories.analytics) google_consent_settings.analytics_storage = \"granted\"\n\t\t\tif (wpm.getConsentValues().categories.ads) google_consent_settings.ad_storage = \"granted\"\n\t\t} else if ((wpm.getConsentValues().mode === \"pixel\")) {\n\n\t\t\tgoogle_consent_settings.analytics_storage = wpm.getConsentValues().pixels.includes(\"google-analytics\") ? \"granted\" : \"denied\"\n\t\t\tgoogle_consent_settings.ad_storage = wpm.getConsentValues().pixels.includes(\"google-ads\") ? \"granted\" : \"denied\"\n\t\t}\n\n\t\treturn google_consent_settings\n\t}\n\n\twpm.updateGoogleConsentMode = (analytics = true, ads = true) => {\n\n\t\ttry {\n\t\t\tif (\n\t\t\t\t!window.gtag ||\n\t\t\t\t!wpmDataLayer.shop.cookie_consent_mgmt.explicit_consent\n\t\t\t) return\n\n\t\t\tgtag(\"consent\", \"update\", {\n\t\t\t\tanalytics_storage: analytics ? \"granted\" : \"denied\",\n\t\t\t\tad_storage : ads ? \"granted\" : \"denied\",\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAds = () => {\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.ads.state = \"loading\"\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.ads?.enhanced_conversions?.active) {\n\t\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\t\tgtag(\"config\", key, {\"allow_enhanced_conversions\": true})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const [key, item] of Object.entries(wpmDataLayer.pixels.google.ads.conversionIds)) {\n\t\t\t\t\tgtag(\"config\", key)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.ads?.conversionIds && wpmDataLayer?.pixels?.google?.ads?.phone_conversion_label && wpmDataLayer?.pixels?.google?.ads?.phone_conversion_number) {\n\t\t\t\tgtag(\"config\", Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0] + \"/\" + wpmDataLayer.pixels.google.ads.phone_conversion_label, {\n\t\t\t\t\tphone_conversion_number: wpmDataLayer.pixels.google.ads.phone_conversion_number,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// ! enhanced_conversion_data needs to set on the window object\n\t\t\t// https://support.google.com/google-ads/answer/9888145#zippy=%2Cvalidate-your-implementation-using-chrome-developer-tools\n\t\t\tif (wpmDataLayer?.shop?.page_type && \"order_received_page\" === wpmDataLayer.shop.page_type && wpmDataLayer?.order?.google?.ads?.enhanced_conversion_data) {\n\t\t\t\t// window.enhanced_conversion_data = wpmDataLayer.order.google.ads.enhanced_conversion_data\n\n\t\t\t\tgtag(\"set\", \"user_data\", wpmDataLayer.order.google.ads.enhanced_conversion_data)\n\t\t\t}\n\n\t\t\twpmDataLayer.pixels.google.ads.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAnalyticsUA = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.analytics.universal.state = \"loading\"\n\n\t\t\tgtag(\"config\", wpmDataLayer.pixels.google.analytics.universal.property_id, wpmDataLayer.pixels.google.analytics.universal.parameters)\n\t\t\twpmDataLayer.pixels.google.analytics.universal.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.fireGtagGoogleAnalyticsGA4 = () => {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.analytics.ga4.state = \"loading\"\n\n\t\t\tlet parameters = wpmDataLayer.pixels.google.analytics.ga4.parameters\n\n\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.debug_mode) {\n\t\t\t\tparameters.debug_mode = true\n\t\t\t}\n\n\t\t\tgtag(\"config\", wpmDataLayer.pixels.google.analytics.ga4.measurement_id, parameters)\n\n\t\t\twpmDataLayer.pixels.google.analytics.ga4.state = \"ready\"\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.isGoogleActive = () => {\n\n\t\tif (\n\t\t\twpmDataLayer?.pixels?.google?.analytics?.universal?.property_id ||\n\t\t\twpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id ||\n\t\t\t!jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)\n\t\t) {\n\t\t\treturn true\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.getGoogleGtagId = () => {\n\n\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) {\n\t\t\treturn wpmDataLayer.pixels.google.analytics.universal.property_id\n\t\t} else if (wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) {\n\t\t\treturn wpmDataLayer.pixels.google.analytics.ga4.measurement_id\n\t\t} else {\n\t\t\treturn Object.keys(wpmDataLayer.pixels.google.ads.conversionIds)[0]\n\t\t}\n\t}\n\n\n\twpm.loadGoogle = () => {\n\n\t\tif (wpm.isGoogleActive()) {\n\n\t\t\twpmDataLayer.pixels.google.state = \"loading\"\n\n\t\t\twpm.loadScriptAndCacheIt(\"https://www.googletagmanager.com/gtag/js?id=\" + wpm.getGoogleGtagId())\n\t\t\t\t.then((script, textStatus) => {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Initiate Google dataLayer and gtag\n\t\t\t\t\t\twindow.dataLayer = window.dataLayer || []\n\t\t\t\t\t\twindow.gtag = function gtag() {\n\t\t\t\t\t\t\tdataLayer.push(arguments)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Consent Mode\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\n\t\t\t\t\t\t\tlet google_consent_settings = {\n\t\t\t\t\t\t\t\t\"ad_storage\" : wpmDataLayer.pixels.google.consent_mode.ad_storage,\n\t\t\t\t\t\t\t\t\"analytics_storage\": wpmDataLayer.pixels.google.consent_mode.analytics_storage,\n\t\t\t\t\t\t\t\t\"wait_for_update\" : wpmDataLayer.pixels.google.consent_mode.wait_for_update,\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.region) {\n\t\t\t\t\t\t\t\tgoogle_consent_settings.region = wpmDataLayer.pixels.google.consent_mode.region\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgoogle_consent_settings = wpm.getVisitorConsentStatusAndUpdateGoogleConsentSettings(google_consent_settings)\n\n\t\t\t\t\t\t\tgtag(\"consent\", \"default\", google_consent_settings)\n\t\t\t\t\t\t\tgtag(\"set\", \"ads_data_redaction\", wpmDataLayer.pixels.google.consent_mode.ads_data_redaction)\n\t\t\t\t\t\t\tgtag(\"set\", \"url_passthrough\", wpmDataLayer.pixels.google.consent_mode.url_passthrough)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Linker\n\t\t\t\t\t\t// https://developers.google.com/gtagjs/devguide/linker\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.linker?.settings) {\n\t\t\t\t\t\t\tgtag(\"set\", \"linker\", wpmDataLayer.pixels.google.linker.settings)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgtag(\"js\", new Date())\n\n\t\t\t\t\t\t// Google Ads loader\n\t\t\t\t\t\tif (!jQuery.isEmptyObject(wpmDataLayer?.pixels?.google?.ads?.conversionIds)) { // Only run if the pixel has set up\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"ads\")) { \t\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAds()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"google-ads\", \"ads\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Google Universal Analytics loader\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.universal?.property_id) { \t\t// Only run if the pixel has set up\n\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"analytics\")) {\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAnalyticsUA()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"google-universal-analytics\", \"analytics\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// GA4 loader\n\t\t\t\t\t\tif (wpmDataLayer?.pixels?.google?.analytics?.ga4?.measurement_id) { \t\t\t// Only run if the pixel has set up\n\n\t\t\t\t\t\t\tif (wpm.googleConfigConditionsMet(\"analytics\")) {\t\t\t\t\t\t// Only run if cookie consent has been given\n\t\t\t\t\t\t\t\twpm.fireGtagGoogleAnalyticsGA4()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twpm.logPreventedPixelLoading(\"ga4\", \"analytics\")\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twpmDataLayer.pixels.google.state = \"ready\"\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(e)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n\n\twpm.canGoogleLoad = () => {\n\n\t\tif (wpmDataLayer?.pixels?.google?.consent_mode?.active) {\n\t\t\treturn true\n\t\t} else if (\"category\" === wpm.getConsentValues().mode) {\n\t\t\treturn !!(wpm.getConsentValues().categories[\"ads\"] || wpm.getConsentValues().categories[\"analytics\"])\n\t\t} else if (\"pixel\" === wpm.getConsentValues().mode) {\n\t\t\treturn wpm.getConsentValues().pixels.includes(\"google-ads\") || wpm.getConsentValues().pixels.includes(\"google-analytics\")\n\t\t} else {\n\t\t\tconsole.error(\"Couldn't find a valid load condition for Google mode in wpmConsentValues\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.gtagLoaded = () => {\n\t\treturn new Promise((resolve, reject) => {\n\n\t\t\tif (typeof wpmDataLayer?.pixels?.google?.state === \"undefined\") reject()\n\n\t\t\tlet startTime = 0\n\t\t\tlet timeout = 5000\n\t\t\tlet frequency = 200;\n\n\t\t\t(function wait() {\n\t\t\t\tif (wpmDataLayer?.pixels?.google?.state === \"ready\") return resolve()\n\t\t\t\tif (startTime >= timeout) return reject()\n\t\t\t\tstartTime += frequency\n\t\t\t\tsetTimeout(wait, frequency)\n\t\t\t})()\n\t\t})\n\t}\n\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load Google base\n */\n\n// Load base\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n\n// #if process.env.TIER === 'premium'\n// if (wpm.canLoadPremiumFeatures()) {\n// \trequire(\"./functions_premium\")\n// \trequire(\"./event_listeners_premium\")\n// }\n// #endif\n","/**\n * Load Google\n */\n\n// Load base\nrequire(\"./base/loader\")\n\n//Load additional Google libraries\nrequire(\"./ads/loader\")\nrequire(\"./analytics/loader\")\nrequire(\"./optimize/loader\")\n\n\n","/**\n * Load Google Optimize event listeners\n */\n\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (wpmDataLayer?.pixels?.google?.optimize?.container_id && !wpmDataLayer?.pixels?.google?.optimize?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"google-optimize\")) wpm.load_google_optimize_pixel()\n\t}\n})\n","/**\n * Load Google Optimize functions\n */\n\n\n(function (wpm, $, undefined) {\n\n\twpm.load_google_optimize_pixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.google.optimize.loaded = true\n\n\t\t\twpm.loadScriptAndCacheIt(\"https://www.googleoptimize.com/optimize.js?id=\" + wpmDataLayer.pixels.google.optimize.container_id)\n\t\t\t// .then(function (script, textStatus) {\n\t\t\t// \t\tconsole.log('Google Optimize loaded')\n\t\t\t// });\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Load Google Optimize\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Load Hotjar event listeners\n */\n\n// Pixel load event listener\njQuery(document).on(\"wpmLoadPixels\", function () {\n\n\tif (wpmDataLayer?.pixels?.hotjar?.site_id && !wpmDataLayer?.pixels?.hotjar?.loaded) {\n\t\tif (wpm.canIFire(\"analytics\", \"hotjar\") && !wpmDataLayer?.pixels?.hotjar?.loaded) wpm.load_hotjar_pixel()\n\t}\n})\n","/**\n * Load Hotjar functions\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.load_hotjar_pixel = function () {\n\n\t\ttry {\n\t\t\twpmDataLayer.pixels.hotjar.loaded = true;\n\n\t\t\t// @formatter:off\n\t\t\t(function(h,o,t,j,a,r){\n\t\t\t\th.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};\n\t\t\t\th._hjSettings={hjid:wpmDataLayer.pixels.hotjar.site_id,hjsv:6};\n\t\t\t\ta=o.getElementsByTagName('head')[0];\n\t\t\t\tr=o.createElement('script');r.async=1;\n\t\t\t\tr.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;\n\t\t\t\ta.appendChild(r);\n\t\t\t})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');\n\t\t\t// @formatter:on\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery));\n","/**\n * Hotjar loader\n */\n\nrequire(\"./functions\")\nrequire(\"./event_listeners\")\n","/**\n * Consent Mode functions\n */\n\n(function (wpm, $, undefined) {\n\n\t/**\n\t * Handle Cookie Management Platforms\n\t */\n\n\tlet getComplianzCookies = () => {\n\n\t\tlet cmplz_statistics = wpm.getCookie(\"cmplz_statistics\")\n\t\tlet cmplz_marketing = wpm.getCookie(\"cmplz_marketing\")\n\t\tlet cmplz_consent_status = wpm.getCookie(\"cmplz_consent_status\") || wpm.getCookie(\"cmplz_banner-status\")\n\n\t\tif (cmplz_consent_status) {\n\t\t\treturn {\n\t\t\t\tanalytics : cmplz_statistics === \"allow\",\n\t\t\t\tads : cmplz_marketing === \"allow\",\n\t\t\t\tvisitorHasChosen: true,\n\t\t\t}\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tlet getCookieLawInfoCookies = () => {\n\n\t\tlet analyticsCookie = wpm.getCookie(\"cookielawinfo-checkbox-analytics\") || wpm.getCookie(\"cookielawinfo-checkbox-analytiques\")\n\t\tlet adsCookie = wpm.getCookie(\"cookielawinfo-checkbox-advertisement\") || wpm.getCookie(\"cookielawinfo-checkbox-performance\") || wpm.getCookie(\"cookielawinfo-checkbox-publicite\")\n\t\tlet visitorHasChosen = wpm.getCookie(\"CookieLawInfoConsent\")\n\n\t\tif (analyticsCookie || adsCookie) {\n\n\t\t\treturn {\n\t\t\t\tanalytics : analyticsCookie === \"yes\",\n\t\t\t\tads : adsCookie === \"yes\",\n\t\t\t\tvisitorHasChosen: !!visitorHasChosen,\n\t\t\t}\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t/**\n\t * Initialize and set default values\n\t */\n\n\tlet\n\t\twpmConsentValues = {}\n\twpmConsentValues.categories = {}\n\twpmConsentValues.pixels = []\n\twpmConsentValues.mode = \"category\"\n\twpmConsentValues.visitorHasChosen = false\n\n\t// Return current consent values\n\twpm.getConsentValues = () => wpmConsentValues\n\n\twpm.setConsentValueCategories = (analytics = false, ads = false) => {\n\t\twpmConsentValues.categories.analytics = analytics\n\t\twpmConsentValues.categories.ads = ads\n\t}\n\n\t// Update the PMW consent values with values coming from a CMP\n\twpm.updateConsentCookieValues = (analytics = null, ads = null, explicitConsent = false) => {\n\n\t\t// ad_storage\n\t\t// analytics_storage\n\t\t// functionality_storage\n\t\t// personalization_storage\n\t\t// security_storage\n\n\t\tlet cookie\n\n\t\t/**\n\t\t * Setup defaults\n\t\t */\n\n\t\t// consentValues.categories.analytics = true\n\t\t// consentValues.categories.ads = true\n\n\t\twpmConsentValues.categories.analytics = !explicitConsent\n\t\twpmConsentValues.categories.ads = !explicitConsent\n\n\n\t\tif (analytics || ads) {\n\n\t\t\tif (analytics) {\n\t\t\t\twpmConsentValues.categories.analytics = !!analytics\n\t\t\t}\n\n\t\t\tif (ads) {\n\t\t\t\twpmConsentValues.categories.ads = !!ads\n\t\t\t}\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * PMW Cookie Consent\n\t\t *\n\t\t * Must be before every other CMP for the case that one of the included CMPs\n\t\t * decides to implement the PMW cookie consent API. In that case\n\t\t * the PMW consent cookie must take precedence.\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"pmw_cookie_consent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookiebot\n\t\t * https://wordpress.org/plugins/cookiebot/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"CookieConsent\")) {\n\n\t\t\tcookie = decodeURI(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.indexOf(\"statistics:true\") >= 0\n\t\t\twpmConsentValues.categories.ads = cookie.indexOf(\"marketing:true\") >= 0\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Script\n\t\t * https://wordpress.org/plugins/cookie-script-com/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"CookieScriptConsent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\tif (cookie.action === \"reject\") {\n\t\t\t\twpmConsentValues.categories.analytics = false\n\t\t\t\twpmConsentValues.categories.ads = false\n\t\t\t} else if (cookie.categories.length === 2) {\n\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t} else {\n\t\t\t\twpmConsentValues.categories.analytics = cookie.categories.indexOf(\"performance\") >= 0\n\t\t\t\twpmConsentValues.categories.ads = cookie.categories.indexOf(\"targeting\") >= 0\n\t\t\t}\n\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Borlabs Cookie\n\t\t * https://borlabs.io/borlabs-cookie/\n\t\t */\n\t\tif (cookie = wpm.getCookie(\"borlabs-cookie\")) {\n\n\t\t\tcookie = decodeURI(cookie)\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = !!cookie?.consents?.statistics\n\t\t\twpmConsentValues.categories.ads = !!cookie?.consents?.marketing\n\t\t\twpmConsentValues.visitorHasChosen = true\n\t\t\twpmConsentValues.pixels = [...cookie?.consents?.statistics || [], ...cookie?.consents?.marketing || []]\n\t\t\twpmConsentValues.mode = \"pixel\"\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Complianz Cookie\n\t\t * https://wordpress.org/plugins/complianz-gdpr/\n\t\t */\n\n\t\tif (cookie = getComplianzCookies()) {\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Compliance (free version)\n\t\t * https://wordpress.org/plugins/cookie-notice/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"cookie_notice_accepted\")) {\n\n\t\t\twpmConsentValues.categories.analytics = true\n\t\t\twpmConsentValues.categories.ads = true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Cookie Compliance (pro version)\n\t\t * https://wordpress.org/plugins/cookie-notice/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"hu-consent\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = !!cookie.categories[\"3\"]\n\t\t\twpmConsentValues.categories.ads = !!cookie.categories[\"4\"]\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * CookieYes, GDPR Cookie Consent (Cookie Law Info)\n\t\t * https://wordpress.org/plugins/cookie-law-info/\n\t\t */\n\n\t\tif (cookie = getCookieLawInfoCookies()) {\n\n\t\t\twpmConsentValues.categories.analytics = cookie.analytics === true\n\t\t\twpmConsentValues.categories.ads = cookie.ads === true\n\t\t\twpmConsentValues.visitorHasChosen = cookie.visitorHasChosen === true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * GDPR Cookie Compliance Plugin by Moove Agency\n\t\t * https://wordpress.org/plugins/gdpr-cookie-compliance/\n\t\t *\n\t\t * TODO write documentation on how to set up the plugin in order for this to work properly\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"moove_gdpr_popup\")) {\n\n\t\t\tcookie = JSON.parse(cookie)\n\n\t\t\twpmConsentValues.categories.analytics = cookie.thirdparty === \"1\"\n\t\t\twpmConsentValues.categories.ads = cookie.advanced === \"1\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * WP AutoTerms\n\t\t * https://wordpress.org/plugins/auto-terms-of-service-and-privacy-policy/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"wpautoterms-cookies-notice\")) {\n\n\t\t\tif (cookie !== \"1\") return\n\n\t\t\twpmConsentValues.categories.analytics = true\n\t\t\twpmConsentValues.categories.ads = true\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Usercentrics\n\t\t *\n\t\t * https://usercentrics.com/\n\t\t * https://docs.usercentrics.com/#/cmp-v2-ui-api\n\t\t * https://docs.usercentrics.com/#/cmp-v2-ui-api?id=getservicesbaseinfo\n\t\t */\n\n\t\tif (window.localStorage && window.localStorage.getItem(\"uc_settings\")) {\n\n\t\t\tconsole.log(\"Usercentrics settings detected\")\n\n\t\t\tif (typeof UC_UI === \"undefined\") {\n\n\t\t\t\t// register event to block unblock after UC_UI library is loaded\n\t\t\t\twindow.addEventListener(\"UC_UI_INITIALIZED\", function (event) {\n\t\t\t\t\twpm.ucUiProcessConsent()\n\t\t\t\t})\n\n\t\t\t\t// Don't continue because in here the UC_UI library is not loaded yet\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (UC_UI.areAllConsentsAccepted()) {\n\t\t\t\twpmConsentValues.categories.analytics = true\n\t\t\t\twpmConsentValues.categories.ads = true\n\t\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\twpm.ucUiProcessConsent()\n\t\t}\n\n\t\t/**\n\t\t * OneTrust\n\t\t *\n\t\t * https://www.onetrust.com/\n\t\t */\n\n\t\tif (cookie = wpm.getCookie(\"OptanonConsent\")) {\n\n\t\t\t// console.log(\"OneTrust settings detected\")\n\n\t\t\tlet params = new URLSearchParams(cookie)\n\t\t\tlet groups = params.get(\"groups\").split(\",\")\n\n\t\t\t// Groups is an array like this ['1:1', '2:0', '3:1', '4:1']. Make it an object with key value pairs\n\t\t\tlet groupsObject = {}\n\t\t\tgroups.forEach((group) => {\n\n\t\t\t\tlet groupArray = group.split(\":\")\n\t\t\t\tgroupsObject[groupArray[0]] = groupArray[1]\n\t\t\t})\n\n\t\t\t// group mapping\n\t\t\t// 1 = necessary\n\t\t\t// 2 = analytics\n\t\t\t// 3 = functional\n\t\t\t// 4 = ads\n\n\t\t\twpmConsentValues.categories.analytics = groubsObject[\"2\"] === \"1\"\n\t\t\twpmConsentValues.categories.ads = groupsObject[\"4\"] === \"1\"\n\t\t\twpmConsentValues.visitorHasChosen = true\n\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Only run after having made sure that the UC_UI library is loaded\n\twpm.ucUiProcessConsent = function () {\n\n\t\tif (typeof UC_UI === \"undefined\") return\n\n\t\tif (UC_UI.areAllConsentsAccepted()) {\n\t\t\tpmw.consentAcceptAll()\n\t\t}\n\n\t\tconst ucStatisticsSlug = UC_UI.getSettingsLabels().categories.filter(data => data.label === \"Statistics\")[0].slug\n\n\t\tpmw.consentAdjustSelectively(\n\t\t\t{\n\t\t\t\tanalytics: !UC_UI.getServicesBaseInfo().filter(data => data.categorySlug === ucStatisticsSlug && data.consent.status === false).length > 0,\n\t\t\t\tads : !UC_UI.getServicesBaseInfo().filter(data => data.categorySlug === \"marketing\" && data.consent.status === false).length > 0,\n\t\t\t},\n\t\t)\n\t}\n\n\twpm.updateConsentCookieValues()\n\n\twpm.setConsentDefaultValuesToExplicit = () => {\n\t\twpmConsentValues.categories = {\n\t\t\tanalytics: false,\n\t\t\tads : false,\n\t\t}\n\t}\n\n\twpm.canIFire = (category, pixelName) => {\n\n\t\tlet canIFireMode\n\n\t\tif (\"category\" === wpmConsentValues.mode) {\n\t\t\tcanIFireMode = !!wpmConsentValues.categories[category]\n\t\t} else if (\"pixel\" === wpmConsentValues.mode) {\n\t\t\tcanIFireMode = wpmConsentValues.pixels.includes(pixelName)\n\n\t\t\t// If a user sets \"bing-ads\" in Borlabs Cookie instead of\n\t\t\t// \"microsoft-ads\" in the Borlabs settings, we need to check\n\t\t\t// for that too.\n\t\t\tif (false === canIFireMode && \"microsoft-ads\" === pixelName) {\n\t\t\t\tcanIFireMode = wpmConsentValues.pixels.includes(\"bing-ads\")\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error(\"Couldn't find a valid consent mode in wpmConsentValues\")\n\t\t\tcanIFireMode = false\n\t\t}\n\n\t\tif (canIFireMode) {\n\t\t\treturn true\n\t\t} else {\n\t\t\tif (true || wpm.urlHasParameter(\"debugConsentMode\")) {\n\t\t\t\twpm.logPreventedPixelLoading(pixelName, category)\n\t\t\t}\n\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.logPreventedPixelLoading = (pixelName, category) => {\n\n\t\tif (wpmDataLayer?.shop?.cookie_consent_mgmt?.explicit_consent) {\n\t\t\tconsole.log(\"Pixel Manager for WooCommerce: The \\\"\" + pixelName + \" (category: \" + category + \")\\\" pixel has not fired because you have not given consent for it yet. (PMW is in explicit consent mode.)\")\n\t\t} else {\n\t\t\tconsole.log(\"Pixel Manager for WooCommerce: The \\\"\" + pixelName + \" (category: \" + category + \")\\\" pixel has not fired because you have removed consent for this pixel. (PMW is in implicit consent mode.)\")\n\t\t}\n\t}\n\n\t/**\n\t * Runs through each script in <head> and blocks / unblocks it according to the plugin settings\n\t * and user consent.\n\t */\n\n\t// https://stackoverflow.com/q/65453565/4688612\n\twpm.scriptTagObserver = new MutationObserver((mutations) => {\n\t\tmutations.forEach(({addedNodes}) => {\n\t\t\t[...addedNodes]\n\t\t\t\t.forEach(node => {\n\n\t\t\t\t\tif ($(node).data(\"wpm-cookie-category\")) {\n\n\t\t\t\t\t\t// If the pixel category has been approved > unblock\n\t\t\t\t\t\t// If the pixel belongs to more than one category, then unblock if one of the categories has been approved\n\t\t\t\t\t\t// If no category has been approved, but the Google Consent Mode is active, then only unblock the Google scripts\n\n\t\t\t\t\t\tif (wpm.shouldScriptBeActive(node)) {\n\t\t\t\t\t\t\twpm.unblockScript(node)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twpm.blockScript(node)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t})\n\n\twpm.scriptTagObserver.observe(document.head, {childList: true, subtree: true})\n\t// jQuery(document).on(\"DOMContentLoaded\", () => wpm.scriptTagObserver.disconnect())\n\tdocument.addEventListener(\"DOMContentLoaded\", () => wpm.scriptTagObserver.disconnect())\n\n\twpm.shouldScriptBeActive = node => {\n\n\t\tif (\n\t\t\twpmDataLayer.shop.cookie_consent_mgmt.explicit_consent ||\n\t\t\twpmConsentValues.visitorHasChosen\n\t\t) {\n\n\t\t\tif (wpmConsentValues.mode === \"category\" && $(node).data(\"wpm-cookie-category\").split(\",\").some(element => wpmConsentValues.categories[element])) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmConsentValues.mode === \"pixel\" && wpmConsentValues.pixels.includes($(node).data(\"wpm-pixel-name\"))) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmConsentValues.mode === \"pixel\" && $(node).data(\"wpm-pixel-name\") === \"google\" && [\"google-analytics\", \"google-ads\"].some(element => wpmConsentValues.pixels.includes(element))) {\n\t\t\t\treturn true\n\t\t\t} else if (wpmDataLayer?.pixels?.google?.consent_mode?.active && $(node).data(\"wpm-pixel-name\") === \"google\") {\n\t\t\t\treturn true\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\treturn true\n\t\t}\n\t}\n\n\n\twpm.unblockScript = (scriptNode, removeAttach = false) => {\n\n\t\tif (removeAttach) $(scriptNode).remove()\n\n\t\tlet wpmSrc = $(scriptNode).data(\"wpm-src\")\n\t\tif (wpmSrc) $(scriptNode).attr(\"src\", wpmSrc)\n\n\t\tscriptNode.type = \"text/javascript\"\n\n\t\tif (removeAttach) $(scriptNode).appendTo(\"head\")\n\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.blockScript = (scriptNode, removeAttach = false) => {\n\n\t\tif (removeAttach) $(scriptNode).remove()\n\n\t\tif ($(scriptNode).attr(\"src\")) $(scriptNode).removeAttr(\"src\")\n\t\tscriptNode.type = \"blocked/javascript\"\n\n\t\tif (removeAttach) $(scriptNode).appendTo(\"head\")\n\t}\n\n\twpm.unblockAllScripts = (analytics = true, ads = true) => {\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\twpm.setConsentValueCategories(analytics, ads)\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.unblockSelectedPixels = () => {\n\t\t// jQuery(document).trigger(\"wpmPreLoadPixels\")\n\t\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\t}\n\n\twpm.explicitConsentStateAlreadySet = () => {\n\n\t\tif (wpmConsentValues.explicitConsentStateAlreadySet) {\n\t\t\treturn true\n\t\t} else {\n\t\t\twpmConsentValues.explicitConsentStateAlreadySet = true\n\t\t}\n\t}\n\n\n\t/**\n\t * Block or unblock scripts for each CMP immediately after cookie consent has been updated\n\t * by the visitor.\n\t */\n\n\t/**\n\t * Borlabs Cookie\n\t * If visitor accepts cookies in Borlabs Cookie unblock the scripts\n\t */\n\tdocument.addEventListener(\"borlabs-cookie-consent-saved\", () => {\n\t\twpm.updateConsentCookieValues()\n\n\t\tif (wpmConsentValues.mode === \"pixel\") {\n\n\t\t\twpm.unblockSelectedPixels()\n\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.pixels.includes(\"google-analytics\"), wpmConsentValues.pixels.includes(\"google-ads\"))\n\t\t} else {\n\n\t\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t}\n\t})\n\n\t/**\n\t * Cookiebot\n\t * \tIf visitor accepts cookies in Cookiebot unblock the scripts\n\t * \thttps://www.cookiebot.com/en/developer/\n\t */\n\tdocument.addEventListener(\"CookiebotOnAccept\", () => {\n\t\tif (Cookiebot.consent.statistics) wpmConsentValues.categories.analytics = true\n\t\tif (Cookiebot.consent.marketing) wpmConsentValues.categories.ads = true\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\n\t}, false)\n\n\t/**\n\t * Cookie Script\n\t * If visitor accepts cookies in Cookie Script unblock the scripts\n\t * https://support.cookie-script.com/article/20-custom-events\n\t */\n\t// jQuery(document).on(\"CookieScriptAccept\", e => {\n\tdocument.addEventListener(\"CookieScriptAccept\", e => {\n\n\t\tif (e.detail.categories.includes(\"performance\")) wpmConsentValues.categories.analytics = true\n\t\tif (e.detail.categories.includes(\"targeting\")) wpmConsentValues.categories.ads = true\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\t/**\n\t * Cookie Script\n\t * If visitor accepts cookies in Cookie Script unblock the scripts\n\t * https://support.cookie-script.com/\n\t */\n\t// jQuery(document).on(\"CookieScriptAcceptAll\", () => {\n\tdocument.addEventListener(\"CookieScriptAcceptAll\", () => {\n\n\t\twpm.setConsentValueCategories(true, true)\n\t\twpm.unblockAllScripts(true, true)\n\t\twpm.updateGoogleConsentMode(true, true)\n\t})\n\n\t/**\n\t * Complianz Cookie\n\t *\n\t * If visitor accepts cookies in Complianz unblock the scripts\n\t */\n\n\twpm.cmplzStatusChange = (cmplzConsentData) => {\n\n\t\tif (cmplzConsentData.detail.categories.includes(\"statistics\")) wpm.updateConsentCookieValues(true, null)\n\t\tif (cmplzConsentData.detail.categories.includes(\"marketing\")) wpm.updateConsentCookieValues(null, true)\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t}\n\n\t// jQuery(document).on(\"cmplzStatusChange\", wpm.cmplzStatusChange)\n\tdocument.addEventListener(\"cmplzStatusChange\", wpm.cmplzStatusChange)\n\t// jQuery(document).on(\"cmplz_status_change\", wpm.cmplzStatusChange)\n\tdocument.addEventListener(\"cmplz_status_change\", wpm.cmplzStatusChange)\n\n\t// Cookie Compliance by hu-manity.co (free and pro)\n\t// If visitor accepts cookies in Cookie Notice by hu-manity.co unblock the scripts (free version)\n\t// https://wordpress.org/support/topic/events-on-consent-change/#post-15202792\n\t// jQuery(document).on(\"setCookieNotice\", () => {\n\tdocument.addEventListener(\"setCookieNotice\", () => {\n\t\twpm.updateConsentCookieValues()\n\n\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t})\n\n\t/**\n\t * Cookie Compliance by hu-manity.co (free and pro)\n\t * If visitor accepts cookies in Cookie Notice by hu-manity.co unblock the scripts (pro version)\n\t * https://wordpress.org/support/topic/events-on-consent-change/#post-15202792\n\t * Because Cookie Notice has no documented API or event that is being triggered on consent save or update\n\t * we have to solve this by using a mutation observer.\n\t *\n\t * @type {MutationObserver}\n\t */\n\n\twpm.huObserver = new MutationObserver(mutations => {\n\t\tmutations.forEach(({addedNodes}) => {\n\t\t\t[...addedNodes]\n\t\t\t\t.forEach(node => {\n\n\t\t\t\t\tif (node.id === \"hu\") {\n\n\t\t\t\t\t\t// jQuery(\".hu-cookies-save\").on(\"click\", function () {\n\t\t\t\t\t\t// jQuery(\".hu-cookies-save\") in pure JavaScript\n\t\t\t\t\t\tdocument.querySelector(\".hu-cookies-save\").addEventListener(\"click\", () => {\n\t\t\t\t\t\t\twpm.updateConsentCookieValues()\n\t\t\t\t\t\t\twpm.unblockAllScripts(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\t\t\t\t\twpm.updateGoogleConsentMode(wpmConsentValues.categories.analytics, wpmConsentValues.categories.ads)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t})\n\n\tif (window.hu) {\n\t\twpm.huObserver.observe(document.documentElement || document.body, {childList: true, subtree: true})\n\t}\n\n\t/**\n\t * Usercentrics Event Listeners\n\t *\n\t * https://docs.usercentrics.com/#/v2-events?id=usage-as-window-event\n\t */\n\n\twindow.addEventListener(\"ucEvent\", function (e) {\n\t\tif (e.detail && e.detail.event == \"consent_status\") {\n\t\t\t// check for consent status of service \"Google Ads Remarketing\"\n\t\t\tif (e.detail[\"Google Ads Remarketing\"] === true) {\n\t\t\t\tconsole.log(\"Google Ads Remarketing has consent\")\n\t\t\t} else {\n\t\t\t\tconsole.log(\"Google Ads Remarketing has no consent\")\n\t\t\t}\n\t\t}\n\t})\n\n\t// https://docs.usercentrics.com/#/v2-events?id=uc_ui_cmp_event\n\twindow.addEventListener(\"UC_UI_CMP_EVENT\", function (event) {\n\n\t\tif (event.detail.type === \"ACCEPT_ALL\") {\n\t\t\t// console.log('accept all');\n\n\t\t\tpmw.consentAcceptAll()\n\t\t}\n\n\t\tif (event.detail.type === \"DENY_ALL\") {\n\t\t\tpmw.consentRevokeAll()\n\t\t}\n\n\t\tif (event.detail.type === \"SAVE\") {\n\t\t\tconsole.log(\"event.detail\", event.detail)\n\t\t}\n\t})\n\n\n\t/**\n\t * OneTrust Event Listeners\n\t *\n\t * CookiePro by OneTrust doesn't emit any events when the user accepts or declines cookies.\n\t */\n\n\t// There are two accept all buttons. One in the first banner and one in the settings window. Both have different identifiers.\n\tjQuery(\"#accept-recommended-btn-handler, #onetrust-accept-btn-handler\").on(\"click\", function () {\n\n\t\t// If OneTrust is not loaded, return\n\t\tif (typeof window.OneTrust === \"undefined\") return\n\n\t\tpmw.consentAcceptAll()\n\t})\n\n\t// There are two revoke all buttons. One in the first banner and one in the settings window. Both have different identifiers.\n\tjQuery(\".ot-pc-refuse-all-handler, #onetrust-reject-all-handler\").on(\"click\", function () {\n\t\tpmw.consentRevokeAll()\n\t})\n\n\t// There is one save button that saves mixed consent. It is in the settings window. We reload the page after saving to reflect the changes.\n\tjQuery(\".save-preference-btn-handler.onetrust-close-btn-handler\").on(\"click\", function () {\n\t\tlocation.reload()\n\n\t\t// OneTrust.OnConsentChanged(function (e) {\n\t\t// \tpmw.consentAdjustSelectively({\n\t\t// \t\tanalytics: e.detail.includes(\"2\"),\n\t\t// \t\tads : e.detail.includes(\"4\"),\n\t\t// \t})\n\t\t// })\n\t})\n\n\n}(window.wpm = window.wpm || {}, jQuery));\n\n\n(function (pmw, $, undefined) {\n\n\t/**\n\t * Pixel Manager Cookie Consent API\n\t */\n\n\t// Accept consent for all cookies\n\tpmw.consentAcceptAll = (settings = {}) => {\n\n\t\tsettings.duration = settings.duration || 365\n\n\t\tpmw.consentSetCookie(true, true, settings.duration)\n\t\twpm.unblockAllScripts(true, true)\n\t\twpm.updateGoogleConsentMode(true, true)\n\t}\n\n\t// Accept consent selectively\n\tpmw.consentAdjustSelectively = (settings) => {\n\n\t\t// If settings.analytics is set, keep it, otherwise set it to wpm.getConsentValues().categories.analytics\n\t\tsettings.analytics = settings.analytics !== undefined ? settings.analytics : wpm.getConsentValues().categories.analytics\n\t\tsettings.ads = settings.ads !== undefined ? settings.ads : wpm.getConsentValues().categories.ads\n\t\tsettings.duration = settings.duration || 365\n\n\t\tpmw.consentSetCookie(settings.analytics, settings.ads, settings.duration)\n\t\twpm.unblockAllScripts(settings.analytics, settings.ads)\n\t\twpm.updateGoogleConsentMode(settings.analytics, settings.ads)\n\t}\n\n\t// Remove consent for all cookies\n\tpmw.consentRevokeAll = (settings = {}) => {\n\n\t\tsettings.duration = settings.duration || 365\n\n\t\twpm.setConsentValueCategories(false, false)\n\t\tpmw.consentSetCookie(false, false, settings.duration)\n\t\twpm.updateGoogleConsentMode(false, false)\n\t}\n\n\t// Set a cookie called pmw_cookie_consent with the value of pmw_cookie_consent\n\t// and set the default expiration date to 1 year from now\n\tpmw.consentSetCookie = (analytics, ads, duration = 365) => {\n\t\twpm.setCookie(\"pmw_cookie_consent\", JSON.stringify({analytics, ads}), duration)\n\t}\n\n\t// Trigger an event once the PMW consent management has been loaded\n\tjQuery(document).trigger(\"pmw_cookie_consent_management_loaded\")\n\n}(window.pmw = window.pmw || {}, jQuery))\n","/**\n * remove_from_cart event\n *\n * Cannot be attached directly because the mini cart doesn't necessarily contain the remove button on page load.\n */\njQuery(document).on(\"click\", \".remove_from_cart_button, .remove\", (event) => {\n\n\t// console.log(\"remove_from_cart event\" + new Date().getTime())\n\n\ttry {\n\n\t\tlet url = new URL(jQuery(event.currentTarget).attr(\"href\"))\n\t\tlet productId = wpm.getProductIdByCartItemKeyUrl(url)\n\n\t\twpm.removeProductFromCart(productId)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * begin_checkout event\n *\n * Cannot be attached directly because the mini cart doesn't necessarily contain the remove button on page load.\n */\nlet checkoutButtonClasses = [\n\t\".checkout\",\n\t\".checkout-button\",\n\t\".cart-checkout-button\",\n\t\".button.checkout\",\n\t\".xoo-wsc-ft-btn-checkout\", // https://xootix.com/side-cart-for-woocommerce/\n\t\".elementor-button--checkout\",\n].join(\",\")\n\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"click init_checkout\", checkoutButtonClasses, () => {\n\n\t// console.log(\"init_checkout at: \" + new Date().getTime())\n\n\tjQuery(document).trigger(\"wpmBeginCheckout\")\n})\n\njQuery(document).on(\"updated_cart_totals\", () => {\n\tjQuery(document).trigger(\"wpmViewCart\")\n})\n\n/**\n * Set up PWM events\n */\n\n// track checkout option event: purchase click\n// https://wordpress.stackexchange.com/a/352171/68337\njQuery(document).on(\"wpmLoad\", (event) => {\n\tjQuery(document).on(\"payment_method_selected\", () => {\n\n\t\tif (false === wpm.paymentMethodSelected) {\n\t\t\twpm.fireCheckoutProgress(3)\n\t\t}\n\n\t\twpm.fireCheckoutOption(3, jQuery(\"input[name='payment_method']:checked\").val())\n\t\twpm.paymentMethodSelected = true\n\t})\n})\n\n// populate the wpmDataLayer with the cart items\njQuery(document).on(\"wpmLoad\", () => {\n\n\ttry {\n\t\t// When a new session is initiated there are no items in the cart,\n\t\t// so we can save the call to get the cart items\n\t\tif (wpm.doesWooCommerceCartExist()) wpm.getCartItems()\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// get all add-to-cart= products from backend\njQuery(document).on(\"wpmLoad\", () => {\n\n\twpmDataLayer.products = wpmDataLayer.products || {}\n\n\t// scan page for add-to-cart= links\n\tlet productIds = wpm.getAddToCartLinkProductIds()\n\n\twpm.getProductsFromBackend(productIds)\n})\n\n/**\n * Save the referrer into a cookie\n */\n\njQuery(document).on(\"wpmLoad\", () => {\n\n\t// can't use session storage as we can't read it from the server\n\tif (!wpm.getCookie(\"wpmReferrer\")) {\n\n\t\tif (document.referrer) {\n\t\t\tlet referrerUrl = new URL(document.referrer)\n\t\t\tlet referrerHostname = referrerUrl.hostname\n\n\t\t\tif (referrerHostname !== window.location.host) {\n\t\t\t\twpm.setCookie(\"wpmReferrer\", referrerHostname)\n\t\t\t}\n\t\t}\n\t}\n})\n\n\n/**\n * Create our own load event in order to better handle script flow execution when JS \"optimizers\" shuffle the code.\n */\njQuery(document).on(\"wpmLoad\", () => {\n\t// document.addEventListener(\"wpmLoad\", function () {\n\ttry {\n\t\tif (typeof wpmDataLayer != \"undefined\" && !wpmDataLayer?.wpmLoadFired) {\n\n\t\t\tjQuery(document).trigger(\"wpmLoadAlways\")\n\n\t\t\tif (wpmDataLayer?.shop) {\n\t\t\t\tif (\n\t\t\t\t\t\"product\" === wpmDataLayer.shop.page_type &&\n\t\t\t\t\t\"variable\" !== wpmDataLayer.shop.product_type &&\n\t\t\t\t\twpm.getMainProductIdFromProductPage()\n\t\t\t\t) {\n\t\t\t\t\tlet product = wpm.getProductDataForViewItemEvent(wpm.getMainProductIdFromProductPage())\n\t\t\t\t\tjQuery(document).trigger(\"wpmViewItem\", product)\n\t\t\t\t} else if (\"product_category\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmCategory\")\n\t\t\t\t} else if (\"search\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"pmwEvent:Search\")\n\t\t\t\t} else if (\"cart\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tjQuery(document).trigger(\"wpmViewCart\")\n\t\t\t\t} else if (\"order_received_page\" === wpmDataLayer.shop.page_type) {\n\t\t\t\t\tif (wpmDataLayer?.order && !wpm.isOrderIdStored(wpmDataLayer.order.id)) {\n\t\t\t\t\t\tjQuery(document).trigger(\"wpmOrderReceivedPage\")\n\t\t\t\t\t\twpm.writeOrderIdToStorage(wpmDataLayer.order.id, wpmDataLayer.order.key)\n\t\t\t\t\t\tif (typeof wpm.acrRemoveCookie === \"function\") wpm.acrRemoveCookie()\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(document).trigger(\"wpmEverywhereElse\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tjQuery(document).trigger(\"wpmEverywhereElse\")\n\t\t\t}\n\n\t\t\tif (wpmDataLayer?.user?.id && !wpm.hasLoginEventFired()) {\n\t\t\t\tjQuery(document).trigger(\"wpmLogin\")\n\t\t\t\twpm.setLoginEventFired()\n\t\t\t}\n\n\t\t\t// /**\n\t\t\t// * Load mini cart fragments into a wpm session storage key,\n\t\t\t// * after the document load event.\n\t\t\t// */\n\t\t\t// jQuery(document).ajaxSend(function (event, jqxhr, settings) {\n\t\t\t// \t// console.log('settings.url: ' + settings.url);\n\t\t\t//\n\t\t\t// \tif (settings.url.includes(\"get_refreshed_fragments\") && sessionStorage) {\n\t\t\t// \t\tif (!sessionStorage.getItem(\"wpmMiniCartActive\")) {\n\t\t\t// \t\t\tsessionStorage.setItem(\"wpmMiniCartActive\", JSON.stringify(true))\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// })\n\n\t\t\twpmDataLayer.wpmLoadFired = true\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\njQuery(document).on(\"wpmLoad\", async () => {\n\n\tif (\n\t\twindow.sessionStorage &&\n\t\twindow.sessionStorage.getItem(\"_pmw_endpoint_available\") &&\n\t\t!JSON.parse(window.sessionStorage.getItem(\"_pmw_endpoint_available\"))\n\t) {\n\t\tconsole.error(\"Pixel Manager for WooCommerce: REST endpoint is not available. Using admin-ajax.php instead.\")\n\t}\n})\n\n\n/**\n * Load all pixels\n */\njQuery(document).on(\"wpmPreLoadPixels\", () => {\n\n\tif (wpmDataLayer?.shop?.cookie_consent_mgmt?.explicit_consent && !wpm.explicitConsentStateAlreadySet()) {\n\t\twpm.updateConsentCookieValues(null, null, true)\n\t}\n\n\tjQuery(document).trigger(\"wpmLoadPixels\", {})\n})\n\n\n/**\n * All ecommerce events\n */\n\njQuery(document).on(\"wpmAddToCart\", (event, product) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"addToCart\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\t// If Facebook pixel is loaded, add Facebook server to server event data to the payload\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"AddToCart\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : wpm.fbGetProductDataForCapiEvent(product),\n\t\t}\n\t}\n\n\t// TikTok\n\t// https://ads.tiktok.com/gateway/docs/index?identify_key=c0138ffadd90a955c1f0670a56fe348d1d40680b3c89461e09f78ed26785164b&language=ENGLISH&doc_id=1739585702922241#item-link-Adding%20parameters%20to%20event%20code\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"AddToCart\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideAddToCart\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmBeginCheckout\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"beginCheckout\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"InitiateCheckout\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {},\n\t\t}\n\n\t\tif (wpmDataLayer?.cart && !jQuery.isEmptyObject(wpmDataLayer.cart)) {\n\t\t\tpayload.facebook.custom_data = {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tcontent_ids : wpm.fbGetContentIdsFromCart(),\n\t\t\t\tvalue : wpm.getCartValue(),\n\t\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\t}\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"InitiateCheckout\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideBeginCheckout\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmAddToWishlist\", (event, product) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"addToWishlist\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"AddToWishlist\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : wpm.fbGetProductDataForCapiEvent(product),\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"AddToWishlist\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideAddToWishlist\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmViewItem\", (event, product = null) => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent : \"viewItem\",\n\t\tproduct: product,\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"ViewContent\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {},\n\t\t}\n\n\t\tif (product) {\n\t\t\tpayload.facebook.custom_data = wpm.fbGetProductDataForCapiEvent(product)\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"ViewContent\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\n\t\tif (product) {\n\t\t\tpayload.tiktok.properties = {\n\t\t\t\tvalue : product.price * product.quantity,\n\t\t\t\tcurrency: product.currency,\n\t\t\t\tcontents: [{\n\t\t\t\t\tcontent_id : product.dyn_r_ids[wpmDataLayer.pixels.tiktok.dynamic_remarketing.id_type],\n\t\t\t\t\tcontent_type: \"product\",\n\t\t\t\t\tcontent_name: product.name,\n\t\t\t\t\tquantity : product.quantity,\n\t\t\t\t\tprice : product.price,\n\t\t\t\t}],\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideViewItem\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"pmwEvent:Search\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"search\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"Search\",\n\t\t\tevent_id : wpm.getFbRandomEventId(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {\n\t\t\t\tsearch_string: wpm.getSearchTermFromUrl(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"Search\",\n\t\t\tevent_id : wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tquery: wpm.getSearchTermFromUrl(),\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideSearch\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmPlaceOrder\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"placeOrder\",\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"PlaceAnOrder\",\n\t\t\tevent_id: wpm.getRandomEventId(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientPlaceOrder\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// If function wpm.isServerToServerEnabled() exists, then run it\n\tif (typeof wpm.sendEventPayloadToServer === \"function\") {\n\t\twpm.sendEventPayloadToServer(payload)\n\t}\n})\n\njQuery(document).on(\"wpmOrderReceivedPage\", () => {\n\n\t/**\n\t * Prepare the payload\n\t */\n\n\tlet payload = {\n\t\tevent: \"orderReceived\",\n\t}\n\n\t// Facebook\n\tif (wpmDataLayer?.pixels?.facebook?.loaded) {\n\t\tpayload.facebook = {\n\t\t\tevent_name : \"Purchase\",\n\t\t\tevent_id : wpmDataLayer.order.id.toString(),\n\t\t\tuser_data : wpm.getFbUserData(),\n\t\t\tevent_source_url: window.location.href,\n\t\t\tcustom_data : {\n\t\t\t\tcontent_type: \"product\",\n\t\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\t\tcurrency : wpmDataLayer.order.currency,\n\t\t\t\tcontent_ids : wpm.facebookContentIds(),\n\t\t\t},\n\t\t}\n\t}\n\n\t// TikTok\n\tif (wpmDataLayer?.pixels?.tiktok?.loaded) {\n\t\tpayload.tiktok = {\n\t\t\tevent : \"CompletePayment\",\n\t\t\tevent_id : wpmDataLayer.order.id.toString(),\n\t\t\tcontext : wpm.getTikTokUserDataFromBrowser(),\n\t\t\tproperties: {\n\t\t\t\tvalue : wpmDataLayer.order.value_filtered,\n\t\t\t\tcurrency: wpmDataLayer.order.currency,\n\t\t\t\tcontents: wpm.getTikTokOrderItemIds(),\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Process the client-to-server event\n\t */\n\n\tjQuery(document).trigger(\"wpmClientSideOrderReceivedPage\", payload)\n\n\t/**\n\t * Process the server-to-server event\n\t */\n\n\t// ! No server-to-server event is sent for this event because it is compiled and sent from the server directly\n})\n\njQuery(document).on(\"pmw:ready\", async () => {\n\n\t// /**\n\t// * Run as soon as wpm namespace is loaded\n\t// */\n\t//\n\t// await wpm.wpmDataLayerExists()\n\n\t// Watch for products visible in viewport\n\twpm.startIntersectionObserverToWatch()\n\n\t// Watch for lazy loaded products\n\twpm.startProductsMutationObserverToWatch()\n})\n\n\n\n\n","/**\n * Register event listeners\n */\n\n\n/**\n * add_to_cart event\n *\n * WC is inconsistent with events that emit add-to-cart events.\n * adding_to_cart and added_to_are legacy events. Also, they only work\n * on Ajax buttons on shop pages.\n */\n\nconst addToCartSelectors = [\n\t\".add_to_cart_button:not(.product_type_variable)\",\n\t\".ajax_add_to_cart\",\n\t\".single_add_to_cart_button\",\n].join(\",\")\n\njQuery(addToCartSelectors).on(\"click adding_to_cart\", (event) => {\n\t// console log current time\n\t// console.log(\"add_to_cart event fired at: \" + new Date().getTime())\n\n\ttry {\n\n\t\t// console.log(\"add_to_cart event detected\")\n\n\t\tlet quantity = 1,\n\t\t\tproductId\n\n\t\t// Only process on product pages\n\t\tif (wpmDataLayer.shop.page_type === \"product\") {\n\n\t\t\t// First process related and upsell products\n\t\t\tif (typeof jQuery(event.currentTarget).attr(\"href\") !== \"undefined\" && jQuery(event.currentTarget).attr(\"href\").includes(\"add-to-cart\")) {\n\n\t\t\t\tproductId = jQuery(event.currentTarget).data(\"product_id\")\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is simple product\n\t\t\tif (wpmDataLayer.shop.product_type === \"simple\") {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(event.currentTarget).val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is variable product or variable-subscription\n\t\t\tif ([\"variable\", \"variable-subscription\"].indexOf(wpmDataLayer.shop.product_type) >= 0) {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(\"[name='variation_id']\").val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t\t// If is grouped product\n\t\t\tif (wpmDataLayer.shop.product_type === \"grouped\") {\n\n\t\t\t\tjQuery(\".woocommerce-grouped-product-list-item\").each((index, element) => {\n\n\t\t\t\t\tquantity = Number(jQuery(element).find(\".input-text.qty\").val())\n\t\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\t\tlet classes = jQuery(element).attr(\"class\")\n\t\t\t\t\tproductId = wpm.getPostIdFromString(classes)\n\n\t\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// If is bundle product\n\t\t\tif (wpmDataLayer.shop.product_type === \"bundle\") {\n\n\t\t\t\tquantity = Number(jQuery(\".input-text.qty\").val())\n\t\t\t\tif (!quantity && quantity !== 0) quantity = 1\n\t\t\t\tproductId = jQuery(\"input[name=add-to-cart]\").val()\n\n\t\t\t\twpm.addProductToCart(productId, quantity)\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"product_id\")\n\t\t\twpm.addProductToCart(productId, quantity)\n\t\t}\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * If someone clicks anywhere on a custom /?add-to-cart=123 link\n * trigger the add to cart event\n */\n\n// jQuery(document).one(\"click\", \"a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)\", (event) => {\njQuery(\"a:not(.add_to_cart_button, .ajax_add_to_cart, .single_add_to_cart_button)\").one(\"click\", (event) => {\n\n\ttry {\n\t\tif (jQuery(event.target).closest(\"a\").attr(\"href\")) {\n\n\t\t\tlet url = new URL(jQuery(event.currentTarget).attr(\"href\"), window.location.origin)\n\n\t\t\tif (url.searchParams.has(\"add-to-cart\")) {\n\n\t\t\t\tlet productId = url.searchParams.get(\"add-to-cart\")\n\t\t\t\twpm.addProductToCart(productId, 1)\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n// select item event\n// jQuery(document).on(\"click\", \".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product\", (event) => {\njQuery(\".woocommerce-LoopProduct-link, .wc-block-grid__product, .product, .product-small, .type-product\").on(\"click\", (event) => {\n\n\ttry {\n\n\t\t/**\n\t\t * On some pages the event fires multiple times, and on product pages\n\t\t * even on page load. Using e.stopPropagation helps to prevent this,\n\t\t * but I don't know why. We don't even have to use this, since only a real\n\t\t * product click yields a valid productId. So we filter the invalid click\n\t\t * events out later down in the code. I'll keep it that way because this is\n\t\t * the most compatible way across shops.\n\t\t *\n\t\t * e.stopPropagation();\n\t\t * */\n\n\t\tlet productId = jQuery(event.currentTarget).nextAll(\".wpmProductId:first\").data(\"id\")\n\n\t\t/**\n\t\t * On product pages, for some reason, the click event is triggered on the main product on page load.\n\t\t * In that case no ID is found. But we can discard it, since we only want to trigger the event on\n\t\t * related products, which are found below.\n\t\t */\n\n\t\tif (productId) {\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tif (wpmDataLayer.products && wpmDataLayer.products[productId]) {\n\n\t\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\t\t\t\tjQuery(document).trigger(\"wpmSelectContentGaUa\", product)\n\t\t\t\tjQuery(document).trigger(\"wpmSelectItem\", product)\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n// checkout_progress event\n// track checkout option event: entered valid billing email\n// jQuery(document).on(\"input\", \"#billing_email\", (event) => {\njQuery(\"#billing_email\").on(\"input\", (event) => {\n\n\tif (wpm.isEmail(jQuery(event.currentTarget).val())) {\n\t\t// wpm.fireCheckoutOption(2);\n\t\twpm.fireCheckoutProgress(2)\n\t\twpm.emailSelected = true\n\t}\n})\n\n\n/**\n * Place order button\n *\n * Track checkout option event: purchase click\n * https://stackoverflow.com/a/34112407/4688612\n * jQuery(document).one(\"click\", \"#place_order\", () => {\n *\n * Has to be hooked after document ready !\n */\njQuery(\"form.checkout\").on(\"checkout_place_order_success\", () => {\n\n\t// console log current time\n\t// console.log(\"checkout_place_order_success event fired at: \" + new Date().getTime())\n\n\tif (false === wpm.emailSelected) {\n\t\twpm.fireCheckoutProgress(2)\n\t}\n\n\tif (false === wpm.paymentMethodSelected) {\n\t\twpm.fireCheckoutProgress(3)\n\t\twpm.fireCheckoutOption(3, jQuery(\"input[name='payment_method']:checked\").val())\n\t}\n\n\twpm.fireCheckoutProgress(4)\n\n\tjQuery(document).trigger(\"wpmPlaceOrder\", {})\n})\n\n/**\n * Update cart event\n *\n * Has to be hooked after document ready !\n */\njQuery(\"[name='update_cart']\").on(\"click\", () => {\n\n\ttry {\n\t\tjQuery(\".cart_item\").each((index, element) => {\n\n\t\t\tlet url = new URL(jQuery(element).find(\".product-remove\").find(\"a\").attr(\"href\"))\n\t\t\tlet productId = wpm.getProductIdByCartItemKeyUrl(url)\n\n\t\t\tlet quantity = jQuery(element).find(\".qty\").val()\n\n\t\t\tif (quantity === 0) {\n\t\t\t\twpm.removeProductFromCart(productId)\n\t\t\t} else if (quantity < wpmDataLayer.cart[productId].quantity) {\n\t\t\t\twpm.removeProductFromCart(productId, wpmDataLayer.cart[productId].quantity - quantity)\n\t\t\t} else if (quantity > wpmDataLayer.cart[productId].quantity) {\n\t\t\t\twpm.addProductToCart(productId, quantity - wpmDataLayer.cart[productId].quantity)\n\t\t\t}\n\t\t})\n\t} catch (e) {\n\t\tconsole.error(e)\n\t\twpm.getCartItemsFromBackend()\n\t}\n})\n\n// add_to_wishlist\njQuery(\".add_to_wishlist,.wl-add-to\").on(\"click\", event => {\n\n\ttry {\n\n\t\tlet productId\n\n\t\tif (jQuery(event.currentTarget).data(\"productid\")) { // for the WooCommerce wishlist plugin\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"productid\")\n\t\t} else if (jQuery(event.currentTarget).data(\"product-id\")) { // for the YITH wishlist plugin\n\n\t\t\tproductId = jQuery(event.currentTarget).data(\"product-id\")\n\t\t}\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\n\t\tjQuery(document).trigger(\"wpmAddToWishlist\", product)\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Called when the user selects all the required dropdowns / attributes\n *\n * Has to be hooked after document ready !\n *\n * https://stackoverflow.com/a/27849208/4688612\n * https://stackoverflow.com/a/65065335/4688612\n */\n\njQuery(\".single_variation_wrap\").on(\"show_variation\", (event, variation) => {\n\n\ttry {\n\t\tlet productId = wpm.getIdBasedOndVariationsOutputSetting(variation.variation_id)\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\twpm.triggerViewItemEventPrep(productId)\n\n\t} catch (e) {\n\t\tconsole.error(e)\n\t}\n})\n\n\n/**\n * Called on variable products when no selection has been done yet\n * or when the visitor deselects his choice.\n *\n * Has to be hooked after document ready !\n */\n\n// jQuery(function () {\n//\n// \tjQuery(\".single_variation_wrap\").on(\"hide_variation\", function () {\n//\n// \t\ttry {\n// \t\t\tlet classes = jQuery(\"body\").attr(\"class\")\n// \t\t\tlet productId = classes.match(/(postid-)(\\d+)/)[2]\n//\n// \t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n//\n// \t\t\t/**\n// \t\t\t * If we have a variable product with no preset,\n// \t\t\t * and variations output is enabled,\n// \t\t\t * then we send a viewItem event with the first\n// \t\t\t * variation we find for the parent.\n// \t\t\t * If variations output is disabled,\n// \t\t\t * we just send the parent ID.\n// \t\t\t *\n// \t\t\t * And if Facebook microdata is active, use the\n// \t\t\t * microdata product ID.\n// \t\t\t */\n//\n// \t\t\tif (\n// \t\t\t\t\"variable\" === wpmDataLayer.shop.product_type &&\n// \t\t\t\twpmDataLayer?.general?.variationsOutput\n// \t\t\t) {\n// \t\t\t\tfor (const [key, product] of Object.entries(wpmDataLayer.products)) {\n// \t\t\t\t\tif (\"parentId\" in product) {\n//\n// \t\t\t\t\t\tproductId = product.id\n// \t\t\t\t\t\tbreak\n// \t\t\t\t\t}\n// \t\t\t\t}\n//\n// \t\t\t\tif (wpmDataLayer?.pixels?.facebook?.microdata_product_id) {\n// \t\t\t\t\tproductId = wpmDataLayer.pixels.facebook.microdata_product_id\n// \t\t\t\t}\n// \t\t\t}\n//\n// \t\t\t// console.log(\"hmm\")\n// \t\t\twpm.triggerViewItemEventPrep(productId)\n//\n// \t\t} catch (e) {\n// \t\t\tconsole.error(e)\n// \t\t}\n// \t})\n// })\n\n// jQuery(function () {\n//\n// \tjQuery(\".single_variation_wrap\").on(\"hide_variation\", function () {\n// \t\tjQuery(document).trigger(\"wpmviewitem\")\n// \t})\n// })\n","/**\n * Create a wpm namespace under which all functions are declared\n */\n\n// https://stackoverflow.com/a/5947280/4688612\n\n(function (wpm, $, undefined) {\n\n\tconst wpmDeduper = {\n\t\tkeyName : \"_wpm_order_ids\",\n\t\tcookieExpiresDays: 365,\n\t}\n\n\tconst wpmRestSettings = {\n\t\t// cookiesAvailable : '_wpm_cookies_are_available',\n\t\tcookiePmwRestEndpointAvailable: \"_pmw_endpoint_available\",\n\t\trestEndpointPost : \"pmw/v1/test/\",\n\t\trestFails : 0,\n\t\trestFailsThreshold : 10,\n\t}\n\n\twpm.emailSelected = false\n\twpm.paymentMethodSelected = false\n\n\t// wpm.checkIfCookiesAvailable = function () {\n\t//\n\t// // read the cookie if previously set, if it is return true, otherwise continue\n\t// if (wpm.getCookie(wpmRestSettings.cookiesAvailable)) {\n\t// return true;\n\t// }\n\t//\n\t// // set the cookie for the session\n\t// Cookies.set(wpmRestSettings.cookiesAvailable, true);\n\t//\n\t// // read cookie, true if ok, false if not ok\n\t// return !!wpm.getCookie(wpmRestSettings.cookiesAvailable);\n\t// }\n\n\twpm.useRestEndpoint = () => {\n\n\t\t// only if sessionStorage is available\n\n\t\t// only if REST API endpoint is generally accessible\n\t\t// check in sessionStorage if we checked before and return answer\n\t\t// otherwise check if the endpoint is available, save answer in sessionStorage and return answer\n\n\t\t// only if not too many REST API errors happened\n\n\t\treturn wpm.isSessionStorageAvailable() &&\n\t\t\twpm.isRestEndpointAvailable() &&\n\t\t\twpm.isBelowRestErrorThreshold()\n\t}\n\n\twpm.isBelowRestErrorThreshold = () => window.sessionStorage.getItem(wpmRestSettings.restFails) <= wpmRestSettings.restFailsThreshold\n\n\twpm.isRestEndpointAvailable = async () => {\n\n\t\tif (window.sessionStorage.getItem(wpmRestSettings.cookiePmwRestEndpointAvailable)) {\n\t\t\treturn JSON.parse(window.sessionStorage.getItem(wpmRestSettings.cookiePmwRestEndpointAvailable))\n\t\t} else {\n\t\t\treturn await wpm.testEndpoint()\n\t\t}\n\t}\n\n\twpm.isSessionStorageAvailable = () => !!window.sessionStorage\n\n\t// Test the endpoint by sending a POST request\n\twpm.testEndpoint = async (\n\t\turl = wpm.root + wpmRestSettings.restEndpointPost,\n\t\tcookieName = wpmRestSettings.cookiePmwRestEndpointAvailable,\n\t) => {\n\n\t\tlet response = await fetch(url, {\n\t\t\tmethod : \"POST\",\n\t\t\tmode : \"cors\",\n\t\t\tcache : \"no-cache\",\n\t\t\tkeepalive: true,\n\t\t})\n\n\t\tif (response.status === 200) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(true))\n\t\t\treturn true\n\t\t} else if (response.status === 404) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(false))\n\t\t\treturn false\n\t\t} else if (response.status === 0) {\n\t\t\twindow.sessionStorage.setItem(cookieName, JSON.stringify(false))\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.isWpmRestEndpointAvailable = (cookieName = wpmRestSettings.cookiePmwRestEndpointAvailable) => !!wpm.getCookie(cookieName)\n\n\twpm.writeOrderIdToStorage = (orderId, orderKey, source = \"thankyou_page\", expireDays = 365) => {\n\n\t\t// save the order ID in the browser storage\n\n\t\tif (!window.Storage) {\n\t\t\tlet expiresDate = new Date()\n\t\t\texpiresDate.setDate(expiresDate.getDate() + wpmDeduper.cookieExpiresDays)\n\n\t\t\tlet ids = []\n\t\t\tif (checkCookie()) {\n\t\t\t\tids = JSON.parse(wpm.getCookie(wpmDeduper.keyName))\n\t\t\t}\n\n\t\t\tif (!ids.includes(orderId)) {\n\t\t\t\tids.push(orderId)\n\t\t\t\tdocument.cookie = wpmDeduper.keyName + \"=\" + JSON.stringify(ids) + \";expires=\" + expiresDate.toUTCString()\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (localStorage.getItem(wpmDeduper.keyName) === null) {\n\t\t\t\tlet ids = []\n\t\t\t\tids.push(orderId)\n\t\t\t\twindow.localStorage.setItem(wpmDeduper.keyName, JSON.stringify(ids))\n\n\t\t\t} else {\n\t\t\t\tlet ids = JSON.parse(localStorage.getItem(wpmDeduper.keyName))\n\t\t\t\tif (!ids.includes(orderId)) {\n\t\t\t\t\tids.push(orderId)\n\t\t\t\t\twindow.localStorage.setItem(wpmDeduper.keyName, JSON.stringify(ids))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof wpm.storeOrderIdOnServer === \"function\" && wpmDataLayer.orderDeduplication) {\n\t\t\twpm.storeOrderIdOnServer(orderKey, source)\n\t\t}\n\t}\n\n\tfunction checkCookie() {\n\t\tlet key = wpm.getCookie(wpmDeduper.keyName)\n\t\treturn key !== \"\"\n\t}\n\n\twpm.isOrderIdStored = orderId => {\n\n\t\tif (wpmDataLayer.orderDeduplication) {\n\n\t\t\tif (!window.Storage) {\n\n\t\t\t\tif (checkCookie()) {\n\t\t\t\t\tlet ids = JSON.parse(wpm.getCookie(wpmDeduper.keyName))\n\t\t\t\t\treturn ids.includes(orderId)\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (localStorage.getItem(wpmDeduper.keyName) !== null) {\n\t\t\t\t\tlet ids = JSON.parse(localStorage.getItem(wpmDeduper.keyName))\n\t\t\t\t\treturn ids.includes(orderId)\n\t\t\t\t} else {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.log(\"order duplication prevention: off\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.isEmail = email => {\n\n\t\t// https://emailregex.com/\n\n\t\tlet regex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n\n\t\treturn regex.test(email)\n\t}\n\n\twpm.removeProductFromCart = async (productId, quantityToRemove = null) => {\n\n\t\ttry {\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tlet quantity\n\n\t\t\tif (quantityToRemove == null) {\n\t\t\t\tquantity = wpmDataLayer.cart[productId].quantity\n\t\t\t} else {\n\t\t\t\tquantity = quantityToRemove\n\t\t\t}\n\n\t\t\tif (!wpmDataLayer.cart[productId]) {\n\t\t\t\tawait wpm.getProductsFromBackend([productId])\n\t\t\t}\n\n\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\n\t\t\tjQuery(document).trigger(\"wpmRemoveFromCart\", product)\n\n\t\t\tif (quantityToRemove == null || wpmDataLayer.cart[productId].quantity === quantityToRemove) {\n\n\t\t\t\tdelete wpmDataLayer.cart[productId]\n\n\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t} else {\n\n\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity - quantity\n\n\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\t// console.log('getting cart from back end');\n\t\t\t// wpm.getCartItemsFromBackend();\n\t\t\t// console.log('getting cart from back end done');\n\t\t}\n\t}\n\n\twpm.getIdBasedOndVariationsOutputSetting = productId => {\n\n\t\ttry {\n\t\t\tif (wpmDataLayer?.general?.variationsOutput) return productId\n\n\t\t\tif (wpmDataLayer.products[productId].isVariation) return wpmDataLayer.products[productId].parentId\n\n\t\t\treturn productId\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// add_to_cart\n\twpm.addProductToCart = async (productId, quantity) => {\n\n\t\ttry {\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\t\tif (!wpmDataLayer?.products[productId]) {\n\t\t\t\tawait wpm.getProductsFromBackend([productId])\n\t\t\t}\n\n\t\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\n\t\t\tjQuery(document).trigger(\"wpmAddToCart\", product)\n\n\t\t\t// add product to cart wpmDataLayer['cart']\n\n\t\t\t// if the product already exists in the object, only add the additional quantity\n\t\t\t// otherwise create that product object in the wpmDataLayer['cart']\n\t\t\tif (wpmDataLayer?.cart[productId]) {\n\n\t\t\t\twpmDataLayer.cart[productId].quantity = wpmDataLayer.cart[productId].quantity + quantity\n\t\t\t} else {\n\n\t\t\t\tif (!(\"cart\" in wpmDataLayer)) wpmDataLayer.cart = {}\n\n\t\t\t\twpmDataLayer.cart[productId] = wpm.getProductDetailsFormattedForEvent(productId, quantity)\n\t\t\t}\n\n\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(wpmDataLayer.cart))\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\n\t\t\t// fallback if wpmDataLayer.cart and wpmDataLayer.products got out of sync in case cart caching has an issue\n\t\t\twpm.getCartItemsFromBackend()\n\t\t}\n\t}\n\n\twpm.getCartItems = () => {\n\n\t\tif (sessionStorage) {\n\t\t\tif (!sessionStorage.getItem(\"wpmDataLayerCart\") || wpmDataLayer.shop.page_type === \"order_received_page\") {\n\t\t\t\tsessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify({}))\n\t\t\t} else {\n\t\t\t\twpm.saveCartObjectToDataLayer(JSON.parse(sessionStorage.getItem(\"wpmDataLayerCart\")))\n\t\t\t}\n\t\t} else {\n\t\t\twpm.getCartItemsFromBackend()\n\t\t}\n\t}\n\n\t// get all cart items from the backend\n\twpm.getCartItemsFromBackend = () => {\n\t\ttry {\n\n\t\t\t/**\n\t\t\t * Can't use a REST API endpoint, as the cart session will not be loaded if the\n\t\t\t * endpoint is called.\n\t\t\t *\n\t\t\t * https://wordpress.org/support/topic/wc-cart-is-null-in-custom-rest-api/#post-11442843\n\t\t\t */\n\n\t\t\t/**\n\t\t\t * Get the cart items from the backend the data object using fetch API\n\t\t\t * and log success or error messages\n\t\t\t * and url encoded data\n\t\t\t */\n\t\t\tfetch(wpm.ajax_url, {\n\t\t\t\tmethod : \"POST\",\n\t\t\t\tcache : \"no-cache\",\n\t\t\t\tbody : new URLSearchParams({action: \"pmw_get_cart_items\"}),\n\t\t\t\tkeepalive: true,\n\t\t\t})\n\t\t\t\t.then(response => {\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\treturn response.json()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow Error(\"Error getting cart items from backend\")\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.then(data => {\n\n\t\t\t\t\tif (data.success) {\n\n\t\t\t\t\t\tif (!data.data[\"cart\"]) data.data[\"cart\"] = {}\n\n\t\t\t\t\t\twpm.saveCartObjectToDataLayer(data.data[\"cart\"])\n\n\t\t\t\t\t\tif (sessionStorage) sessionStorage.setItem(\"wpmDataLayerCart\", JSON.stringify(data.data[\"cart\"]))\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow Error(\"Error getting cart items from backend\")\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// get productIds from the backend\n\twpm.getProductsFromBackend = async productIds => {\n\n\t\tif (wpmDataLayer?.products) {\n\t\t\t// If productIds already exists as key in wpmDataLayer.products, remove it from the array\n\t\t\tproductIds = productIds.filter(productId => !(productId in wpmDataLayer.products))\n\t\t}\n\n\t\t// if no products IDs are in the object, don't try to get anything from the server\n\t\tif (!productIds || productIds.length === 0) return\n\n\t\ttry {\n\n\t\t\tlet response\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) {\n\t\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/products/\", {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\tpageId : wpmDataLayer.general.pageId,\n\t\t\t\t\t\tpageType : wpmDataLayer.shop.page_type,\n\t\t\t\t\t\tproductIds: productIds,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t} else {\n\n\t\t\t\t// Get the product details from the backend the data object using fetch API\n\t\t\t\t// and log success or error messages\n\t\t\t\t// and url encoded data\n\t\t\t\tresponse = await fetch(wpm.ajax_url, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t\tbody : new URLSearchParams({\n\t\t\t\t\t\taction : \"pmw_get_product_ids\",\n\t\t\t\t\t\tpageId : wpmDataLayer.general.pageId,\n\t\t\t\t\t\tpageType : wpmDataLayer.shop.page_type,\n\t\t\t\t\t\tproductIds: productIds,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (response.ok) {\n\t\t\t\tlet responseData = await response.json()\n\t\t\t\tif (responseData.success) {\n\t\t\t\t\twpmDataLayer.products = Object.assign({}, wpmDataLayer.products, responseData.data)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Error getting products from backend\")\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\n\t\treturn true\n\t}\n\n\twpm.saveCartObjectToDataLayer = cartObject => {\n\n\t\twpmDataLayer.cart = cartObject\n\t\twpmDataLayer.products = Object.assign({}, wpmDataLayer.products, cartObject)\n\t}\n\n\twpm.triggerViewItemEventPrep = async productId => {\n\n\t\tif (wpmDataLayer.products && wpmDataLayer.products[productId]) {\n\n\t\t\twpm.triggerViewItemEvent(productId)\n\t\t} else {\n\t\t\tawait wpm.getProductsFromBackend([productId])\n\t\t\twpm.triggerViewItemEvent(productId)\n\t\t}\n\t}\n\n\twpm.triggerViewItemEvent = productId => {\n\n\t\tlet product = wpm.getProductDetailsFormattedForEvent(productId)\n\n\t\tjQuery(document).trigger(\"wpmViewItem\", product)\n\t}\n\n\twpm.triggerViewItemEventNoProduct = () => {\n\t\tjQuery(document).trigger(\"wpmViewItem\")\n\t}\n\n\twpm.fireCheckoutOption = (step, checkout_option = null, value = null) => {\n\n\t\tlet data = {\n\t\t\tstep : step,\n\t\t\tcheckout_option: checkout_option,\n\t\t\tvalue : value,\n\t\t}\n\n\t\tjQuery(document).trigger(\"wpmFireCheckoutOption\", data)\n\t}\n\n\twpm.fireCheckoutProgress = step => {\n\n\t\tlet data = {\n\t\t\tstep: step,\n\t\t}\n\n\t\tjQuery(document).trigger(\"wpmFireCheckoutProgress\", data)\n\t}\n\n\twpm.getPostIdFromString = string => {\n\n\t\ttry {\n\t\t\treturn string.match(/(post-)(\\d+)/)[2]\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.triggerViewItemList = productId => {\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tproductId = wpm.getIdBasedOndVariationsOutputSetting(productId)\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\tjQuery(document).trigger(\"wpmViewItemList\", wpm.getProductDataForViewItemEvent(productId))\n\t}\n\n\twpm.getProductDataForViewItemEvent = productId => {\n\n\t\tif (!productId) throw Error(\"Wasn't able to retrieve a productId\")\n\n\t\ttry {\n\t\t\tif (wpmDataLayer.products[productId]) {\n\n\t\t\t\treturn wpm.getProductDetailsFormattedForEvent(productId)\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getMainProductIdFromProductPage = () => {\n\n\t\ttry {\n\t\t\tif ([\"simple\", \"variable\", \"grouped\", \"composite\", \"bundle\"].indexOf(wpmDataLayer.shop.product_type) >= 0) {\n\t\t\t\treturn jQuery(\".wpmProductId:first\").data(\"id\")\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.viewItemListTriggerTestMode = target => {\n\n\t\tjQuery(target).css({\"position\": \"relative\"})\n\t\tjQuery(target).append(\"<div id=\\\"viewItemListTriggerOverlay\\\"></div>\")\n\t\tjQuery(target).find(\"#viewItemListTriggerOverlay\").css({\n\t\t\t\"z-index\" : \"10\",\n\t\t\t\"display\" : \"block\",\n\t\t\t\"position\" : \"absolute\",\n\t\t\t\"height\" : \"100%\",\n\t\t\t\"top\" : \"0\",\n\t\t\t\"left\" : \"0\",\n\t\t\t\"right\" : \"0\",\n\t\t\t\"opacity\" : wpmDataLayer.viewItemListTrigger.opacity,\n\t\t\t\"background-color\": wpmDataLayer.viewItemListTrigger.backgroundColor,\n\t\t})\n\t}\n\n\twpm.getSearchTermFromUrl = () => {\n\n\t\ttry {\n\t\t\tlet urlParameters = new URLSearchParams(window.location.search)\n\t\t\treturn urlParameters.get(\"s\")\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// we need this to track timeouts for intersection observers\n\tlet ioTimeouts = {}\n\n\twpm.observerCallback = (entries, observer) => {\n\n\t\tentries.forEach((entry) => {\n\n\t\t\ttry {\n\t\t\t\tlet productId\n\n\t\t\t\tlet elementId = jQuery(entry.target).data(\"ioid\")\n\n\t\t\t\t// Get the productId from next element, if wpmProductId is a sibling, like in Gutenberg blocks\n\t\t\t\t// otherwise go search in children, like in regular WC loop items\n\t\t\t\tif (jQuery(entry.target).next(\".wpmProductId\").length) {\n\t\t\t\t\t// console.log('test 1');\n\t\t\t\t\tproductId = jQuery(entry.target).next(\".wpmProductId\").data(\"id\")\n\t\t\t\t} else {\n\t\t\t\t\tproductId = jQuery(entry.target).find(\".wpmProductId\").data(\"id\")\n\t\t\t\t}\n\n\n\t\t\t\tif (!productId) throw Error(\"wpmProductId element not found\")\n\n\t\t\t\tif (entry.isIntersecting) {\n\n\t\t\t\t\tioTimeouts[elementId] = setTimeout(() => {\n\n\t\t\t\t\t\twpm.triggerViewItemList(productId)\n\t\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.testMode) wpm.viewItemListTriggerTestMode(entry.target)\n\t\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.repeat === false) observer.unobserve(entry.target)\n\t\t\t\t\t}, wpmDataLayer.viewItemListTrigger.timeout)\n\n\t\t\t\t} else {\n\n\t\t\t\t\tclearTimeout(ioTimeouts[elementId])\n\t\t\t\t\tif (wpmDataLayer.viewItemListTrigger.testMode) jQuery(entry.target).find(\"#viewItemListTriggerOverlay\").remove()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e)\n\t\t\t}\n\t\t})\n\t}\n\n\t// fire view_item_list only on products that have become visible\n\tlet io\n\tlet ioid = 0\n\tlet allIoElementsToWatch\n\n\tlet getAllElementsToWatch = () => {\n\n\t\tallIoElementsToWatch = jQuery(\".wpmProductId\")\n\t\t\t.map(function (i, elem) {\n\n\t\t\t\tif (\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"type-product\") ||\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"product\") ||\n\t\t\t\t\tjQuery(elem).parent().hasClass(\"product-item-inner\")\n\t\t\t\t) {\n\t\t\t\t\treturn jQuery(elem).parent()\n\t\t\t\t} else if (\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"wc-block-grid__product\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"product\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"product-small\") ||\n\t\t\t\t\tjQuery(elem).prev().hasClass(\"woocommerce-LoopProduct-link\")\n\t\t\t\t) {\n\t\t\t\t\treturn jQuery(this).prev()\n\t\t\t\t} else if (jQuery(elem).closest(\".product\").length) {\n\t\t\t\t\treturn jQuery(elem).closest(\".product\")\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\twpm.startIntersectionObserverToWatch = () => {\n\n\t\ttry {\n\t\t\t// enable view_item_list test mode from browser\n\t\t\tif (wpm.urlHasParameter(\"vildemomode\")) wpmDataLayer.viewItemListTrigger.testMode = true\n\n\t\t\t// set up intersection observer\n\t\t\tio = new IntersectionObserver(wpm.observerCallback, {\n\t\t\t\tthreshold: wpmDataLayer.viewItemListTrigger.threshold,\n\t\t\t})\n\n\t\t\tgetAllElementsToWatch()\n\n\t\t\tallIoElementsToWatch.each((i, elem) => {\n\n\t\t\t\tjQuery(elem[0]).data(\"ioid\", ioid++)\n\n\t\t\t\tio.observe(elem[0])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// watch DOM for new lazy loaded products and add them to the intersection observer\n\twpm.startProductsMutationObserverToWatch = () => {\n\n\t\ttry {\n\t\t\t// Pass in the target node, as well as the observer options\n\n\t\t\t// selects the most common parent node\n\t\t\t// https://stackoverflow.com/a/7648323/4688612\n\t\t\tlet productsNode = jQuery(\".wpmProductId:eq(0)\").parents().has(jQuery(\".wpmProductId:eq(1)\").parents()).first()\n\n\t\t\tif (productsNode.length) {\n\t\t\t\tproductsMutationObserver.observe(productsNode[0], {\n\t\t\t\t\tattributes : true,\n\t\t\t\t\tchildList : true,\n\t\t\t\t\tcharacterData: true,\n\t\t\t\t})\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\t// Create an observer instance\n\tlet productsMutationObserver = new MutationObserver(mutations => {\n\n\t\tmutations.forEach(mutation => {\n\t\t\tlet newNodes = mutation.addedNodes // DOM NodeList\n\t\t\tif (newNodes !== null) { // If there are new nodes added\n\t\t\t\tlet nodes = jQuery(newNodes) // jQuery set\n\t\t\t\tnodes.each(function () {\n\t\t\t\t\tif (\n\t\t\t\t\t\tjQuery(this).hasClass(\"type-product\") ||\n\t\t\t\t\t\tjQuery(this).hasClass(\"product-small\") ||\n\t\t\t\t\t\tjQuery(this).hasClass(\"wc-block-grid__product\")\n\t\t\t\t\t) {\n\t\t\t\t\t\t// check if the node has a child or sibling wpmProductId\n\t\t\t\t\t\t// if yes add it to the intersectionObserver\n\t\t\t\t\t\tif (hasWpmProductIdElement(this)) {\n\t\t\t\t\t\t\tjQuery(this).data(\"ioid\", ioid++)\n\t\t\t\t\t\t\tio.observe(this)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t})\n\n\tlet hasWpmProductIdElement = elem =>\n\t\t!!(jQuery(elem).find(\".wpmProductId\").length ||\n\t\t\tjQuery(elem).siblings(\".wpmProductId\").length)\n\n\twpm.setCookie = (cookieName, cookieValue = \"\", expiryDays = null) => {\n\n\t\tif (expiryDays) {\n\n\t\t\tlet d = new Date()\n\t\t\td.setTime(d.getTime() + (expiryDays * 24 * 60 * 60 * 1000))\n\t\t\tlet expires = \"expires=\" + d.toUTCString()\n\t\t\tdocument.cookie = cookieName + \"=\" + cookieValue + \";\" + expires + \";path=/\"\n\t\t} else {\n\t\t\tdocument.cookie = cookieName + \"=\" + cookieValue + \";path=/\"\n\t\t}\n\t}\n\n\twpm.getCookie = cookieName => {\n\n\t\tlet name = cookieName + \"=\"\n\t\tlet decodedCookie = decodeURIComponent(document.cookie)\n\t\tlet ca = decodedCookie.split(\";\")\n\n\t\tfor (let i = 0; i < ca.length; i++) {\n\n\t\t\tlet c = ca[i]\n\n\t\t\twhile (c.charAt(0) == \" \") {\n\t\t\t\tc = c.substring(1)\n\t\t\t}\n\n\t\t\tif (c.indexOf(name) == 0) {\n\t\t\t\treturn c.substring(name.length, c.length)\n\t\t\t}\n\t\t}\n\n\t\treturn \"\"\n\t}\n\n\twpm.deleteCookie = cookieName => {\n\t\twpm.setCookie(cookieName, \"\", -1)\n\t}\n\n\twpm.getWpmSessionData = () => {\n\n\t\tif (window.sessionStorage) {\n\n\t\t\tlet data = window.sessionStorage.getItem(\"_wpm\")\n\n\t\t\tif (data !== null) {\n\t\t\t\treturn JSON.parse(data)\n\t\t\t} else {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t} else {\n\t\t\treturn {}\n\t\t}\n\t}\n\n\twpm.setWpmSessionData = data => {\n\t\tif (window.sessionStorage) {\n\t\t\twindow.sessionStorage.setItem(\"_wpm\", JSON.stringify(data))\n\t\t}\n\t}\n\n\twpm.storeOrderIdOnServer = async (orderKey, source) => {\n\n\t\ttry {\n\n\t\t\tlet response\n\n\t\t\tif (await wpm.isRestEndpointAvailable()) {\n\n\t\t\t\tresponse = await fetch(wpm.root + \"pmw/v1/pixels-fired/\", {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\theaders : {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t\t\"X-WP-Nonce\" : wpm.nonce_wp_rest,\n\t\t\t\t\t},\n\t\t\t\t\tbody : JSON.stringify({\n\t\t\t\t\t\t// order_id: orderId,\n\t\t\t\t\t\torder_key: orderKey,\n\t\t\t\t\t\tsource : source,\n\t\t\t\t\t\t// nonce : wpm.pmw_nonce,\n\t\t\t\t\t}),\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t\tcache : \"no-cache\",\n\t\t\t\t})\n\n\t\t\t} else {\n\t\t\t\t// save the state in the database\n\n\t\t\t\t// Send the data object with ajax request\n\t\t\t\t// and log success or error using fetch API and url encoded\n\t\t\t\tresponse = await fetch(wpm.ajax_url, {\n\t\t\t\t\tmethod : \"POST\",\n\t\t\t\t\tbody : new URLSearchParams({\n\t\t\t\t\t\taction: \"pmw_purchase_pixels_fired\",\n\t\t\t\t\t\t// order_id: orderId,\n\t\t\t\t\t\torder_key : orderKey,\n\t\t\t\t\t\tsource : source,\n\t\t\t\t\t\tnonce_ajax: wpm.nonce_ajax,\n\t\t\t\t\t}),\n\t\t\t\t\tkeepalive: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst responseJson = await response.json()\n\n\t\t\tif (responseJson.success) {\n\t\t\t\tconsole.log(\"wpm.storeOrderIdOnServer success\")\n\t\t\t} else {\n\t\t\t\tconsole.error(\"wpm.storeOrderIdOnServer error\", responseJson)\n\t\t\t}\n\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\twpm.getProductIdByCartItemKeyUrl = url => {\n\n\t\tlet searchParams = new URLSearchParams(url.search)\n\t\tlet cartItemKey = searchParams.get(\"remove_item\")\n\n\t\tlet productId\n\n\t\tif (wpmDataLayer.cartItemKeys[cartItemKey][\"variation_id\"] === 0) {\n\t\t\tproductId = wpmDataLayer.cartItemKeys[cartItemKey][\"product_id\"]\n\t\t} else {\n\t\t\tproductId = wpmDataLayer.cartItemKeys[cartItemKey][\"variation_id\"]\n\t\t}\n\n\t\treturn productId\n\t}\n\n\twpm.getAddToCartLinkProductIds = () =>\n\t\tjQuery(\"a\").map(function () {\n\t\t\tlet href = jQuery(this).attr(\"href\")\n\n\t\t\tif (href && href.includes(\"?add-to-cart=\")) {\n\t\t\t\tlet matches = href.match(/(add-to-cart=)(\\d+)/)\n\t\t\t\tif (matches) return matches[2]\n\t\t\t}\n\t\t}).get()\n\n\twpm.getProductDetailsFormattedForEvent = (productId, quantity = 1) => {\n\n\t\tlet product = {\n\t\t\tid : productId.toString(),\n\t\t\tdyn_r_ids : wpmDataLayer.products[productId].dyn_r_ids,\n\t\t\tname : wpmDataLayer.products[productId].name,\n\t\t\tlist_name : wpmDataLayer.shop.list_name,\n\t\t\tbrand : wpmDataLayer.products[productId].brand,\n\t\t\tcategory : wpmDataLayer.products[productId].category,\n\t\t\tvariant : wpmDataLayer.products[productId].variant,\n\t\t\tlist_position: wpmDataLayer.products[productId].position,\n\t\t\tquantity : quantity,\n\t\t\tprice : wpmDataLayer.products[productId].price,\n\t\t\tcurrency : wpmDataLayer.shop.currency,\n\t\t\tisVariable : wpmDataLayer.products[productId].isVariable,\n\t\t\tisVariation : wpmDataLayer.products[productId].isVariation,\n\t\t\tparentId : wpmDataLayer.products[productId].parentId,\n\t\t}\n\n\t\tif (product.isVariation) product[\"parentId_dyn_r_ids\"] = wpmDataLayer.products[productId].parentId_dyn_r_ids\n\n\t\treturn product\n\t}\n\n\twpm.setReferrerToCookie = () => {\n\n\t\t// can't use session storage as we can't read it from the server\n\t\tif (!wpm.getCookie(\"wpmReferrer\")) {\n\t\t\twpm.setCookie(\"wpmReferrer\", document.referrer)\n\t\t}\n\t}\n\n\twpm.getReferrerFromCookie = () => {\n\n\t\tif (wpm.getCookie(\"wpmReferrer\")) {\n\t\t\treturn wpm.getCookie(\"wpmReferrer\")\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t}\n\n\twpm.getClidFromBrowser = (clidId = \"gclid\") => {\n\n\t\tlet clidCookieId\n\n\t\tclidCookieId = {\n\t\t\tgclid: \"_gcl_aw\",\n\t\t\tdclid: \"_gcl_dc\",\n\t\t}\n\n\t\tif (wpm.getCookie(clidCookieId[clidId])) {\n\n\t\t\tlet clidCookie = wpm.getCookie(clidCookieId[clidId])\n\t\t\tlet matches = clidCookie.match(/(GCL.[\\d]*.)(.*)/)\n\t\t\treturn matches[2]\n\t\t} else {\n\t\t\treturn \"\"\n\t\t}\n\t}\n\n\twpm.getUserAgent = () => navigator.userAgent\n\n\twpm.getViewPort = () => ({\n\t\twidth : Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),\n\t\theight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0),\n\t})\n\n\n\twpm.version = () => {\n\t\tconsole.log(wpmDataLayer.version)\n\t}\n\n\t/**\n\t * https://api.jquery.com/jquery.getscript/\n\t *\n\t * Switched back to jQuery.ajax as the fetch method on some sites returned a type error\n\t * Possible reasons are:\n\t * * CORS mismatch\n\t * * The user is using an ad blocker\n\t */\n\n\twpm.loadScriptAndCacheIt = url => {\n\n\t\t// Get and load the script using fetch API, if possible from cache, and return it without using eval\n\t\t// return fetch(url, {\n\t\t// \tmethod : \"GET\",\n\t\t// \tcache : \"default\",\n\t\t// \tkeepalive: true,\n\t\t// })\n\t\t// \t.then(response => {\n\t\t// \t\tif (response.ok) {\n\t\t// \t\t\t// console.log(\"response\", response)\n\t\t// \t\t\treturn response.text()\n\t\t// \t\t\t// console.log(\"wpm.loadScriptAndCacheIt success: \" + url)\n\t\t// \t\t} else {\n\t\t// \t\t\tthrow new Error(\"Network response was not ok: \" + url)\n\t\t// \t\t}\n\t\t// \t})\n\t\t// \t.then(script => {\n\t\t// \t\t// Execute the script\n\t\t// \t\t// console.error(\"executing script: \" + script)\n\t\t// \t\teval(script)\n\t\t// \t\t// console.log(\"executed script: \" + script)\n\t\t// \t})\n\t\t// \t.catch(e => {\n\t\t// \t\tconsole.error(e)\n\t\t// \t})\n\n\t\tlet options = {\n\t\t\tdataType: \"script\",\n\t\t\tcache : true,\n\t\t\turl : url,\n\t\t}\n\n\t\treturn jQuery.ajax(options)\n\t}\n\n\twpm.getOrderItemPrice = orderItem => (orderItem.total + orderItem.total_tax) / orderItem.quantity\n\n\twpm.hasLoginEventFired = () => {\n\t\tlet data = wpm.getWpmSessionData()\n\t\treturn data?.loginEventFired\n\t}\n\n\twpm.setLoginEventFired = () => {\n\t\tlet data = wpm.getWpmSessionData()\n\t\tdata[\"loginEventFired\"] = true\n\t\twpm.setWpmSessionData(data)\n\t}\n\n\twpm.pageLoaded = async () => new Promise(resolve => {\n\t\t(function waitForVar() {\n\t\t\tif (\"complete\" === document.readyState) return resolve()\n\t\t\tsetTimeout(waitForVar, 50)\n\t\t})()\n\t})\n\n\twpm.pageReady = () => {\n\t\treturn new Promise(resolve => {\n\t\t\t(function waitForVar() {\n\t\t\t\tif (\"interactive\" === document.readyState || \"complete\" === document.readyState) return resolve()\n\t\t\t\tsetTimeout(waitForVar, 50)\n\t\t\t})()\n\t\t})\n\t}\n\n\twpm.isMiniCartActive = () => {\n\t\tif (window.sessionStorage) {\n\t\t\tfor (const [key, value] of Object.entries(window.sessionStorage)) {\n\t\t\t\tif (key.includes(\"wc_fragments\")) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n\n\twpm.doesWooCommerceCartExist = () => document.cookie.includes(\"woocommerce_items_in_cart\")\n\n\twpm.urlHasParameter = parameter => {\n\t\tlet urlParams = new URLSearchParams(window.location.search)\n\t\treturn urlParams.has(parameter)\n\t}\n\n\t// https://stackoverflow.com/a/60606893/4688612\n\twpm.hashAsync = (algo, str) => {\n\t\treturn crypto.subtle.digest(algo, new TextEncoder(\"utf-8\").encode(str)).then(buf => {\n\t\t\treturn Array.prototype.map.call(new Uint8Array(buf), x => ((\"00\" + x.toString(16)).slice(-2))).join(\"\")\n\t\t})\n\t}\n\n\twpm.getCartValue = () => {\n\n\t\tlet value = 0\n\n\t\tif (wpmDataLayer?.cart) {\n\n\t\t\tfor (const key in wpmDataLayer.cart) {\n\t\t\t\t// content_ids.push(wpmDataLayer.products[key].dyn_r_ids[wpmDataLayer.pixels.facebook.dynamic_remarketing.id_type])\n\n\t\t\t\tlet product = wpmDataLayer.cart[key]\n\n\t\t\t\tvalue += product.quantity * product.price\n\t\t\t}\n\t\t}\n\n\t\treturn value\n\t}\n\n\t/**\n\t * Detect if the current URL contains at least one pattern\n\t *\n\t * @param patterns\n\t * @returns {boolean}\n\t */\n\twpm.doesUrlContainPatterns = patterns => {\n\n\t\tfor (const pattern of patterns) {\n\t\t\tif (new RegExp(pattern).test(window.location.href)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\t/**\n\t * Detect if the current URL contains at least one pattern that is on the tracking exclusion list\n\t *\n\t * https://www.linkedin.com/pulse/how-remove-google-robot-problem-via-gtm-facebook-pixel-hjelpdahl/\n\t * https://www.youtube.com/watch?v=b4I1ePZt8Z0\n\t *\n\t * @returns {boolean}\n\t */\n\twpm.excludeDomainFromTracking = () => {\n\n\t\tlet excludeDomains = [\n\t\t\t\"appspot.com\",\n\t\t\t\"translate.google.com\",\n\t\t]\n\n\t\tif (wpmDataLayer?.general?.excludeDomains) {\n\t\t\texcludeDomains = [...excludeDomains, ...wpmDataLayer.general.excludeDomains]\n\t\t}\n\n\t\t// Abort if URL contains excluded domains\n\t\tif (excludeDomains.some(domain => window.location.href.includes(domain))) {\n\t\t\tconsole.debug(\"Pixel Manager for WooCommerce: Aborted due to excluded domain\")\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\twpm.getRandomEventId = () => (Math.random() + 1).toString(36).substring(2)\n\n\n\twpm.pmwConsoleMessage = () => {\n\t\tlet pmwConsoleMessage = \"Pixel Manager for WooCommerce: \"\n\t\tpmwConsoleMessage += wpmDataLayer.version.pro ? \"pro\" : \"free\"\n\t\tpmwConsoleMessage += \" | distro: \" + wpmDataLayer.version.distro\n\t\tif (wpmDataLayer.version.distro === \"fms\" && wpmDataLayer.version.pro) {\n\t\t\tpmwConsoleMessage += \" | active license: \" + (wpmDataLayer.version.eligibleForUpdates ? \"yes\" : \"no\")\n\t\t}\n\t\tpmwConsoleMessage += \" | version: \" + wpmDataLayer.version.number\n\n\t\tconsole.log(pmwConsoleMessage)\n\t}\n\n\twpm.canLoadPremiumFeatures = () => {\n\t\treturn (wpmDataLayer.version.distro === \"fms\" && wpmDataLayer.version.pro && wpmDataLayer.version.eligibleForUpdates) || wpmDataLayer.version.distro === \"wcm\"\n\t}\n\n\tlet jQueryReadyFired = false\n\n\twpm.triggerDomReadyEvent = () => {\n\t\tif (jQueryReadyFired === false) jQuery(document).trigger(\"pmw:ready\")\n\t\tjQueryReadyFired = true\n\t}\n\n\tjQuery(document).on(\"ready\", () => {\n\t\twpm.triggerDomReadyEvent()\n\t})\n\n\tdocument.addEventListener(\"DOMContentLoaded\", () => {\n\t\twpm.triggerDomReadyEvent()\n\t})\n\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * Load all WPM functions\n *\n * Ignore event listeners. They need to be loaded after\n * we made sure that jQuery has been loaded.\n */\n\nrequire(\"./functions\")\nrequire(\"./cookie_consent\")\nrequire(\"./ip_check\")\n\n// #if process.env.TIER === 'premium'\n// if (wpm.canLoadPremiumFeatures()) {\n// \trequire(\"./functions_premium\")\n// }\n// #endif\n","(function (wpm, $, undefined) {\n\n\twpm.jQueryExists = async () => new Promise(resolve => {\n\n\t\t(function waitForjQuery() {\n\t\t\tif (typeof jQuery !== \"undefined\") return resolve()\n\t\t\tsetTimeout(waitForjQuery, 100)\n\t\t})()\n\t})\n\n\twpm.wpmDataLayerExists = async () => new Promise(resolve => {\n\t\t(function waitForVar() {\n\t\t\tif (typeof wpmDataLayer !== \"undefined\") return resolve()\n\t\t\tsetTimeout(waitForVar, 50)\n\t\t})()\n\t})\n\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * IP Check\n */\n\n(function (wpm, $, undefined) {\n\n\twpm.ipCheck = async () => {\n\n\t\tif (window.sessionStorage && sessionStorage.getItem(\"pmw_ip_valid\")) {\n\t\t\treturn !!JSON.parse(sessionStorage.getItem(\"pmw_ip_valid\"))\n\t\t}\n\n\t\t// Cloudflare takes approx. 70ms to respond\n\t\tconst response = await fetch(\"https://www.cloudflare.com/cdn-cgi/trace\")\n\t\tlet data = await response.text()\n\n\t\t// Convert key-value pairs to JSON\n\t\t// https://stackoverflow.com/a/39284735/452587\n\t\tdata = data\n\t\t\t.trim()\n\t\t\t.split(\"\\n\")\n\t\t\t.reduce((obj, pair) => {\n\t\t\t\tpair = pair.split(\"=\")\n\t\t\t\treturn obj[pair[0]] = pair[1], obj\n\t\t\t}, {})\n\n\t\tif (isOnBlacklist(data.ip)) {\n\t\t\tif (window.sessionStorage) window.sessionStorage.setItem(\"pmw_ip_valid\", JSON.stringify(false))\n\t\t\treturn false\n\t\t}\n\n\t\tif (window.sessionStorage) window.sessionStorage.setItem(\"pmw_ip_valid\", JSON.stringify(true))\n\t\treturn true\n\t}\n\n\tconst isOnBlacklist = ip => {\n\n\t\tconst {isInSubnet} = require(\"is-in-subnet\")\n\n\t\tfor (const ipName of getBlacklist()) {\n\n\t\t\tif (isCidr(ipName)) {\n\t\t\t\ttry {\n\t\t\t\t\tif (isInSubnet(ip, ipName)) return true\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (ip === ipName) return true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\tconst isCidr = ipName => {\n\n\t\tconst {isRange} = require(\"range_check\")\n\n\t\treturn isRange(ipName)\n\t}\n\n\tconst getBlacklist = () => {\n\n\t\tconst blacklist = [\n\t\t\t// \"91.190.12.52/32\", // for testing\n\t\t\t// \"91.190.12.52\", // for testing\n\t\t]\n\n\t\tconst google = [\n\t\t\t\"2001:4860:4801:10::/64\",\n\t\t\t\"2001:4860:4801:11::/64\",\n\t\t\t\"2001:4860:4801:12::/64\",\n\t\t\t\"2001:4860:4801:13::/64\",\n\t\t\t\"2001:4860:4801:14::/64\",\n\t\t\t\"2001:4860:4801:15::/64\",\n\t\t\t\"2001:4860:4801:16::/64\",\n\t\t\t\"2001:4860:4801:17::/64\",\n\t\t\t\"2001:4860:4801:18::/64\",\n\t\t\t\"2001:4860:4801:19::/64\",\n\t\t\t\"2001:4860:4801:1a::/64\",\n\t\t\t\"2001:4860:4801:1b::/64\",\n\t\t\t\"2001:4860:4801:20::/64\",\n\t\t\t\"2001:4860:4801:21::/64\",\n\t\t\t\"2001:4860:4801:22::/64\",\n\t\t\t\"2001:4860:4801:23::/64\",\n\t\t\t\"2001:4860:4801:24::/64\",\n\t\t\t\"2001:4860:4801:25::/64\",\n\t\t\t\"2001:4860:4801:26::/64\",\n\t\t\t\"2001:4860:4801:27::/64\",\n\t\t\t\"2001:4860:4801:28::/64\",\n\t\t\t\"2001:4860:4801:29::/64\",\n\t\t\t\"2001:4860:4801:2::/64\",\n\t\t\t\"2001:4860:4801:2a::/64\",\n\t\t\t\"2001:4860:4801:2b::/64\",\n\t\t\t\"2001:4860:4801:2c::/64\",\n\t\t\t\"2001:4860:4801:2d::/64\",\n\t\t\t\"2001:4860:4801:2e::/64\",\n\t\t\t\"2001:4860:4801:2f::/64\",\n\t\t\t\"2001:4860:4801:30::/64\",\n\t\t\t\"2001:4860:4801:31::/64\",\n\t\t\t\"2001:4860:4801:32::/64\",\n\t\t\t\"2001:4860:4801:33::/64\",\n\t\t\t\"2001:4860:4801:34::/64\",\n\t\t\t\"2001:4860:4801:35::/64\",\n\t\t\t\"2001:4860:4801:36::/64\",\n\t\t\t\"2001:4860:4801:37::/64\",\n\t\t\t\"2001:4860:4801:38::/64\",\n\t\t\t\"2001:4860:4801:39::/64\",\n\t\t\t\"2001:4860:4801:3::/64\",\n\t\t\t\"2001:4860:4801:3a::/64\",\n\t\t\t\"2001:4860:4801:3b::/64\",\n\t\t\t\"2001:4860:4801:3c::/64\",\n\t\t\t\"2001:4860:4801:3d::/64\",\n\t\t\t\"2001:4860:4801:3e::/64\",\n\t\t\t\"2001:4860:4801:40::/64\",\n\t\t\t\"2001:4860:4801:41::/64\",\n\t\t\t\"2001:4860:4801:42::/64\",\n\t\t\t\"2001:4860:4801:43::/64\",\n\t\t\t\"2001:4860:4801:44::/64\",\n\t\t\t\"2001:4860:4801:45::/64\",\n\t\t\t\"2001:4860:4801:46::/64\",\n\t\t\t\"2001:4860:4801:47::/64\",\n\t\t\t\"2001:4860:4801:48::/64\",\n\t\t\t\"2001:4860:4801:49::/64\",\n\t\t\t\"2001:4860:4801:4a::/64\",\n\t\t\t\"2001:4860:4801:50::/64\",\n\t\t\t\"2001:4860:4801:51::/64\",\n\t\t\t\"2001:4860:4801:53::/64\",\n\t\t\t\"2001:4860:4801:60::/64\",\n\t\t\t\"2001:4860:4801:61::/64\",\n\t\t\t\"2001:4860:4801:62::/64\",\n\t\t\t\"2001:4860:4801:63::/64\",\n\t\t\t\"2001:4860:4801:64::/64\",\n\t\t\t\"2001:4860:4801:65::/64\",\n\t\t\t\"2001:4860:4801:66::/64\",\n\t\t\t\"2001:4860:4801:67::/64\",\n\t\t\t\"2001:4860:4801:68::/64\",\n\t\t\t\"2001:4860:4801:69::/64\",\n\t\t\t\"2001:4860:4801:6a::/64\",\n\t\t\t\"2001:4860:4801:6b::/64\",\n\t\t\t\"2001:4860:4801:6c::/64\",\n\t\t\t\"2001:4860:4801:6d::/64\",\n\t\t\t\"2001:4860:4801:6e::/64\",\n\t\t\t\"2001:4860:4801:6f::/64\",\n\t\t\t\"2001:4860:4801:70::/64\",\n\t\t\t\"2001:4860:4801:71::/64\",\n\t\t\t\"2001:4860:4801:72::/64\",\n\t\t\t\"2001:4860:4801:73::/64\",\n\t\t\t\"2001:4860:4801:74::/64\",\n\t\t\t\"2001:4860:4801:75::/64\",\n\t\t\t\"2001:4860:4801:76::/64\",\n\t\t\t\"2001:4860:4801:77::/64\",\n\t\t\t\"2001:4860:4801:80::/64\",\n\t\t\t\"2001:4860:4801:81::/64\",\n\t\t\t\"2001:4860:4801:82::/64\",\n\t\t\t\"2001:4860:4801:83::/64\",\n\t\t\t\"2001:4860:4801:84::/64\",\n\t\t\t\"2001:4860:4801:85::/64\",\n\t\t\t\"2001:4860:4801:86::/64\",\n\t\t\t\"2001:4860:4801:90::/64\",\n\t\t\t\"2001:4860:4801:91::/64\",\n\t\t\t\"2001:4860:4801:92::/64\",\n\t\t\t\"2001:4860:4801::/64\",\n\t\t\t\"2001:4860:4801:c::/64\",\n\t\t\t\"2001:4860:4801:f::/64\",\n\t\t\t\"34.100.182.96/28\",\n\t\t\t\"34.101.50.144/28\",\n\t\t\t\"34.118.254.0/28\",\n\t\t\t\"34.118.66.0/28\",\n\t\t\t\"34.126.178.96/28\",\n\t\t\t\"34.146.150.144/28\",\n\t\t\t\"34.147.110.144/28\",\n\t\t\t\"34.151.74.144/28\",\n\t\t\t\"34.152.50.64/28\",\n\t\t\t\"34.154.114.144/28\",\n\t\t\t\"34.155.98.32/28\",\n\t\t\t\"34.165.18.176/28\",\n\t\t\t\"34.175.160.64/28\",\n\t\t\t\"34.176.130.16/28\",\n\t\t\t\"34.64.82.64/28\",\n\t\t\t\"34.65.242.112/28\",\n\t\t\t\"34.80.50.80/28\",\n\t\t\t\"34.88.194.0/28\",\n\t\t\t\"34.89.10.80/28\",\n\t\t\t\"34.89.198.80/28\",\n\t\t\t\"34.96.162.48/28\",\n\t\t\t\"35.247.243.240/28\",\n\t\t\t\"66.249.64.0/27\",\n\t\t\t\"66.249.64.128/27\",\n\t\t\t\"66.249.64.160/27\",\n\t\t\t\"66.249.64.192/27\",\n\t\t\t\"66.249.64.224/27\",\n\t\t\t\"66.249.64.32/27\",\n\t\t\t\"66.249.64.64/27\",\n\t\t\t\"66.249.64.96/27\",\n\t\t\t\"66.249.65.0/27\",\n\t\t\t\"66.249.65.128/27\",\n\t\t\t\"66.249.65.160/27\",\n\t\t\t\"66.249.65.192/27\",\n\t\t\t\"66.249.65.224/27\",\n\t\t\t\"66.249.65.32/27\",\n\t\t\t\"66.249.65.64/27\",\n\t\t\t\"66.249.65.96/27\",\n\t\t\t\"66.249.66.0/27\",\n\t\t\t\"66.249.66.128/27\",\n\t\t\t\"66.249.66.192/27\",\n\t\t\t\"66.249.66.32/27\",\n\t\t\t\"66.249.66.64/27\",\n\t\t\t\"66.249.68.0/27\",\n\t\t\t\"66.249.68.32/27\",\n\t\t\t\"66.249.68.64/27\",\n\t\t\t\"66.249.69.0/27\",\n\t\t\t\"66.249.69.128/27\",\n\t\t\t\"66.249.69.160/27\",\n\t\t\t\"66.249.69.192/27\",\n\t\t\t\"66.249.69.224/27\",\n\t\t\t\"66.249.69.32/27\",\n\t\t\t\"66.249.69.64/27\",\n\t\t\t\"66.249.69.96/27\",\n\t\t\t\"66.249.70.0/27\",\n\t\t\t\"66.249.70.128/27\",\n\t\t\t\"66.249.70.160/27\",\n\t\t\t\"66.249.70.192/27\",\n\t\t\t\"66.249.70.224/27\",\n\t\t\t\"66.249.70.32/27\",\n\t\t\t\"66.249.70.64/27\",\n\t\t\t\"66.249.70.96/27\",\n\t\t\t\"66.249.71.0/27\",\n\t\t\t\"66.249.71.128/27\",\n\t\t\t\"66.249.71.160/27\",\n\t\t\t\"66.249.71.192/27\",\n\t\t\t\"66.249.71.32/27\",\n\t\t\t\"66.249.71.64/27\",\n\t\t\t\"66.249.71.96/27\",\n\t\t\t\"66.249.72.0/27\",\n\t\t\t\"66.249.72.128/27\",\n\t\t\t\"66.249.72.160/27\",\n\t\t\t\"66.249.72.192/27\",\n\t\t\t\"66.249.72.224/27\",\n\t\t\t\"66.249.72.32/27\",\n\t\t\t\"66.249.72.64/27\",\n\t\t\t\"66.249.72.96/27\",\n\t\t\t\"66.249.73.0/27\",\n\t\t\t\"66.249.73.128/27\",\n\t\t\t\"66.249.73.160/27\",\n\t\t\t\"66.249.73.192/27\",\n\t\t\t\"66.249.73.224/27\",\n\t\t\t\"66.249.73.32/27\",\n\t\t\t\"66.249.73.64/27\",\n\t\t\t\"66.249.73.96/27\",\n\t\t\t\"66.249.74.0/27\",\n\t\t\t\"66.249.74.32/27\",\n\t\t\t\"66.249.74.64/27\",\n\t\t\t\"66.249.74.96/27\",\n\t\t\t\"66.249.75.0/27\",\n\t\t\t\"66.249.75.128/27\",\n\t\t\t\"66.249.75.160/27\",\n\t\t\t\"66.249.75.192/27\",\n\t\t\t\"66.249.75.224/27\",\n\t\t\t\"66.249.75.32/27\",\n\t\t\t\"66.249.75.64/27\",\n\t\t\t\"66.249.75.96/27\",\n\t\t\t\"66.249.76.0/27\",\n\t\t\t\"66.249.76.128/27\",\n\t\t\t\"66.249.76.160/27\",\n\t\t\t\"66.249.76.192/27\",\n\t\t\t\"66.249.76.224/27\",\n\t\t\t\"66.249.76.32/27\",\n\t\t\t\"66.249.76.64/27\",\n\t\t\t\"66.249.76.96/27\",\n\t\t\t\"66.249.77.0/27\",\n\t\t\t\"66.249.77.128/27\",\n\t\t\t\"66.249.77.32/27\",\n\t\t\t\"66.249.77.64/27\",\n\t\t\t\"66.249.77.96/27\",\n\t\t\t\"66.249.79.0/27\",\n\t\t\t\"66.249.79.128/27\",\n\t\t\t\"66.249.79.160/27\",\n\t\t\t\"66.249.79.192/27\",\n\t\t\t\"66.249.79.224/27\",\n\t\t\t\"66.249.79.32/27\",\n\t\t\t\"66.249.79.64/27\",\n\t\t\t\"66.249.79.96/27\",\n\t\t]\n\n\t\tconst facebook = [\n\t\t\t\"69.63.176.0/20\",\n\t\t\t\"66.220.144.0/20\",\n\t\t\t\"66.220.144.0/21\",\n\t\t\t\"69.63.184.0/21\",\n\t\t\t\"69.63.176.0/21\",\n\t\t\t\"74.119.76.0/22\",\n\t\t\t\"69.171.255.0/24\",\n\t\t\t\"173.252.64.0/18\",\n\t\t\t\"69.171.224.0/19\",\n\t\t\t\"69.171.224.0/20\",\n\t\t\t\"103.4.96.0/22\",\n\t\t\t\"173.252.64.0/19\",\n\t\t\t\"31.13.64.0/18\",\n\t\t\t\"31.13.24.0/21\",\n\t\t\t\"66.220.152.0/21\",\n\t\t\t\"69.171.239.0/24\",\n\t\t\t\"69.171.240.0/20\",\n\t\t\t\"31.13.64.0/19\",\n\t\t\t\"31.13.64.0/24\",\n\t\t\t\"31.13.65.0/24\",\n\t\t\t\"31.13.67.0/24\",\n\t\t\t\"31.13.68.0/24\",\n\t\t\t\"31.13.69.0/24\",\n\t\t\t\"31.13.70.0/24\",\n\t\t\t\"31.13.71.0/24\",\n\t\t\t\"31.13.72.0/24\",\n\t\t\t\"31.13.73.0/24\",\n\t\t\t\"31.13.74.0/24\",\n\t\t\t\"31.13.75.0/24\",\n\t\t\t\"31.13.76.0/24\",\n\t\t\t\"31.13.77.0/24\",\n\t\t\t\"31.13.96.0/19\",\n\t\t\t\"31.13.66.0/24\",\n\t\t\t\"173.252.96.0/19\",\n\t\t\t\"69.63.178.0/24\",\n\t\t\t\"31.13.78.0/24\",\n\t\t\t\"31.13.79.0/24\",\n\t\t\t\"31.13.80.0/24\",\n\t\t\t\"31.13.82.0/24\",\n\t\t\t\"31.13.83.0/24\",\n\t\t\t\"31.13.84.0/24\",\n\t\t\t\"31.13.85.0/24\",\n\t\t\t\"31.13.86.0/24\",\n\t\t\t\"31.13.87.0/24\",\n\t\t\t\"31.13.88.0/24\",\n\t\t\t\"31.13.89.0/24\",\n\t\t\t\"31.13.91.0/24\",\n\t\t\t\"31.13.92.0/24\",\n\t\t\t\"31.13.93.0/24\",\n\t\t\t\"31.13.94.0/24\",\n\t\t\t\"31.13.95.0/24\",\n\t\t\t\"31.13.81.0/24\",\n\t\t\t\"179.60.192.0/22\",\n\t\t\t\"179.60.192.0/24\",\n\t\t\t\"179.60.193.0/24\",\n\t\t\t\"179.60.194.0/24\",\n\t\t\t\"179.60.195.0/24\",\n\t\t\t\"185.60.216.0/22\",\n\t\t\t\"45.64.40.0/22\",\n\t\t\t\"185.60.216.0/24\",\n\t\t\t\"185.60.217.0/24\",\n\t\t\t\"185.60.218.0/24\",\n\t\t\t\"185.60.219.0/24\",\n\t\t\t\"129.134.0.0/16\",\n\t\t\t\"157.240.0.0/16\",\n\t\t\t\"157.240.8.0/24\",\n\t\t\t\"157.240.0.0/24\",\n\t\t\t\"157.240.1.0/24\",\n\t\t\t\"157.240.2.0/24\",\n\t\t\t\"157.240.3.0/24\",\n\t\t\t\"157.240.5.0/24\",\n\t\t\t\"157.240.6.0/24\",\n\t\t\t\"157.240.7.0/24\",\n\t\t\t\"157.240.9.0/24\",\n\t\t\t\"157.240.10.0/24\",\n\t\t\t\"157.240.16.0/24\",\n\t\t\t\"157.240.19.0/24\",\n\t\t\t\"157.240.11.0/24\",\n\t\t\t\"157.240.12.0/24\",\n\t\t\t\"157.240.13.0/24\",\n\t\t\t\"157.240.14.0/24\",\n\t\t\t\"157.240.15.0/24\",\n\t\t\t\"157.240.17.0/24\",\n\t\t\t\"157.240.18.0/24\",\n\t\t\t\"157.240.20.0/24\",\n\t\t\t\"157.240.21.0/24\",\n\t\t\t\"157.240.22.0/24\",\n\t\t\t\"157.240.23.0/24\",\n\t\t\t\"157.240.0.0/17\",\n\t\t\t\"69.171.250.0/24\",\n\t\t\t\"204.15.20.0/22\",\n\t\t\t\"157.240.192.0/24\",\n\t\t\t\"157.240.198.0/24\",\n\t\t\t\"102.132.96.0/20\",\n\t\t\t\"102.132.96.0/24\",\n\t\t\t\"102.132.97.0/24\",\n\t\t\t\"157.240.26.0/24\",\n\t\t\t\"157.240.27.0/24\",\n\t\t\t\"157.240.28.0/24\",\n\t\t\t\"157.240.29.0/24\",\n\t\t\t\"157.240.30.0/24\",\n\t\t\t\"129.134.28.0/24\",\n\t\t\t\"129.134.29.0/24\",\n\t\t\t\"157.240.208.0/24\",\n\t\t\t\"157.240.193.0/24\",\n\t\t\t\"157.240.194.0/24\",\n\t\t\t\"157.240.195.0/24\",\n\t\t\t\"157.240.197.0/24\",\n\t\t\t\"157.240.196.0/24\",\n\t\t\t\"157.240.200.0/24\",\n\t\t\t\"157.240.201.0/24\",\n\t\t\t\"157.240.203.0/24\",\n\t\t\t\"157.240.204.0/24\",\n\t\t\t\"157.240.205.0/24\",\n\t\t\t\"157.240.206.0/24\",\n\t\t\t\"157.240.207.0/24\",\n\t\t\t\"157.240.209.0/24\",\n\t\t\t\"157.240.210.0/24\",\n\t\t\t\"157.240.211.0/24\",\n\t\t\t\"157.240.212.0/24\",\n\t\t\t\"157.240.213.0/24\",\n\t\t\t\"157.240.214.0/24\",\n\t\t\t\"157.240.215.0/24\",\n\t\t\t\"157.240.216.0/24\",\n\t\t\t\"157.240.222.0/24\",\n\t\t\t\"129.134.30.0/24\",\n\t\t\t\"129.134.31.0/24\",\n\t\t\t\"129.134.30.0/23\",\n\t\t\t\"129.134.25.0/24\",\n\t\t\t\"129.134.26.0/24\",\n\t\t\t\"129.134.27.0/24\",\n\t\t\t\"102.132.99.0/24\",\n\t\t\t\"102.132.101.0/24\",\n\t\t\t\"129.134.64.0/24\",\n\t\t\t\"129.134.65.0/24\",\n\t\t\t\"129.134.66.0/24\",\n\t\t\t\"129.134.67.0/24\",\n\t\t\t\"157.240.219.0/24\",\n\t\t\t\"157.240.217.0/24\",\n\t\t\t\"157.240.218.0/24\",\n\t\t\t\"157.240.199.0/24\",\n\t\t\t\"129.134.127.0/24\",\n\t\t\t\"157.240.223.0/24\",\n\t\t\t\"157.240.192.0/18\",\n\t\t\t\"157.240.221.0/24\",\n\t\t\t\"157.240.220.0/24\",\n\t\t\t\"173.252.88.0/21\",\n\t\t\t\"129.134.68.0/24\",\n\t\t\t\"129.134.69.0/24\",\n\t\t\t\"129.134.70.0/24\",\n\t\t\t\"157.240.24.0/24\",\n\t\t\t\"157.240.25.0/24\",\n\t\t\t\"102.132.100.0/24\",\n\t\t\t\"157.240.31.0/24\",\n\t\t\t\"157.240.224.0/24\",\n\t\t\t\"129.134.71.0/24\",\n\t\t\t\"157.240.225.0/24\",\n\t\t\t\"157.240.226.0/24\",\n\t\t\t\"157.240.227.0/24\",\n\t\t\t\"129.134.0.0/17\",\n\t\t\t\"129.134.72.0/24\",\n\t\t\t\"129.134.73.0/24\",\n\t\t\t\"129.134.74.0/24\",\n\t\t\t\"185.89.218.0/24\",\n\t\t\t\"185.89.219.0/24\",\n\t\t\t\"185.89.218.0/23\",\n\t\t\t\"157.240.228.0/24\",\n\t\t\t\"157.240.229.0/24\",\n\t\t\t\"129.134.76.0/24\",\n\t\t\t\"129.134.75.0/24\",\n\t\t\t\"157.240.239.0/24\",\n\t\t\t\"157.240.240.0/24\",\n\t\t\t\"157.240.241.0/24\",\n\t\t\t\"157.240.231.0/24\",\n\t\t\t\"157.240.232.0/24\",\n\t\t\t\"157.240.233.0/24\",\n\t\t\t\"157.240.234.0/24\",\n\t\t\t\"157.240.235.0/24\",\n\t\t\t\"157.240.236.0/24\",\n\t\t\t\"129.134.77.0/24\",\n\t\t\t\"129.134.78.0/24\",\n\t\t\t\"129.134.79.0/24\",\n\t\t\t\"157.240.237.0/24\",\n\t\t\t\"157.240.238.0/24\",\n\t\t\t\"157.240.242.0/24\",\n\t\t\t\"157.240.243.0/24\",\n\t\t\t\"129.134.112.0/24\",\n\t\t\t\"157.240.100.0/24\",\n\t\t\t\"157.240.98.0/24\",\n\t\t\t\"157.240.96.0/24\",\n\t\t\t\"157.240.99.0/24\",\n\t\t\t\"157.240.101.0/24\",\n\t\t\t\"129.134.113.0/24\",\n\t\t\t\"129.134.114.0/24\",\n\t\t\t\"157.240.97.0/24\",\n\t\t\t\"129.134.115.0/24\",\n\t\t\t\"157.240.244.0/24\",\n\t\t\t\"157.240.245.0/24\",\n\t\t\t\"157.240.246.0/24\",\n\t\t\t\"157.240.247.0/24\",\n\t\t\t\"157.240.248.0/24\",\n\t\t\t\"157.240.249.0/24\",\n\t\t\t\"157.240.250.0/24\",\n\t\t\t\"163.70.128.0/17\",\n\t\t\t\"163.77.128.0/17\",\n\t\t\t\"157.240.251.0/24\",\n\t\t\t\"157.240.252.0/24\",\n\t\t\t\"157.240.253.0/24\",\n\t\t\t\"147.75.208.0/20\",\n\t\t\t\"157.240.254.0/24\",\n\t\t\t\"185.89.219.0/24\",\n\t\t\t\"185.89.218.0/24\",\n\t\t\t\"185.89.218.0/23\",\n\t\t\t\"185.89.216.0/22\",\n\t\t\t\"147.75.208.0/20\",\n\t\t\t\"204.15.20.0/22\",\n\t\t\t\"69.63.176.0/20\",\n\t\t\t\"69.63.176.0/21\",\n\t\t\t\"69.63.184.0/21\",\n\t\t\t\"66.220.144.0/20\",\n\t\t\t\"69.63.176.0/20\",\n\t\t\t\"2620:0:1c00::/40\",\n\t\t\t\"2a03:2880::/32\",\n\t\t\t\"2a03:2880:fffe::/48\",\n\t\t\t\"2a03:2880:ffff::/48\",\n\t\t\t\"2620:0:1cff::/48\",\n\t\t\t\"2a03:2880:f001::/48\",\n\t\t\t\"2a03:2880:f003::/48\",\n\t\t\t\"2a03:2880:f004::/48\",\n\t\t\t\"2a03:2880:f005::/48\",\n\t\t\t\"2a03:2880:f006::/48\",\n\t\t\t\"2a03:2880:f007::/48\",\n\t\t\t\"2a03:2880:f008::/48\",\n\t\t\t\"2a03:2880:f00a::/48\",\n\t\t\t\"2a03:2880:f00c::/48\",\n\t\t\t\"2a03:2880:f00d::/48\",\n\t\t\t\"2a03:2880:f00e::/48\",\n\t\t\t\"2a03:2880:f00f::/48\",\n\t\t\t\"2a03:2880:f010::/48\",\n\t\t\t\"2a03:2880:f011::/48\",\n\t\t\t\"2a03:2880:f012::/48\",\n\t\t\t\"2a03:2880:f013::/48\",\n\t\t\t\"2a03:2880:f016::/48\",\n\t\t\t\"2a03:2880:f017::/48\",\n\t\t\t\"2a03:2880:f019::/48\",\n\t\t\t\"2a03:2880:f01b::/48\",\n\t\t\t\"2a03:2880:f01c::/48\",\n\t\t\t\"2a03:2880:f01f::/48\",\n\t\t\t\"2a03:2880:1000::/36\",\n\t\t\t\"2a03:2880:2000::/36\",\n\t\t\t\"2a03:2880:3000::/36\",\n\t\t\t\"2a03:2880:4000::/36\",\n\t\t\t\"2a03:2880:5000::/36\",\n\t\t\t\"2a03:2880:6000::/36\",\n\t\t\t\"2a03:2880:7000::/36\",\n\t\t\t\"2a03:2880:f021::/48\",\n\t\t\t\"2a03:2880:f023::/48\",\n\t\t\t\"2a03:2880:f024::/48\",\n\t\t\t\"2a03:2880:f027::/48\",\n\t\t\t\"2a03:2880:f028::/48\",\n\t\t\t\"2a03:2880:f029::/48\",\n\t\t\t\"2a03:2880:f02b::/48\",\n\t\t\t\"2a03:2880:f02c::/48\",\n\t\t\t\"2a03:2880:f02d::/48\",\n\t\t\t\"2a03:2880:f02e::/48\",\n\t\t\t\"2a03:2880:f02f::/48\",\n\t\t\t\"2a03:2880:f030::/48\",\n\t\t\t\"2a03:2880:f031::/48\",\n\t\t\t\"2a03:2880:f032::/48\",\n\t\t\t\"2a03:2880:f033::/48\",\n\t\t\t\"2a03:2880:f034::/48\",\n\t\t\t\"2a03:2880:f035::/48\",\n\t\t\t\"2a03:2880:f036::/48\",\n\t\t\t\"2a03:2880:f037::/48\",\n\t\t\t\"2a03:2880:f038::/48\",\n\t\t\t\"2a03:2880:f03a::/48\",\n\t\t\t\"2a03:2880:f03b::/48\",\n\t\t\t\"2a03:2880:f03d::/48\",\n\t\t\t\"2a03:2880:f03e::/48\",\n\t\t\t\"2a03:2880:f03f::/48\",\n\t\t\t\"2401:db00::/32\",\n\t\t\t\"2a03:2880::/36\",\n\t\t\t\"2a03:2880:f101::/48\",\n\t\t\t\"2a03:2880:f201::/48\",\n\t\t\t\"2a03:2880:f103::/48\",\n\t\t\t\"2a03:2880:f203::/48\",\n\t\t\t\"2a03:2880:f104::/48\",\n\t\t\t\"2a03:2880:f204::/48\",\n\t\t\t\"2a03:2880:f107::/48\",\n\t\t\t\"2a03:2880:f207::/48\",\n\t\t\t\"2a03:2880:f108::/48\",\n\t\t\t\"2a03:2880:f208::/48\",\n\t\t\t\"2a03:2880:f10a::/48\",\n\t\t\t\"2a03:2880:f20a::/48\",\n\t\t\t\"2a03:2880:f10d::/48\",\n\t\t\t\"2a03:2880:f20d::/48\",\n\t\t\t\"2a03:2880:f10e::/48\",\n\t\t\t\"2a03:2880:f20e::/48\",\n\t\t\t\"2a03:2880:f10f::/48\",\n\t\t\t\"2a03:2880:f20f::/48\",\n\t\t\t\"2a03:2880:f110::/48\",\n\t\t\t\"2a03:2880:f210::/48\",\n\t\t\t\"2a03:2880:f111::/48\",\n\t\t\t\"2a03:2880:f211::/48\",\n\t\t\t\"2a03:2880:f112::/48\",\n\t\t\t\"2a03:2880:f212::/48\",\n\t\t\t\"2a03:2880:f116::/48\",\n\t\t\t\"2a03:2880:f216::/48\",\n\t\t\t\"2a03:2880:f117::/48\",\n\t\t\t\"2a03:2880:f217::/48\",\n\t\t\t\"2a03:2880:f119::/48\",\n\t\t\t\"2a03:2880:f219::/48\",\n\t\t\t\"2a03:2880:f11f::/48\",\n\t\t\t\"2a03:2880:f21f::/48\",\n\t\t\t\"2a03:2880:f121::/48\",\n\t\t\t\"2a03:2880:f221::/48\",\n\t\t\t\"2a03:2880:f123::/48\",\n\t\t\t\"2a03:2880:f223::/48\",\n\t\t\t\"2a03:2880:f10c::/48\",\n\t\t\t\"2a03:2880:f20c::/48\",\n\t\t\t\"2a03:2880:f105::/48\",\n\t\t\t\"2a03:2880:f205::/48\",\n\t\t\t\"2a03:2880:f106::/48\",\n\t\t\t\"2a03:2880:f206::/48\",\n\t\t\t\"2a03:2880:f11b::/48\",\n\t\t\t\"2a03:2880:f21b::/48\",\n\t\t\t\"2a03:2880:f113::/48\",\n\t\t\t\"2a03:2880:f213::/48\",\n\t\t\t\"2a03:2880:f11c::/48\",\n\t\t\t\"2a03:2880:f21c::/48\",\n\t\t\t\"2a03:2880:f128::/48\",\n\t\t\t\"2a03:2880:f228::/48\",\n\t\t\t\"2a03:2880:f02a::/48\",\n\t\t\t\"2a03:2880:f12a::/48\",\n\t\t\t\"2a03:2880:f22a::/48\",\n\t\t\t\"2a03:2880:f12f::/48\",\n\t\t\t\"2a03:2880:f22f::/48\",\n\t\t\t\"2a03:2880:f124::/48\",\n\t\t\t\"2a03:2880:f127::/48\",\n\t\t\t\"2a03:2880:f129::/48\",\n\t\t\t\"2a03:2880:f12b::/48\",\n\t\t\t\"2a03:2880:f12c::/48\",\n\t\t\t\"2a03:2880:f12d::/48\",\n\t\t\t\"2a03:2880:f12e::/48\",\n\t\t\t\"2a03:2880:f130::/48\",\n\t\t\t\"2a03:2880:f131::/48\",\n\t\t\t\"2a03:2880:f132::/48\",\n\t\t\t\"2a03:2880:f133::/48\",\n\t\t\t\"2a03:2880:f134::/48\",\n\t\t\t\"2a03:2880:f135::/48\",\n\t\t\t\"2a03:2880:f136::/48\",\n\t\t\t\"2a03:2880:f137::/48\",\n\t\t\t\"2a03:2880:f138::/48\",\n\t\t\t\"2a03:2880:f13a::/48\",\n\t\t\t\"2a03:2880:f13b::/48\",\n\t\t\t\"2a03:2880:f13d::/48\",\n\t\t\t\"2a03:2880:f13e::/48\",\n\t\t\t\"2a03:2880:f13f::/48\",\n\t\t\t\"2a03:2880:f224::/48\",\n\t\t\t\"2a03:2880:f227::/48\",\n\t\t\t\"2a03:2880:f229::/48\",\n\t\t\t\"2a03:2880:f22b::/48\",\n\t\t\t\"2a03:2880:f22c::/48\",\n\t\t\t\"2a03:2880:f22d::/48\",\n\t\t\t\"2a03:2880:f22e::/48\",\n\t\t\t\"2a03:2880:f230::/48\",\n\t\t\t\"2a03:2880:f231::/48\",\n\t\t\t\"2a03:2880:f232::/48\",\n\t\t\t\"2a03:2880:f233::/48\",\n\t\t\t\"2a03:2880:f234::/48\",\n\t\t\t\"2a03:2880:f235::/48\",\n\t\t\t\"2a03:2880:f236::/48\",\n\t\t\t\"2a03:2880:f237::/48\",\n\t\t\t\"2a03:2880:f238::/48\",\n\t\t\t\"2a03:2880:f23a::/48\",\n\t\t\t\"2a03:2880:f23b::/48\",\n\t\t\t\"2a03:2880:f23d::/48\",\n\t\t\t\"2a03:2880:f23e::/48\",\n\t\t\t\"2a03:2880:f23f::/48\",\n\t\t\t\"2a03:2880:f0ff::/48\",\n\t\t\t\"2a03:2880:f1ff::/48\",\n\t\t\t\"2a03:2880:f2ff::/48\",\n\t\t\t\"2a03:2880:f044::/48\",\n\t\t\t\"2a03:2880:f144::/48\",\n\t\t\t\"2a03:2880:f244::/48\",\n\t\t\t\"2a03:2880:f042::/48\",\n\t\t\t\"2a03:2880:f043::/48\",\n\t\t\t\"2a03:2880:f045::/48\",\n\t\t\t\"2a03:2880:f046::/48\",\n\t\t\t\"2a03:2880:f047::/48\",\n\t\t\t\"2a03:2880:f048::/48\",\n\t\t\t\"2a03:2880:f04a::/48\",\n\t\t\t\"2a03:2880:f04c::/48\",\n\t\t\t\"2a03:2880:f04b::/48\",\n\t\t\t\"2a03:2880:f04d::/48\",\n\t\t\t\"2a03:2880:f259::/48\",\n\t\t\t\"2a03:2880:f258::/48\",\n\t\t\t\"2a03:2880:f257::/48\",\n\t\t\t\"2a03:2880:f256::/48\",\n\t\t\t\"2a03:2880:f255::/48\",\n\t\t\t\"2a03:2880:f254::/48\",\n\t\t\t\"2a03:2880:f253::/48\",\n\t\t\t\"2a03:2880:f252::/48\",\n\t\t\t\"2a03:2880:f250::/48\",\n\t\t\t\"2a03:2880:f24f::/48\",\n\t\t\t\"2a03:2880:f24d::/48\",\n\t\t\t\"2a03:2880:f24e::/48\",\n\t\t\t\"2a03:2880:f24c::/48\",\n\t\t\t\"2a03:2880:f24b::/48\",\n\t\t\t\"2a03:2880:f24a::/48\",\n\t\t\t\"2a03:2880:f248::/48\",\n\t\t\t\"2a03:2880:f247::/48\",\n\t\t\t\"2a03:2880:f246::/48\",\n\t\t\t\"2a03:2880:f245::/48\",\n\t\t\t\"2a03:2880:f243::/48\",\n\t\t\t\"2a03:2880:f242::/48\",\n\t\t\t\"2a03:2880:f241::/48\",\n\t\t\t\"2a03:2880:f240::/48\",\n\t\t\t\"2a03:2880:f159::/48\",\n\t\t\t\"2a03:2880:f158::/48\",\n\t\t\t\"2a03:2880:f157::/48\",\n\t\t\t\"2a03:2880:f156::/48\",\n\t\t\t\"2a03:2880:f155::/48\",\n\t\t\t\"2a03:2880:f154::/48\",\n\t\t\t\"2a03:2880:f153::/48\",\n\t\t\t\"2a03:2880:f152::/48\",\n\t\t\t\"2a03:2880:f150::/48\",\n\t\t\t\"2a03:2880:f14f::/48\",\n\t\t\t\"2a03:2880:f14e::/48\",\n\t\t\t\"2a03:2880:f14d::/48\",\n\t\t\t\"2a03:2880:f14c::/48\",\n\t\t\t\"2a03:2880:f14b::/48\",\n\t\t\t\"2a03:2880:f14a::/48\",\n\t\t\t\"2a03:2880:f148::/48\",\n\t\t\t\"2a03:2880:f147::/48\",\n\t\t\t\"2a03:2880:f146::/48\",\n\t\t\t\"2a03:2880:f145::/48\",\n\t\t\t\"2a03:2880:f143::/48\",\n\t\t\t\"2a03:2880:f142::/48\",\n\t\t\t\"2a03:2880:f141::/48\",\n\t\t\t\"2a03:2880:f140::/48\",\n\t\t\t\"2a03:2880:f059::/48\",\n\t\t\t\"2a03:2880:f058::/48\",\n\t\t\t\"2a03:2880:f057::/48\",\n\t\t\t\"2a03:2880:f056::/48\",\n\t\t\t\"2a03:2880:f055::/48\",\n\t\t\t\"2a03:2880:f054::/48\",\n\t\t\t\"2a03:2880:f053::/48\",\n\t\t\t\"2a03:2880:f052::/48\",\n\t\t\t\"2a03:2880:f050::/48\",\n\t\t\t\"2a03:2880:f04f::/48\",\n\t\t\t\"2a03:2880:f04e::/48\",\n\t\t\t\"2a03:2880:ff0b::/48\",\n\t\t\t\"2a03:2880:ff0c::/48\",\n\t\t\t\"2a03:2880:f040::/48\",\n\t\t\t\"2a03:2880:f041::/48\",\n\t\t\t\"2a03:2880:f0fc::/48\",\n\t\t\t\"2a03:2880:f0fd::/48\",\n\t\t\t\"2a03:2880:f0fc::/47\",\n\t\t\t\"2a03:2880:f1fc::/48\",\n\t\t\t\"2a03:2880:f1fd::/48\",\n\t\t\t\"2a03:2880:f1fc::/47\",\n\t\t\t\"2a03:2880:ff08::/48\",\n\t\t\t\"2a03:2880:ff09::/48\",\n\t\t\t\"2a03:2880:ff0a::/48\",\n\t\t\t\"2a03:2880:f05e::/48\",\n\t\t\t\"2a03:2880:f15e::/48\",\n\t\t\t\"2a03:2880:f25e::/48\",\n\t\t\t\"2620:0:1cfa::/48\",\n\t\t\t\"2a03:2880:f05b::/48\",\n\t\t\t\"2a03:2880:f05a::/48\",\n\t\t\t\"2a03:2880:f25a::/48\",\n\t\t\t\"2a03:2880:f15c::/48\",\n\t\t\t\"2a03:2880:f000::/36\",\n\t\t\t\"2a03:2880:f05d::/48\",\n\t\t\t\"2a03:2880:f25c::/48\",\n\t\t\t\"2a03:2880:f05c::/48\",\n\t\t\t\"2a03:2880:f260::/48\",\n\t\t\t\"2a03:2880:f060::/48\",\n\t\t\t\"2a03:2880:f160::/48\",\n\t\t\t\"2a03:2880:f15d::/48\",\n\t\t\t\"2a03:2880:f25b::/48\",\n\t\t\t\"2a03:2880:f25d::/48\",\n\t\t\t\"2a03:2880:f15b::/48\",\n\t\t\t\"2a03:2880:f15a::/48\",\n\t\t\t\"2a03:2880:f161::/48\",\n\t\t\t\"2a03:2880:f061::/48\",\n\t\t\t\"2a03:2880:f261::/48\",\n\t\t\t\"2a03:2881::/32\",\n\t\t\t\"2a03:2881::/48\",\n\t\t\t\"2a03:2881:1::/48\",\n\t\t\t\"2a03:2881:2::/48\",\n\t\t\t\"2a03:2881:3::/48\",\n\t\t\t\"2a03:2880:f162::/48\",\n\t\t\t\"2a03:2880:f262::/48\",\n\t\t\t\"2a03:2881:4000::/48\",\n\t\t\t\"2a03:2881:4003::/48\",\n\t\t\t\"2a03:2881:4001::/48\",\n\t\t\t\"2a03:2881:4002::/48\",\n\t\t\t\"2a03:2880:f065::/48\",\n\t\t\t\"2a03:2880:f163::/48\",\n\t\t\t\"2a03:2880:f066::/48\",\n\t\t\t\"2a03:2880:f263::/48\",\n\t\t\t\"2a03:2880:f264::/48\",\n\t\t\t\"2a03:2880:f164::/48\",\n\t\t\t\"2a03:2880:f067::/48\",\n\t\t\t\"2a03:2880:f165::/48\",\n\t\t\t\"2a03:2880:f265::/48\",\n\t\t\t\"2a03:2880:f068::/48\",\n\t\t\t\"2a03:2881:4004::/48\",\n\t\t\t\"2a03:2880:f06a::/48\",\n\t\t\t\"2a03:2880:f266::/48\",\n\t\t\t\"2a03:2880:f166::/48\",\n\t\t\t\"2a03:2880:f267::/48\",\n\t\t\t\"2a03:2880:f06b::/48\",\n\t\t\t\"2a03:2880:f167::/48\",\n\t\t\t\"2a03:2881:4006::/48\",\n\t\t\t\"2a03:2881:7::/48\",\n\t\t\t\"2a03:2881:9::/48\",\n\t\t\t\"2a03:2881:8::/48\",\n\t\t\t\"2a03:2881:4::/48\",\n\t\t\t\"2a03:2881:6::/48\",\n\t\t\t\"2a03:2881:5::/48\",\n\t\t\t\"2a03:2881:a::/48\",\n\t\t\t\"2a03:2880:f268::/48\",\n\t\t\t\"2a03:2880:f06d::/48\",\n\t\t\t\"2a03:2880:f168::/48\",\n\t\t\t\"2a03:2881:b::/48\",\n\t\t\t\"2a03:2881:c::/48\",\n\t\t\t\"2a03:2881:4007::/48\",\n\t\t\t\"2a03:2880:f269::/48\",\n\t\t\t\"2a03:2880:f169::/48\",\n\t\t\t\"2a03:2880:f06f::/48\",\n\t\t\t\"2a03:2880:f26a::/48\",\n\t\t\t\"2a03:2880:f16a::/48\",\n\t\t\t\"2a03:2880:f070::/48\",\n\t\t\t\"2a03:2881:d::/48\",\n\t\t\t\"2a03:2881:e::/48\",\n\t\t\t\"2a03:2880:f071::/48\",\n\t\t\t\"2a03:2880:f16b::/48\",\n\t\t\t\"2a03:2880:f26b::/48\",\n\t\t\t\"2a03:2881:4008::/48\",\n\t\t\t\"2a03:2881:10::/48\",\n\t\t\t\"2a03:2881:f::/48\",\n\t\t\t\"2a03:2881:11::/48\",\n\t\t\t\"2a03:2880:f26c::/48\",\n\t\t\t\"2a03:2880:f16c::/48\",\n\t\t\t\"2a03:2880:f073::/48\",\n\t\t\t\"2a03:2880:f16d::/48\",\n\t\t\t\"2a03:2880:f074::/48\",\n\t\t\t\"2a03:2880:f26d::/48\",\n\t\t\t\"2a03:2881:4009::/48\",\n\t\t\t\"2a03:2880:f26e::/48\",\n\t\t\t\"2a03:2880:f16e::/48\",\n\t\t\t\"2a03:2880:f076::/48\",\n\t\t\t\"2a03:2880:f16f::/48\",\n\t\t\t\"2a03:2880:f26f::/48\",\n\t\t\t\"2a03:2880:f077::/48\",\n\t\t\t\"2a03:2881:12::/48\",\n\t\t\t\"2a03:2881:13::/48\",\n\t\t\t\"2a03:2881:17::/48\",\n\t\t\t\"2a03:2881:15::/48\",\n\t\t\t\"2a03:2881:18::/48\",\n\t\t\t\"2a03:2881:14::/48\",\n\t\t\t\"2a03:2881:16::/48\",\n\t\t\t\"2a03:2881:19::/48\",\n\t\t\t\"2a03:2881:4005::/48\",\n\t\t\t\"2a03:2880:f078::/48\",\n\t\t\t\"2a03:2880:f170::/48\",\n\t\t\t\"2a03:2880:f270::/48\",\n\t\t\t\"2a03:2881:400a::/48\",\n\t\t\t\"2a03:2881:400c::/48\",\n\t\t\t\"2a03:2881:400b::/48\",\n\t\t\t\"2a03:2881:400d::/48\",\n\t\t\t\"2a03:2881:1a::/48\",\n\t\t\t\"2a03:2881:1c::/48\",\n\t\t\t\"2a03:2881:1b::/48\",\n\t\t\t\"2a03:2880:f271::/48\",\n\t\t\t\"2a03:2880:f07d::/48\",\n\t\t\t\"2a03:2880:f171::/48\",\n\t\t\t\"2a03:2880:f07e::/48\",\n\t\t\t\"2a03:2880:f172::/48\",\n\t\t\t\"2a03:2880:f272::/48\",\n\t\t\t\"2a03:2880:f080::/48\",\n\t\t\t\"2a03:2880:f173::/48\",\n\t\t\t\"2a03:2880:f273::/48\",\n\t\t\t\"2a03:2880:f081::/48\",\n\t\t\t\"2a03:2880:f174::/48\",\n\t\t\t\"2a03:2880:f274::/48\",\n\t\t\t\"2a03:2880:f175::/48\",\n\t\t\t\"2a03:2880:f275::/48\",\n\t\t\t\"2a03:2880:f082::/48\",\n\t\t\t\"2a03:2880:f176::/48\",\n\t\t\t\"2a03:2880:f276::/48\",\n\t\t\t\"2a03:2880:f083::/48\",\n\t\t\t\"2a03:2880:f277::/48\",\n\t\t\t\"2a03:2880:f084::/48\",\n\t\t\t\"2a03:2880:f177::/48\",\n\t\t\t\"2a03:2881:1e::/48\",\n\t\t\t\"2a03:2880:f085::/48\",\n\t\t\t\"2a03:2880:f178::/48\",\n\t\t\t\"2a03:2880:f278::/48\",\n\t\t\t\"2a03:2880:f179::/48\",\n\t\t\t\"2a03:2880:f086::/48\",\n\t\t\t\"2a03:2880:f279::/48\",\n\t\t\t\"2a03:2880:f17a::/48\",\n\t\t\t\"2a03:2880:f08a::/48\",\n\t\t\t\"2a03:2880:f27a::/48\",\n\t\t\t\"2a03:2881:48::/45\",\n\t\t\t\"2a10:f781:10:cee0::/64\",\n\t\t\t\"2a03:83e0::/32\",\n\t\t]\n\n\t\tconst twitter = [\n\t\t\t\"199.16.156.0/22\",\n\t\t\t\"199.59.148.0/22\",\n\t\t\t\"192.133.76.0/22\",\n\t\t]\n\n\t\tconst bing = [\n\t\t\t\"157.55.39.0/24\",\n\t\t\t\"207.46.13.0/24\",\n\t\t\t\"40.77.167.0/24\",\n\t\t\t\"13.66.139.0/24\",\n\t\t\t\"13.66.144.0/24\",\n\t\t\t\"52.167.144.0/24\",\n\t\t\t\"13.67.10.16/28\",\n\t\t\t\"13.69.66.240/28\",\n\t\t\t\"13.71.172.224/28\",\n\t\t\t\"139.217.52.0/28\",\n\t\t\t\"191.233.204.224/28\",\n\t\t\t\"20.36.108.32/28\",\n\t\t\t\"20.43.120.16/28\",\n\t\t\t\"40.79.131.208/28\",\n\t\t\t\"40.79.186.176/28\",\n\t\t\t\"52.231.148.0/28\",\n\t\t\t\"20.79.107.240/28\",\n\t\t\t\"51.105.67.0/28\",\n\t\t\t\"20.125.163.80/28\",\n\t\t\t\"40.77.188.0/22\",\n\t\t\t\"65.55.210.0/24\",\n\t\t\t\"199.30.24.0/23\",\n\t\t\t\"40.77.202.0/24\",\n\t\t\t\"40.77.139.0/25\",\n\t\t\t\"20.74.197.0/28\",\n\t\t]\n\n\t\tconst pinterest = [\n\t\t\t\"54.236.1.1/32\",\n\t\t\t\"54.236.1.2/31\",\n\t\t\t\"54.236.1.4/30\",\n\t\t\t\"54.236.1.8/29\",\n\t\t\t\"54.236.1.16/28\",\n\t\t\t\"54.236.1.32/27\",\n\t\t\t\"54.236.1.64/26\",\n\t\t\t\"54.236.1.128/25\",\n\t\t]\n\n\t\tconst hotjar = [\n\t\t\t\"18.203.61.76\",\n\t\t\t\"18.203.176.135\",\n\t\t\t\"52.17.197.221\",\n\t\t]\n\n\t\tconst alexa = [\n\t\t\t\"204.236.235.245\",\n\t\t\t\"75.101.186.145\",\n\t\t]\n\n\t\tconst amazon = [\n\t\t\t\"18.207.141.103\",\n\t\t\t\"52.1.113.12\",\n\t\t]\n\n\t\tconst baidu = [\n\t\t\t\"180.76.15.0/24\",\n\t\t\t\"119.63.196.0/24\",\n\t\t\t\"115.239.212.0/24\",\n\t\t\t\"119.63.199.0/24\",\n\t\t\t\"122.81.208.0/22\",\n\t\t\t\"123.125.71.0/24\",\n\t\t\t\"180.76.4.0/24\",\n\t\t\t\"180.76.5.0/24\",\n\t\t\t\"180.76.6.0/24\",\n\t\t\t\"185.10.104.0/24\",\n\t\t\t\"220.181.108.0/24\",\n\t\t\t\"220.181.51.0/24\",\n\t\t\t\"111.13.102.0/24\",\n\t\t\t\"123.125.67.144/29\",\n\t\t\t\"123.125.67.152/31\",\n\t\t\t\"61.135.169.0/24\",\n\t\t\t\"123.125.68.68/30\",\n\t\t\t\"123.125.68.72/29\",\n\t\t\t\"123.125.68.80/28\",\n\t\t\t\"123.125.68.96/30\",\n\t\t\t\"202.46.48.0/20\",\n\t\t\t\"220.181.38.0/24\",\n\t\t\t\"123.125.68.80/30\",\n\t\t\t\"123.125.68.84/31\",\n\t\t\t\"123.125.68.0/24\",\n\t\t]\n\n\t\tconst duckduckgo = [\n\t\t\t\"20.191.45.212\",\n\t\t\t\"40.88.21.235\",\n\t\t\t\"40.76.173.151\",\n\t\t\t\"40.76.163.7\",\n\t\t\t\"20.185.79.47\",\n\t\t\t\"52.142.26.175\",\n\t\t\t\"20.185.79.15\",\n\t\t\t\"52.142.24.149\",\n\t\t\t\"40.76.162.208\",\n\t\t\t\"40.76.163.23\",\n\t\t\t\"40.76.162.191\",\n\t\t\t\"40.76.162.247\",\n\t\t]\n\n\t\tconst yahoo = [\n\t\t\t\"5.255.250.0/24\",\n\t\t\t\"37.9.87.0/24\",\n\t\t\t\"67.195.37.0/24\",\n\t\t\t\"67.195.50.0/24\",\n\t\t\t\"67.195.110.0/24\",\n\t\t\t\"67.195.111.0/24\",\n\t\t\t\"67.195.112.0/23\",\n\t\t\t\"67.195.114.0/24\",\n\t\t\t\"67.195.115.0/24\",\n\t\t\t\"68.180.224.0/21\",\n\t\t\t\"72.30.132.0/24\",\n\t\t\t\"72.30.142.0/24\",\n\t\t\t\"72.30.161.0/24\",\n\t\t\t\"72.30.196.0/24\",\n\t\t\t\"72.30.198.0/24\",\n\t\t\t\"74.6.254.0/24\",\n\t\t\t\"74.6.8.0/24\",\n\t\t\t\"74.6.13.0/24\",\n\t\t\t\"74.6.17.0/24\",\n\t\t\t\"74.6.18.0/24\",\n\t\t\t\"74.6.22.0/24\",\n\t\t\t\"74.6.27.0/24\",\n\t\t\t\"74.6.168.0/24\",\n\t\t\t\"77.88.5.0/24\",\n\t\t\t\"77.88.47.0/24\",\n\t\t\t\"93.158.161.0/24\",\n\t\t\t\"98.137.72.0/24\",\n\t\t\t\"98.137.206.0/24\",\n\t\t\t\"98.137.207.0/24\",\n\t\t\t\"98.139.168.0/24\",\n\t\t\t\"114.111.95.0/24\",\n\t\t\t\"124.83.159.0/24\",\n\t\t\t\"124.83.179.0/24\",\n\t\t\t\"124.83.223.0/24\",\n\t\t\t\"141.8.144.0/24\",\n\t\t\t\"183.79.63.0/24\",\n\t\t\t\"183.79.92.0/24\",\n\t\t\t\"203.216.255.0/24\",\n\t\t\t\"211.14.11.0/24\",\n\t\t]\n\n\t\tconst yandex = [\n\t\t\t\"100.43.90.0/24\",\n\t\t\t\"37.9.115.0/24\",\n\t\t\t\"37.140.165.0/24\",\n\t\t\t\"77.88.22.0/25\",\n\t\t\t\"77.88.29.0/24\",\n\t\t\t\"77.88.31.0/24\",\n\t\t\t\"77.88.59.0/24\",\n\t\t\t\"84.201.146.0/24\",\n\t\t\t\"84.201.148.0/24\",\n\t\t\t\"84.201.149.0/24\",\n\t\t\t\"87.250.243.0/24\",\n\t\t\t\"87.250.253.0/24\",\n\t\t\t\"93.158.147.0/24\",\n\t\t\t\"93.158.148.0/24\",\n\t\t\t\"93.158.151.0/24\",\n\t\t\t\"93.158.153.0/32\",\n\t\t\t\"95.108.128.0/24\",\n\t\t\t\"95.108.138.0/24\",\n\t\t\t\"95.108.150.0/23\",\n\t\t\t\"95.108.158.0/24\",\n\t\t\t\"95.108.156.0/24\",\n\t\t\t\"95.108.188.128/25\",\n\t\t\t\"95.108.234.0/24\",\n\t\t\t\"95.108.248.0/24\",\n\t\t\t\"100.43.80.0/24\",\n\t\t\t\"130.193.62.0/24\",\n\t\t\t\"141.8.153.0/24\",\n\t\t\t\"178.154.165.0/24\",\n\t\t\t\"178.154.166.128/25\",\n\t\t\t\"178.154.173.29\",\n\t\t\t\"178.154.200.158\",\n\t\t\t\"178.154.202.0/24\",\n\t\t\t\"178.154.205.0/24\",\n\t\t\t\"178.154.239.0/24\",\n\t\t\t\"178.154.243.0/24\",\n\t\t\t\"37.9.84.253\",\n\t\t\t\"199.21.99.99\",\n\t\t\t\"178.154.162.29\",\n\t\t\t\"178.154.203.251\",\n\t\t\t\"178.154.211.250\",\n\t\t\t\"178.154.171.0/24\",\n\t\t\t\"178.154.200.0/24\",\n\t\t\t\"178.154.244.0/24\",\n\t\t\t\"178.154.246.0/24\",\n\t\t\t\"95.108.181.0/24\",\n\t\t\t\"95.108.246.252\",\n\t\t\t\"5.45.254.0/24\",\n\t\t\t\"5.255.253.0/24\",\n\t\t\t\"37.140.141.0/24\",\n\t\t\t\"37.140.188.0/24\",\n\t\t\t\"100.43.81.0/24\",\n\t\t\t\"100.43.85.0/24\",\n\t\t\t\"100.43.91.0/24\",\n\t\t\t\"199.21.99.0/24\",\n\t\t\t\"2a02:6b8:b000::/32\",\n\t\t\t\"2a02:6b8:b010::/32\",\n\t\t\t\"2a02:6b8:b011::/32\",\n\t\t\t\"2a02:6b8:c0e::/32\",\n\t\t]\n\n\t\tconst sogou = [\n\t\t\t\"220.181.125.0/24\",\n\t\t\t\"123.126.51.64/27\",\n\t\t\t\"123.126.51.96/28\",\n\t\t\t\"123.126.68.25\",\n\t\t\t\"61.135.189.74\",\n\t\t\t\"61.135.189.75\",\n\t\t]\n\n\t\tconst youdao = [\n\t\t\t\"61.135.249.200/29\",\n\t\t\t\"61.135.249.208/28\",\n\t\t]\n\n\t\tlet customExclusionList = []\n\n\t\t// if wpmDataLayer.general.server2server.ipExcludeList is array\n\t\tif (Array.isArray(wpmDataLayer.general.server2server.ipExcludeList)) {\n\t\t\tcustomExclusionList = wpmDataLayer.general.server2server.ipExcludeList\n\t\t}\n\n\t\treturn blacklist.concat(\n\t\t\tgoogle,\n\t\t\tfacebook,\n\t\t\ttwitter,\n\t\t\tbing,\n\t\t\tpinterest,\n\t\t\thotjar,\n\t\t\talexa,\n\t\t\tamazon,\n\t\t\tbaidu,\n\t\t\tduckduckgo,\n\t\t\tyahoo,\n\t\t\tyandex,\n\t\t\tsogou,\n\t\t\tyoudao,\n\t\t\tcustomExclusionList,\n\t\t)\n\t}\n\n}(window.wpm = window.wpm || {}, jQuery))\n","/**\n * https://github.com/woocommerce/woocommerce-blocks/blob/trunk/src/BlockTypes/AbstractProductGrid.php#L108\n * https://github.com/woocommerce/woocommerce-blocks/issues/3483\n * https://github.com/woocommerce/woocommerce-blocks/issues/1714\n *\n * https://github.com/woocommerce/woocommerce-blocks/blob/trunk/docs/third-party-developers/extensibility/hooks/actions.md#woocommerce_add_to_cart\n *\n * experimental__woocommerce_blocks-product-list-render\n *\n * https://github.com/woocommerce/woocommerce-blocks/blob/a1a6eb2b574b7d39d19d67bafb747d38017289da/docs/internal-developers/blocks/feature-flags-and-experimental-interfaces.md/#usages-of-experimental-prefix\n */\n\n// TODO experimental__woocommerce_blocks-checkout-set-email-address\n// TODO experimental__woocommerce_blocks-product-view-link > selectItem\n// TODO maybe experimental__woocommerce_blocks-product-list-render, when product list is rendered send some list event\n// TODO maybe experimental__woocommerce_blocks-product-search, if the current event trigger doesn't work\n// TODO experimental__woocommerce_blocks-product-render > viewItem\n// TODO various events during entering checkout details, such as email, address, etc.\n// TODO find a way to keep view_item_list events working with the mutation observer\n\n// import {createHooks, addAction, doAction} from \"@wordpress/hooks\"\n// console.log(wp.hooks)\n// console.log(wp.hooks.applyFilters(\"ndx_change_string\", \"\"))\n\n/**\n * Add-to-cart button\n */\nwp.hooks.addAction(\n\t\"experimental__woocommerce_blocks-cart-add-item\",\n\t\"pixel-manager-for-woocommerce\",\n\tdata => {\n\t\t// console.log(\"experimental__woocommerce_blocks-cart-add-item\", data)\n\n\t\t// Works on the all product page\n\t\t// TODO make it work with variable quantities on product page\n\t\twpm.addProductToCart(data.product.id, 1)\n\t},\n)\n\n/**\n * Change cart quantity\n */\nwp.hooks.addAction(\n\t\"experimental__woocommerce_blocks-cart-set-item-quantity\",\n\t\"pixel-manager-for-woocommerce\",\n\tdata => {\n\t\t// console.log(\"experimental__woocommerce_blocks-cart-set-item-quantity\", data)\n\n\t\tif (data.quantity > data.product.quantity) {\n\t\t\twpm.addProductToCart(data.product.id, data.quantity - data.product.quantity)\n\t\t}\n\n\t\tif (data.quantity < data.product.quantity) {\n\t\t\twpm.removeProductFromCart(data.product.id, data.product.quantity - data.quantity)\n\t\t}\n\t},\n)\n\n/**\n * Remove from cart\n */\nwp.hooks.addAction(\n\t\"experimental__woocommerce_blocks-cart-remove-item\",\n\t\"pixel-manager-for-woocommerce\",\n\tdata => {\n\t\t// console.log(\"experimental__woocommerce_blocks-cart-remove-item\", data)\n\t\twpm.removeProductFromCart(data.product.id, data.quantity)\n\t},\n)\n\n/**\n * Checkout form submit\n */\nwp.hooks.addAction(\n\t\"experimental__woocommerce_blocks-checkout-submit\",\n\t\"pixel-manager-for-woocommerce\",\n\t() => {\n\t\t// console.log(\"experimental__woocommerce_blocks-checkout-submit\")\n\t\tjQuery(document).trigger(\"wpmPlaceOrder\", {})\n\t},\n)\n\n\n/**\n * Only outputs an object with products. No other data or actions.\n */\n// wp.hooks.addAction(\n// \t\"experimental__woocommerce_blocks-product-list-render\",\n// \t\"pixel-manager-for-woocommerce\",\n// \t(value) => {\n//\n// \t\tif (value.products.length > 0) {\n// \t\t\tconsole.log(\"hello world 1\")\n// \t\t\tconsole.log(value)\n//\n// \t\t\tjQuery(\".add_to_cart_button\").on(\"click\", function (event) {\n//\n// \t\t\t\tconsole.log(jQuery(event.target.parentElement.parentElement))\n//\n// \t\t\t\t// console.log(\"hello world 5\");\n// \t\t\t\t//\n// \t\t\t\t// console.log(jQuery(this.parentElement.parentElement));\n// \t\t\t\t//\n// \t\t\t\t// console.log(\"hello world 6\");\n// \t\t\t\t//\n// \t\t\t\t// // element is part of a React component.\n// \t\t\t\t// // Get the parent element.\n// \t\t\t\t// const pe = event.target.parentElement.parentElement\n// \t\t\t\t// console.log(jQuery(pe)._reactInternalFiber.key)\n// \t\t\t\t//\n// \t\t\t\t// // pe is a react component. Get the key of that component.\n// \t\t\t\t// const key = pe.getAttribute(\"data-key\")\n// \t\t\t\t// console.log(key)\n//\n//\n// \t\t\t\t// console.log(element.currentTarget.dataset.key)\n// \t\t\t})\n// \t\t}\n// \t\treturn value\n// \t},\n// )\n\n// jQuery(document).on(\"pmw:ready\", () => {\n// \tjQuery(\".add_to_cart_button\").on(\"click\", function (element) {\n//\n// \t\tconsole.log(\"hello world 3\")\n// \t\t// element is part of a React component.\n// \t\t// Get the key of that component.\n// \t\tconsole.log(element.currentTarget.dataset.key)\n// \t})\n// })\n\n// wp.hooks.addAction(\n// \t'woocommerce_add_to_cart',\n// \t'pixel-manager-for-woocommerce',\n// \t( cart_item_key, product_id, quantity, variation_id, variation, cart_item_data ) => {\n// \t\tconsole.log( cart_item_key, product_id, quantity, variation_id, variation, cart_item_data );\n// \t},\n// \t()=>{\n// \t\tconsole.log(\"hello world 2\")\n// \t}\n// )\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * Run PMW main loader\n */\nconst main = async () => {\n\n\trequire(\"./wpm/functions_main\")\n\n\t// Wait until jQuery is loaded\n\tawait wpm.jQueryExists()\n\t// Wait until wpmDataLayer is loaded\n\tawait wpm.wpmDataLayerExists()\n\n\t// wait 1000ms\n\t// await new Promise(resolve => setTimeout(resolve, 1000))\n\n\t// Load all essential scripts first\n\trequire(\"./wpm/functions_loader\")\n\n\t// Load all event listeners that depend on document ready\n\tjQuery(document).on(\"pmw:ready\", () => {\n\t\trequire(\"./wpm/event_listeners_on_ready\")\n\t})\n\n\t// Load remaining event listeners\n\trequire(\"./wpm/event_listeners\")\n\n\trequire(\"./wpm/wc_hooks\")\n\n\t// Output PMW console message\n\twpm.pmwConsoleMessage()\n\n\t// Check if domain is excluded from tracking\n\t// If so, return\n\tif (wpm.excludeDomainFromTracking()) return\n\n\t// Load free pixels\n\trequire(\"./google/loader\")\n\trequire(\"./facebook/loader\")\n\trequire(\"./hotjar/loader\")\n\n\t// #if process.env.TIER === 'premium'\n// \t/**\n// \t * Load all premium scripts\n// \t */\n// \tif (wpm.canLoadPremiumFeatures()) {\n// \t\trequire(\"./wpm/event_listeners_premium\")\n// \t\trequire(\"./microsoft-ads/loader\")\n// \t\trequire(\"./pinterest/loader\")\n// \t\trequire(\"./snapchat/loader\")\n// \t\trequire(\"./tiktok/loader\")\n// \t\trequire(\"./twitter/loader\")\n// \t}\n\t// #endif\n\n\t// Preload pixels\n\tdocument.dispatchEvent(new Event(\"wpmPreLoadPixels\"))\n\n\t// Trigger wpmLoad event\n\tdocument.dispatchEvent(new Event(\"wpmLoad\"))\n\n\t// Wait until page is loaded\n\tawait wpm.pageLoaded()\n\twpm.triggerDomReadyEvent()\n}\n\nmain()\n\n\n\n\n"],"names":["exports","isInSubnet","address","subnetOrSubnets","createChecker","Array","isArray","subnetsByVersion","reduce","acc","subnet","ip","split","util","isIP","push","length","Error","check4","IPv4","check6","IPv6","isIPv6","isIPv4MappedAddress","extractMappedIpv4","Object","enumerable","get","isPrivate","isLocalhost","isReserved","isSpecial","localhost","ipv4","ipv6","private","reserved","ipv4ToLong","isIPv4","octets","parseInt","checks_1","map","addressLong","some","check","createLongChecker","subnetAddress","prefixLengthString","prefixLength","Number","isInteger","subnetLong","specialNetsCache","ipRange_1","dot","mappedIpv4","colon","doubleColon","getIpv6Segments","test","matches","match","prefix","parts","x","toString","mappedIpv4ToIpv6","beforeChunk","afterChunk","beforeParts","afterParts","missingSegments","concat","segments","createSegmentChecker","subnetSegments","i","bitCount","Math","min","addressSegments","Boolean","v4Seg","v4Str","IPv4Reg","RegExp","v6Seg","IPv6Reg","s","expandIPv6","ipaddr","ipv4Part","ipv4Regexes","ipv6Part","ipv6Regexes","matchCIDR","zoneIndex","module","this","first","second","partSize","cidrBits","part","shift","subnetMatch","rangeList","defaultName","k","len","rangeName","rangeSubnets","kind","apply","octet","prototype","join","toNormalizedString","toByteArray","slice","other","cidrRange","ref","SpecialRanges","unspecified","broadcast","multicast","linkLocal","loopback","carrierGradeNat","range","toIPv4MappedAddress","parse","prefixLengthFromSubnetMask","cidr","stop","zeros","zerotable","fourOctet","longValue","parser","string","parseIntAuto","value","results","reverse","zoneId","l","replace","toRFC5952String","bestMatchIndex","bestMatchLength","regex","exec","index","substring","bytes","addr","suffix","call","toFixedLengthString","padStart","uniqueLocal","ipv4Mapped","rfc6145","rfc6052","teredo","toIPv4Address","high","low","transitional","colonCount","lastColon","replacement","replacementCount","indexOf","lastIndexOf","substr","isValid","error1","isValidFourPartDecimal","parseCIDR","maskLength","parsed","defineProperty","subnetMaskFromPrefixLength","filledOctetCount","j","floor","pow","broadcastAddressFromCIDR","ipInterfaceOctets","subnetMaskOctets","networkAddressFromCIDR","fromByteArray","process","normalize","a","_validate","nh","toLowerCase","sections","n","h","ns","hs","undefined","_leftPad","abbreviate","zPreviousFlag","zeroStartIndex","zeroLength","zStartIndex","zLength","section","zFlag","splice","d","p","padding","repeat","_bin2hex","bin","_addr2bin","binAddr","_bin2addr","binPart","hexSection","divideSubnet","mask0","mask1","limit","abbr","ret","binNetPart","binHostPart","numSubnets","binSubnet","hexAddr","binStartAddr","binEndAddr","start","end","size","randomSubnet","random","ptr","mask","version","err","isV4","isV6","isRange","inRange","check_range","ip6","range_data","parse_addr","parse_range","storeIP","displayIP","jQuery","document","on","wpmDataLayer","pixels","facebook","pixel_id","loaded","wpm","doesUrlContainPatterns","exclusion_patterns","canIFire","loadFacebookPixel","event","payload","fbq","custom_data","eventID","event_id","error","console","setFbUserData","$","fbUserData","f","window","b","e","callMethod","arguments","queue","_fbq","t","createElement","async","src","getElementsByTagName","parentNode","insertBefore","data","isFbpSet","isFbAdvancedMatchingEnabled","getUserIdentifiersForFb","user","id","raw","external_id","order","user_id","email","em","billing_email_hashed","first_name","fn","billing_first_name","last_name","ln","billing_last_name","phone","ph","billing_phone","city","ct","billing_city","state","st","billing_state","postcode","zp","billing_postcode","country","billing_country","getFbRandomEventId","getFbUserData","getFbUserDataFromBrowser","advanced_matching","getCookie","isValidFbp","fbp","isValidFbc","fbc","navigator","userAgent","client_user_agent","fbGetProductDataForCapiEvent","product","content_type","content_name","name","content_ids","dyn_r_ids","dynamic_remarketing","id_type","parseFloat","quantity","price","currency","facebookContentIds","prodIds","key","item","entries","items","general","variationsOutput","variation_id","String","products","trackCustomFacebookEvent","eventName","customData","eventId","trigger","event_name","user_data","event_source_url","location","href","fbGetContentIdsFromCart","cart","require","isEmptyObject","google","ads","conversionIds","status","googleConfigConditionsMet","isVariable","send_events_with_parent_ids","send_to","getGoogleAdsConversionIdentifiers","google_business_vertical","gtagLoaded","then","gtag","value_filtered","getGoogleAdsDynamicRemarketingOrderItems","getGoogleAdsConversionIdentifiersWithLabel","data_basic","data_with_cart","transaction_id","number","new_customer","clv_order_value_filtered","customer_lifetime_value","aw_merchant_id","discount","aw_feed_country","aw_feed_language","getGoogleAdsRegularOrderItems","conversionIdentifiers","orderItems","orderItem","analytics","universal","property_id","mp_active","affiliation","value_regular","tax","shipping","coupon","getGAUAOrderItems","category","variant","variant_name","brand","ga3AddListNameToProduct","item_data","productPosition","list_name","shop","list_position","ga4","measurement_id","getGA4OrderItems","item_name","item_category","item_id","item_variant","item_brand","canGoogleLoad","loadGoogle","logPreventedPixelLoading","type","consent_mode","active","getConsentValues","mode","categories","includes","getVisitorConsentStatusAndUpdateGoogleConsentSettings","google_consent_settings","analytics_storage","ad_storage","updateGoogleConsentMode","cookie_consent_mgmt","explicit_consent","fireGtagGoogleAds","enhanced_conversions","phone_conversion_label","phone_conversion_number","keys","page_type","enhanced_conversion_data","fireGtagGoogleAnalyticsUA","parameters","fireGtagGoogleAnalyticsGA4","debug_mode","isGoogleActive","getGoogleGtagId","loadScriptAndCacheIt","script","textStatus","dataLayer","wait_for_update","region","ads_data_redaction","url_passthrough","linker","settings","Date","Promise","resolve","reject","startTime","wait","setTimeout","optimize","container_id","load_google_optimize_pixel","hotjar","site_id","load_hotjar_pixel","o","hj","q","_hjSettings","hjid","hjsv","r","appendChild","getComplianzCookies","cmplz_statistics","cmplz_marketing","visitorHasChosen","getCookieLawInfoCookies","analyticsCookie","adsCookie","wpmConsentValues","setConsentValueCategories","updateConsentCookieValues","cookie","explicitConsent","JSON","decodeURI","action","consents","statistics","marketing","thirdparty","advanced","localStorage","getItem","log","UC_UI","addEventListener","ucUiProcessConsent","areAllConsentsAccepted","groups","URLSearchParams","groupsObject","forEach","group","groupArray","groubsObject","pmw","consentAcceptAll","ucStatisticsSlug","getSettingsLabels","filter","label","slug","consentAdjustSelectively","getServicesBaseInfo","categorySlug","consent","setConsentDefaultValuesToExplicit","pixelName","canIFireMode","scriptTagObserver","MutationObserver","mutations","addedNodes","node","shouldScriptBeActive","unblockScript","blockScript","observe","head","childList","subtree","disconnect","element","scriptNode","removeAttach","remove","wpmSrc","attr","appendTo","dispatchEvent","Event","removeAttr","unblockAllScripts","unblockSelectedPixels","explicitConsentStateAlreadySet","Cookiebot","detail","cmplzStatusChange","cmplzConsentData","huObserver","querySelector","hu","documentElement","body","consentRevokeAll","OneTrust","reload","duration","consentSetCookie","setCookie","stringify","url","URL","currentTarget","productId","getProductIdByCartItemKeyUrl","removeProductFromCart","checkoutButtonClasses","paymentMethodSelected","fireCheckoutProgress","fireCheckoutOption","val","doesWooCommerceCartExist","getCartItems","productIds","getAddToCartLinkProductIds","getProductsFromBackend","referrer","referrerHostname","hostname","host","wpmLoadFired","product_type","getMainProductIdFromProductPage","getProductDataForViewItemEvent","isOrderIdStored","writeOrderIdToStorage","acrRemoveCookie","hasLoginEventFired","setLoginEventFired","sessionStorage","tiktok","getRandomEventId","context","getTikTokUserDataFromBrowser","properties","contents","content_id","sendEventPayloadToServer","getCartValue","search_string","getSearchTermFromUrl","query","getTikTokOrderItemIds","startIntersectionObserverToWatch","startProductsMutationObserverToWatch","addToCartSelectors","addProductToCart","each","find","classes","getPostIdFromString","one","target","closest","origin","searchParams","has","nextAll","getIdBasedOndVariationsOutputSetting","getProductDetailsFormattedForEvent","isEmail","emailSelected","getCartItemsFromBackend","variation","triggerViewItemEventPrep","wpmDeduper","wpmRestSettings","checkCookie","useRestEndpoint","isSessionStorageAvailable","isRestEndpointAvailable","isBelowRestErrorThreshold","testEndpoint","root","cookieName","response","fetch","method","cache","keepalive","setItem","isWpmRestEndpointAvailable","orderId","orderKey","source","Storage","ids","expiresDate","setDate","getDate","toUTCString","storeOrderIdOnServer","orderDeduplication","quantityToRemove","isVariation","parentId","saveCartObjectToDataLayer","ajax_url","ok","json","success","headers","pageId","pageType","responseData","assign","cartObject","triggerViewItemEvent","triggerViewItemEventNoProduct","step","checkout_option","triggerViewItemList","viewItemListTriggerTestMode","css","append","viewItemListTrigger","opacity","backgroundColor","search","io","ioTimeouts","observerCallback","observer","entry","elementId","next","isIntersecting","testMode","unobserve","timeout","clearTimeout","allIoElementsToWatch","ioid","getAllElementsToWatch","elem","parent","hasClass","prev","urlHasParameter","IntersectionObserver","threshold","productsNode","parents","productsMutationObserver","attributes","characterData","mutation","newNodes","hasWpmProductIdElement","siblings","cookieValue","expiryDays","setTime","getTime","expires","ca","decodeURIComponent","c","charAt","deleteCookie","getWpmSessionData","setWpmSessionData","nonce_wp_rest","order_key","nonce_ajax","responseJson","cartItemKey","cartItemKeys","position","parentId_dyn_r_ids","setReferrerToCookie","getReferrerFromCookie","getClidFromBrowser","clidCookieId","clidId","gclid","dclid","getUserAgent","getViewPort","width","max","clientWidth","innerWidth","height","clientHeight","innerHeight","options","dataType","ajax","getOrderItemPrice","total","total_tax","loginEventFired","pageLoaded","waitForVar","readyState","pageReady","isMiniCartActive","parameter","hashAsync","algo","str","crypto","subtle","digest","TextEncoder","encode","buf","Uint8Array","patterns","pattern","excludeDomainFromTracking","excludeDomains","domain","debug","pmwConsoleMessage","pro","distro","eligibleForUpdates","canLoadPremiumFeatures","jQueryReadyFired","triggerDomReadyEvent","jQueryExists","waitForjQuery","wpmDataLayerExists","ipCheck","text","trim","obj","pair","isOnBlacklist","ipName","getBlacklist","isCidr","customExclusionList","server2server","ipExcludeList","wp","hooks","addAction","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","g","globalThis","Function","prop","hasOwnProperty","Symbol","toStringTag","main"],"sourceRoot":""}
languages/woocommerce-google-adwords-conversion-tracking-tag.pot CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the GNU General Public License v3.0.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Pixel Manager for WooCommerce 1.27.5\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/src\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "POT-Creation-Date: 2022-11-23T02:54:27+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.7.1\n"
15
  "X-Domain: woocommerce-google-adwords-conversion-tracking-tag\n"
@@ -40,8 +40,8 @@ msgstr ""
40
 
41
  #: classes/admin/class-admin.php:334
42
  #: classes/admin/class-admin.php:335
43
- #: wgact.php:318
44
- #: wgact.php:319
45
  msgid "Pixel Manager"
46
  msgstr ""
47
 
@@ -1019,14 +1019,14 @@ msgstr ""
1019
  msgid "Conversion pixels not fired yet"
1020
  msgstr ""
1021
 
1022
- #: wgact.php:334
1023
  msgid "Pixel Manager for WooCommerce error"
1024
  msgstr ""
1025
 
1026
- #: wgact.php:336
1027
  msgid "Your environment doesn't meet all the system requirements listed below."
1028
  msgstr ""
1029
 
1030
- #: wgact.php:340
1031
  msgid "The WooCommerce plugin needs to be activated"
1032
  msgstr ""
2
  # This file is distributed under the GNU General Public License v3.0.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Pixel Manager for WooCommerce 1.27.8\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/src\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "POT-Creation-Date: 2022-12-06T03:32:06+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.7.1\n"
15
  "X-Domain: woocommerce-google-adwords-conversion-tracking-tag\n"
40
 
41
  #: classes/admin/class-admin.php:334
42
  #: classes/admin/class-admin.php:335
43
+ #: wgact.php:315
44
+ #: wgact.php:316
45
  msgid "Pixel Manager"
46
  msgstr ""
47
 
1019
  msgid "Conversion pixels not fired yet"
1020
  msgstr ""
1021
 
1022
+ #: wgact.php:331
1023
  msgid "Pixel Manager for WooCommerce error"
1024
  msgstr ""
1025
 
1026
+ #: wgact.php:333
1027
  msgid "Your environment doesn't meet all the system requirements listed below."
1028
  msgstr ""
1029
 
1030
+ #: wgact.php:337
1031
  msgid "The WooCommerce plugin needs to be activated"
1032
  msgstr ""
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: woocommerce, google analytics, google ads, facebook, conversion tracking,
4
  Requires at least: 3.7
5
  Tested up to: 6.1
6
  Requires PHP: 7.3
7
- Stable tag: 1.27.7
8
  License: GPLv3 or later
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
@@ -221,6 +221,16 @@ You can send the link to the front page of your shop too if you think it would b
221
 
222
  == Changelog ==
223
 
 
 
 
 
 
 
 
 
 
 
224
  = 1.27.7 = 24.11.2022
225
 
226
  * Fix: Fixed Google Ads dynamic ID output for custom filters product ID filters.
4
  Requires at least: 3.7
5
  Tested up to: 6.1
6
  Requires PHP: 7.3
7
+ Stable tag: 1.27.8
8
  License: GPLv3 or later
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
221
 
222
  == Changelog ==
223
 
224
+ = 1.27.8 = 06.12.2022
225
+
226
+
227
+
228
+ * Tweak: Added various type validations for REST routes.
229
+ * Tweak: Increase Gutenberg compatibility for all-products block, cart block and checkout block.
230
+ * Tweak: Streamlined code for backend product retrieval and excluded saving product transients on cart and checkout pages.
231
+ * Tweak: Made sure that the action scheduler hooks always get registered (even when an Ajax request is happening).
232
+
233
+
234
  = 1.27.7 = 24.11.2022
235
 
236
  * Fix: Fixed Google Ads dynamic ID output for custom filters product ID filters.
vendor/composer/installed.json CHANGED
@@ -2,23 +2,23 @@
2
  "packages": [
3
  {
4
  "name": "freemius/wordpress-sdk",
5
- "version": "2.5.2",
6
- "version_normalized": "2.5.2.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/Freemius/wordpress-sdk.git",
10
- "reference": "35782eb9f19eefc63723afb3196c768bca6dfbd9"
11
  },
12
  "dist": {
13
  "type": "zip",
14
- "url": "https://api.github.com/repos/Freemius/wordpress-sdk/zipball/35782eb9f19eefc63723afb3196c768bca6dfbd9",
15
- "reference": "35782eb9f19eefc63723afb3196c768bca6dfbd9",
16
  "shasum": ""
17
  },
18
  "require": {
19
  "php": ">=5.2"
20
  },
21
- "time": "2022-11-14T06:49:45+00:00",
22
  "type": "library",
23
  "installation-source": "dist",
24
  "notification-url": "https://packagist.org/downloads/",
@@ -38,23 +38,23 @@
38
  ],
39
  "support": {
40
  "issues": "https://github.com/Freemius/wordpress-sdk/issues",
41
- "source": "https://github.com/Freemius/wordpress-sdk/tree/2.5.2"
42
  },
43
  "install-path": "../freemius/wordpress-sdk"
44
  },
45
  {
46
  "name": "giggsey/libphonenumber-for-php",
47
- "version": "8.13.0",
48
- "version_normalized": "8.13.0.0",
49
  "source": {
50
  "type": "git",
51
  "url": "https://github.com/giggsey/libphonenumber-for-php.git",
52
- "reference": "eb1cea72dc8d020e149062371a2c6717457cf561"
53
  },
54
  "dist": {
55
  "type": "zip",
56
- "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/eb1cea72dc8d020e149062371a2c6717457cf561",
57
- "reference": "eb1cea72dc8d020e149062371a2c6717457cf561",
58
  "shasum": ""
59
  },
60
  "require": {
@@ -71,7 +71,7 @@
71
  "symfony/console": "^2.8|^3.0|^v4.4|^v5.2",
72
  "symfony/phpunit-bridge": "^4.2 || ^5"
73
  },
74
- "time": "2022-11-07T12:16:34+00:00",
75
  "type": "library",
76
  "extra": {
77
  "branch-alias": {
@@ -414,6 +414,6 @@
414
  "install-path": "../woocommerce/action-scheduler"
415
  }
416
  ],
417
- "dev": true,
418
  "dev-package-names": []
419
  }
2
  "packages": [
3
  {
4
  "name": "freemius/wordpress-sdk",
5
+ "version": "2.5.3",
6
+ "version_normalized": "2.5.3.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/Freemius/wordpress-sdk.git",
10
+ "reference": "2e56d683dd7b30445940679ecb401d2aff746c9e"
11
  },
12
  "dist": {
13
  "type": "zip",
14
+ "url": "https://api.github.com/repos/Freemius/wordpress-sdk/zipball/2e56d683dd7b30445940679ecb401d2aff746c9e",
15
+ "reference": "2e56d683dd7b30445940679ecb401d2aff746c9e",
16
  "shasum": ""
17
  },
18
  "require": {
19
  "php": ">=5.2"
20
  },
21
+ "time": "2022-12-05T10:31:45+00:00",
22
  "type": "library",
23
  "installation-source": "dist",
24
  "notification-url": "https://packagist.org/downloads/",
38
  ],
39
  "support": {
40
  "issues": "https://github.com/Freemius/wordpress-sdk/issues",
41
+ "source": "https://github.com/Freemius/wordpress-sdk/tree/2.5.3"
42
  },
43
  "install-path": "../freemius/wordpress-sdk"
44
  },
45
  {
46
  "name": "giggsey/libphonenumber-for-php",
47
+ "version": "8.13.1",
48
+ "version_normalized": "8.13.1.0",
49
  "source": {
50
  "type": "git",
51
  "url": "https://github.com/giggsey/libphonenumber-for-php.git",
52
+ "reference": "58285eaba7cb388f57b5b1b3689a566694b4e043"
53
  },
54
  "dist": {
55
  "type": "zip",
56
+ "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/58285eaba7cb388f57b5b1b3689a566694b4e043",
57
+ "reference": "58285eaba7cb388f57b5b1b3689a566694b4e043",
58
  "shasum": ""
59
  },
60
  "require": {
71
  "symfony/console": "^2.8|^3.0|^v4.4|^v5.2",
72
  "symfony/phpunit-bridge": "^4.2 || ^5"
73
  },
74
+ "time": "2022-11-28T12:02:06+00:00",
75
  "type": "library",
76
  "extra": {
77
  "branch-alias": {
414
  "install-path": "../woocommerce/action-scheduler"
415
  }
416
  ],
417
+ "dev": false,
418
  "dev-package-names": []
419
  }
vendor/composer/installed.php CHANGED
@@ -3,26 +3,26 @@
3
  'name' => 'sweetcode/pixel-manager-for-woocommerce',
4
  'pretty_version' => 'dev-master',
5
  'version' => 'dev-master',
6
- 'reference' => '170b08bf949af4e7f9c152e2268bfb6d53ab633c',
7
  'type' => 'wordpress-plugin',
8
  'install_path' => __DIR__ . '/../../',
9
  'aliases' => array(),
10
- 'dev' => true,
11
  ),
12
  'versions' => array(
13
  'freemius/wordpress-sdk' => array(
14
- 'pretty_version' => '2.5.2',
15
- 'version' => '2.5.2.0',
16
- 'reference' => '35782eb9f19eefc63723afb3196c768bca6dfbd9',
17
  'type' => 'library',
18
  'install_path' => __DIR__ . '/../freemius/wordpress-sdk',
19
  'aliases' => array(),
20
  'dev_requirement' => false,
21
  ),
22
  'giggsey/libphonenumber-for-php' => array(
23
- 'pretty_version' => '8.13.0',
24
- 'version' => '8.13.0.0',
25
- 'reference' => 'eb1cea72dc8d020e149062371a2c6717457cf561',
26
  'type' => 'library',
27
  'install_path' => __DIR__ . '/../giggsey/libphonenumber-for-php',
28
  'aliases' => array(),
@@ -49,7 +49,7 @@
49
  'sweetcode/pixel-manager-for-woocommerce' => array(
50
  'pretty_version' => 'dev-master',
51
  'version' => 'dev-master',
52
- 'reference' => '170b08bf949af4e7f9c152e2268bfb6d53ab633c',
53
  'type' => 'wordpress-plugin',
54
  'install_path' => __DIR__ . '/../../',
55
  'aliases' => array(),
3
  'name' => 'sweetcode/pixel-manager-for-woocommerce',
4
  'pretty_version' => 'dev-master',
5
  'version' => 'dev-master',
6
+ 'reference' => '1f0fff3ecaa0fdc67ab860c80700a09fc214da62',
7
  'type' => 'wordpress-plugin',
8
  'install_path' => __DIR__ . '/../../',
9
  'aliases' => array(),
10
+ 'dev' => false,
11
  ),
12
  'versions' => array(
13
  'freemius/wordpress-sdk' => array(
14
+ 'pretty_version' => '2.5.3',
15
+ 'version' => '2.5.3.0',
16
+ 'reference' => '2e56d683dd7b30445940679ecb401d2aff746c9e',
17
  'type' => 'library',
18
  'install_path' => __DIR__ . '/../freemius/wordpress-sdk',
19
  'aliases' => array(),
20
  'dev_requirement' => false,
21
  ),
22
  'giggsey/libphonenumber-for-php' => array(
23
+ 'pretty_version' => '8.13.1',
24
+ 'version' => '8.13.1.0',
25
+ 'reference' => '58285eaba7cb388f57b5b1b3689a566694b4e043',
26
  'type' => 'library',
27
  'install_path' => __DIR__ . '/../giggsey/libphonenumber-for-php',
28
  'aliases' => array(),
49
  'sweetcode/pixel-manager-for-woocommerce' => array(
50
  'pretty_version' => 'dev-master',
51
  'version' => 'dev-master',
52
+ 'reference' => '1f0fff3ecaa0fdc67ab860c80700a09fc214da62',
53
  'type' => 'wordpress-plugin',
54
  'install_path' => __DIR__ . '/../../',
55
  'aliases' => array(),
vendor/freemius/wordpress-sdk/assets/css/admin/add-ons.css CHANGED
@@ -1 +1 @@
1
- .fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(0,0,0,.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:#adff2f;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:1px 1px 1px rgba(0,0,0,.3);text-transform:uppercase;font-size:.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}#TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description iframe{max-width:100%}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:#adff2f;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid #006400;padding:2px;text-align:center;font-size:.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#f3f3f3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:#adff2f}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid #fff;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
1
+ .fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(0,0,0,.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:#adff2f;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:1px 1px 1px rgba(0,0,0,.3);text-transform:uppercase;font-size:.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}#TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px;clear:none}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description iframe{max-width:100%}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:#adff2f;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid #006400;padding:2px;text-align:center;font-size:.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#f3f3f3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:#adff2f}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid #fff;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
vendor/freemius/wordpress-sdk/includes/class-freemius.php CHANGED
@@ -3648,7 +3648,7 @@
3648
  } else {
3649
  // Add hidden debug page.
3650
  $hook = FS_Admin_Menu_Manager::add_subpage(
3651
- null,
3652
  $title,
3653
  $title,
3654
  'manage_options',
@@ -7315,12 +7315,12 @@
7315
 
7316
  $this->_admin_notices->add_sticky(
7317
  sprintf(
7318
- $this->get_text_inline( 'You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s.', 'pending-activation-message' ),
7319
  '<b>' . $this->get_plugin_name() . '</b>',
7320
  '<b>' . $email . '</b>',
7321
  ( $is_pending_trial ?
7322
  $this->get_text_inline( 'start the trial', 'start-the-trial' ) :
7323
- $this->get_text_inline( 'complete the install', 'complete-the-install' ) )
7324
  ),
7325
  'activation_pending',
7326
  'Thanks!'
@@ -18975,7 +18975,7 @@
18975
  if ( ! $this->has_settings_menu() ) {
18976
  // Add the opt-in page without a menu item.
18977
  $hook = FS_Admin_Menu_Manager::add_subpage(
18978
- null,
18979
  $this->get_plugin_name(),
18980
  $this->get_plugin_name(),
18981
  'manage_options',
@@ -19407,7 +19407,7 @@
19407
  $hook = FS_Admin_Menu_Manager::add_subpage(
19408
  $item['show_submenu'] ?
19409
  $top_level_menu_slug :
19410
- null,
19411
  $item['page_title'],
19412
  $menu_item,
19413
  $capability,
@@ -19422,7 +19422,7 @@
19422
  FS_Admin_Menu_Manager::add_subpage(
19423
  $item['show_submenu'] ?
19424
  $top_level_menu_slug :
19425
- null,
19426
  $item['page_title'],
19427
  $menu_item,
19428
  $capability,
3648
  } else {
3649
  // Add hidden debug page.
3650
  $hook = FS_Admin_Menu_Manager::add_subpage(
3651
+ '',
3652
  $title,
3653
  $title,
3654
  'manage_options',
7315
 
7316
  $this->_admin_notices->add_sticky(
7317
  sprintf(
7318
+ $this->get_text_inline( 'You should receive a confirmation email for %s to your mailbox at %s. Please make sure you click the button in that email to %s.', 'pending-activation-message' ),
7319
  '<b>' . $this->get_plugin_name() . '</b>',
7320
  '<b>' . $email . '</b>',
7321
  ( $is_pending_trial ?
7322
  $this->get_text_inline( 'start the trial', 'start-the-trial' ) :
7323
+ $this->get_text_inline( 'complete the opt-in', 'complete-the-opt-in' ) )
7324
  ),
7325
  'activation_pending',
7326
  'Thanks!'
18975
  if ( ! $this->has_settings_menu() ) {
18976
  // Add the opt-in page without a menu item.
18977
  $hook = FS_Admin_Menu_Manager::add_subpage(
18978
+ '',
18979
  $this->get_plugin_name(),
18980
  $this->get_plugin_name(),
18981
  'manage_options',
19407
  $hook = FS_Admin_Menu_Manager::add_subpage(
19408
  $item['show_submenu'] ?
19409
  $top_level_menu_slug :
19410
+ '',
19411
  $item['page_title'],
19412
  $menu_item,
19413
  $capability,
19422
  FS_Admin_Menu_Manager::add_subpage(
19423
  $item['show_submenu'] ?
19424
  $top_level_menu_slug :
19425
+ '',
19426
  $item['page_title'],
19427
  $menu_item,
19428
  $capability,
vendor/freemius/wordpress-sdk/includes/class-fs-plugin-updater.php CHANGED
@@ -417,7 +417,7 @@
417
 
418
  $themes_update = get_site_transient( 'update_themes' );
419
  if ( ! isset( $themes_update->response[ $theme_basename ] ) ||
420
- empty( $themes_update->response[ $theme_basename ]['package'] )
421
  ) {
422
  return $prepared_themes;
423
  }
@@ -636,7 +636,7 @@
636
  foreach ( $this->_translation_updates as $translation_update ) {
637
  $lang = $translation_update['language'];
638
  if ( ! isset( $current_plugin_translation_updates_map[ $lang ] ) ||
639
- version_compare( $translation_update['version'], $current_plugin_translation_updates_map[ $lang ]['version'], '>' )
640
  ) {
641
  $current_plugin_translation_updates_map[ $lang ] = $translation_update;
642
  }
@@ -660,13 +660,14 @@
660
  * @return object
661
  */
662
  function get_update_details( FS_Plugin_Tag $new_version ) {
663
- $update = new stdClass();
664
- $update->slug = $this->_fs->get_slug();
665
- $update->new_version = $new_version->version;
666
- $update->url = WP_FS__ADDRESS;
667
- $update->package = $new_version->url;
668
- $update->tested = $new_version->tested_up_to_version;
669
- $update->requires = $new_version->requires_platform_version;
 
670
 
671
  $icon = $this->_fs->get_local_icon_url();
672
 
@@ -808,9 +809,9 @@
808
  $basename = $this->_fs->get_plugin_basename();
809
 
810
  if ( ! is_object( $transient_data ) ||
811
- ! isset( $transient_data->response ) ||
812
  ! is_array( $transient_data->response ) ||
813
- empty( $transient_data->response[ $basename ] )
814
  ) {
815
  return;
816
  }
@@ -1095,6 +1096,7 @@ if ( !isset($info->error) ) {
1095
  if ( ! $plugin_in_repo ) {
1096
  $data->last_updated = ! is_null( $new_version->updated ) ? $new_version->updated : $new_version->created;
1097
  $data->requires = $new_version->requires_platform_version;
 
1098
  $data->tested = $new_version->tested_up_to_version;
1099
  }
1100
 
@@ -1148,9 +1150,28 @@ if ( !isset($info->error) ) {
1148
  }
1149
  }
1150
 
 
 
 
 
1151
  return $data;
1152
  }
1153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1154
  /**
1155
  * @author Vova Feldman (@svovaf)
1156
  * @since 1.2.1.7
417
 
418
  $themes_update = get_site_transient( 'update_themes' );
419
  if ( ! isset( $themes_update->response[ $theme_basename ] ) ||
420
+ empty( $themes_update->response[ $theme_basename ]['package'] )
421
  ) {
422
  return $prepared_themes;
423
  }
636
  foreach ( $this->_translation_updates as $translation_update ) {
637
  $lang = $translation_update['language'];
638
  if ( ! isset( $current_plugin_translation_updates_map[ $lang ] ) ||
639
+ version_compare( $translation_update['version'], $current_plugin_translation_updates_map[ $lang ]['version'], '>' )
640
  ) {
641
  $current_plugin_translation_updates_map[ $lang ] = $translation_update;
642
  }
660
  * @return object
661
  */
662
  function get_update_details( FS_Plugin_Tag $new_version ) {
663
+ $update = new stdClass();
664
+ $update->slug = $this->_fs->get_slug();
665
+ $update->new_version = $new_version->version;
666
+ $update->url = WP_FS__ADDRESS;
667
+ $update->package = $new_version->url;
668
+ $update->tested = self::get_tested_wp_version( $new_version->tested_up_to_version );
669
+ $update->requires = $new_version->requires_platform_version;
670
+ $update->requires_php = $new_version->requires_programming_language_version;
671
 
672
  $icon = $this->_fs->get_local_icon_url();
673
 
809
  $basename = $this->_fs->get_plugin_basename();
810
 
811
  if ( ! is_object( $transient_data ) ||
812
+ ! isset( $transient_data->response ) ||
813
  ! is_array( $transient_data->response ) ||
814
+ empty( $transient_data->response[ $basename ] )
815
  ) {
816
  return;
817
  }
1096
  if ( ! $plugin_in_repo ) {
1097
  $data->last_updated = ! is_null( $new_version->updated ) ? $new_version->updated : $new_version->created;
1098
  $data->requires = $new_version->requires_platform_version;
1099
+ $data->requires_php = $new_version->requires_programming_language_version;
1100
  $data->tested = $new_version->tested_up_to_version;
1101
  }
1102
 
1150
  }
1151
  }
1152
 
1153
+ if ( ! empty( $data->tested ) ) {
1154
+ $data->tested = self::get_tested_wp_version( $data->tested );
1155
+ }
1156
+
1157
  return $data;
1158
  }
1159
 
1160
+ /**
1161
+ * @since 2.5.3 If the current WordPress version is a patch of the tested version (e.g., 6.1.2 is a patch of 6.1), then override the tested version with the patch so developers won't need to release a new version just to bump the latest supported WP version.
1162
+ *
1163
+ * @param string|null $tested_up_to
1164
+ *
1165
+ * @return string|null
1166
+ */
1167
+ private static function get_tested_wp_version( $tested_up_to ) {
1168
+ $current_wp_version = get_bloginfo( 'version' );
1169
+
1170
+ return ( ! empty($tested_up_to) && fs_starts_with( $current_wp_version, $tested_up_to . '.' ) ) ?
1171
+ $current_wp_version :
1172
+ $tested_up_to;
1173
+ }
1174
+
1175
  /**
1176
  * @author Vova Feldman (@svovaf)
1177
  * @since 1.2.1.7
vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-tag.php CHANGED
@@ -23,6 +23,10 @@
23
  * @var string
24
  */
25
  public $requires_platform_version;
 
 
 
 
26
  /**
27
  * @var string
28
  */
23
  * @var string
24
  */
25
  public $requires_platform_version;
26
+ /**
27
+ * @var string
28
+ */
29
+ public $requires_programming_language_version;
30
  /**
31
  * @var string
32
  */
vendor/freemius/wordpress-sdk/includes/fs-plugin-info-dialog.php CHANGED
@@ -311,6 +311,7 @@
311
  $data->version = $latest->version;
312
  $data->last_updated = $latest->created;
313
  $data->requires = $latest->requires_platform_version;
 
314
  $data->tested = $latest->tested_up_to_version;
315
  } else if ( ! empty( $current_addon_version ) ) {
316
  $data->version = $current_addon_version;
@@ -1344,7 +1345,10 @@
1344
  ?>
1345
  <li>
1346
  <strong><?php fs_esc_html_echo_inline( 'Requires WordPress Version', 'requires-wordpress-version', $api->slug ) ?>
1347
- :</strong> <?php echo esc_html( sprintf( fs_text_inline( '%s or higher', 'x-or-higher', $api->slug ), $api->requires ) ) ?>
 
 
 
1348
  </li>
1349
  <?php
1350
  }
@@ -1356,6 +1360,19 @@
1356
  </li>
1357
  <?php
1358
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
1359
  if ( ! empty( $api->downloaded ) ) {
1360
  ?>
1361
  <li>
@@ -1485,9 +1502,43 @@
1485
  </div>
1486
  <div id="section-holder" class="wrap">
1487
  <?php
1488
- if ( ! empty( $api->tested ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->tested ) ), $api->tested, '>' ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1489
  echo '<div class="notice notice-warning"><p>' . '<strong>' . fs_text_inline( 'Warning', 'warning', $api->slug ) . ':</strong> ' . fs_text_inline( 'This plugin has not been tested with your current version of WordPress.', 'not-tested-warning', $api->slug ) . '</p></div>';
1490
- } else if ( ! empty( $api->requires ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->requires ) ), $api->requires, '<' ) ) {
1491
  echo '<div class="notice notice-warning"><p>' . '<strong>' . fs_text_inline( 'Warning', 'warning', $api->slug ) . ':</strong> ' . fs_text_inline( 'This plugin has not been marked as compatible with your version of WordPress.', 'not-compatible-warning', $api->slug ) . '</p></div>';
1492
  }
1493
 
311
  $data->version = $latest->version;
312
  $data->last_updated = $latest->created;
313
  $data->requires = $latest->requires_platform_version;
314
+ $data->requires_php = $latest->requires_programming_language_version;
315
  $data->tested = $latest->tested_up_to_version;
316
  } else if ( ! empty( $current_addon_version ) ) {
317
  $data->version = $current_addon_version;
1345
  ?>
1346
  <li>
1347
  <strong><?php fs_esc_html_echo_inline( 'Requires WordPress Version', 'requires-wordpress-version', $api->slug ) ?>
1348
+ :</strong> <?php echo esc_html( sprintf(
1349
+ /* translators: %s: Version number. */
1350
+ fs_text_inline( '%s or higher', 'x-or-higher', $api->slug ), $api->requires )
1351
+ ) ?>
1352
  </li>
1353
  <?php
1354
  }
1360
  </li>
1361
  <?php
1362
  }
1363
+ if ( ! empty( $api->requires_php ) ) {
1364
+ ?>
1365
+ <li>
1366
+ <strong><?php fs_esc_html_echo_inline( 'Requires PHP Version', 'requires-php-version', $api->slug ); ?>:</strong>
1367
+ <?php
1368
+ echo esc_html( sprintf(
1369
+ /* translators: %s: Version number. */
1370
+ fs_text_inline( '%s or higher', 'x-or-higher', $api->slug ), $api->requires_php )
1371
+ );
1372
+ ?>
1373
+ </li>
1374
+ <?php
1375
+ }
1376
  if ( ! empty( $api->downloaded ) ) {
1377
  ?>
1378
  <li>
1502
  </div>
1503
  <div id="section-holder" class="wrap">
1504
  <?php
1505
+ $requires_php = isset( $api->requires_php ) ? $api->requires_php : null;
1506
+ $requires_wp = isset( $api->requires ) ? $api->requires : null;
1507
+
1508
+ $compatible_php = empty( $requires_php ) || version_compare( PHP_VERSION, $requires_php, '>=' );
1509
+
1510
+ // Strip off any -alpha, -RC, -beta, -src suffixes.
1511
+ list( $wp_version ) = explode( '-', $GLOBALS['wp_version'] );
1512
+
1513
+ $compatible_wp = empty( $requires_wp ) || version_compare( $wp_version, $requires_wp, '>=' );
1514
+ $tested_wp = ( empty( $api->tested ) || version_compare( $wp_version, $api->tested, '<=' ) );
1515
+
1516
+ if ( ! $compatible_php ) {
1517
+ echo '<div class="notice notice-error notice-alt"><p><strong>' . fs_text_inline( 'Error', 'error', $api->slug ) . ':</strong> ' . fs_text_inline( 'This plugin requires a newer version of PHP.', 'newer-php-required-error', $api->slug );
1518
+
1519
+ if ( current_user_can( 'update_php' ) ) {
1520
+ $wp_get_update_php_url = function_exists( 'wp_get_update_php_url' ) ?
1521
+ wp_get_update_php_url() :
1522
+ 'https://wordpress.org/support/update-php/';
1523
+
1524
+ printf(
1525
+ /* translators: %s: URL to Update PHP page. */
1526
+ ' ' . fs_text_inline( '<a href="%s" target="_blank">Click here to learn more about updating PHP</a>.', 'php-update-learn-more-link', $api->slug ),
1527
+ esc_url( $wp_get_update_php_url )
1528
+ );
1529
+
1530
+ if ( function_exists( 'wp_update_php_annotation' ) ) {
1531
+ wp_update_php_annotation( '</p><p><em>', '</em>' );
1532
+ }
1533
+ } else {
1534
+ echo '</p>';
1535
+ }
1536
+ echo '</div>';
1537
+ }
1538
+
1539
+ if ( ! $tested_wp ) {
1540
  echo '<div class="notice notice-warning"><p>' . '<strong>' . fs_text_inline( 'Warning', 'warning', $api->slug ) . ':</strong> ' . fs_text_inline( 'This plugin has not been tested with your current version of WordPress.', 'not-tested-warning', $api->slug ) . '</p></div>';
1541
+ } else if ( ! $compatible_wp ) {
1542
  echo '<div class="notice notice-warning"><p>' . '<strong>' . fs_text_inline( 'Warning', 'warning', $api->slug ) . ':</strong> ' . fs_text_inline( 'This plugin has not been marked as compatible with your version of WordPress.', 'not-compatible-warning', $api->slug ) . '</p></div>';
1543
  }
1544
 
vendor/freemius/wordpress-sdk/languages/freemius-cs_CZ.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-da_DK.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-de_DE.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-en.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-es_ES.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-fr_FR.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-he_IL.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-hu_HU.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-it_IT.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-ja.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-nl_NL.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-ru_RU.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-ta.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius-zh_CN.mo CHANGED
Binary file
vendor/freemius/wordpress-sdk/languages/freemius.pot CHANGED
@@ -28,7 +28,7 @@ msgstr ""
28
  msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
29
  msgstr ""
30
 
31
- #: includes/class-freemius.php:1978
32
  msgid "Error"
33
  msgstr ""
34
 
@@ -214,7 +214,7 @@ msgid "Purchase License"
214
  msgstr ""
215
 
216
  #: includes/class-freemius.php:7318, templates/connect.php:216
217
- msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
218
  msgstr ""
219
 
220
  #: includes/class-freemius.php:7322
@@ -222,7 +222,7 @@ msgid "start the trial"
222
  msgstr ""
223
 
224
  #: includes/class-freemius.php:7323, templates/connect.php:220
225
- msgid "complete the install"
226
  msgstr ""
227
 
228
  #: includes/class-freemius.php:7456
@@ -246,7 +246,7 @@ msgstr ""
246
  msgid "The upgrade of %s was successfully completed."
247
  msgstr ""
248
 
249
- #: includes/class-freemius.php:10709, includes/class-fs-plugin-updater.php:1089, includes/class-fs-plugin-updater.php:1284, includes/class-fs-plugin-updater.php:1291, templates/auto-installation.php:32
250
  msgid "Add-On"
251
  msgstr ""
252
 
@@ -708,115 +708,115 @@ msgstr ""
708
  msgid "Opt In"
709
  msgstr ""
710
 
711
- #: includes/class-freemius.php:24933
712
  msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
713
  msgstr ""
714
 
715
- #: includes/class-freemius.php:24943
716
  msgid "Activate %s features"
717
  msgstr ""
718
 
719
- #: includes/class-freemius.php:24956
720
  msgid "Please follow these steps to complete the upgrade"
721
  msgstr ""
722
 
723
- #: includes/class-freemius.php:24960
724
  msgid "Download the latest %s version"
725
  msgstr ""
726
 
727
- #: includes/class-freemius.php:24964
728
  msgid "Upload and activate the downloaded version"
729
  msgstr ""
730
 
731
- #: includes/class-freemius.php:24966
732
  msgid "How to upload and activate?"
733
  msgstr ""
734
 
735
- #: includes/class-freemius.php:25100
736
  msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
737
  msgstr ""
738
 
739
- #: includes/class-freemius.php:25269
740
  msgid "Auto installation only works for opted-in users."
741
  msgstr ""
742
 
743
- #: includes/class-freemius.php:25279, includes/class-freemius.php:25312, includes/class-fs-plugin-updater.php:1263, includes/class-fs-plugin-updater.php:1277
744
  msgid "Invalid module ID."
745
  msgstr ""
746
 
747
- #: includes/class-freemius.php:25288, includes/class-fs-plugin-updater.php:1299
748
  msgid "Premium version already active."
749
  msgstr ""
750
 
751
- #: includes/class-freemius.php:25295
752
  msgid "You do not have a valid license to access the premium version."
753
  msgstr ""
754
 
755
- #: includes/class-freemius.php:25302
756
  msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
757
  msgstr ""
758
 
759
- #: includes/class-freemius.php:25320, includes/class-fs-plugin-updater.php:1298
760
  msgid "Premium add-on version already installed."
761
  msgstr ""
762
 
763
- #: includes/class-freemius.php:25674
764
  msgid "View paid features"
765
  msgstr ""
766
 
767
- #: includes/class-freemius.php:25996
768
  msgid "Thank you so much for using %s and its add-ons!"
769
  msgstr ""
770
 
771
- #: includes/class-freemius.php:25997
772
  msgid "Thank you so much for using %s!"
773
  msgstr ""
774
 
775
- #: includes/class-freemius.php:26003
776
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
777
  msgstr ""
778
 
779
- #: includes/class-freemius.php:26007
780
  msgid "Thank you so much for using our products!"
781
  msgstr ""
782
 
783
- #: includes/class-freemius.php:26008
784
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
785
  msgstr ""
786
 
787
- #: includes/class-freemius.php:26027
788
  msgid "%s and its add-ons"
789
  msgstr ""
790
 
791
- #: includes/class-freemius.php:26036
792
  msgid "Products"
793
  msgstr ""
794
 
795
- #: includes/class-freemius.php:26043, templates/connect.php:324
796
  msgid "Yes"
797
  msgstr ""
798
 
799
- #: includes/class-freemius.php:26044, templates/connect.php:325
800
  msgid "send me security & feature updates, educational content and offers."
801
  msgstr ""
802
 
803
- #: includes/class-freemius.php:26045, templates/connect.php:330
804
  msgid "No"
805
  msgstr ""
806
 
807
- #: includes/class-freemius.php:26047, templates/connect.php:332
808
  msgid "do %sNOT%s send me security & feature updates, educational content and offers."
809
  msgstr ""
810
 
811
- #: includes/class-freemius.php:26057
812
  msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
813
  msgstr ""
814
 
815
- #: includes/class-freemius.php:26059, templates/connect.php:339
816
  msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
817
  msgstr ""
818
 
819
- #: includes/class-freemius.php:26341
820
  msgid "License key is empty."
821
  msgstr ""
822
 
@@ -844,314 +844,326 @@ msgstr ""
844
  msgid "Important Upgrade Notice:"
845
  msgstr ""
846
 
847
- #: includes/class-fs-plugin-updater.php:1328
848
  msgid "Installing plugin: %s"
849
  msgstr ""
850
 
851
- #: includes/class-fs-plugin-updater.php:1369
852
  msgid "Unable to connect to the filesystem. Please confirm your credentials."
853
  msgstr ""
854
 
855
- #: includes/class-fs-plugin-updater.php:1551
856
  msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
857
  msgstr ""
858
 
859
- #: includes/fs-plugin-info-dialog.php:541
860
  msgid "Purchase More"
861
  msgstr ""
862
 
863
- #: includes/fs-plugin-info-dialog.php:542, templates/account/partials/addon.php:390
864
  msgctxt "verb"
865
  msgid "Purchase"
866
  msgstr ""
867
 
868
- #: includes/fs-plugin-info-dialog.php:546
869
  msgid "Start my free %s"
870
  msgstr ""
871
 
872
- #: includes/fs-plugin-info-dialog.php:744
873
  msgid "Install Free Version Update Now"
874
  msgstr ""
875
 
876
- #: includes/fs-plugin-info-dialog.php:745, templates/account.php:656
877
  msgid "Install Update Now"
878
  msgstr ""
879
 
880
- #: includes/fs-plugin-info-dialog.php:754
881
  msgid "Install Free Version Now"
882
  msgstr ""
883
 
884
- #: includes/fs-plugin-info-dialog.php:755, templates/add-ons.php:323, templates/auto-installation.php:111, templates/account/partials/addon.php:370, templates/account/partials/addon.php:423
885
  msgid "Install Now"
886
  msgstr ""
887
 
888
- #: includes/fs-plugin-info-dialog.php:771
889
  msgctxt "as download latest version"
890
  msgid "Download Latest Free Version"
891
  msgstr ""
892
 
893
- #: includes/fs-plugin-info-dialog.php:772, templates/account.php:114, templates/add-ons.php:37, templates/account/partials/addon.php:30
894
  msgctxt "as download latest version"
895
  msgid "Download Latest"
896
  msgstr ""
897
 
898
- #: includes/fs-plugin-info-dialog.php:787, templates/add-ons.php:329, templates/account/partials/addon.php:361, templates/account/partials/addon.php:417
899
  msgid "Activate this add-on"
900
  msgstr ""
901
 
902
- #: includes/fs-plugin-info-dialog.php:789, templates/connect.php:446
903
  msgid "Activate Free Version"
904
  msgstr ""
905
 
906
- #: includes/fs-plugin-info-dialog.php:790, templates/account.php:138, templates/add-ons.php:330, templates/account/partials/addon.php:53
907
  msgid "Activate"
908
  msgstr ""
909
 
910
- #: includes/fs-plugin-info-dialog.php:1002
911
  msgctxt "Plugin installer section title"
912
  msgid "Description"
913
  msgstr ""
914
 
915
- #: includes/fs-plugin-info-dialog.php:1003
916
  msgctxt "Plugin installer section title"
917
  msgid "Installation"
918
  msgstr ""
919
 
920
- #: includes/fs-plugin-info-dialog.php:1004
921
  msgctxt "Plugin installer section title"
922
  msgid "FAQ"
923
  msgstr ""
924
 
925
- #: includes/fs-plugin-info-dialog.php:1005, templates/plugin-info/description.php:55
926
  msgid "Screenshots"
927
  msgstr ""
928
 
929
- #: includes/fs-plugin-info-dialog.php:1006
930
  msgctxt "Plugin installer section title"
931
  msgid "Changelog"
932
  msgstr ""
933
 
934
- #: includes/fs-plugin-info-dialog.php:1007
935
  msgctxt "Plugin installer section title"
936
  msgid "Reviews"
937
  msgstr ""
938
 
939
- #: includes/fs-plugin-info-dialog.php:1008
940
  msgctxt "Plugin installer section title"
941
  msgid "Other Notes"
942
  msgstr ""
943
 
944
- #: includes/fs-plugin-info-dialog.php:1023
945
  msgctxt "Plugin installer section title"
946
  msgid "Features & Pricing"
947
  msgstr ""
948
 
949
- #: includes/fs-plugin-info-dialog.php:1033
950
  msgid "Plugin Install"
951
  msgstr ""
952
 
953
- #: includes/fs-plugin-info-dialog.php:1105
954
  msgctxt "e.g. Professional Plan"
955
  msgid "%s Plan"
956
  msgstr ""
957
 
958
- #: includes/fs-plugin-info-dialog.php:1131
959
  msgctxt "e.g. the best product"
960
  msgid "Best"
961
  msgstr ""
962
 
963
- #: includes/fs-plugin-info-dialog.php:1137, includes/fs-plugin-info-dialog.php:1157
964
  msgctxt "as every month"
965
  msgid "Monthly"
966
  msgstr ""
967
 
968
- #: includes/fs-plugin-info-dialog.php:1140
969
  msgctxt "as once a year"
970
  msgid "Annual"
971
  msgstr ""
972
 
973
- #: includes/fs-plugin-info-dialog.php:1143
974
  msgid "Lifetime"
975
  msgstr ""
976
 
977
- #: includes/fs-plugin-info-dialog.php:1157, includes/fs-plugin-info-dialog.php:1159, includes/fs-plugin-info-dialog.php:1161
978
  msgctxt "e.g. billed monthly"
979
  msgid "Billed %s"
980
  msgstr ""
981
 
982
- #: includes/fs-plugin-info-dialog.php:1159
983
  msgctxt "as once a year"
984
  msgid "Annually"
985
  msgstr ""
986
 
987
- #: includes/fs-plugin-info-dialog.php:1161
988
  msgctxt "as once a year"
989
  msgid "Once"
990
  msgstr ""
991
 
992
- #: includes/fs-plugin-info-dialog.php:1167
993
  msgid "Single Site License"
994
  msgstr ""
995
 
996
- #: includes/fs-plugin-info-dialog.php:1169
997
  msgid "Unlimited Licenses"
998
  msgstr ""
999
 
1000
- #: includes/fs-plugin-info-dialog.php:1171
1001
  msgid "Up to %s Sites"
1002
  msgstr ""
1003
 
1004
- #: includes/fs-plugin-info-dialog.php:1181, templates/plugin-info/features.php:82
1005
  msgctxt "as monthly period"
1006
  msgid "mo"
1007
  msgstr ""
1008
 
1009
- #: includes/fs-plugin-info-dialog.php:1188, templates/plugin-info/features.php:80
1010
  msgctxt "as annual period"
1011
  msgid "year"
1012
  msgstr ""
1013
 
1014
- #: includes/fs-plugin-info-dialog.php:1242
1015
  msgctxt "noun"
1016
  msgid "Price"
1017
  msgstr ""
1018
 
1019
- #: includes/fs-plugin-info-dialog.php:1290
1020
  msgid "Save %s"
1021
  msgstr ""
1022
 
1023
- #: includes/fs-plugin-info-dialog.php:1300
1024
  msgid "No commitment for %s - cancel anytime"
1025
  msgstr ""
1026
 
1027
- #: includes/fs-plugin-info-dialog.php:1303
1028
  msgid "After your free %s, pay as little as %s"
1029
  msgstr ""
1030
 
1031
- #: includes/fs-plugin-info-dialog.php:1314
1032
  msgid "Details"
1033
  msgstr ""
1034
 
1035
- #: includes/fs-plugin-info-dialog.php:1318, templates/account.php:125, templates/debug.php:232, templates/debug.php:269, templates/debug.php:514, templates/account/partials/addon.php:41
1036
  msgctxt "product version"
1037
  msgid "Version"
1038
  msgstr ""
1039
 
1040
- #: includes/fs-plugin-info-dialog.php:1325
1041
  msgctxt "as the plugin author"
1042
  msgid "Author"
1043
  msgstr ""
1044
 
1045
- #: includes/fs-plugin-info-dialog.php:1332
1046
  msgid "Last Updated"
1047
  msgstr ""
1048
 
1049
- #: includes/fs-plugin-info-dialog.php:1337, templates/account.php:544
1050
  msgctxt "x-ago"
1051
  msgid "%s ago"
1052
  msgstr ""
1053
 
1054
- #: includes/fs-plugin-info-dialog.php:1346
1055
  msgid "Requires WordPress Version"
1056
  msgstr ""
1057
 
1058
- #: includes/fs-plugin-info-dialog.php:1347
1059
  msgid "%s or higher"
1060
  msgstr ""
1061
 
1062
- #: includes/fs-plugin-info-dialog.php:1354
1063
  msgid "Compatible up to"
1064
  msgstr ""
1065
 
1066
- #: includes/fs-plugin-info-dialog.php:1362
 
 
 
 
1067
  msgid "Downloaded"
1068
  msgstr ""
1069
 
1070
- #: includes/fs-plugin-info-dialog.php:1366
1071
  msgid "%s time"
1072
  msgstr ""
1073
 
1074
- #: includes/fs-plugin-info-dialog.php:1368
1075
  msgid "%s times"
1076
  msgstr ""
1077
 
1078
- #: includes/fs-plugin-info-dialog.php:1379
1079
  msgid "WordPress.org Plugin Page"
1080
  msgstr ""
1081
 
1082
- #: includes/fs-plugin-info-dialog.php:1388
1083
  msgid "Plugin Homepage"
1084
  msgstr ""
1085
 
1086
- #: includes/fs-plugin-info-dialog.php:1397, includes/fs-plugin-info-dialog.php:1481
1087
  msgid "Donate to this plugin"
1088
  msgstr ""
1089
 
1090
- #: includes/fs-plugin-info-dialog.php:1404
1091
  msgid "Average Rating"
1092
  msgstr ""
1093
 
1094
- #: includes/fs-plugin-info-dialog.php:1411
1095
  msgid "based on %s"
1096
  msgstr ""
1097
 
1098
- #: includes/fs-plugin-info-dialog.php:1415
1099
  msgid "%s rating"
1100
  msgstr ""
1101
 
1102
- #: includes/fs-plugin-info-dialog.php:1417
1103
  msgid "%s ratings"
1104
  msgstr ""
1105
 
1106
- #: includes/fs-plugin-info-dialog.php:1432
1107
  msgid "%s star"
1108
  msgstr ""
1109
 
1110
- #: includes/fs-plugin-info-dialog.php:1434
1111
  msgid "%s stars"
1112
  msgstr ""
1113
 
1114
- #: includes/fs-plugin-info-dialog.php:1446
1115
  msgid "Click to see reviews that provided a rating of %s"
1116
  msgstr ""
1117
 
1118
- #: includes/fs-plugin-info-dialog.php:1459
1119
  msgid "Contributors"
1120
  msgstr ""
1121
 
1122
- #: includes/fs-plugin-info-dialog.php:1489, includes/fs-plugin-info-dialog.php:1491
 
 
 
 
 
 
 
 
1123
  msgid "Warning"
1124
  msgstr ""
1125
 
1126
- #: includes/fs-plugin-info-dialog.php:1489
1127
  msgid "This plugin has not been tested with your current version of WordPress."
1128
  msgstr ""
1129
 
1130
- #: includes/fs-plugin-info-dialog.php:1491
1131
  msgid "This plugin has not been marked as compatible with your version of WordPress."
1132
  msgstr ""
1133
 
1134
- #: includes/fs-plugin-info-dialog.php:1510
1135
  msgid "Paid add-on must be deployed to Freemius."
1136
  msgstr ""
1137
 
1138
- #: includes/fs-plugin-info-dialog.php:1511
1139
  msgid "Add-on must be deployed to WordPress.org or Freemius."
1140
  msgstr ""
1141
 
1142
- #: includes/fs-plugin-info-dialog.php:1532
1143
  msgid "Newer Version (%s) Installed"
1144
  msgstr ""
1145
 
1146
- #: includes/fs-plugin-info-dialog.php:1533
1147
  msgid "Newer Free Version (%s) Installed"
1148
  msgstr ""
1149
 
1150
- #: includes/fs-plugin-info-dialog.php:1540
1151
  msgid "Latest Version Installed"
1152
  msgstr ""
1153
 
1154
- #: includes/fs-plugin-info-dialog.php:1541
1155
  msgid "Latest Free Version Installed"
1156
  msgstr ""
1157
 
28
  msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
29
  msgstr ""
30
 
31
+ #: includes/class-freemius.php:1978, includes/fs-plugin-info-dialog.php:1517
32
  msgid "Error"
33
  msgstr ""
34
 
214
  msgstr ""
215
 
216
  #: includes/class-freemius.php:7318, templates/connect.php:216
217
+ msgid "You should receive a confirmation email for %s to your mailbox at %s. Please make sure you click the button in that email to %s."
218
  msgstr ""
219
 
220
  #: includes/class-freemius.php:7322
222
  msgstr ""
223
 
224
  #: includes/class-freemius.php:7323, templates/connect.php:220
225
+ msgid "complete the opt-in"
226
  msgstr ""
227
 
228
  #: includes/class-freemius.php:7456
246
  msgid "The upgrade of %s was successfully completed."
247
  msgstr ""
248
 
249
+ #: includes/class-freemius.php:10709, includes/class-fs-plugin-updater.php:1090, includes/class-fs-plugin-updater.php:1305, includes/class-fs-plugin-updater.php:1312, templates/auto-installation.php:32
250
  msgid "Add-On"
251
  msgstr ""
252
 
708
  msgid "Opt In"
709
  msgstr ""
710
 
711
+ #: includes/class-freemius.php:24931
712
  msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
713
  msgstr ""
714
 
715
+ #: includes/class-freemius.php:24941
716
  msgid "Activate %s features"
717
  msgstr ""
718
 
719
+ #: includes/class-freemius.php:24954
720
  msgid "Please follow these steps to complete the upgrade"
721
  msgstr ""
722
 
723
+ #: includes/class-freemius.php:24958
724
  msgid "Download the latest %s version"
725
  msgstr ""
726
 
727
+ #: includes/class-freemius.php:24962
728
  msgid "Upload and activate the downloaded version"
729
  msgstr ""
730
 
731
+ #: includes/class-freemius.php:24964
732
  msgid "How to upload and activate?"
733
  msgstr ""
734
 
735
+ #: includes/class-freemius.php:25098
736
  msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
737
  msgstr ""
738
 
739
+ #: includes/class-freemius.php:25267
740
  msgid "Auto installation only works for opted-in users."
741
  msgstr ""
742
 
743
+ #: includes/class-freemius.php:25277, includes/class-freemius.php:25310, includes/class-fs-plugin-updater.php:1284, includes/class-fs-plugin-updater.php:1298
744
  msgid "Invalid module ID."
745
  msgstr ""
746
 
747
+ #: includes/class-freemius.php:25286, includes/class-fs-plugin-updater.php:1320
748
  msgid "Premium version already active."
749
  msgstr ""
750
 
751
+ #: includes/class-freemius.php:25293
752
  msgid "You do not have a valid license to access the premium version."
753
  msgstr ""
754
 
755
+ #: includes/class-freemius.php:25300
756
  msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
757
  msgstr ""
758
 
759
+ #: includes/class-freemius.php:25318, includes/class-fs-plugin-updater.php:1319
760
  msgid "Premium add-on version already installed."
761
  msgstr ""
762
 
763
+ #: includes/class-freemius.php:25672
764
  msgid "View paid features"
765
  msgstr ""
766
 
767
+ #: includes/class-freemius.php:25994
768
  msgid "Thank you so much for using %s and its add-ons!"
769
  msgstr ""
770
 
771
+ #: includes/class-freemius.php:25995
772
  msgid "Thank you so much for using %s!"
773
  msgstr ""
774
 
775
+ #: includes/class-freemius.php:26001
776
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
777
  msgstr ""
778
 
779
+ #: includes/class-freemius.php:26005
780
  msgid "Thank you so much for using our products!"
781
  msgstr ""
782
 
783
+ #: includes/class-freemius.php:26006
784
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
785
  msgstr ""
786
 
787
+ #: includes/class-freemius.php:26025
788
  msgid "%s and its add-ons"
789
  msgstr ""
790
 
791
+ #: includes/class-freemius.php:26034
792
  msgid "Products"
793
  msgstr ""
794
 
795
+ #: includes/class-freemius.php:26041, templates/connect.php:324
796
  msgid "Yes"
797
  msgstr ""
798
 
799
+ #: includes/class-freemius.php:26042, templates/connect.php:325
800
  msgid "send me security & feature updates, educational content and offers."
801
  msgstr ""
802
 
803
+ #: includes/class-freemius.php:26043, templates/connect.php:330
804
  msgid "No"
805
  msgstr ""
806
 
807
+ #: includes/class-freemius.php:26045, templates/connect.php:332
808
  msgid "do %sNOT%s send me security & feature updates, educational content and offers."
809
  msgstr ""
810
 
811
+ #: includes/class-freemius.php:26055
812
  msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
813
  msgstr ""
814
 
815
+ #: includes/class-freemius.php:26057, templates/connect.php:339
816
  msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
817
  msgstr ""
818
 
819
+ #: includes/class-freemius.php:26339
820
  msgid "License key is empty."
821
  msgstr ""
822
 
844
  msgid "Important Upgrade Notice:"
845
  msgstr ""
846
 
847
+ #: includes/class-fs-plugin-updater.php:1349
848
  msgid "Installing plugin: %s"
849
  msgstr ""
850
 
851
+ #: includes/class-fs-plugin-updater.php:1390
852
  msgid "Unable to connect to the filesystem. Please confirm your credentials."
853
  msgstr ""
854
 
855
+ #: includes/class-fs-plugin-updater.php:1572
856
  msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
857
  msgstr ""
858
 
859
+ #: includes/fs-plugin-info-dialog.php:542
860
  msgid "Purchase More"
861
  msgstr ""
862
 
863
+ #: includes/fs-plugin-info-dialog.php:543, templates/account/partials/addon.php:390
864
  msgctxt "verb"
865
  msgid "Purchase"
866
  msgstr ""
867
 
868
+ #: includes/fs-plugin-info-dialog.php:547
869
  msgid "Start my free %s"
870
  msgstr ""
871
 
872
+ #: includes/fs-plugin-info-dialog.php:745
873
  msgid "Install Free Version Update Now"
874
  msgstr ""
875
 
876
+ #: includes/fs-plugin-info-dialog.php:746, templates/account.php:656
877
  msgid "Install Update Now"
878
  msgstr ""
879
 
880
+ #: includes/fs-plugin-info-dialog.php:755
881
  msgid "Install Free Version Now"
882
  msgstr ""
883
 
884
+ #: includes/fs-plugin-info-dialog.php:756, templates/add-ons.php:323, templates/auto-installation.php:111, templates/account/partials/addon.php:370, templates/account/partials/addon.php:423
885
  msgid "Install Now"
886
  msgstr ""
887
 
888
+ #: includes/fs-plugin-info-dialog.php:772
889
  msgctxt "as download latest version"
890
  msgid "Download Latest Free Version"
891
  msgstr ""
892
 
893
+ #: includes/fs-plugin-info-dialog.php:773, templates/account.php:114, templates/add-ons.php:37, templates/account/partials/addon.php:30
894
  msgctxt "as download latest version"
895
  msgid "Download Latest"
896
  msgstr ""
897
 
898
+ #: includes/fs-plugin-info-dialog.php:788, templates/add-ons.php:329, templates/account/partials/addon.php:361, templates/account/partials/addon.php:417
899
  msgid "Activate this add-on"
900
  msgstr ""
901
 
902
+ #: includes/fs-plugin-info-dialog.php:790, templates/connect.php:446
903
  msgid "Activate Free Version"
904
  msgstr ""
905
 
906
+ #: includes/fs-plugin-info-dialog.php:791, templates/account.php:138, templates/add-ons.php:330, templates/account/partials/addon.php:53
907
  msgid "Activate"
908
  msgstr ""
909
 
910
+ #: includes/fs-plugin-info-dialog.php:1003
911
  msgctxt "Plugin installer section title"
912
  msgid "Description"
913
  msgstr ""
914
 
915
+ #: includes/fs-plugin-info-dialog.php:1004
916
  msgctxt "Plugin installer section title"
917
  msgid "Installation"
918
  msgstr ""
919
 
920
+ #: includes/fs-plugin-info-dialog.php:1005
921
  msgctxt "Plugin installer section title"
922
  msgid "FAQ"
923
  msgstr ""
924
 
925
+ #: includes/fs-plugin-info-dialog.php:1006, templates/plugin-info/description.php:55
926
  msgid "Screenshots"
927
  msgstr ""
928
 
929
+ #: includes/fs-plugin-info-dialog.php:1007
930
  msgctxt "Plugin installer section title"
931
  msgid "Changelog"
932
  msgstr ""
933
 
934
+ #: includes/fs-plugin-info-dialog.php:1008
935
  msgctxt "Plugin installer section title"
936
  msgid "Reviews"
937
  msgstr ""
938
 
939
+ #: includes/fs-plugin-info-dialog.php:1009
940
  msgctxt "Plugin installer section title"
941
  msgid "Other Notes"
942
  msgstr ""
943
 
944
+ #: includes/fs-plugin-info-dialog.php:1024
945
  msgctxt "Plugin installer section title"
946
  msgid "Features & Pricing"
947
  msgstr ""
948
 
949
+ #: includes/fs-plugin-info-dialog.php:1034
950
  msgid "Plugin Install"
951
  msgstr ""
952
 
953
+ #: includes/fs-plugin-info-dialog.php:1106
954
  msgctxt "e.g. Professional Plan"
955
  msgid "%s Plan"
956
  msgstr ""
957
 
958
+ #: includes/fs-plugin-info-dialog.php:1132
959
  msgctxt "e.g. the best product"
960
  msgid "Best"
961
  msgstr ""
962
 
963
+ #: includes/fs-plugin-info-dialog.php:1138, includes/fs-plugin-info-dialog.php:1158
964
  msgctxt "as every month"
965
  msgid "Monthly"
966
  msgstr ""
967
 
968
+ #: includes/fs-plugin-info-dialog.php:1141
969
  msgctxt "as once a year"
970
  msgid "Annual"
971
  msgstr ""
972
 
973
+ #: includes/fs-plugin-info-dialog.php:1144
974
  msgid "Lifetime"
975
  msgstr ""
976
 
977
+ #: includes/fs-plugin-info-dialog.php:1158, includes/fs-plugin-info-dialog.php:1160, includes/fs-plugin-info-dialog.php:1162
978
  msgctxt "e.g. billed monthly"
979
  msgid "Billed %s"
980
  msgstr ""
981
 
982
+ #: includes/fs-plugin-info-dialog.php:1160
983
  msgctxt "as once a year"
984
  msgid "Annually"
985
  msgstr ""
986
 
987
+ #: includes/fs-plugin-info-dialog.php:1162
988
  msgctxt "as once a year"
989
  msgid "Once"
990
  msgstr ""
991
 
992
+ #: includes/fs-plugin-info-dialog.php:1168
993
  msgid "Single Site License"
994
  msgstr ""
995
 
996
+ #: includes/fs-plugin-info-dialog.php:1170
997
  msgid "Unlimited Licenses"
998
  msgstr ""
999
 
1000
+ #: includes/fs-plugin-info-dialog.php:1172
1001
  msgid "Up to %s Sites"
1002
  msgstr ""
1003
 
1004
+ #: includes/fs-plugin-info-dialog.php:1182, templates/plugin-info/features.php:82
1005
  msgctxt "as monthly period"
1006
  msgid "mo"
1007
  msgstr ""
1008
 
1009
+ #: includes/fs-plugin-info-dialog.php:1189, templates/plugin-info/features.php:80
1010
  msgctxt "as annual period"
1011
  msgid "year"
1012
  msgstr ""
1013
 
1014
+ #: includes/fs-plugin-info-dialog.php:1243
1015
  msgctxt "noun"
1016
  msgid "Price"
1017
  msgstr ""
1018
 
1019
+ #: includes/fs-plugin-info-dialog.php:1291
1020
  msgid "Save %s"
1021
  msgstr ""
1022
 
1023
+ #: includes/fs-plugin-info-dialog.php:1301
1024
  msgid "No commitment for %s - cancel anytime"
1025
  msgstr ""
1026
 
1027
+ #: includes/fs-plugin-info-dialog.php:1304
1028
  msgid "After your free %s, pay as little as %s"
1029
  msgstr ""
1030
 
1031
+ #: includes/fs-plugin-info-dialog.php:1315
1032
  msgid "Details"
1033
  msgstr ""
1034
 
1035
+ #: includes/fs-plugin-info-dialog.php:1319, templates/account.php:125, templates/debug.php:232, templates/debug.php:269, templates/debug.php:514, templates/account/partials/addon.php:41
1036
  msgctxt "product version"
1037
  msgid "Version"
1038
  msgstr ""
1039
 
1040
+ #: includes/fs-plugin-info-dialog.php:1326
1041
  msgctxt "as the plugin author"
1042
  msgid "Author"
1043
  msgstr ""
1044
 
1045
+ #: includes/fs-plugin-info-dialog.php:1333
1046
  msgid "Last Updated"
1047
  msgstr ""
1048
 
1049
+ #: includes/fs-plugin-info-dialog.php:1338, templates/account.php:544
1050
  msgctxt "x-ago"
1051
  msgid "%s ago"
1052
  msgstr ""
1053
 
1054
+ #: includes/fs-plugin-info-dialog.php:1347
1055
  msgid "Requires WordPress Version"
1056
  msgstr ""
1057
 
1058
+ #: includes/fs-plugin-info-dialog.php:1350, includes/fs-plugin-info-dialog.php:1370
1059
  msgid "%s or higher"
1060
  msgstr ""
1061
 
1062
+ #: includes/fs-plugin-info-dialog.php:1358
1063
  msgid "Compatible up to"
1064
  msgstr ""
1065
 
1066
+ #: includes/fs-plugin-info-dialog.php:1366
1067
+ msgid "Requires PHP Version"
1068
+ msgstr ""
1069
+
1070
+ #: includes/fs-plugin-info-dialog.php:1379
1071
  msgid "Downloaded"
1072
  msgstr ""
1073
 
1074
+ #: includes/fs-plugin-info-dialog.php:1383
1075
  msgid "%s time"
1076
  msgstr ""
1077
 
1078
+ #: includes/fs-plugin-info-dialog.php:1385
1079
  msgid "%s times"
1080
  msgstr ""
1081
 
1082
+ #: includes/fs-plugin-info-dialog.php:1396
1083
  msgid "WordPress.org Plugin Page"
1084
  msgstr ""
1085
 
1086
+ #: includes/fs-plugin-info-dialog.php:1405
1087
  msgid "Plugin Homepage"
1088
  msgstr ""
1089
 
1090
+ #: includes/fs-plugin-info-dialog.php:1414, includes/fs-plugin-info-dialog.php:1498
1091
  msgid "Donate to this plugin"
1092
  msgstr ""
1093
 
1094
+ #: includes/fs-plugin-info-dialog.php:1421
1095
  msgid "Average Rating"
1096
  msgstr ""
1097
 
1098
+ #: includes/fs-plugin-info-dialog.php:1428
1099
  msgid "based on %s"
1100
  msgstr ""
1101
 
1102
+ #: includes/fs-plugin-info-dialog.php:1432
1103
  msgid "%s rating"
1104
  msgstr ""
1105
 
1106
+ #: includes/fs-plugin-info-dialog.php:1434
1107
  msgid "%s ratings"
1108
  msgstr ""
1109
 
1110
+ #: includes/fs-plugin-info-dialog.php:1449
1111
  msgid "%s star"
1112
  msgstr ""
1113
 
1114
+ #: includes/fs-plugin-info-dialog.php:1451
1115
  msgid "%s stars"
1116
  msgstr ""
1117
 
1118
+ #: includes/fs-plugin-info-dialog.php:1463
1119
  msgid "Click to see reviews that provided a rating of %s"
1120
  msgstr ""
1121
 
1122
+ #: includes/fs-plugin-info-dialog.php:1476
1123
  msgid "Contributors"
1124
  msgstr ""
1125
 
1126
+ #: includes/fs-plugin-info-dialog.php:1517
1127
+ msgid "This plugin requires a newer version of PHP."
1128
+ msgstr ""
1129
+
1130
+ #: includes/fs-plugin-info-dialog.php:1526
1131
+ msgid "<a href=\"%s\" target=\"_blank\">Click here to learn more about updating PHP</a>."
1132
+ msgstr ""
1133
+
1134
+ #: includes/fs-plugin-info-dialog.php:1540, includes/fs-plugin-info-dialog.php:1542
1135
  msgid "Warning"
1136
  msgstr ""
1137
 
1138
+ #: includes/fs-plugin-info-dialog.php:1540
1139
  msgid "This plugin has not been tested with your current version of WordPress."
1140
  msgstr ""
1141
 
1142
+ #: includes/fs-plugin-info-dialog.php:1542
1143
  msgid "This plugin has not been marked as compatible with your version of WordPress."
1144
  msgstr ""
1145
 
1146
+ #: includes/fs-plugin-info-dialog.php:1561
1147
  msgid "Paid add-on must be deployed to Freemius."
1148
  msgstr ""
1149
 
1150
+ #: includes/fs-plugin-info-dialog.php:1562
1151
  msgid "Add-on must be deployed to WordPress.org or Freemius."
1152
  msgstr ""
1153
 
1154
+ #: includes/fs-plugin-info-dialog.php:1583
1155
  msgid "Newer Version (%s) Installed"
1156
  msgstr ""
1157
 
1158
+ #: includes/fs-plugin-info-dialog.php:1584
1159
  msgid "Newer Free Version (%s) Installed"
1160
  msgstr ""
1161
 
1162
+ #: includes/fs-plugin-info-dialog.php:1591
1163
  msgid "Latest Version Installed"
1164
  msgstr ""
1165
 
1166
+ #: includes/fs-plugin-info-dialog.php:1592
1167
  msgid "Latest Free Version Installed"
1168
  msgstr ""
1169
 
vendor/freemius/wordpress-sdk/start.php CHANGED
@@ -15,7 +15,7 @@
15
  *
16
  * @var string
17
  */
18
- $this_sdk_version = '2.5.2';
19
 
20
  #region SDK Selection Logic --------------------------------------------------------------------
21
 
15
  *
16
  * @var string
17
  */
18
+ $this_sdk_version = '2.5.3';
19
 
20
  #region SDK Selection Logic --------------------------------------------------------------------
21
 
vendor/freemius/wordpress-sdk/templates/connect.php CHANGED
@@ -213,11 +213,11 @@
213
  $message = $fs->apply_filters( 'pending_activation_message', sprintf(
214
  /* translators: %s: name (e.g. Thanks John!) */
215
  fs_text_inline( 'Thanks %s!', 'thanks-x', $slug ) . '<br>' .
216
- fs_text_inline( 'You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s.', 'pending-activation-message', $slug ),
217
  $first_name,
218
  '<b>' . $fs->get_plugin_name() . '</b>',
219
  '<b>' . $current_user->user_email . '</b>',
220
- fs_text_inline( 'complete the install', 'complete-the-install', $slug )
221
  ) );
222
  } else if ( $require_license_key ) {
223
  $button_label = fs_text_inline( 'Activate License', 'activate-license', $slug );
213
  $message = $fs->apply_filters( 'pending_activation_message', sprintf(
214
  /* translators: %s: name (e.g. Thanks John!) */
215
  fs_text_inline( 'Thanks %s!', 'thanks-x', $slug ) . '<br>' .
216
+ fs_text_inline( 'You should receive a confirmation email for %s to your mailbox at %s. Please make sure you click the button in that email to %s.', 'pending-activation-message', $slug ),
217
  $first_name,
218
  '<b>' . $fs->get_plugin_name() . '</b>',
219
  '<b>' . $current_user->user_email . '</b>',
220
+ fs_text_inline( 'complete the opt-in', 'complete-the-opt-in', $slug )
221
  ) );
222
  } else if ( $require_license_key ) {
223
  $button_label = fs_text_inline( 'Activate License', 'activate-license', $slug );
vendor/freemius/wordpress-sdk/templates/plugin-info/description.php CHANGED
@@ -52,7 +52,7 @@
52
  <?php if ( ! empty( $plugin->info->screenshots ) ) : ?>
53
  <?php $screenshots = $plugin->info->screenshots ?>
54
  <div class="fs-screenshots clearfix">
55
- <h2><?php fs_esc_html_echo_inline( 'Screenshots', 'screenshots', $plugin->slug ) ?></h2>
56
  <ul>
57
  <?php $i = 0;
58
  foreach ( $screenshots as $s => $url ) : ?>
52
  <?php if ( ! empty( $plugin->info->screenshots ) ) : ?>
53
  <?php $screenshots = $plugin->info->screenshots ?>
54
  <div class="fs-screenshots clearfix">
55
+ <h3><?php fs_esc_html_echo_inline( 'Screenshots', 'screenshots', $plugin->slug ) ?></h3>
56
  <ul>
57
  <?php $i = 0;
58
  foreach ( $screenshots as $s => $url ) : ?>
vendor/giggsey/libphonenumber-for-php/METADATA-VERSION.txt CHANGED
@@ -2,4 +2,4 @@
2
  # It can be a commit, branch or tag of the https://github.com/google/libphonenumber project
3
  #
4
  # For more information, look at the phing tasks in build.xml
5
- v8.13.0
2
  # It can be a commit, branch or tag of the https://github.com/google/libphonenumber project
3
  #
4
  # For more information, look at the phing tasks in build.xml
5
+ v8.13.1
vendor/giggsey/libphonenumber-for-php/src/ShortNumberInfo.php CHANGED
@@ -92,6 +92,10 @@ class ShortNumberInfo
92
  */
93
  protected function regionDialingFromMatchesNumber(PhoneNumber $number, $regionDialingFrom)
94
  {
 
 
 
 
95
  $regionCodes = $this->getRegionCodesForCountryCode($number->getCountryCode());
96
 
97
  return in_array(strtoupper($regionDialingFrom), $regionCodes);
92
  */
93
  protected function regionDialingFromMatchesNumber(PhoneNumber $number, $regionDialingFrom)
94
  {
95
+ if ($regionDialingFrom === null || $regionDialingFrom === '') {
96
+ return false;
97
+ }
98
+
99
  $regionCodes = $this->getRegionCodesForCountryCode($number->getCountryCode());
100
 
101
  return in_array(strtoupper($regionDialingFrom), $regionCodes);
vendor/giggsey/libphonenumber-for-php/src/carrier/data/en/350.php CHANGED
@@ -11,6 +11,11 @@
11
  */
12
 
13
  return array (
14
- 3505 => 'GibTel',
 
 
 
 
 
15
  3506 => 'GibTel',
16
  );
11
  */
12
 
13
  return array (
14
+ 35051 => 'Gibfibre',
15
+ 35052 => 'Gibfibre',
16
+ 35054 => 'GibTel',
17
+ 35056 => 'GibTel',
18
+ 35057 => 'GibTel',
19
+ 35058 => 'GibTel',
20
  3506 => 'GibTel',
21
  );
vendor/giggsey/libphonenumber-for-php/src/carrier/data/en/420.php CHANGED
@@ -195,6 +195,7 @@ return array (
195
  42079954 => 'T-Mobile',
196
  42079955 => 'GoMobil',
197
  42079956 => 'GoMobil',
 
198
  42079979 => 'miniTEL',
199
  42079999 => 'T-Mobile',
200
  );
195
  42079954 => 'T-Mobile',
196
  42079955 => 'GoMobil',
197
  42079956 => 'GoMobil',
198
+ 42079957 => 'T-Mobile',
199
  42079979 => 'miniTEL',
200
  42079999 => 'T-Mobile',
201
  );
vendor/giggsey/libphonenumber-for-php/src/carrier/data/en/51.php CHANGED
@@ -13,6 +13,8 @@
13
  return array (
14
  51900 => 'Claro',
15
  51901 => 'Claro',
 
 
16
  51910 => 'Claro',
17
  51912 => 'Entel',
18
  51913 => 'Claro',
13
  return array (
14
  51900 => 'Claro',
15
  51901 => 'Claro',
16
+ 51904 => 'Entel',
17
+ 51905 => 'Entel',
18
  51910 => 'Claro',
19
  51912 => 'Entel',
20
  51913 => 'Claro',
vendor/giggsey/libphonenumber-for-php/src/carrier/data/en/996.php CHANGED
@@ -22,6 +22,7 @@ return array (
22
  99655 => 'ALFA Telecom',
23
  99656 => 'Winline',
24
  99657 => 'Sotel',
 
25
  99670 => 'Nur Telecom',
26
  99675 => 'ALFA Telecom',
27
  99677 => 'Sky mobile',
22
  99655 => 'ALFA Telecom',
23
  99656 => 'Winline',
24
  99657 => 'Sotel',
25
+ 996600 => 'Sky mobile',
26
  99670 => 'Nur Telecom',
27
  99675 => 'ALFA Telecom',
28
  99677 => 'Sky mobile',
vendor/giggsey/libphonenumber-for-php/src/data/PhoneNumberAlternateFormats_7.php CHANGED
@@ -24,7 +24,7 @@ return array (
24
  'format' => '$1 $2 $3',
25
  'leadingDigitsPatterns' =>
26
  array (
27
- 0 => '[3489]|7(?:1(?:[0-6]2|7|8[27])|2(?:1[23]|[2-9]2))',
28
  ),
29
  'nationalPrefixFormattingRule' => '',
30
  'domesticCarrierCodeFormattingRule' => '',
@@ -36,7 +36,7 @@ return array (
36
  'format' => '$1 $2',
37
  'leadingDigitsPatterns' =>
38
  array (
39
- 0 => '[3489]|7(?:1(?:[06][3-6]|[13-5][3-5]|2[35]|8[34])|2(?:[1-38][3-5]|[49][35]|5[3-6]|6|7[457]))',
40
  ),
41
  'nationalPrefixFormattingRule' => '',
42
  'domesticCarrierCodeFormattingRule' => '',
@@ -60,7 +60,7 @@ return array (
60
  'format' => '$1 $2 $3 $4',
61
  'leadingDigitsPatterns' =>
62
  array (
63
- 0 => '[3489]|7(?:[04-8]|1(?:04|[236]3|4[3-5]|5[34])|2(?:13|34|7[39]))',
64
  ),
65
  'nationalPrefixFormattingRule' => '',
66
  'domesticCarrierCodeFormattingRule' => '',
@@ -72,7 +72,7 @@ return array (
72
  'format' => '$1 $2 $3 $4 $5',
73
  'leadingDigitsPatterns' =>
74
  array (
75
- 0 => '[3489]|7(?:[04-8]|1(?:04|[236]3|4[3-5]|5[34])|2(?:13|34|7[39]))',
76
  ),
77
  'nationalPrefixFormattingRule' => '',
78
  'domesticCarrierCodeFormattingRule' => '',
24
  'format' => '$1 $2 $3',
25
  'leadingDigitsPatterns' =>
26
  array (
27
+ 0 => '[3489]|7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))',
28
  ),
29
  'nationalPrefixFormattingRule' => '',
30
  'domesticCarrierCodeFormattingRule' => '',
36
  'format' => '$1 $2',
37
  'leadingDigitsPatterns' =>
38
  array (
39
+ 0 => '[3489]|72(?:6|7[457])|7(?:12|2[49])[35]|7(?:1[13-58]|2[1-38])[3-5]|7(?:1[06]|25)[3-6]',
40
  ),
41
  'nationalPrefixFormattingRule' => '',
42
  'domesticCarrierCodeFormattingRule' => '',
60
  'format' => '$1 $2 $3 $4',
61
  'leadingDigitsPatterns' =>
62
  array (
63
+ 0 => '[3489]|7(?:[04-9]|1(?:04|[236]3|4[3-5]|5[34])|2(?:13|34|7[39]))',
64
  ),
65
  'nationalPrefixFormattingRule' => '',
66
  'domesticCarrierCodeFormattingRule' => '',
72
  'format' => '$1 $2 $3 $4 $5',
73
  'leadingDigitsPatterns' =>
74
  array (
75
+ 0 => '[3489]|7(?:[04-9]|1(?:04|[236]3|4[3-5]|5[34])|2(?:13|34|7[39]))',
76
  ),
77
  'nationalPrefixFormattingRule' => '',
78
  'domesticCarrierCodeFormattingRule' => '',
vendor/giggsey/libphonenumber-for-php/src/data/PhoneNumberMetadata_GI.php CHANGED
@@ -25,7 +25,7 @@ return array (
25
  ),
26
  'fixedLine' =>
27
  array (
28
- 'NationalNumberPattern' => '21(?:6[24-7]\\d|90[0-2])\\d{3}|2(?:00|2[25])\\d{5}',
29
  'ExampleNumber' => '20012345',
30
  'PossibleLength' =>
31
  array (
@@ -36,7 +36,7 @@ return array (
36
  ),
37
  'mobile' =>
38
  array (
39
- 'NationalNumberPattern' => '(?:5[146-8]\\d|606)\\d{5}',
40
  'ExampleNumber' => '57123456',
41
  'PossibleLength' =>
42
  array (
25
  ),
26
  'fixedLine' =>
27
  array (
28
+ 'NationalNumberPattern' => '21(?:6[24-9]\\d|90[0-2])\\d{3}|2(?:00|2[2-5])\\d{5}',
29
  'ExampleNumber' => '20012345',
30
  'PossibleLength' =>
31
  array (
36
  ),
37
  'mobile' =>
38
  array (
39
+ 'NationalNumberPattern' => '525(?:0\\d|1[0-4])\\d{3}|(?:5[146-8]\\d|606)\\d{5}',
40
  'ExampleNumber' => '57123456',
41
  'PossibleLength' =>
42
  array (
vendor/giggsey/libphonenumber-for-php/src/data/PhoneNumberMetadata_KG.php CHANGED
@@ -42,7 +42,7 @@ return array (
42
  ),
43
  'mobile' =>
44
  array (
45
- 'NationalNumberPattern' => '312(?:58\\d|973)\\d{3}|(?:2(?:0[0-35]|2\\d)|5[0-24-7]\\d|7(?:[07]\\d|55)|88[08]|99[05-9])\\d{6}',
46
  'ExampleNumber' => '700123456',
47
  'PossibleLength' =>
48
  array (
42
  ),
43
  'mobile' =>
44
  array (
45
+ 'NationalNumberPattern' => '312(?:58\\d|973)\\d{3}|(?:2(?:0[0-35]|2\\d)|5[0-24-7]\\d|600|7(?:[07]\\d|55)|88[08]|99[05-9])\\d{6}',
46
  'ExampleNumber' => '700123456',
47
  'PossibleLength' =>
48
  array (
vendor/giggsey/libphonenumber-for-php/src/data/PhoneNumberMetadata_KZ.php CHANGED
@@ -29,7 +29,7 @@ return array (
29
  ),
30
  'fixedLine' =>
31
  array (
32
- 'NationalNumberPattern' => '(?:33622|7(?:1(?:0(?:[23]\\d|4[0-3]|59|63)|1(?:[23]\\d|4[0-79]|59)|2(?:[23]\\d|59)|3(?:2\\d|3[0-79]|4[0-35-9]|59)|4(?:[24]\\d|3[013-9]|5[1-9])|5(?:2\\d|3[1-9]|4[0-7]|59)|6(?:[2-4]\\d|5[19]|61)|72\\d|8(?:[27]\\d|3[1-46-9]|4[0-5]))|2(?:1(?:[23]\\d|4[46-9]|5[3469])|2(?:2\\d|3[0679]|46|5[12679])|3(?:[2-4]\\d|5[139])|4(?:2\\d|3[1-35-9]|59)|5(?:[23]\\d|4[0-246-8]|59|61)|6(?:2\\d|3[1-9]|4[0-4]|59)|7(?:[2379]\\d|40|5[279])|8(?:[23]\\d|4[0-3]|59)|9(?:2\\d|3[124578]|59))))\\d{5}',
33
  'ExampleNumber' => '7123456789',
34
  'PossibleLength' =>
35
  array (
29
  ),
30
  'fixedLine' =>
31
  array (
32
+ 'NationalNumberPattern' => '(?:33622|7(?:1(?:0(?:[23]\\d|4[0-3]|59|63)|1(?:[23]\\d|4[0-79]|59)|2(?:[23]\\d|59)|3(?:2\\d|3[0-79]|4[0-35-9]|59)|4(?:[24]\\d|3[013-9]|5[1-9]|97)|5(?:2\\d|3[1-9]|4[0-7]|59)|6(?:[2-4]\\d|5[19]|61)|72\\d|8(?:[27]\\d|3[1-46-9]|4[0-5]|59))|2(?:1(?:[23]\\d|4[46-9]|5[3469])|2(?:2\\d|3[0679]|46|5[12679])|3(?:[2-4]\\d|5[139])|4(?:2\\d|3[1-35-9]|59)|5(?:[23]\\d|4[0-8]|59|61)|6(?:2\\d|3[1-9]|4[0-4]|59)|7(?:[2379]\\d|40|5[279])|8(?:[23]\\d|4[0-3]|59)|9(?:2\\d|3[124578]|59))))\\d{5}',
33
  'ExampleNumber' => '7123456789',
34
  'PossibleLength' =>
35
  array (
vendor/giggsey/libphonenumber-for-php/src/data/PhoneNumberMetadata_RU.php CHANGED
@@ -173,8 +173,8 @@ return array (
173
  'leadingDigitsPatterns' =>
174
  array (
175
  0 => '7(?:1[0-8]|2[1-9])',
176
- 1 => '7(?:1(?:[0-6]2|7|8[27])|2(?:1[23]|[2-9]2))',
177
- 2 => '7(?:1(?:[0-6]2|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2',
178
  ),
179
  'nationalPrefixFormattingRule' => '8 ($1)',
180
  'domesticCarrierCodeFormattingRule' => '',
@@ -240,8 +240,8 @@ return array (
240
  'leadingDigitsPatterns' =>
241
  array (
242
  0 => '7(?:1[0-8]|2[1-9])',
243
- 1 => '7(?:1(?:[0-6]2|7|8[27])|2(?:1[23]|[2-9]2))',
244
- 2 => '7(?:1(?:[0-6]2|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2',
245
  ),
246
  'nationalPrefixFormattingRule' => '8 ($1)',
247
  'domesticCarrierCodeFormattingRule' => '',
173
  'leadingDigitsPatterns' =>
174
  array (
175
  0 => '7(?:1[0-8]|2[1-9])',
176
+ 1 => '7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))',
177
+ 2 => '7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2',
178
  ),
179
  'nationalPrefixFormattingRule' => '8 ($1)',
180
  'domesticCarrierCodeFormattingRule' => '',
240
  'leadingDigitsPatterns' =>
241
  array (
242
  0 => '7(?:1[0-8]|2[1-9])',
243
+ 1 => '7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))',
244
+ 2 => '7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2',
245
  ),
246
  'nationalPrefixFormattingRule' => '8 ($1)',
247
  'domesticCarrierCodeFormattingRule' => '',
vendor/giggsey/libphonenumber-for-php/src/geocoding/data/en/64.php CHANGED
@@ -39,11 +39,19 @@ return array (
39
  643226 => 'Otautau',
40
  643230 => 'Invercargill',
41
  643231 => 'Invercargill',
 
 
42
  643234 => 'Riverton',
43
  643235 => 'Invercargill',
44
  643236 => 'Winton',
 
 
45
  643239 => 'Invercargill',
 
 
46
  6432420 => 'Christchurch',
 
 
47
  6432423 => 'Dunedin',
48
  6432424 => 'Nelson',
49
  6432425 => 'Invercargill',
@@ -51,6 +59,7 @@ return array (
51
  6432427 => 'Greymouth',
52
  6432428 => 'Queenstown',
53
  6432429 => 'Timaru',
 
54
  6432440 => 'Christchurch',
55
  6432441 => 'Christchurch',
56
  6432442 => 'Christchurch',
@@ -61,9 +70,12 @@ return array (
61
  6432447 => 'Timaru',
62
  6432448 => 'Dunedin',
63
  6432449 => 'Queenstown',
 
64
  643246 => 'Tokanui',
 
65
  643248 => 'Lumsden',
66
  643249 => 'Te Anau',
 
67
  643250 => 'Christchurch',
68
  643260 => 'Christchurch',
69
  6432606 => 'Dunedin',
@@ -74,7 +86,7 @@ return array (
74
  6432611 => 'Kaikoura',
75
  6432612 => 'Rangiora',
76
  6432613 => 'Waitangi (Chatham Is.)',
77
- 6432614 => 'Akaroa',
78
  6432615 => 'Amberley',
79
  6432616 => 'Ashburton',
80
  6432617 => 'Cheviot',
@@ -125,8 +137,14 @@ return array (
125
  6432662 => 'Christchurch',
126
  6432663 => 'Christchurch',
127
  6432664 => 'Christchurch',
 
 
 
128
  6432668 => 'Blenheim',
129
  6432669 => 'Rangiora',
 
 
 
130
  643270 => 'Christchurch',
131
  6432710 => 'Christchurch',
132
  6432711 => 'Akaroa',
@@ -177,6 +195,12 @@ return array (
177
  6432756 => 'Gore',
178
  6432757 => 'Lumsden',
179
  6432758 => 'Otautau',
 
 
 
 
 
 
180
  6432800 => 'Te Anau',
181
  6432801 => 'Lumsden',
182
  6432802 => 'Gore',
@@ -201,6 +225,7 @@ return array (
201
  6432887 => 'Nelson',
202
  6432888 => 'Nelson',
203
  6432889 => 'Blenheim',
 
204
  6432990 => 'Lumsden',
205
  6432991 => 'Milton',
206
  6432992 => 'Gore',
@@ -211,14 +236,7 @@ return array (
211
  6432997 => 'Edendale',
212
  6432998 => 'Tokanui',
213
  6432999 => 'Invercargill',
214
- 643300 => 'Ashburton/Akaroa/Chatham Islands',
215
- 643302 => 'Ashburton/Akaroa/Chatham Islands',
216
- 643303 => 'Ashburton/Akaroa/Chatham Islands',
217
- 643304 => 'Ashburton/Akaroa/Chatham Islands',
218
- 643305 => 'Ashburton/Akaroa/Chatham Islands',
219
- 643306 => 'Ashburton/Akaroa/Chatham Islands',
220
- 643307 => 'Ashburton/Akaroa/Chatham Islands',
221
- 643308 => 'Ashburton/Akaroa/Chatham Islands',
222
  64331 => 'Rangiora/Amberley/Culverden/Darfield/Cheviot/Kaikoura',
223
  64332 => 'Christchurch',
224
  643331 => 'Christchurch',
@@ -231,7 +249,7 @@ return array (
231
  643339 => 'Christchurch',
232
  64334 => 'Christchurch',
233
  64335 => 'Christchurch',
234
- 64336 => 'Christchurch',
235
  64337 => 'Christchurch',
236
  64338 => 'Christchurch',
237
  643390 => 'Christchurch',
@@ -245,6 +263,7 @@ return array (
245
  6433917 => 'Franz Josef',
246
  6433918 => 'Fox Glacier',
247
  6433919 => 'Haast',
 
248
  643393 => 'Christchurch',
249
  6433940 => 'Westport',
250
  6433941 => 'Blenheim',
@@ -266,6 +285,8 @@ return array (
266
  6433957 => 'Palmerston',
267
  6433958 => 'Oamaru',
268
  6433959 => 'Balclutha',
 
 
269
  6433980 => 'Milton',
270
  6433981 => 'Twizel',
271
  6433982 => 'Kurow',
@@ -276,6 +297,7 @@ return array (
276
  6433987 => 'Cromwell',
277
  6433988 => 'Wanaka',
278
  6433989 => 'Waimate',
 
279
  6433991 => 'Invercargill',
280
  6433992 => 'Riverton',
281
  6433993 => 'Te Anau',
@@ -285,10 +307,15 @@ return array (
285
  6433997 => 'Gore',
286
  6433998 => 'Lumsden',
287
  6433999 => 'Otautau',
 
288
  643409 => 'Queenstown',
 
 
289
  643412 => 'Balclutha',
290
  643413 => 'Balclutha',
 
291
  643415 => 'Balclutha',
 
292
  643417 => 'Milton',
293
  643418 => 'Balclutha',
294
  643419 => 'Balclutha',
@@ -365,24 +392,25 @@ return array (
365
  6434297 => 'Westport',
366
  6434298 => 'Hokitika',
367
  6434299 => 'Haast',
 
368
  643430 => 'Mt Cook',
369
- 643431 => 'Oamaru',
370
- 643432 => 'Oamaru',
371
- 643433 => 'Oamaru',
372
- 643434 => 'Oamaru',
373
  6434350 => 'Twizel',
374
  6434351 => 'Mt Cook',
375
  6434353 => 'Twizel',
376
  6434359 => 'Twizel',
377
  643436 => 'Kurow',
378
- 643437 => 'Oamaru',
379
  643438 => 'Kurow',
380
- 643439 => 'Oamaru',
381
  6434400 => 'Alexandra',
382
  6434401 => 'Cromwell',
383
  6434402 => 'Alexandra',
 
384
  6434404 => 'Alexandra',
385
  6434405 => 'Alexandra',
 
 
 
 
386
  643441 => 'Queenstown',
387
  643442 => 'Queenstown',
388
  643443 => 'Wanaka',
@@ -400,6 +428,11 @@ return array (
400
  643455 => 'Dunedin',
401
  643456 => 'Dunedin',
402
  643457 => 'Dunedin',
 
 
 
 
 
403
  643463 => 'Palmerston',
404
  643464 => 'Dunedin',
405
  643465 => 'Palmerston',
@@ -408,14 +441,11 @@ return array (
408
  643468 => 'Dunedin',
409
  643469 => 'Dunedin',
410
  64347 => 'Dunedin',
411
- 643481 => 'Dunedin',
412
- 643482 => 'Dunedin',
413
- 643484 => 'Dunedin',
414
  643485 => 'Lawrence',
415
- 643486 => 'Dunedin',
416
- 643487 => 'Dunedin',
417
- 643488 => 'Dunedin',
418
- 643489 => 'Dunedin',
419
  6434990 => 'Queenstown',
420
  6434991 => 'Cromwell',
421
  6434992 => 'Ranfurly',
@@ -426,6 +456,7 @@ return array (
426
  6434997 => 'Lawrence',
427
  6434998 => 'Dunedin',
428
  6434999 => 'Dunedin',
 
429
  643520 => 'Blenheim',
430
  643521 => 'Nelson',
431
  643522 => 'Nelson',
@@ -553,13 +584,7 @@ return array (
553
  6435888 => 'Timaru',
554
  6435889 => 'Timaru',
555
  643590 => 'Christchurch',
556
- 6435950 => 'Christchurch',
557
- 6435951 => 'Christchurch',
558
- 6435952 => 'Christchurch',
559
- 6435953 => 'Christchurch',
560
- 6435954 => 'Christchurch',
561
- 6435955 => 'Christchurch',
562
- 6435956 => 'Christchurch',
563
  6435990 => 'Hokitika',
564
  6435991 => 'Franz Josef',
565
  6435992 => 'Fox Glacier',
@@ -570,9 +595,11 @@ return array (
570
  6435997 => 'Amberley',
571
  6435998 => 'Rangiora',
572
  6435999 => 'Christchurch',
573
- 643612 => 'Timaru',
574
- 643614 => 'Timaru',
575
- 643615 => 'Timaru',
 
 
576
  6436500 => 'Christchurch',
577
  6436501 => 'Akaroa',
578
  6436502 => 'Amberley',
@@ -703,20 +730,14 @@ return array (
703
  6436688 => 'Waitangi (Chatham Is.)',
704
  6436689 => 'Christchurch',
705
  643669 => 'Christchurch',
 
 
706
  643680 => 'Fairlie',
707
- 643681 => 'Timaru',
708
- 643683 => 'Timaru',
709
- 643684 => 'Timaru',
710
  643685 => 'Fairlie',
711
- 643686 => 'Timaru',
712
- 643687 => 'Timaru',
713
- 643688 => 'Timaru',
714
  643689 => 'Waimate',
 
715
  643690 => 'Waimate',
716
- 643692 => 'Geraldine',
717
- 643693 => 'Geraldine',
718
- 643696 => 'Geraldine',
719
- 643697 => 'Geraldine',
720
  6436990 => 'Cheviot',
721
  6436991 => 'Culverden',
722
  6436992 => 'Greymouth',
@@ -727,10 +748,10 @@ return array (
727
  6436997 => 'Motueka',
728
  6436998 => 'Blenheim',
729
  6436999 => 'Nelson',
730
- 643731 => 'Greymouth',
731
- 643732 => 'Greymouth',
732
- 643736 => 'Greymouth',
733
- 643738 => 'Greymouth',
734
  643740 => 'Christchurch',
735
  643741 => 'Christchurch',
736
  643742 => 'Dunedin',
@@ -783,17 +804,21 @@ return array (
783
  6437485 => 'Te Anau',
784
  6437486 => 'Tokanui',
785
  6437487 => 'Winton',
 
 
786
  643749 => 'Christchurch',
787
  643750 => 'Haast',
788
  643751 => 'Fox Glacier',
789
  643752 => 'Franz Josef',
790
  643753 => 'Hokitika',
 
791
  643755 => 'Hokitika',
792
  643756 => 'Hokitika',
793
- 643762 => 'Greymouth',
794
- 643767 => 'Greymouth',
795
- 643768 => 'Greymouth',
796
- 643769 => 'Greymouth',
 
797
  6437770 => 'Nelson',
798
  6437771 => 'Blenheim',
799
  6437772 => 'Timaru',
@@ -804,9 +829,8 @@ return array (
804
  6437777 => 'Christchurch',
805
  6437778 => 'Greymouth',
806
  6437779 => 'Invercargill',
807
- 643782 => 'Westport',
808
- 643788 => 'Westport',
809
- 643789 => 'Westport',
810
  6439000 => 'Christchurch',
811
  6439001 => 'Christchurch',
812
  6439002 => 'Rangiora',
@@ -820,12 +844,16 @@ return array (
820
  6439010 => 'Queenstown',
821
  6439011 => 'Queenstown',
822
  6439012 => 'Queenstown',
 
 
823
  6439015 => 'Wanaka',
824
  6439016 => 'Alexandra',
825
  6439017 => 'Cromwell',
826
  6439018 => 'Ranfurly',
827
  6439019 => 'Roxburgh',
828
  6439020 => 'Gore',
 
 
829
  6439023 => 'Te Anau',
830
  6439024 => 'Lumsden',
831
  6439025 => 'Otautau',
@@ -835,31 +863,41 @@ return array (
835
  6439029 => 'Tokanui',
836
  643903 => 'Christchurch',
837
  6439040 => 'Balclutha',
 
838
  6439042 => 'Oamaru',
 
839
  6439044 => 'Milton',
840
  6439045 => 'Twizel',
841
  6439046 => 'Kurow',
842
  6439047 => 'Alexandra',
843
  6439048 => 'Lawrence',
844
  6439049 => 'Palmerston',
 
845
  6439050 => 'Geraldine',
846
  6439052 => 'Mt Cook',
847
  6439055 => 'Fairlie',
848
  6439057 => 'Waimate',
849
  6439060 => 'Greymouth',
850
  6439061 => 'Greymouth',
 
851
  6439063 => 'Westport',
 
 
852
  6439066 => 'Hokitika',
853
  6439067 => 'Franz Josef',
854
  6439068 => 'Fox Glacier',
855
  6439069 => 'Haast',
856
  6439070 => 'Motueka',
857
  6439071 => 'Motueka',
 
858
  6439073 => 'Motueka',
 
859
  6439075 => 'Takaka',
 
 
 
860
  6439079 => 'Murchison',
861
- 6439080 => 'Ashburton',
862
- 6439081 => 'Ashburton',
863
  6439082 => 'Culverden',
864
  6439083 => 'Cheviot',
865
  6439084 => 'Amberley',
@@ -867,9 +905,14 @@ return array (
867
  6439090 => 'Rangiora',
868
  6439091 => 'Rangiora',
869
  6439092 => 'Rangiora',
 
 
 
 
870
  6439097 => 'Darfield',
871
  6439098 => 'Akaroa',
872
  6439099 => 'Kaikoura',
 
873
  643920 => 'Rangiora',
874
  643921 => 'Blenheim',
875
  643922 => 'Nelson',
@@ -930,6 +973,8 @@ return array (
930
  6439325 => 'Kaikoura',
931
  6439326 => 'Rangiora',
932
  6439327 => 'Ashburton',
 
 
933
  6439330 => 'Westport',
934
  6439331 => 'Greymouth',
935
  6439332 => 'Hokitika',
@@ -939,6 +984,7 @@ return array (
939
  6439336 => 'Cromwell',
940
  6439337 => 'Wanaka',
941
  6439338 => 'Queenstown',
 
942
  6439340 => 'Mt Cook',
943
  6439341 => 'Fairlie',
944
  6439342 => 'Geraldine',
@@ -947,6 +993,13 @@ return array (
947
  6439345 => 'Christchurch',
948
  6439346 => 'Christchurch',
949
  6439347 => 'Christchurch',
 
 
 
 
 
 
 
950
  643940 => 'Christchurch',
951
  643941 => 'Christchurch',
952
  643942 => 'Christchurch',
@@ -985,18 +1038,16 @@ return array (
985
  6439534 => 'Mt Cook',
986
  6439535 => 'Fairlie',
987
  6439536 => 'Waimate',
 
 
 
 
988
  643955 => 'Dunedin',
989
  643956 => 'Timaru',
990
  643957 => 'Timaru',
991
- 643960 => 'Christchurch',
992
- 643961 => 'Christchurch',
993
- 643962 => 'Christchurch',
994
- 643963 => 'Christchurch',
995
- 643964 => 'Christchurch',
996
- 643965 => 'Christchurch',
997
- 643966 => 'Christchurch',
998
- 643967 => 'Christchurch',
999
- 643968 => 'Christchurch',
1000
  6439700 => 'Nelson',
1001
  6439701 => 'Nelson',
1002
  6439702 => 'Nelson',
@@ -1084,12 +1135,15 @@ return array (
1084
  6439856 => 'Darfield',
1085
  6439857 => 'Akaroa',
1086
  6439858 => 'Kaikoura',
 
1087
  6439860 => 'Nelson',
1088
  6439861 => 'Nelson',
1089
  6439862 => 'Nelson',
1090
  6439863 => 'Motueka',
1091
  6439864 => 'Takaka',
1092
  6439865 => 'Murchison',
 
 
1093
  6439868 => 'Blenheim',
1094
  6439869 => 'Blenheim',
1095
  6439870 => 'Queenstown',
@@ -1099,14 +1153,21 @@ return array (
1099
  6439874 => 'Cromwell',
1100
  6439875 => 'Ranfurly',
1101
  6439876 => 'Roxburgh',
 
 
 
1102
  6439880 => 'Greymouth',
1103
  6439881 => 'Greymouth',
1104
  6439882 => 'Westport',
1105
  6439883 => 'Hokitika',
1106
  6439884 => 'Franz Josef',
1107
  6439885 => 'Fox Glacier',
1108
- 6439886 => 'Haast',
 
 
 
1109
  643989 => 'Nelson',
 
1110
  644202 => 'Wellington',
1111
  644203 => 'Wellington',
1112
  644204 => 'Wellington',
@@ -1137,56 +1198,19 @@ return array (
1137
  644281 => 'Wellington',
1138
  6442820 => 'Wellington',
1139
  6442821 => 'Wellington',
1140
- 644290 => 'Paraparaumu',
1141
- 644292 => 'Paraparaumu',
1142
- 644293 => 'Paraparaumu',
1143
- 644296 => 'Paraparaumu',
1144
- 644297 => 'Paraparaumu',
1145
- 644298 => 'Paraparaumu',
1146
- 644299 => 'Paraparaumu',
1147
- 6443330 => 'Wellington',
1148
- 6443331 => 'Wellington',
1149
- 6443332 => 'Wellington',
1150
  6443333 => 'Paraparaumu',
1151
- 644370 => 'Wellington',
1152
  6443708 => 'Paraparaumu',
1153
  6443709 => 'Paraparaumu',
1154
- 64438 => 'Wellington',
1155
- 644390 => 'Wellington',
1156
- 644391 => 'Wellington',
1157
- 644392 => 'Wellington',
1158
  644393 => 'Paraparaumu',
1159
- 644399 => 'Wellington',
1160
  6443990 => 'Paraparaumu',
1161
- 644436 => 'Wellington',
1162
- 644437 => 'Wellington',
1163
- 644439 => 'Wellington',
1164
- 644460 => 'Wellington',
1165
- 644461 => 'Wellington',
1166
- 644462 => 'Wellington',
1167
- 644463 => 'Wellington',
1168
- 644464 => 'Wellington',
1169
- 644465 => 'Wellington',
1170
- 644466 => 'Wellington',
1171
- 644467 => 'Wellington',
1172
- 64447 => 'Wellington',
1173
- 644488 => 'Wellington',
1174
  6444887 => 'Paraparaumu',
1175
  6444888 => 'Paraparaumu',
1176
  6444889 => 'Paraparaumu',
1177
- 644493 => 'Wellington',
1178
- 644494 => 'Wellington',
1179
- 644495 => 'Wellington',
1180
- 644496 => 'Wellington',
1181
- 644497 => 'Wellington',
1182
- 644498 => 'Wellington',
1183
- 644499 => 'Wellington',
1184
- 644524 => 'Wellington',
1185
- 644525 => 'Wellington',
1186
- 644526 => 'Wellington',
1187
- 644527 => 'Wellington',
1188
- 644528 => 'Wellington',
1189
- 644529 => 'Wellington',
1190
  644550 => 'Wellington',
1191
  644551 => 'Paraparaumu',
1192
  644555 => 'Wellington',
@@ -1200,13 +1224,7 @@ return array (
1200
  644587 => 'Wellington',
1201
  644589 => 'Wellington',
1202
  644590 => 'Wellington',
1203
- 6445950 => 'Wellington',
1204
- 6445951 => 'Wellington',
1205
- 6445952 => 'Wellington',
1206
- 6445953 => 'Wellington',
1207
- 6445954 => 'Wellington',
1208
- 6445955 => 'Wellington',
1209
- 6445956 => 'Wellington',
1210
  644619 => 'Wellington',
1211
  644650 => 'Wellington',
1212
  6446509 => 'Paraparaumu',
@@ -1214,12 +1232,7 @@ return array (
1214
  644777 => 'Wellington',
1215
  6447770 => 'Paraparaumu',
1216
  6447771 => 'Paraparaumu',
1217
- 644801 => 'Wellington',
1218
- 644802 => 'Wellington',
1219
- 644803 => 'Wellington',
1220
- 644804 => 'Wellington',
1221
- 644805 => 'Wellington',
1222
- 644806 => 'Wellington',
1223
  644810 => 'Wellington',
1224
  644815 => 'Wellington',
1225
  644816 => 'Wellington',
@@ -1241,44 +1254,15 @@ return array (
1241
  644895 => 'Paraparaumu',
1242
  644896 => 'Wellington',
1243
  644897 => 'Wellington',
1244
- 644900 => 'Wellington',
1245
  6449008 => 'Paraparaumu',
1246
- 644901 => 'Wellington',
1247
  644902 => 'Paraparaumu',
1248
- 644903 => 'Wellington',
1249
  6449030 => 'Paraparaumu',
1250
  6449031 => 'Paraparaumu',
1251
  644904 => 'Paraparaumu',
1252
  644905 => 'Paraparaumu',
1253
  644906 => 'Paraparaumu',
1254
- 644907 => 'Wellington',
1255
- 6449080 => 'Paraparaumu',
1256
- 6449081 => 'Paraparaumu',
1257
- 6449082 => 'Wellington',
1258
- 6449083 => 'Wellington',
1259
- 6449084 => 'Wellington',
1260
- 644909 => 'Wellington',
1261
- 644910 => 'Wellington',
1262
- 6449120 => 'Wellington',
1263
- 6449121 => 'Wellington',
1264
- 6449122 => 'Wellington',
1265
- 6449123 => 'Wellington',
1266
- 6449124 => 'Wellington',
1267
- 644913 => 'Wellington',
1268
- 644914 => 'Wellington',
1269
- 644915 => 'Wellington',
1270
- 644916 => 'Wellington',
1271
- 644917 => 'Wellington',
1272
- 644918 => 'Wellington',
1273
- 644920 => 'Wellington',
1274
- 644922 => 'Wellington',
1275
- 644924 => 'Wellington',
1276
- 644928 => 'Wellington',
1277
- 644931 => 'Wellington',
1278
- 644934 => 'Wellington',
1279
- 644938 => 'Wellington',
1280
- 644939 => 'Wellington',
1281
- 64497 => 'Wellington',
1282
  6449740 => 'Paraparaumu',
1283
  6449741 => 'Paraparaumu',
1284
  644975 => 'Paraparaumu',
@@ -1348,7 +1332,6 @@ return array (
1348
  6462412 => 'Gisborne',
1349
  6462413 => 'Gisborne',
1350
  6462414 => 'Napier',
1351
- 6462415 => 'Levin',
1352
  6462416 => 'Waipukurau',
1353
  6462417 => 'Wanganui',
1354
  6462418 => 'Palmerston North',
@@ -1388,11 +1371,7 @@ return array (
1388
  6462627 => 'Wanganui',
1389
  6462628 => 'Wanganui',
1390
  6462629 => 'Levin',
1391
- 646272 => 'Hawera',
1392
- 646273 => 'Hawera',
1393
- 646274 => 'Hawera',
1394
- 646278 => 'Hawera',
1395
- 646279 => 'Hawera',
1396
  6462800 => 'Palmerston North',
1397
  6462801 => 'Palmerston North',
1398
  6462802 => 'Palmerston North',
@@ -1413,46 +1392,22 @@ return array (
1413
  6462817 => 'Napier',
1414
  6462818 => 'New Plymouth',
1415
  6462819 => 'Levin',
1416
- 646304 => 'Featherston',
1417
- 646306 => 'Featherston',
1418
- 646307 => 'Featherston',
1419
- 646308 => 'Featherston',
1420
  646321 => 'Marton',
1421
  646322 => 'Marton',
1422
- 646323 => 'Palmerston North',
1423
- 646324 => 'Palmerston North',
1424
- 646325 => 'Palmerston North',
1425
- 646326 => 'Palmerston North',
1426
  646327 => 'Marton',
1427
- 646328 => 'Palmerston North',
1428
- 646329 => 'Palmerston North',
1429
- 646341 => 'Wanganui',
1430
- 646342 => 'Wanganui',
1431
- 646343 => 'Wanganui',
1432
- 646344 => 'Wanganui',
1433
- 646345 => 'Wanganui',
1434
- 646346 => 'Wanganui',
1435
- 646347 => 'Wanganui',
1436
- 646348 => 'Wanganui',
1437
- 646349 => 'Wanganui',
1438
  64635 => 'Palmerston North',
1439
- 646362 => 'Levin',
1440
- 646363 => 'Levin',
1441
- 646364 => 'Levin',
1442
  646365 => 'Palmerston North',
1443
- 646366 => 'Levin',
1444
- 646367 => 'Levin',
1445
- 646368 => 'Levin',
1446
- 646369 => 'Levin',
1447
- 646370 => 'Masterton',
1448
- 646372 => 'Masterton',
1449
- 646373 => 'Masterton',
1450
  646374 => 'Dannevirke',
1451
  646375 => 'Pahiatua',
1452
  646376 => 'Pahiatua',
1453
- 646377 => 'Masterton',
1454
- 646378 => 'Masterton',
1455
- 646379 => 'Masterton',
1456
  646382 => 'Taihape',
1457
  646385 => 'Ohakune',
1458
  646387 => 'Waiouru',
@@ -1538,11 +1493,15 @@ return array (
1538
  6466007 => 'Stratford',
1539
  6466008 => 'Ohakune',
1540
  6466009 => 'Waiouru',
1541
- 646601 => 'Napier',
1542
  6466010 => 'Taihape',
1543
  6466011 => 'Marton',
1544
- 6466012 => 'Pahiatua',
1545
  6466013 => 'Featherston',
 
 
 
 
 
 
1546
  646650 => 'Napier',
1547
  6466508 => 'Napier/Wairoa',
1548
  6466509 => 'Napier/Waipukurau',
@@ -1584,32 +1543,19 @@ return array (
1584
  6466997 => 'New Plymouth',
1585
  6466998 => 'New Plymouth',
1586
  6466999 => 'New Plymouth',
 
1587
  646750 => 'Mokau',
1588
- 646751 => 'New Plymouth',
1589
- 646752 => 'New Plymouth',
1590
  6467525 => 'Mokau',
1591
  6467529 => 'Mokau',
1592
- 646753 => 'New Plymouth',
1593
- 646754 => 'New Plymouth',
1594
- 6467550 => 'New Plymouth',
1595
- 6467551 => 'New Plymouth',
1596
- 6467552 => 'New Plymouth',
1597
- 6467553 => 'New Plymouth',
1598
- 6467554 => 'New Plymouth',
1599
- 6467555 => 'New Plymouth',
1600
- 6467557 => 'New Plymouth',
1601
- 6467558 => 'New Plymouth',
1602
- 6467559 => 'New Plymouth',
1603
- 646756 => 'New Plymouth',
1604
- 646757 => 'New Plymouth',
1605
- 646758 => 'New Plymouth',
1606
- 646759 => 'New Plymouth',
1607
  646761 => 'Opunake',
1608
  646762 => 'Stratford',
1609
  646763 => 'Opunake',
1610
  646764 => 'Stratford',
1611
  646765 => 'Stratford',
1612
  646766 => 'New Plymouth',
 
1613
  646768 => 'New Plymouth',
1614
  646769 => 'New Plymouth',
1615
  6467770 => 'Gisborne',
@@ -1648,40 +1594,31 @@ return array (
1648
  6468264 => 'Palmerston North',
1649
  6468268 => 'New Plymouth',
1650
  6468269 => 'New Plymouth',
1651
- 6468300 => 'Napier',
1652
- 6468301 => 'Napier',
1653
- 6468302 => 'Napier',
1654
- 6468303 => 'Napier',
1655
- 6468308 => 'Napier',
1656
- 6468309 => 'Napier',
1657
- 646831 => 'Napier/Hastings',
1658
- 646833 => 'Napier/Hastings',
1659
- 646834 => 'Napier/Hastings',
1660
- 646835 => 'Napier/Hastings',
1661
- 646836 => 'Napier/Hastings',
1662
  646837 => 'Wairoa',
1663
  646838 => 'Wairoa',
1664
- 646839 => 'Napier/Hastings',
 
1665
  646842 => 'Napier/Hastings',
1666
  646843 => 'Napier/Hastings',
1667
  646844 => 'Napier/Hastings',
1668
  646845 => 'Napier/Hastings',
 
1669
  646847 => 'Napier/Hastings',
1670
- 646855 => 'Waipukurau',
1671
- 646856 => 'Waipukurau',
1672
- 646857 => 'Waipukurau',
1673
- 646858 => 'Waipukurau',
1674
- 646861 => 'Gisborne',
1675
- 646862 => 'Gisborne',
1676
- 646863 => 'Gisborne',
1677
  646864 => 'Ruatoria',
1678
- 646865 => 'Gisborne',
1679
- 646867 => 'Gisborne',
1680
- 646868 => 'Gisborne',
1681
- 6468690 => 'Gisborne',
1682
- 6468691 => 'Gisborne',
1683
- 6468692 => 'Gisborne',
1684
- 6468693 => 'Gisborne',
1685
  64687 => 'Napier/Hastings',
1686
  6468800 => 'Napier/Hastings',
1687
  6468801 => 'Wanganui',
@@ -1815,13 +1752,17 @@ return array (
1815
  6469317 => 'Pahiatua',
1816
  6469318 => 'Levin',
1817
  6469319 => 'Masterton',
 
1818
  646946 => 'Masterton',
1819
  6469468 => 'Featherston',
1820
  646949 => 'Levin W100',
 
1821
  646951 => 'Palmerston North',
1822
  646952 => 'Palmerston North W100',
1823
  646953 => 'Palmerston North W100',
1824
  646954 => 'Palmerston North W100',
 
 
1825
  6469570 => 'Palmerston North',
1826
  6469571 => 'Palmerston North',
1827
  6469572 => 'Palmerston North',
@@ -1832,17 +1773,28 @@ return array (
1832
  6469577 => 'Ohakune',
1833
  6469578 => 'Marton',
1834
  6469579 => 'Pahiatua',
 
 
 
1835
  6469610 => 'Wanganui',
1836
  6469611 => 'Wanganui',
 
1837
  6469613 => 'Levin',
1838
  6469614 => 'Levin',
1839
  6469615 => 'Masterton',
1840
  6469616 => 'Featherston',
 
 
 
 
 
1841
  646964 => 'Wanganui',
1842
  646965 => 'Wanganui W100',
 
1843
  646967 => 'New Plymouth',
1844
  646968 => 'New Plymouth W100',
1845
  646969 => 'New Plymouth',
 
1846
  6469710 => 'New Plymouth',
1847
  6469711 => 'New Plymouth',
1848
  6469712 => 'New Plymouth',
@@ -1850,19 +1802,13 @@ return array (
1850
  6469714 => 'Hawera',
1851
  6469715 => 'Mokau',
1852
  6469716 => 'Opunake',
1853
- 646974 => 'Napier',
1854
- 646975 => 'Napier',
1855
- 646976 => 'Napier',
1856
  6469850 => 'Napier',
1857
  6469851 => 'Napier',
1858
  6469852 => 'Napier',
1859
- 6469853 => 'Wairoa',
1860
  6469854 => 'Waipukurau',
1861
- 646986 => 'Gisborne',
1862
  6469869 => 'Ruatoria',
1863
- 6469890 => 'Gisborne',
1864
- 6469891 => 'Gisborne',
1865
- 6469892 => 'Gisborne',
1866
  6469893 => 'Ruatoria',
1867
  647210 => 'Hamilton',
1868
  647211 => 'Hamilton',
@@ -1981,17 +1927,13 @@ return array (
1981
  6472827 => 'Tauranga',
1982
  6472828 => 'Tauranga',
1983
  6472829 => 'Tauranga',
1984
- 647304 => 'Whakatane',
1985
- 647305 => 'Whakatane',
1986
- 647306 => 'Whakatane',
1987
- 647307 => 'Whakatane',
1988
- 647308 => 'Whakatane',
1989
- 647309 => 'Whakatane',
1990
  647312 => 'Whakatane',
1991
  647315 => 'Opotiki',
1992
- 647322 => 'Whakatane',
1993
- 647323 => 'Whakatane',
1994
  647325 => 'Opotiki',
 
1995
  647332 => 'Rotorua',
1996
  6473331 => 'Rotorua',
1997
  6473332 => 'Rotorua',
@@ -1999,27 +1941,11 @@ return array (
1999
  6473338 => 'Rotorua',
2000
  6473339 => 'Taupo',
2001
  647334 => 'Rotorua',
2002
- 647343 => 'Rotorua',
2003
- 647345 => 'Rotorua',
2004
- 647346 => 'Rotorua',
2005
- 647347 => 'Rotorua',
2006
- 647348 => 'Rotorua',
2007
- 647349 => 'Rotorua',
2008
- 647350 => 'Rotorua',
2009
- 647351 => 'Rotorua',
2010
- 647357 => 'Rotorua',
2011
- 647362 => 'Rotorua',
2012
- 647366 => 'Rotorua',
2013
- 647372 => 'Taupo',
2014
- 647374 => 'Taupo',
2015
- 647376 => 'Taupo',
2016
- 647377 => 'Taupo',
2017
- 647378 => 'Taupo',
2018
- 6473841 => 'Taupo',
2019
- 6473842 => 'Taupo',
2020
- 6473843 => 'Taupo',
2021
- 6473847 => 'Taupo',
2022
- 647386 => 'Taupo',
2023
  647390 => 'Hamilton',
2024
  647391 => 'Hamilton',
2025
  6473920 => 'Huntly',
@@ -2085,17 +2011,7 @@ return array (
2085
  6474659 => 'Whangamata',
2086
  647466 => 'Tauranga',
2087
  647533 => 'Tauranga',
2088
- 647541 => 'Tauranga',
2089
- 647542 => 'Tauranga',
2090
- 647543 => 'Tauranga',
2091
- 647544 => 'Tauranga',
2092
- 647546 => 'Tauranga',
2093
- 647547 => 'Tauranga',
2094
- 6475480 => 'Tauranga',
2095
- 6475481 => 'Tauranga',
2096
- 6475482 => 'Tauranga',
2097
- 6475483 => 'Tauranga',
2098
- 647549 => 'Tauranga',
2099
  647551 => 'Tauranga',
2100
  647552 => 'Tauranga',
2101
  647557 => 'Tauranga',
@@ -2165,7 +2081,7 @@ return array (
2165
  6478070 => 'Morrinsville',
2166
  6478071 => 'Otorohanga',
2167
  6478072 => 'Paeroa',
2168
- 6478073 => 'Tokoroa/Putaruru',
2169
  6478074 => 'Taumarunui',
2170
  6478075 => 'Te Kuiti',
2171
  6478076 => 'Te Awamutu',
@@ -2204,6 +2120,9 @@ return array (
2204
  6478142 => 'Whakatane',
2205
  6478143 => 'Opotiki',
2206
  6478144 => 'Tauranga',
 
 
 
2207
  647823 => 'Hamilton',
2208
  647824 => 'Hamilton',
2209
  647825 => 'Hamilton',
@@ -2211,38 +2130,11 @@ return array (
2211
  647827 => 'Hamilton',
2212
  647828 => 'Huntly',
2213
  647829 => 'Hamilton',
2214
- 647832 => 'Hamilton',
2215
- 647833 => 'Hamilton',
2216
- 647834 => 'Hamilton',
2217
- 647836 => 'Hamilton',
2218
- 647837 => 'Hamilton',
2219
- 647838 => 'Hamilton',
2220
- 647839 => 'Hamilton',
2221
- 647843 => 'Hamilton',
2222
- 6478450 => 'Hamilton',
2223
- 6478451 => 'Hamilton',
2224
- 647846 => 'Hamilton',
2225
- 647847 => 'Hamilton',
2226
- 647848 => 'Hamilton',
2227
- 647849 => 'Hamilton',
2228
- 647850 => 'Hamilton',
2229
- 647851 => 'Hamilton',
2230
- 647852 => 'Hamilton',
2231
- 647853 => 'Hamilton',
2232
- 647854 => 'Hamilton',
2233
- 647855 => 'Hamilton',
2234
- 647856 => 'Hamilton',
2235
- 647857 => 'Hamilton',
2236
- 647858 => 'Hamilton',
2237
- 6478590 => 'Hamilton',
2238
- 6478591 => 'Hamilton',
2239
- 6478592 => 'Hamilton',
2240
- 6478593 => 'Hamilton',
2241
- 6478594 => 'Hamilton',
2242
- 6478595 => 'Hamilton',
2243
- 6478597 => 'Hamilton',
2244
- 6478598 => 'Hamilton',
2245
- 6478599 => 'Hamilton',
2246
  647862 => 'Paeroa',
2247
  647863 => 'Waihi',
2248
  647864 => 'Thames',
@@ -2255,9 +2147,12 @@ return array (
2255
  647871 => 'Te Awamutu',
2256
  647872 => 'Te Awamutu',
2257
  647873 => 'Otorohanga',
 
 
2258
  647876 => 'Te Kuiti',
2259
  647877 => 'Te Kuiti',
2260
  647878 => 'Te Kuiti',
 
2261
  647880 => 'Matamata',
2262
  647881 => 'Matamata',
2263
  647882 => 'Putaruru/Tokoroa',
@@ -2268,11 +2163,7 @@ return array (
2268
  647887 => 'Morrinsville',
2269
  647888 => 'Matamata',
2270
  647889 => 'Morrinsville',
2271
- 647892 => 'Taumarunui',
2272
- 647893 => 'Taumarunui',
2273
- 647894 => 'Taumarunui',
2274
- 647895 => 'Taumarunui',
2275
- 647896 => 'Taumarunui',
2276
  6478990 => 'Thames',
2277
  6478991 => 'Whangamata',
2278
  6478992 => 'Paeroa',
@@ -2283,13 +2174,13 @@ return array (
2283
  6478997 => 'Morrinsville',
2284
  6478998 => 'Hamilton',
2285
  6478999 => 'Hamilton',
 
2286
  6479000 => 'Hamilton',
2287
  6479001 => 'Hamilton',
2288
  6479002 => 'Matamata',
2289
  6479003 => 'Thames',
2290
  6479004 => 'Te Awamutu',
2291
  6479005 => 'Tauranga',
2292
- 6479006 => 'Taupo',
2293
  6479007 => 'Whakatane',
2294
  6479008 => 'Rotorua',
2295
  6479009 => 'Hamilton',
@@ -2308,10 +2199,6 @@ return array (
2308
  6479040 => 'Otorohanga',
2309
  6479045 => 'Taumarunui',
2310
  6479049 => 'Te Kuiti',
2311
- 647905 => 'Taupo',
2312
- 647906 => 'Taupo',
2313
- 6479090 => 'Taupo',
2314
- 6479091 => 'Taupo',
2315
  6479100 => 'Rotorua',
2316
  6479101 => 'Rotorua',
2317
  6479102 => 'Rotorua',
@@ -2327,10 +2214,12 @@ return array (
2327
  6479240 => 'Taupo',
2328
  6479241 => 'Whakatane',
2329
  6479242 => 'Rotorua',
 
2330
  6479244 => 'Tauranga',
2331
  6479245 => 'Matamata',
2332
  6479246 => 'Thames',
2333
  6479247 => 'Hamilton',
 
2334
  6479249 => 'Huntly',
2335
  647925 => 'Tauranga',
2336
  647926 => 'Tauranga',
@@ -2346,18 +2235,15 @@ return array (
2346
  6479297 => 'Tauranga',
2347
  6479298 => 'Taupo',
2348
  6479299 => 'Rotorua',
 
2349
  6479420 => 'Tauranga',
2350
  6479421 => 'Tauranga',
2351
  6479422 => 'Tauranga',
2352
  647949 => 'Hamilton',
 
2353
  6479500 => 'Whakatane',
2354
  6479501 => 'Opotiki',
2355
- 647957 => 'Hamilton',
2356
- 647958 => 'Hamilton',
2357
- 647959 => 'Hamilton',
2358
- 647960 => 'Hamilton',
2359
- 647961 => 'Hamilton',
2360
- 647968 => 'Hamilton',
2361
  647970 => 'Hamilton',
2362
  6479708 => 'Thames',
2363
  6479709 => 'Matamata',
@@ -2407,55 +2293,24 @@ return array (
2407
  647987 => 'Tauranga',
2408
  647988 => 'Rotorua',
2409
  647989 => 'Taupo',
2410
- 649200 => 'Auckland',
2411
  6492006 => 'Helensville',
2412
  6492007 => 'Warkworth',
2413
  6492008 => 'Hibiscus Coast',
2414
  6492009 => 'Pukekohe',
2415
- 649210 => 'Auckland',
2416
- 649211 => 'Auckland',
2417
- 649212 => 'Auckland',
2418
- 649213 => 'Auckland',
2419
- 649214 => 'Auckland',
2420
- 649215 => 'Auckland',
2421
- 649216 => 'Auckland',
2422
- 649218 => 'Auckland',
2423
- 649220 => 'Auckland',
2424
- 6492220 => 'Auckland',
2425
- 6492221 => 'Auckland',
2426
- 6492222 => 'Auckland',
2427
- 6492223 => 'Auckland',
2428
- 6492224 => 'Auckland',
2429
  6492225 => 'Pukekohe',
2430
  6492226 => 'Helensville',
2431
  6492227 => 'Whangarei',
2432
  6492228 => 'Warkworth',
2433
  6492229 => 'Hibiscus Coast',
2434
- 649230 => 'Pukekohe',
2435
- 649232 => 'Pukekohe',
2436
- 649233 => 'Pukekohe',
2437
- 649235 => 'Pukekohe',
2438
- 649236 => 'Pukekohe',
2439
- 649237 => 'Pukekohe',
2440
- 649238 => 'Pukekohe',
2441
- 649239 => 'Pukekohe',
2442
- 6492420 => 'Auckland',
2443
  6492426 => 'Whangarei',
2444
  6492427 => 'Warkworth',
2445
  6492428 => 'Hibiscus Coast',
2446
  6492429 => 'Pukekohe',
2447
- 649248 => 'Auckland',
2448
- 649249 => 'Auckland',
2449
- 64925 => 'Auckland',
2450
- 64926 => 'Auckland',
2451
- 64927 => 'Auckland',
2452
- 649280 => 'Auckland',
2453
  6492807 => 'Helensville',
2454
  6492808 => 'Great Barrier Island',
2455
  6492809 => 'Maungaturoto',
2456
- 649281 => 'Auckland',
2457
- 649282 => 'Auckland',
2458
- 6492830 => 'Auckland',
2459
  6492831 => 'Maungaturoto',
2460
  6492832 => 'Dargaville',
2461
  6492833 => 'Warkworth',
@@ -2465,27 +2320,23 @@ return array (
2465
  6492837 => 'Hibiscus Coast',
2466
  6492838 => 'Pukekohe',
2467
  6492839 => 'Whangarei',
2468
- 649291 => 'Auckland',
2469
- 649292 => 'Auckland',
2470
- 649294 => 'Auckland',
2471
- 649295 => 'Auckland',
2472
- 649296 => 'Auckland',
2473
- 649297 => 'Auckland',
2474
- 649298 => 'Auckland',
2475
- 649299 => 'Auckland',
2476
  64930 => 'Auckland',
 
 
2477
  649320 => 'Auckland',
2478
  6493206 => 'Pukekohe',
2479
  6493207 => 'Hibiscus Coast',
2480
  6493208 => 'Helensville',
2481
  6493209 => 'Great Barrier Island',
2482
  64933 => 'Auckland',
 
2483
  649347 => 'Auckland',
2484
  649348 => 'Auckland',
2485
  649349 => 'Auckland',
2486
  64935 => 'Auckland',
2487
  64936 => 'Auckland',
2488
  64937 => 'Auckland',
 
2489
  649390 => 'Auckland',
2490
  649391 => 'Auckland',
2491
  649392 => 'Auckland',
@@ -2503,6 +2354,10 @@ return array (
2503
  6493942 => 'Great Barrier Island',
2504
  6493943 => 'Helensville',
2505
  6493944 => 'Hibiscus Coast',
 
 
 
 
2506
  649399 => 'Auckland',
2507
  6493990 => 'Great Barrier Island',
2508
  6493991 => 'Pukekohe',
@@ -2539,33 +2394,16 @@ return array (
2539
  649452 => 'Auckland',
2540
  649458 => 'Dargaville',
2541
  649459 => 'Whangarei',
2542
- 6494700 => 'Whangarei',
2543
- 6494701 => 'Whangarei',
2544
- 6494702 => 'Whangarei',
2545
- 6494703 => 'Whangarei',
2546
- 6494704 => 'Whangarei',
2547
- 6494705 => 'Whangarei',
2548
- 6494706 => 'Whangarei',
2549
- 649473 => 'Auckland',
2550
- 649475 => 'Auckland',
2551
- 649476 => 'Auckland',
2552
- 649477 => 'Auckland',
2553
- 649478 => 'Auckland',
2554
- 649479 => 'Auckland',
2555
  64948 => 'Auckland',
2556
- 64952 => 'Auckland',
2557
- 64953 => 'Auckland',
2558
- 649550 => 'Auckland',
2559
- 649551 => 'Auckland',
2560
  649552 => 'Pukekohe',
2561
  6495530 => 'Great Barrier Island',
2562
  6495531 => 'Helensville',
2563
  6495532 => 'Warkworth',
2564
  6495533 => 'Whangarei',
2565
- 6495538 => 'Auckland',
2566
- 6495539 => 'Auckland',
2567
  649554 => 'Hibiscus Coast',
2568
- 649555 => 'Auckland',
2569
  6495560 => 'Whangarei',
2570
  6495561 => 'Whangarei',
2571
  6495562 => 'Whangarei',
@@ -2576,46 +2414,20 @@ return array (
2576
  6495567 => 'Kaitaia',
2577
  6495568 => 'Kawakawa',
2578
  6495569 => 'Maungaturoto',
2579
- 649557 => 'Auckland',
2580
- 649558 => 'Auckland',
2581
  6495588 => 'Hibiscus Coast',
2582
  6495589 => 'Pukekohe',
2583
- 64957 => 'Auckland',
2584
- 649580 => 'Auckland',
2585
- 649581 => 'Auckland',
2586
- 649582 => 'Auckland',
2587
- 649583 => 'Auckland',
2588
- 649585 => 'Auckland',
2589
- 649588 => 'Auckland',
2590
- 649589 => 'Auckland',
2591
- 649590 => 'Auckland',
2592
- 649600 => 'Auckland',
2593
  6496007 => 'Helensville',
2594
  6496008 => 'Hibiscus Coast',
2595
  6496009 => 'Pukekohe',
2596
  6496010 => 'Kaitaia',
2597
- 6496011 => 'Kaikohe',
2598
  6496012 => 'Kawakawa',
2599
  6496013 => 'Whangarei',
2600
  6496014 => 'Dargaville',
2601
  6496015 => 'Maungaturoto',
2602
  6496016 => 'Warkworth',
2603
  6496017 => 'Great Barrier Island',
2604
- 6496018 => 'Auckland',
2605
- 6496019 => 'Auckland',
2606
  6496100 => 'Pukekohe',
2607
- 64962 => 'Auckland',
2608
- 649630 => 'Auckland',
2609
- 649631 => 'Auckland',
2610
- 649632 => 'Auckland',
2611
- 649633 => 'Auckland',
2612
- 649634 => 'Auckland',
2613
- 649635 => 'Auckland',
2614
- 649636 => 'Auckland',
2615
- 649638 => 'Auckland',
2616
- 649639 => 'Auckland',
2617
- 649640 => 'Auckland',
2618
- 649650 => 'Auckland',
2619
  6496507 => 'Helensville',
2620
  6496508 => 'Hibiscus Coast',
2621
  6496509 => 'Pukekohe',
@@ -2630,12 +2442,6 @@ return array (
2630
  6496518 => 'Kawakawa',
2631
  6496519 => 'Maungaturoto',
2632
  649652 => 'Warkworth',
2633
- 649666 => 'Auckland',
2634
- 6496880 => 'Auckland',
2635
- 6496881 => 'Auckland',
2636
- 6496882 => 'Auckland',
2637
- 6496883 => 'Auckland',
2638
- 6496884 => 'Auckland',
2639
  6496990 => 'Kaitaia',
2640
  6496991 => 'Kaikohe',
2641
  6496992 => 'Kawakawa',
@@ -2645,7 +2451,6 @@ return array (
2645
  6496996 => 'Warkworth',
2646
  6496997 => 'Hibiscus Coast',
2647
  6496998 => 'Helensville',
2648
- 6496999 => 'Auckland',
2649
  6497770 => 'Whangarei',
2650
  6497771 => 'Kaikohe',
2651
  6497772 => 'Kaitaia',
@@ -2656,38 +2461,13 @@ return array (
2656
  6497777 => 'Auckland',
2657
  6497778 => 'Pukekohe',
2658
  6497779 => 'Great Barrier Island',
2659
- 649801 => 'Auckland',
2660
  6498016 => 'Hibiscus Coast',
2661
  6498017 => 'Hibiscus Coast',
2662
  6498018 => 'Whangarei',
2663
  6498019 => 'Pukekohe',
2664
- 649810 => 'Auckland',
2665
- 649811 => 'Auckland',
2666
- 649812 => 'Auckland',
2667
- 649813 => 'Auckland',
2668
- 649814 => 'Auckland',
2669
- 649815 => 'Auckland',
2670
- 649816 => 'Auckland',
2671
- 649817 => 'Auckland',
2672
- 649818 => 'Auckland',
2673
- 649820 => 'Auckland',
2674
- 649822 => 'Auckland',
2675
- 649825 => 'Auckland',
2676
- 649826 => 'Auckland',
2677
- 649827 => 'Auckland',
2678
- 649828 => 'Auckland',
2679
- 649829 => 'Auckland',
2680
- 64983 => 'Auckland',
2681
- 649840 => 'Auckland',
2682
- 649845 => 'Auckland',
2683
- 649846 => 'Auckland',
2684
- 649847 => 'Auckland',
2685
- 649849 => 'Auckland',
2686
- 649869 => 'Auckland',
2687
  6498690 => 'Kawakawa',
2688
  6498691 => 'Maungaturoto',
2689
- 649880 => 'Auckland',
2690
- 649881 => 'Auckland',
2691
  6498814 => 'Pukekohe',
2692
  6498815 => 'Helensville',
2693
  6498816 => 'Great Barrier Island',
@@ -2699,8 +2479,6 @@ return array (
2699
  6498824 => 'Kawakawa',
2700
  6498825 => 'Maungaturoto',
2701
  6498826 => 'Warkworth',
2702
- 649883 => 'Auckland',
2703
- 649884 => 'Auckland',
2704
  6498850 => 'Great Barrier Island',
2705
  6498851 => 'Pukekohe',
2706
  6498852 => 'Warkworth',
@@ -2711,28 +2489,18 @@ return array (
2711
  6498857 => 'Dargaville',
2712
  6498858 => 'Kaikohe',
2713
  6498859 => 'Kaitaia',
2714
- 649886 => 'Auckland',
2715
- 649887 => 'Auckland',
2716
- 649888 => 'Auckland',
2717
  6498880 => 'Helensville',
2718
  6498881 => 'Hibiscus Coast',
2719
  6498882 => 'Whangarei',
2720
  6498883 => 'Whangarei',
2721
- 649889 => 'Auckland',
2722
- 649890 => 'Auckland',
2723
  6498900 => 'Pukekohe',
2724
  6498901 => 'Pukekohe',
2725
- 649892 => 'Auckland',
2726
- 6499000 => 'Auckland',
2727
- 6499001 => 'Auckland',
2728
- 6499002 => 'Auckland',
2729
  6499003 => 'Warkworth',
2730
  6499004 => 'Hibiscus Coast',
2731
- 6499005 => 'Auckland',
2732
  6499006 => 'Whangarei',
2733
  6499007 => 'Kaikohe',
2734
  6499008 => 'Pukekohe',
2735
- 6499009 => 'Auckland',
2736
  6499010 => 'Kaitaia',
2737
  6499011 => 'Kaitaia',
2738
  6499012 => 'Kawakawa',
@@ -2744,7 +2512,6 @@ return array (
2744
  6499018 => 'Maungaturoto',
2745
  6499019 => 'Maungaturoto',
2746
  649902 => 'Warkworth',
2747
- 649903 => 'Auckland',
2748
  6499040 => 'Helensville',
2749
  6499041 => 'Helensville',
2750
  6499042 => 'Hibiscus Coast',
@@ -2755,7 +2522,7 @@ return array (
2755
  6499047 => 'Pukekohe',
2756
  6499048 => 'Pukekohe',
2757
  6499049 => 'Great Barrier Island',
2758
- 649905 => 'Auckland',
2759
  6499061 => 'Hibiscus Coast',
2760
  6499062 => 'Hibiscus Coast',
2761
  6499063 => 'Hibiscus Coast',
@@ -2765,34 +2532,18 @@ return array (
2765
  6499067 => 'Pukekohe',
2766
  6499068 => 'Pukekohe',
2767
  6499069 => 'Pukekohe',
2768
- 649908 => 'Auckland',
2769
- 649909 => 'Auckland',
2770
  6499100 => 'Pukekohe',
2771
  6499101 => 'Pukekohe',
2772
- 649912 => 'Auckland',
2773
- 649913 => 'Auckland',
2774
- 649914 => 'Auckland',
2775
- 649915 => 'Auckland',
2776
- 649916 => 'Auckland',
2777
- 649917 => 'Auckland',
2778
- 649918 => 'Auckland',
2779
- 649919 => 'Auckland',
2780
- 64992 => 'Auckland',
2781
  6499295 => 'Kaikohe',
2782
  6499296 => 'Kaitaia',
2783
  6499297 => 'Hibiscus Coast',
2784
  6499298 => 'Pukekohe',
2785
  6499299 => 'Whangarei',
2786
- 649930 => 'Auckland',
2787
- 649940 => 'Auckland',
2788
- 649941 => 'Auckland',
2789
  6499420 => 'Pukekohe',
2790
  6499421 => 'Hibiscus Coast',
2791
  6499422 => 'Helensville',
2792
  6499423 => 'Great Barrier Island',
2793
- 6499424 => 'Auckland',
2794
- 6499425 => 'Auckland',
2795
- 6499426 => 'Auckland',
2796
  6499428 => 'Warkworth',
2797
  6499450 => 'Warkworth',
2798
  6499451 => 'Warkworth',
@@ -2820,17 +2571,9 @@ return array (
2820
  6499473 => 'Helensville',
2821
  6499474 => 'Helensville',
2822
  6499475 => 'Hibiscus Coast',
2823
- 6499476 => 'Auckland',
2824
  6499477 => 'Pukekohe',
2825
  6499478 => 'Pukekohe',
2826
  6499479 => 'Pukekohe',
2827
- 649948 => 'Auckland',
2828
- 649949 => 'Auckland',
2829
- 649950 => 'Auckland',
2830
- 649951 => 'Auckland',
2831
- 649952 => 'Auckland',
2832
- 649953 => 'Auckland',
2833
- 649954 => 'Auckland',
2834
  6499551 => 'Whangarei',
2835
  6499552 => 'Dargaville',
2836
  6499553 => 'Kaikohe',
@@ -2840,21 +2583,11 @@ return array (
2840
  6499557 => 'Warkworth',
2841
  6499558 => 'Great Barrier Island',
2842
  6499559 => 'Whangarei',
2843
- 649956 => 'Auckland',
2844
  649957 => 'Pukekohe',
2845
  649958 => 'Helensville',
2846
  649959 => 'Hibiscus Coast',
2847
- 649962 => 'Auckland',
2848
- 649963 => 'Auckland',
2849
  6499630 => 'Pukekohe',
2850
  6499631 => 'Pukekohe',
2851
- 649964 => 'Auckland',
2852
- 649965 => 'Auckland',
2853
- 649966 => 'Auckland',
2854
- 649967 => 'Auckland',
2855
- 649968 => 'Auckland',
2856
- 649969 => 'Auckland',
2857
- 64997 => 'Auckland',
2858
  6499716 => 'Helensville',
2859
  6499717 => 'Whangarei',
2860
  6499718 => 'Whangarei',
@@ -2867,19 +2600,11 @@ return array (
2867
  6499746 => 'Kawakawa',
2868
  6499747 => 'Dargaville',
2869
  6499748 => 'Whangarei',
2870
- 649980 => 'Auckland',
2871
  6499810 => 'Hibiscus Coast',
2872
  6499811 => 'Hibiscus Coast',
2873
  6499818 => 'Great Barrier Island',
2874
  6499819 => 'Helensville',
2875
- 649982 => 'Whangarei',
2876
- 649983 => 'Whangarei',
2877
- 649984 => 'Auckland',
2878
- 649985 => 'Auckland',
2879
- 649986 => 'Whangarei',
2880
- 6499870 => 'Whangarei',
2881
- 6499871 => 'Whangarei',
2882
- 6499872 => 'Whangarei',
2883
  6499873 => 'Kaitaia',
2884
  6499874 => 'Kawakawa',
2885
  6499875 => 'Dargaville',
@@ -2887,5 +2612,4 @@ return array (
2887
  6499877 => 'Maungaturoto',
2888
  6499878 => 'Warkworth',
2889
  6499879 => 'Warkworth',
2890
- 649988 => 'Whangarei',
2891
  );
39
  643226 => 'Otautau',
40
  643230 => 'Invercargill',
41
  643231 => 'Invercargill',
42
+ 643232 => 'Riverton/Winton',
43
+ 643233 => 'Riverton/Winton',
44
  643234 => 'Riverton',
45
  643235 => 'Invercargill',
46
  643236 => 'Winton',
47
+ 643237 => 'Riverton/Winton',
48
+ 643238 => 'Riverton/Winton',
49
  643239 => 'Invercargill',
50
+ 643240 => 'Tokanui/Lumsden/Te Anau',
51
+ 643241 => 'Tokanui/Lumsden/Te Anau',
52
  6432420 => 'Christchurch',
53
+ 6432421 => 'Tokanui/Lumsden/Te Anau',
54
+ 6432422 => 'Tokanui/Lumsden/Te Anau',
55
  6432423 => 'Dunedin',
56
  6432424 => 'Nelson',
57
  6432425 => 'Invercargill',
59
  6432427 => 'Greymouth',
60
  6432428 => 'Queenstown',
61
  6432429 => 'Timaru',
62
+ 643243 => 'Tokanui/Lumsden/Te Anau',
63
  6432440 => 'Christchurch',
64
  6432441 => 'Christchurch',
65
  6432442 => 'Christchurch',
70
  6432447 => 'Timaru',
71
  6432448 => 'Dunedin',
72
  6432449 => 'Queenstown',
73
+ 643245 => 'Tokanui/Lumsden/Te Anau',
74
  643246 => 'Tokanui',
75
+ 643247 => 'Tokanui/Lumsden/Te Anau',
76
  643248 => 'Lumsden',
77
  643249 => 'Te Anau',
78
+ 64325 => 'South Island',
79
  643250 => 'Christchurch',
80
  643260 => 'Christchurch',
81
  6432606 => 'Dunedin',
86
  6432611 => 'Kaikoura',
87
  6432612 => 'Rangiora',
88
  6432613 => 'Waitangi (Chatham Is.)',
89
+ 6432614 => 'South Island',
90
  6432615 => 'Amberley',
91
  6432616 => 'Ashburton',
92
  6432617 => 'Cheviot',
137
  6432662 => 'Christchurch',
138
  6432663 => 'Christchurch',
139
  6432664 => 'Christchurch',
140
+ 6432665 => 'South Island',
141
+ 6432666 => 'South Island',
142
+ 6432667 => 'South Island',
143
  6432668 => 'Blenheim',
144
  6432669 => 'Rangiora',
145
+ 643267 => 'South Island',
146
+ 643268 => 'South Island',
147
+ 643269 => 'South Island',
148
  643270 => 'Christchurch',
149
  6432710 => 'Christchurch',
150
  6432711 => 'Akaroa',
195
  6432756 => 'Gore',
196
  6432757 => 'Lumsden',
197
  6432758 => 'Otautau',
198
+ 6432759 => 'South Island',
199
+ 643276 => 'South Island',
200
+ 643277 => 'South Island',
201
+ 643278 => 'South Island',
202
+ 643279 => 'South Island',
203
+ 64328 => 'South Island',
204
  6432800 => 'Te Anau',
205
  6432801 => 'Lumsden',
206
  6432802 => 'Gore',
225
  6432887 => 'Nelson',
226
  6432888 => 'Nelson',
227
  6432889 => 'Blenheim',
228
+ 64329 => 'South Island',
229
  6432990 => 'Lumsden',
230
  6432991 => 'Milton',
231
  6432992 => 'Gore',
236
  6432997 => 'Edendale',
237
  6432998 => 'Tokanui',
238
  6432999 => 'Invercargill',
239
+ 64330 => 'Ashburton/Akaroa/Chatham Islands',
 
 
 
 
 
 
 
240
  64331 => 'Rangiora/Amberley/Culverden/Darfield/Cheviot/Kaikoura',
241
  64332 => 'Christchurch',
242
  643331 => 'Christchurch',
249
  643339 => 'Christchurch',
250
  64334 => 'Christchurch',
251
  64335 => 'Christchurch',
252
+ 64336 => 'South Island',
253
  64337 => 'Christchurch',
254
  64338 => 'Christchurch',
255
  643390 => 'Christchurch',
263
  6433917 => 'Franz Josef',
264
  6433918 => 'Fox Glacier',
265
  6433919 => 'Haast',
266
+ 643392 => 'South Island',
267
  643393 => 'Christchurch',
268
  6433940 => 'Westport',
269
  6433941 => 'Blenheim',
285
  6433957 => 'Palmerston',
286
  6433958 => 'Oamaru',
287
  6433959 => 'Balclutha',
288
+ 643396 => 'South Island',
289
+ 643397 => 'South Island',
290
  6433980 => 'Milton',
291
  6433981 => 'Twizel',
292
  6433982 => 'Kurow',
297
  6433987 => 'Cromwell',
298
  6433988 => 'Wanaka',
299
  6433989 => 'Waimate',
300
+ 6433990 => 'South Island',
301
  6433991 => 'Invercargill',
302
  6433992 => 'Riverton',
303
  6433993 => 'Te Anau',
307
  6433997 => 'Gore',
308
  6433998 => 'Lumsden',
309
  6433999 => 'Otautau',
310
+ 64340 => 'South Island',
311
  643409 => 'Queenstown',
312
+ 643410 => 'Balclutha/Milton',
313
+ 643411 => 'Balclutha/Milton',
314
  643412 => 'Balclutha',
315
  643413 => 'Balclutha',
316
+ 643414 => 'Balclutha/Milton',
317
  643415 => 'Balclutha',
318
+ 643416 => 'Balclutha/Milton',
319
  643417 => 'Milton',
320
  643418 => 'Balclutha',
321
  643419 => 'Balclutha',
392
  6434297 => 'Westport',
393
  6434298 => 'Hokitika',
394
  6434299 => 'Haast',
395
+ 64343 => 'Oamaru',
396
  643430 => 'Mt Cook',
397
+ 643435 => 'Oamaru/Mount Cook/Twizel/Kurow',
 
 
 
398
  6434350 => 'Twizel',
399
  6434351 => 'Mt Cook',
400
  6434353 => 'Twizel',
401
  6434359 => 'Twizel',
402
  643436 => 'Kurow',
 
403
  643438 => 'Kurow',
 
404
  6434400 => 'Alexandra',
405
  6434401 => 'Cromwell',
406
  6434402 => 'Alexandra',
407
+ 6434403 => 'Queenstown/Cromwell/Alexandra/Wanaka/Ranfurly/Roxburgh',
408
  6434404 => 'Alexandra',
409
  6434405 => 'Alexandra',
410
+ 6434406 => 'Queenstown/Cromwell/Alexandra/Wanaka/Ranfurly/Roxburgh',
411
+ 6434407 => 'Queenstown/Cromwell/Alexandra/Wanaka/Ranfurly/Roxburgh',
412
+ 6434408 => 'Queenstown/Cromwell/Alexandra/Wanaka/Ranfurly/Roxburgh',
413
+ 6434409 => 'Queenstown/Cromwell/Alexandra/Wanaka/Ranfurly/Roxburgh',
414
  643441 => 'Queenstown',
415
  643442 => 'Queenstown',
416
  643443 => 'Wanaka',
428
  643455 => 'Dunedin',
429
  643456 => 'Dunedin',
430
  643457 => 'Dunedin',
431
+ 643458 => 'Dunedin/Queenstown',
432
+ 643459 => 'Dunedin/Queenstown',
433
+ 643460 => 'Dunedin/Palmerston',
434
+ 643461 => 'Dunedin/Palmerston',
435
+ 643462 => 'Dunedin/Palmerston',
436
  643463 => 'Palmerston',
437
  643464 => 'Dunedin',
438
  643465 => 'Palmerston',
441
  643468 => 'Dunedin',
442
  643469 => 'Dunedin',
443
  64347 => 'Dunedin',
444
+ 64348 => 'Dunedin',
445
+ 643480 => 'Dunedin/Lawrence/Mosgiel',
446
+ 643483 => 'Dunedin/Lawrence/Mosgiel',
447
  643485 => 'Lawrence',
448
+ 64349 => 'South Island',
 
 
 
449
  6434990 => 'Queenstown',
450
  6434991 => 'Cromwell',
451
  6434992 => 'Ranfurly',
456
  6434997 => 'Lawrence',
457
  6434998 => 'Dunedin',
458
  6434999 => 'Dunedin',
459
+ 6435 => 'South Island',
460
  643520 => 'Blenheim',
461
  643521 => 'Nelson',
462
  643522 => 'Nelson',
584
  6435888 => 'Timaru',
585
  6435889 => 'Timaru',
586
  643590 => 'Christchurch',
587
+ 643595 => 'Christchurch',
 
 
 
 
 
 
588
  6435990 => 'Hokitika',
589
  6435991 => 'Franz Josef',
590
  6435992 => 'Fox Glacier',
595
  6435997 => 'Amberley',
596
  6435998 => 'Rangiora',
597
  6435999 => 'Christchurch',
598
+ 64360 => 'South Island',
599
+ 64361 => 'Timaru',
600
+ 64362 => 'South Island',
601
+ 64363 => 'South Island',
602
+ 64364 => 'South Island',
603
  6436500 => 'Christchurch',
604
  6436501 => 'Akaroa',
605
  6436502 => 'Amberley',
730
  6436688 => 'Waitangi (Chatham Is.)',
731
  6436689 => 'Christchurch',
732
  643669 => 'Christchurch',
733
+ 64367 => 'South Island',
734
+ 64368 => 'Timaru',
735
  643680 => 'Fairlie',
736
+ 643682 => 'Timaru/Waimate/Fairlie',
 
 
737
  643685 => 'Fairlie',
 
 
 
738
  643689 => 'Waimate',
739
+ 64369 => 'Geraldine',
740
  643690 => 'Waimate',
 
 
 
 
741
  6436990 => 'Cheviot',
742
  6436991 => 'Culverden',
743
  6436992 => 'Greymouth',
748
  6436997 => 'Motueka',
749
  6436998 => 'Blenheim',
750
  6436999 => 'Nelson',
751
+ 64370 => 'South Island',
752
+ 64371 => 'South Island',
753
+ 64372 => 'South Island',
754
+ 64373 => 'Greymouth',
755
  643740 => 'Christchurch',
756
  643741 => 'Christchurch',
757
  643742 => 'Dunedin',
804
  6437485 => 'Te Anau',
805
  6437486 => 'Tokanui',
806
  6437487 => 'Winton',
807
+ 6437488 => 'South Island',
808
+ 6437489 => 'South Island',
809
  643749 => 'Christchurch',
810
  643750 => 'Haast',
811
  643751 => 'Fox Glacier',
812
  643752 => 'Franz Josef',
813
  643753 => 'Hokitika',
814
+ 643754 => 'Hokitika/Franz Josef Glacier/Fox Glacier/Haast',
815
  643755 => 'Hokitika',
816
  643756 => 'Hokitika',
817
+ 643757 => 'Hokitika/Franz Josef Glacier/Fox Glacier/Haast',
818
+ 643758 => 'Hokitika/Franz Josef Glacier/Fox Glacier/Haast',
819
+ 643759 => 'Hokitika/Franz Josef Glacier/Fox Glacier/Haast',
820
+ 64376 => 'Greymouth',
821
+ 64377 => 'South Island',
822
  6437770 => 'Nelson',
823
  6437771 => 'Blenheim',
824
  6437772 => 'Timaru',
829
  6437777 => 'Christchurch',
830
  6437778 => 'Greymouth',
831
  6437779 => 'Invercargill',
832
+ 64378 => 'Westport',
833
+ 64379 => 'South Island',
 
834
  6439000 => 'Christchurch',
835
  6439001 => 'Christchurch',
836
  6439002 => 'Rangiora',
844
  6439010 => 'Queenstown',
845
  6439011 => 'Queenstown',
846
  6439012 => 'Queenstown',
847
+ 6439013 => 'Ashburton',
848
+ 6439014 => 'Ashburton',
849
  6439015 => 'Wanaka',
850
  6439016 => 'Alexandra',
851
  6439017 => 'Cromwell',
852
  6439018 => 'Ranfurly',
853
  6439019 => 'Roxburgh',
854
  6439020 => 'Gore',
855
+ 6439021 => 'Ashburton',
856
+ 6439022 => 'Ashburton',
857
  6439023 => 'Te Anau',
858
  6439024 => 'Lumsden',
859
  6439025 => 'Otautau',
863
  6439029 => 'Tokanui',
864
  643903 => 'Christchurch',
865
  6439040 => 'Balclutha',
866
+ 6439041 => 'Ashburton',
867
  6439042 => 'Oamaru',
868
+ 6439043 => 'Ashburton',
869
  6439044 => 'Milton',
870
  6439045 => 'Twizel',
871
  6439046 => 'Kurow',
872
  6439047 => 'Alexandra',
873
  6439048 => 'Lawrence',
874
  6439049 => 'Palmerston',
875
+ 643905 => 'Ashburton',
876
  6439050 => 'Geraldine',
877
  6439052 => 'Mt Cook',
878
  6439055 => 'Fairlie',
879
  6439057 => 'Waimate',
880
  6439060 => 'Greymouth',
881
  6439061 => 'Greymouth',
882
+ 6439062 => 'Ashburton',
883
  6439063 => 'Westport',
884
+ 6439064 => 'Ashburton',
885
+ 6439065 => 'Ashburton',
886
  6439066 => 'Hokitika',
887
  6439067 => 'Franz Josef',
888
  6439068 => 'Fox Glacier',
889
  6439069 => 'Haast',
890
  6439070 => 'Motueka',
891
  6439071 => 'Motueka',
892
+ 6439072 => 'Ashburton',
893
  6439073 => 'Motueka',
894
+ 6439074 => 'Ashburton',
895
  6439075 => 'Takaka',
896
+ 6439076 => 'Ashburton',
897
+ 6439077 => 'Ashburton',
898
+ 6439078 => 'Ashburton',
899
  6439079 => 'Murchison',
900
+ 643908 => 'Ashburton',
 
901
  6439082 => 'Culverden',
902
  6439083 => 'Cheviot',
903
  6439084 => 'Amberley',
905
  6439090 => 'Rangiora',
906
  6439091 => 'Rangiora',
907
  6439092 => 'Rangiora',
908
+ 6439093 => 'Ashburton',
909
+ 6439094 => 'Ashburton',
910
+ 6439095 => 'Ashburton',
911
+ 6439096 => 'Ashburton',
912
  6439097 => 'Darfield',
913
  6439098 => 'Akaroa',
914
  6439099 => 'Kaikoura',
915
+ 64391 => 'South Island',
916
  643920 => 'Rangiora',
917
  643921 => 'Blenheim',
918
  643922 => 'Nelson',
973
  6439325 => 'Kaikoura',
974
  6439326 => 'Rangiora',
975
  6439327 => 'Ashburton',
976
+ 6439328 => 'South Island',
977
+ 6439329 => 'South Island',
978
  6439330 => 'Westport',
979
  6439331 => 'Greymouth',
980
  6439332 => 'Hokitika',
984
  6439336 => 'Cromwell',
985
  6439337 => 'Wanaka',
986
  6439338 => 'Queenstown',
987
+ 6439339 => 'South Island',
988
  6439340 => 'Mt Cook',
989
  6439341 => 'Fairlie',
990
  6439342 => 'Geraldine',
993
  6439345 => 'Christchurch',
994
  6439346 => 'Christchurch',
995
  6439347 => 'Christchurch',
996
+ 6439348 => 'South Island',
997
+ 6439349 => 'South Island',
998
+ 643935 => 'South Island',
999
+ 643936 => 'South Island',
1000
+ 643937 => 'South Island',
1001
+ 643938 => 'South Island',
1002
+ 643939 => 'South Island',
1003
  643940 => 'Christchurch',
1004
  643941 => 'Christchurch',
1005
  643942 => 'Christchurch',
1038
  6439534 => 'Mt Cook',
1039
  6439535 => 'Fairlie',
1040
  6439536 => 'Waimate',
1041
+ 6439537 => 'Dunedin/Timaru',
1042
+ 6439538 => 'Dunedin/Timaru',
1043
+ 6439539 => 'Dunedin/Timaru',
1044
+ 643954 => 'Dunedin/Timaru',
1045
  643955 => 'Dunedin',
1046
  643956 => 'Timaru',
1047
  643957 => 'Timaru',
1048
+ 643958 => 'Dunedin/Timaru',
1049
+ 643959 => 'Dunedin/Timaru',
1050
+ 64396 => 'Christchurch',
 
 
 
 
 
 
1051
  6439700 => 'Nelson',
1052
  6439701 => 'Nelson',
1053
  6439702 => 'Nelson',
1135
  6439856 => 'Darfield',
1136
  6439857 => 'Akaroa',
1137
  6439858 => 'Kaikoura',
1138
+ 6439859 => 'Christchurch/Blenheim/Nelson',
1139
  6439860 => 'Nelson',
1140
  6439861 => 'Nelson',
1141
  6439862 => 'Nelson',
1142
  6439863 => 'Motueka',
1143
  6439864 => 'Takaka',
1144
  6439865 => 'Murchison',
1145
+ 6439866 => 'Christchurch/Blenheim/Nelson',
1146
+ 6439867 => 'Christchurch/Blenheim/Nelson',
1147
  6439868 => 'Blenheim',
1148
  6439869 => 'Blenheim',
1149
  6439870 => 'Queenstown',
1153
  6439874 => 'Cromwell',
1154
  6439875 => 'Ranfurly',
1155
  6439876 => 'Roxburgh',
1156
+ 6439877 => 'Christchurch/Blenheim/Nelson',
1157
+ 6439878 => 'Christchurch/Blenheim/Nelson',
1158
+ 6439879 => 'Christchurch/Blenheim/Nelson',
1159
  6439880 => 'Greymouth',
1160
  6439881 => 'Greymouth',
1161
  6439882 => 'Westport',
1162
  6439883 => 'Hokitika',
1163
  6439884 => 'Franz Josef',
1164
  6439885 => 'Fox Glacier',
1165
+ 6439886 => 'Christchurch/Blenheim/Nelson',
1166
+ 6439887 => 'Christchurch/Blenheim/Nelson',
1167
+ 6439888 => 'Christchurch/Blenheim/Nelson',
1168
+ 6439889 => 'Christchurch/Blenheim/Nelson',
1169
  643989 => 'Nelson',
1170
+ 64399 => 'South Island',
1171
  644202 => 'Wellington',
1172
  644203 => 'Wellington',
1173
  644204 => 'Wellington',
1198
  644281 => 'Wellington',
1199
  6442820 => 'Wellington',
1200
  6442821 => 'Wellington',
1201
+ 64429 => 'Paraparaumu',
1202
+ 6443 => 'Wellington',
 
 
 
 
 
 
 
 
1203
  6443333 => 'Paraparaumu',
 
1204
  6443708 => 'Paraparaumu',
1205
  6443709 => 'Paraparaumu',
 
 
 
 
1206
  644393 => 'Paraparaumu',
 
1207
  6443990 => 'Paraparaumu',
1208
+ 6444 => 'Wellington',
 
 
 
 
 
 
 
 
 
 
 
 
1209
  6444887 => 'Paraparaumu',
1210
  6444888 => 'Paraparaumu',
1211
  6444889 => 'Paraparaumu',
1212
+ 6445 => 'Wellington/Hutt Valley',
1213
+ 64452 => 'Wellington',
 
 
 
 
 
 
 
 
 
 
 
1214
  644550 => 'Wellington',
1215
  644551 => 'Paraparaumu',
1216
  644555 => 'Wellington',
1224
  644587 => 'Wellington',
1225
  644589 => 'Wellington',
1226
  644590 => 'Wellington',
1227
+ 644595 => 'Wellington',
 
 
 
 
 
 
1228
  644619 => 'Wellington',
1229
  644650 => 'Wellington',
1230
  6446509 => 'Paraparaumu',
1232
  644777 => 'Wellington',
1233
  6447770 => 'Paraparaumu',
1234
  6447771 => 'Paraparaumu',
1235
+ 64480 => 'Wellington',
 
 
 
 
 
1236
  644810 => 'Wellington',
1237
  644815 => 'Wellington',
1238
  644816 => 'Wellington',
1254
  644895 => 'Paraparaumu',
1255
  644896 => 'Wellington',
1256
  644897 => 'Wellington',
1257
+ 6449 => 'Wellington',
1258
  6449008 => 'Paraparaumu',
 
1259
  644902 => 'Paraparaumu',
 
1260
  6449030 => 'Paraparaumu',
1261
  6449031 => 'Paraparaumu',
1262
  644904 => 'Paraparaumu',
1263
  644905 => 'Paraparaumu',
1264
  644906 => 'Paraparaumu',
1265
+ 644908 => 'Paraparaumu',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1266
  6449740 => 'Paraparaumu',
1267
  6449741 => 'Paraparaumu',
1268
  644975 => 'Paraparaumu',
1332
  6462412 => 'Gisborne',
1333
  6462413 => 'Gisborne',
1334
  6462414 => 'Napier',
 
1335
  6462416 => 'Waipukurau',
1336
  6462417 => 'Wanganui',
1337
  6462418 => 'Palmerston North',
1371
  6462627 => 'Wanganui',
1372
  6462628 => 'Wanganui',
1373
  6462629 => 'Levin',
1374
+ 64627 => 'Hawera',
 
 
 
 
1375
  6462800 => 'Palmerston North',
1376
  6462801 => 'Palmerston North',
1377
  6462802 => 'Palmerston North',
1392
  6462817 => 'Napier',
1393
  6462818 => 'New Plymouth',
1394
  6462819 => 'Levin',
1395
+ 64630 => 'Featherston',
1396
+ 64632 => 'Palmerston North',
1397
+ 646320 => 'Palmerston North/Marton',
 
1398
  646321 => 'Marton',
1399
  646322 => 'Marton',
 
 
 
 
1400
  646327 => 'Marton',
1401
+ 64634 => 'Wanganui',
 
 
 
 
 
 
 
 
 
 
1402
  64635 => 'Palmerston North',
1403
+ 64636 => 'Levin',
 
 
1404
  646365 => 'Palmerston North',
1405
+ 64637 => 'Masterton',
1406
+ 646371 => 'Masterton/Dannevirke/Pahiatua',
 
 
 
 
 
1407
  646374 => 'Dannevirke',
1408
  646375 => 'Pahiatua',
1409
  646376 => 'Pahiatua',
1410
+ 64638 => 'Taihape/Ohakune/Waiouru',
 
 
1411
  646382 => 'Taihape',
1412
  646385 => 'Ohakune',
1413
  646387 => 'Waiouru',
1493
  6466007 => 'Stratford',
1494
  6466008 => 'Ohakune',
1495
  6466009 => 'Waiouru',
 
1496
  6466010 => 'Taihape',
1497
  6466011 => 'Marton',
 
1498
  6466013 => 'Featherston',
1499
+ 6466014 => 'Napier',
1500
+ 6466015 => 'Napier',
1501
+ 6466016 => 'Napier',
1502
+ 6466017 => 'Napier',
1503
+ 6466018 => 'Napier',
1504
+ 6466019 => 'Napier',
1505
  646650 => 'Napier',
1506
  6466508 => 'Napier/Wairoa',
1507
  6466509 => 'Napier/Waipukurau',
1543
  6466997 => 'New Plymouth',
1544
  6466998 => 'New Plymouth',
1545
  6466999 => 'New Plymouth',
1546
+ 64675 => 'New Plymouth',
1547
  646750 => 'Mokau',
 
 
1548
  6467525 => 'Mokau',
1549
  6467529 => 'Mokau',
1550
+ 6467556 => 'New Plymouth/Mokau',
1551
+ 646760 => 'New Plymouth/Opunake/Stratford',
 
 
 
 
 
 
 
 
 
 
 
 
 
1552
  646761 => 'Opunake',
1553
  646762 => 'Stratford',
1554
  646763 => 'Opunake',
1555
  646764 => 'Stratford',
1556
  646765 => 'Stratford',
1557
  646766 => 'New Plymouth',
1558
+ 646767 => 'New Plymouth/Opunake/Stratford',
1559
  646768 => 'New Plymouth',
1560
  646769 => 'New Plymouth',
1561
  6467770 => 'Gisborne',
1594
  6468264 => 'Palmerston North',
1595
  6468268 => 'New Plymouth',
1596
  6468269 => 'New Plymouth',
1597
+ 64683 => 'Napier/Hastings',
1598
+ 646830 => 'Napier',
1599
+ 6468304 => 'Napier/Wairoa',
1600
+ 6468305 => 'Napier/Wairoa',
1601
+ 6468306 => 'Napier/Wairoa',
1602
+ 6468307 => 'Napier/Wairoa',
1603
+ 646832 => 'Napier/Wairoa',
 
 
 
 
1604
  646837 => 'Wairoa',
1605
  646838 => 'Wairoa',
1606
+ 646840 => 'Napier City',
1607
+ 646841 => 'Napier City',
1608
  646842 => 'Napier/Hastings',
1609
  646843 => 'Napier/Hastings',
1610
  646844 => 'Napier/Hastings',
1611
  646845 => 'Napier/Hastings',
1612
+ 646846 => 'Napier City',
1613
  646847 => 'Napier/Hastings',
1614
+ 646848 => 'Napier City',
1615
+ 646849 => 'Napier City',
1616
+ 64685 => 'Waipukurau',
1617
+ 64686 => 'Gisborne',
1618
+ 646860 => 'Gisborne/Ruatoria',
 
 
1619
  646864 => 'Ruatoria',
1620
+ 646866 => 'Gisborne/Ruatoria',
1621
+ 646869 => 'Gisborne/Ruatoria',
 
 
 
 
 
1622
  64687 => 'Napier/Hastings',
1623
  6468800 => 'Napier/Hastings',
1624
  6468801 => 'Wanganui',
1752
  6469317 => 'Pahiatua',
1753
  6469318 => 'Levin',
1754
  6469319 => 'Masterton',
1755
+ 64694 => 'Masterton/Levin',
1756
  646946 => 'Masterton',
1757
  6469468 => 'Featherston',
1758
  646949 => 'Levin W100',
1759
+ 646950 => 'Palmerston North/New Plymouth',
1760
  646951 => 'Palmerston North',
1761
  646952 => 'Palmerston North W100',
1762
  646953 => 'Palmerston North W100',
1763
  646954 => 'Palmerston North W100',
1764
+ 646955 => 'Palmerston North/New Plymouth',
1765
+ 646956 => 'Palmerston North/New Plymouth',
1766
  6469570 => 'Palmerston North',
1767
  6469571 => 'Palmerston North',
1768
  6469572 => 'Palmerston North',
1773
  6469577 => 'Ohakune',
1774
  6469578 => 'Marton',
1775
  6469579 => 'Pahiatua',
1776
+ 646958 => 'Palmerston North/New Plymouth',
1777
+ 646959 => 'Palmerston North/New Plymouth',
1778
+ 646960 => 'Wanganui/New Plymouth',
1779
  6469610 => 'Wanganui',
1780
  6469611 => 'Wanganui',
1781
+ 6469612 => 'Wanganui/New Plymouth',
1782
  6469613 => 'Levin',
1783
  6469614 => 'Levin',
1784
  6469615 => 'Masterton',
1785
  6469616 => 'Featherston',
1786
+ 6469617 => 'Wanganui/New Plymouth',
1787
+ 6469618 => 'Wanganui/New Plymouth',
1788
+ 6469619 => 'Wanganui/New Plymouth',
1789
+ 646962 => 'Wanganui/New Plymouth',
1790
+ 646963 => 'Wanganui/New Plymouth',
1791
  646964 => 'Wanganui',
1792
  646965 => 'Wanganui W100',
1793
+ 646966 => 'Wanganui/New Plymouth',
1794
  646967 => 'New Plymouth',
1795
  646968 => 'New Plymouth W100',
1796
  646969 => 'New Plymouth',
1797
+ 64697 => 'Napier',
1798
  6469710 => 'New Plymouth',
1799
  6469711 => 'New Plymouth',
1800
  6469712 => 'New Plymouth',
1802
  6469714 => 'Hawera',
1803
  6469715 => 'Mokau',
1804
  6469716 => 'Opunake',
1805
+ 64698 => 'Gisborne',
 
 
1806
  6469850 => 'Napier',
1807
  6469851 => 'Napier',
1808
  6469852 => 'Napier',
1809
+ 6469853 => 'Waiouru',
1810
  6469854 => 'Waipukurau',
 
1811
  6469869 => 'Ruatoria',
 
 
 
1812
  6469893 => 'Ruatoria',
1813
  647210 => 'Hamilton',
1814
  647211 => 'Hamilton',
1927
  6472827 => 'Tauranga',
1928
  6472828 => 'Tauranga',
1929
  6472829 => 'Tauranga',
1930
+ 64730 => 'Whakatane',
1931
+ 64731 => 'Whakatane/Opotiki',
 
 
 
 
1932
  647312 => 'Whakatane',
1933
  647315 => 'Opotiki',
1934
+ 64732 => 'Whakatane',
 
1935
  647325 => 'Opotiki',
1936
+ 64733 => 'Rotorua/Taupo',
1937
  647332 => 'Rotorua',
1938
  6473331 => 'Rotorua',
1939
  6473332 => 'Rotorua',
1941
  6473338 => 'Rotorua',
1942
  6473339 => 'Taupo',
1943
  647334 => 'Rotorua',
1944
+ 64734 => 'Rotorua',
1945
+ 64735 => 'Rotorua',
1946
+ 64736 => 'Rotorua',
1947
+ 64737 => 'Taupo',
1948
+ 64738 => 'Taupo',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1949
  647390 => 'Hamilton',
1950
  647391 => 'Hamilton',
1951
  6473920 => 'Huntly',
2011
  6474659 => 'Whangamata',
2012
  647466 => 'Tauranga',
2013
  647533 => 'Tauranga',
2014
+ 64754 => 'Tauranga',
 
 
 
 
 
 
 
 
 
 
2015
  647551 => 'Tauranga',
2016
  647552 => 'Tauranga',
2017
  647557 => 'Tauranga',
2081
  6478070 => 'Morrinsville',
2082
  6478071 => 'Otorohanga',
2083
  6478072 => 'Paeroa',
2084
+ 6478073 => 'Putaruru/Tokoroa',
2085
  6478074 => 'Taumarunui',
2086
  6478075 => 'Te Kuiti',
2087
  6478076 => 'Te Awamutu',
2120
  6478142 => 'Whakatane',
2121
  6478143 => 'Opotiki',
2122
  6478144 => 'Tauranga',
2123
+ 647820 => 'Hamilton/Huntly',
2124
+ 647821 => 'Hamilton/Huntly',
2125
+ 647822 => 'Hamilton/Huntly',
2126
  647823 => 'Hamilton',
2127
  647824 => 'Hamilton',
2128
  647825 => 'Hamilton',
2130
  647827 => 'Hamilton',
2131
  647828 => 'Huntly',
2132
  647829 => 'Hamilton',
2133
+ 64783 => 'Hamilton',
2134
+ 64784 => 'Hamilton',
2135
+ 64785 => 'Hamilton',
2136
+ 647860 => 'Paeroa/Waihi/Thames/Whangamata',
2137
+ 647861 => 'Paeroa/Waihi/Thames/Whangamata',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2138
  647862 => 'Paeroa',
2139
  647863 => 'Waihi',
2140
  647864 => 'Thames',
2147
  647871 => 'Te Awamutu',
2148
  647872 => 'Te Awamutu',
2149
  647873 => 'Otorohanga',
2150
+ 647874 => 'Te Awamutu/Otorohanga/Te Kuiti',
2151
+ 647875 => 'Te Awamutu/Otorohanga/Te Kuiti',
2152
  647876 => 'Te Kuiti',
2153
  647877 => 'Te Kuiti',
2154
  647878 => 'Te Kuiti',
2155
+ 647879 => 'Te Awamutu/Otorohanga/Te Kuiti',
2156
  647880 => 'Matamata',
2157
  647881 => 'Matamata',
2158
  647882 => 'Putaruru/Tokoroa',
2163
  647887 => 'Morrinsville',
2164
  647888 => 'Matamata',
2165
  647889 => 'Morrinsville',
2166
+ 64789 => 'Taumarunui',
 
 
 
 
2167
  6478990 => 'Thames',
2168
  6478991 => 'Whangamata',
2169
  6478992 => 'Paeroa',
2174
  6478997 => 'Morrinsville',
2175
  6478998 => 'Hamilton',
2176
  6478999 => 'Hamilton',
2177
+ 64790 => 'Taupo',
2178
  6479000 => 'Hamilton',
2179
  6479001 => 'Hamilton',
2180
  6479002 => 'Matamata',
2181
  6479003 => 'Thames',
2182
  6479004 => 'Te Awamutu',
2183
  6479005 => 'Tauranga',
 
2184
  6479007 => 'Whakatane',
2185
  6479008 => 'Rotorua',
2186
  6479009 => 'Hamilton',
2199
  6479040 => 'Otorohanga',
2200
  6479045 => 'Taumarunui',
2201
  6479049 => 'Te Kuiti',
 
 
 
 
2202
  6479100 => 'Rotorua',
2203
  6479101 => 'Rotorua',
2204
  6479102 => 'Rotorua',
2214
  6479240 => 'Taupo',
2215
  6479241 => 'Whakatane',
2216
  6479242 => 'Rotorua',
2217
+ 6479243 => 'Rotorua/Whakatane/Tauranga',
2218
  6479244 => 'Tauranga',
2219
  6479245 => 'Matamata',
2220
  6479246 => 'Thames',
2221
  6479247 => 'Hamilton',
2222
+ 6479248 => 'Rotorua/Whakatane/Tauranga',
2223
  6479249 => 'Huntly',
2224
  647925 => 'Tauranga',
2225
  647926 => 'Tauranga',
2235
  6479297 => 'Tauranga',
2236
  6479298 => 'Taupo',
2237
  6479299 => 'Rotorua',
2238
+ 64793 => 'Tauranga',
2239
  6479420 => 'Tauranga',
2240
  6479421 => 'Tauranga',
2241
  6479422 => 'Tauranga',
2242
  647949 => 'Hamilton',
2243
+ 64795 => 'Hamilton',
2244
  6479500 => 'Whakatane',
2245
  6479501 => 'Opotiki',
2246
+ 64796 => 'Hamilton',
 
 
 
 
 
2247
  647970 => 'Hamilton',
2248
  6479708 => 'Thames',
2249
  6479709 => 'Matamata',
2293
  647987 => 'Tauranga',
2294
  647988 => 'Rotorua',
2295
  647989 => 'Taupo',
2296
+ 6492 => 'Auckland',
2297
  6492006 => 'Helensville',
2298
  6492007 => 'Warkworth',
2299
  6492008 => 'Hibiscus Coast',
2300
  6492009 => 'Pukekohe',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2301
  6492225 => 'Pukekohe',
2302
  6492226 => 'Helensville',
2303
  6492227 => 'Whangarei',
2304
  6492228 => 'Warkworth',
2305
  6492229 => 'Hibiscus Coast',
2306
+ 64923 => 'Pukekohe',
 
 
 
 
 
 
 
 
2307
  6492426 => 'Whangarei',
2308
  6492427 => 'Warkworth',
2309
  6492428 => 'Hibiscus Coast',
2310
  6492429 => 'Pukekohe',
 
 
 
 
 
 
2311
  6492807 => 'Helensville',
2312
  6492808 => 'Great Barrier Island',
2313
  6492809 => 'Maungaturoto',
 
 
 
2314
  6492831 => 'Maungaturoto',
2315
  6492832 => 'Dargaville',
2316
  6492833 => 'Warkworth',
2320
  6492837 => 'Hibiscus Coast',
2321
  6492838 => 'Pukekohe',
2322
  6492839 => 'Whangarei',
 
 
 
 
 
 
 
 
2323
  64930 => 'Auckland',
2324
+ 64931 => 'Auckland/Waiheke Island',
2325
+ 64932 => 'Auckland/Waiheke Island',
2326
  649320 => 'Auckland',
2327
  6493206 => 'Pukekohe',
2328
  6493207 => 'Hibiscus Coast',
2329
  6493208 => 'Helensville',
2330
  6493209 => 'Great Barrier Island',
2331
  64933 => 'Auckland',
2332
+ 64934 => 'Auckland/Waiheke Island',
2333
  649347 => 'Auckland',
2334
  649348 => 'Auckland',
2335
  649349 => 'Auckland',
2336
  64935 => 'Auckland',
2337
  64936 => 'Auckland',
2338
  64937 => 'Auckland',
2339
+ 64938 => 'Auckland/Waiheke Island',
2340
  649390 => 'Auckland',
2341
  649391 => 'Auckland',
2342
  649392 => 'Auckland',
2354
  6493942 => 'Great Barrier Island',
2355
  6493943 => 'Helensville',
2356
  6493944 => 'Hibiscus Coast',
2357
+ 649395 => 'Auckland/Waiheke Island',
2358
+ 649396 => 'Auckland/Waiheke Island',
2359
+ 649397 => 'Auckland/Waiheke Island',
2360
+ 649398 => 'Auckland/Waiheke Island',
2361
  649399 => 'Auckland',
2362
  6493990 => 'Great Barrier Island',
2363
  6493991 => 'Pukekohe',
2394
  649452 => 'Auckland',
2395
  649458 => 'Dargaville',
2396
  649459 => 'Whangarei',
2397
+ 64947 => 'Auckland',
2398
+ 649470 => 'Whangarei',
 
 
 
 
 
 
 
 
 
 
 
2399
  64948 => 'Auckland',
2400
+ 6495 => 'Auckland',
 
 
 
2401
  649552 => 'Pukekohe',
2402
  6495530 => 'Great Barrier Island',
2403
  6495531 => 'Helensville',
2404
  6495532 => 'Warkworth',
2405
  6495533 => 'Whangarei',
 
 
2406
  649554 => 'Hibiscus Coast',
 
2407
  6495560 => 'Whangarei',
2408
  6495561 => 'Whangarei',
2409
  6495562 => 'Whangarei',
2414
  6495567 => 'Kaitaia',
2415
  6495568 => 'Kawakawa',
2416
  6495569 => 'Maungaturoto',
 
 
2417
  6495588 => 'Hibiscus Coast',
2418
  6495589 => 'Pukekohe',
2419
+ 6496 => 'Auckland',
 
 
 
 
 
 
 
 
 
2420
  6496007 => 'Helensville',
2421
  6496008 => 'Hibiscus Coast',
2422
  6496009 => 'Pukekohe',
2423
  6496010 => 'Kaitaia',
 
2424
  6496012 => 'Kawakawa',
2425
  6496013 => 'Whangarei',
2426
  6496014 => 'Dargaville',
2427
  6496015 => 'Maungaturoto',
2428
  6496016 => 'Warkworth',
2429
  6496017 => 'Great Barrier Island',
 
 
2430
  6496100 => 'Pukekohe',
 
 
 
 
 
 
 
 
 
 
 
 
2431
  6496507 => 'Helensville',
2432
  6496508 => 'Hibiscus Coast',
2433
  6496509 => 'Pukekohe',
2442
  6496518 => 'Kawakawa',
2443
  6496519 => 'Maungaturoto',
2444
  649652 => 'Warkworth',
 
 
 
 
 
 
2445
  6496990 => 'Kaitaia',
2446
  6496991 => 'Kaikohe',
2447
  6496992 => 'Kawakawa',
2451
  6496996 => 'Warkworth',
2452
  6496997 => 'Hibiscus Coast',
2453
  6496998 => 'Helensville',
 
2454
  6497770 => 'Whangarei',
2455
  6497771 => 'Kaikohe',
2456
  6497772 => 'Kaitaia',
2461
  6497777 => 'Auckland',
2462
  6497778 => 'Pukekohe',
2463
  6497779 => 'Great Barrier Island',
2464
+ 6498 => 'Auckland',
2465
  6498016 => 'Hibiscus Coast',
2466
  6498017 => 'Hibiscus Coast',
2467
  6498018 => 'Whangarei',
2468
  6498019 => 'Pukekohe',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2469
  6498690 => 'Kawakawa',
2470
  6498691 => 'Maungaturoto',
 
 
2471
  6498814 => 'Pukekohe',
2472
  6498815 => 'Helensville',
2473
  6498816 => 'Great Barrier Island',
2479
  6498824 => 'Kawakawa',
2480
  6498825 => 'Maungaturoto',
2481
  6498826 => 'Warkworth',
 
 
2482
  6498850 => 'Great Barrier Island',
2483
  6498851 => 'Pukekohe',
2484
  6498852 => 'Warkworth',
2489
  6498857 => 'Dargaville',
2490
  6498858 => 'Kaikohe',
2491
  6498859 => 'Kaitaia',
 
 
 
2492
  6498880 => 'Helensville',
2493
  6498881 => 'Hibiscus Coast',
2494
  6498882 => 'Whangarei',
2495
  6498883 => 'Whangarei',
 
 
2496
  6498900 => 'Pukekohe',
2497
  6498901 => 'Pukekohe',
2498
+ 6499 => 'Auckland',
 
 
 
2499
  6499003 => 'Warkworth',
2500
  6499004 => 'Hibiscus Coast',
 
2501
  6499006 => 'Whangarei',
2502
  6499007 => 'Kaikohe',
2503
  6499008 => 'Pukekohe',
 
2504
  6499010 => 'Kaitaia',
2505
  6499011 => 'Kaitaia',
2506
  6499012 => 'Kawakawa',
2512
  6499018 => 'Maungaturoto',
2513
  6499019 => 'Maungaturoto',
2514
  649902 => 'Warkworth',
 
2515
  6499040 => 'Helensville',
2516
  6499041 => 'Helensville',
2517
  6499042 => 'Hibiscus Coast',
2522
  6499047 => 'Pukekohe',
2523
  6499048 => 'Pukekohe',
2524
  6499049 => 'Great Barrier Island',
2525
+ 6499060 => 'Warkworth',
2526
  6499061 => 'Hibiscus Coast',
2527
  6499062 => 'Hibiscus Coast',
2528
  6499063 => 'Hibiscus Coast',
2532
  6499067 => 'Pukekohe',
2533
  6499068 => 'Pukekohe',
2534
  6499069 => 'Pukekohe',
2535
+ 649907 => 'Warkworth',
 
2536
  6499100 => 'Pukekohe',
2537
  6499101 => 'Pukekohe',
 
 
 
 
 
 
 
 
 
2538
  6499295 => 'Kaikohe',
2539
  6499296 => 'Kaitaia',
2540
  6499297 => 'Hibiscus Coast',
2541
  6499298 => 'Pukekohe',
2542
  6499299 => 'Whangarei',
 
 
 
2543
  6499420 => 'Pukekohe',
2544
  6499421 => 'Hibiscus Coast',
2545
  6499422 => 'Helensville',
2546
  6499423 => 'Great Barrier Island',
 
 
 
2547
  6499428 => 'Warkworth',
2548
  6499450 => 'Warkworth',
2549
  6499451 => 'Warkworth',
2571
  6499473 => 'Helensville',
2572
  6499474 => 'Helensville',
2573
  6499475 => 'Hibiscus Coast',
 
2574
  6499477 => 'Pukekohe',
2575
  6499478 => 'Pukekohe',
2576
  6499479 => 'Pukekohe',
 
 
 
 
 
 
 
2577
  6499551 => 'Whangarei',
2578
  6499552 => 'Dargaville',
2579
  6499553 => 'Kaikohe',
2583
  6499557 => 'Warkworth',
2584
  6499558 => 'Great Barrier Island',
2585
  6499559 => 'Whangarei',
 
2586
  649957 => 'Pukekohe',
2587
  649958 => 'Helensville',
2588
  649959 => 'Hibiscus Coast',
 
 
2589
  6499630 => 'Pukekohe',
2590
  6499631 => 'Pukekohe',
 
 
 
 
 
 
 
2591
  6499716 => 'Helensville',
2592
  6499717 => 'Whangarei',
2593
  6499718 => 'Whangarei',
2600
  6499746 => 'Kawakawa',
2601
  6499747 => 'Dargaville',
2602
  6499748 => 'Whangarei',
2603
+ 64998 => 'Whangarei',
2604
  6499810 => 'Hibiscus Coast',
2605
  6499811 => 'Hibiscus Coast',
2606
  6499818 => 'Great Barrier Island',
2607
  6499819 => 'Helensville',
 
 
 
 
 
 
 
 
2608
  6499873 => 'Kaitaia',
2609
  6499874 => 'Kawakawa',
2610
  6499875 => 'Dargaville',
2612
  6499877 => 'Maungaturoto',
2613
  6499878 => 'Warkworth',
2614
  6499879 => 'Warkworth',
 
2615
  );
vendor/giggsey/libphonenumber-for-php/src/geocoding/data/en/7.php CHANGED
@@ -164,6 +164,7 @@ return array (
164
  771458 => 'Kostanai Region',
165
  77145834 => 'Krasnogorsk',
166
  771459 => 'Kostanai Region',
 
167
  77152 => 'Petropavlovsk',
168
  771531 => 'Bulayevo',
169
  771532 => 'Smirnovo',
@@ -215,10 +216,11 @@ return array (
215
  771839 => 'Akku',
216
  771840 => 'Bayanaul',
217
  771841 => 'Aktogai',
218
- 771842 => 'Aktogaisky District',
219
  771843 => 'Maisky District',
220
  771844 => 'Irtyshsky District',
221
  771845 => 'Pavlodar Area',
 
222
  77187 => 'Ekibastuz',
223
  77212 => 'Karaganda',
224
  77213 => 'Aktau/Temirtau',
@@ -291,7 +293,9 @@ return array (
291
  772540 => 'Arys',
292
  772541 => 'Myrzakent',
293
  772542 => 'Asykata',
 
294
  772544 => 'Shaulder',
 
295
  772546 => 'Sholakkorgan',
296
  772547 => 'Lenger',
297
  772548 => 'Shayan',
164
  771458 => 'Kostanai Region',
165
  77145834 => 'Krasnogorsk',
166
  771459 => 'Kostanai Region',
167
+ 77149 => 'Kostanai',
168
  77152 => 'Petropavlovsk',
169
  771531 => 'Bulayevo',
170
  771532 => 'Smirnovo',
216
  771839 => 'Akku',
217
  771840 => 'Bayanaul',
218
  771841 => 'Aktogai',
219
+ 771842 => 'Koktobe',
220
  771843 => 'Maisky District',
221
  771844 => 'Irtyshsky District',
222
  771845 => 'Pavlodar Area',
223
+ 77185 => 'Shaldai',
224
  77187 => 'Ekibastuz',
225
  77212 => 'Karaganda',
226
  77213 => 'Aktau/Temirtau',
293
  772540 => 'Arys',
294
  772541 => 'Myrzakent',
295
  772542 => 'Asykata',
296
+ 772543 => 'Aqsumbe',
297
  772544 => 'Shaulder',
298
+ 772545 => 'Ikan',
299
  772546 => 'Sholakkorgan',
300
  772547 => 'Lenger',
301
  772548 => 'Shayan',
vendor/giggsey/libphonenumber-for-php/src/geocoding/data/ru/7.php CHANGED
@@ -165,6 +165,7 @@ return array (
165
  771458 => 'Костанайская область',
166
  77145834 => 'Красногорск',
167
  771459 => 'Костанайская область',
 
168
  77152 => 'Петропавловск',
169
  771531 => 'Магжана Жумабаева р-н',
170
  771532 => 'Аккайынский р-н',
@@ -216,10 +217,11 @@ return array (
216
  771839 => 'Лебяжинский р-н',
217
  771840 => 'Баянаульский р-н',
218
  771841 => 'Актогайский р-н',
219
- 771842 => 'Актогайский р-н',
220
  771843 => 'Майский р-н',
221
  771844 => 'Иртышский р-н',
222
  771845 => 'Павлодар',
 
223
  77187 => 'Экибастуз',
224
  77212 => 'Караганда',
225
  77213 => 'Темиртау',
@@ -292,7 +294,9 @@ return array (
292
  772540 => 'Арыс',
293
  772541 => 'Мырзакент',
294
  772542 => 'Асыката',
 
295
  772544 => 'Шаульдер',
 
296
  772546 => 'Шолаккорган',
297
  772547 => 'Ленгер',
298
  772548 => 'Шаян',
165
  771458 => 'Костанайская область',
166
  77145834 => 'Красногорск',
167
  771459 => 'Костанайская область',
168
+ 77149 => 'Костанай',
169
  77152 => 'Петропавловск',
170
  771531 => 'Магжана Жумабаева р-н',
171
  771532 => 'Аккайынский р-н',
217
  771839 => 'Лебяжинский р-н',
218
  771840 => 'Баянаульский р-н',
219
  771841 => 'Актогайский р-н',
220
+ 771842 => 'Майский р-он',
221
  771843 => 'Майский р-н',
222
  771844 => 'Иртышский р-н',
223
  771845 => 'Павлодар',
224
+ 77185 => 'Шалдай',
225
  77187 => 'Экибастуз',
226
  77212 => 'Караганда',
227
  77213 => 'Темиртау',
294
  772540 => 'Арыс',
295
  772541 => 'Мырзакент',
296
  772542 => 'Асыката',
297
+ 772543 => 'Аксумбе',
298
  772544 => 'Шаульдер',
299
+ 772545 => 'Икан',
300
  772546 => 'Шолаккорган',
301
  772547 => 'Ленгер',
302
  772548 => 'Шаян',
vendor/giggsey/libphonenumber-for-php/src/timezone/data/map_data.php CHANGED
@@ -3113,8 +3113,7 @@ return array (
3113
  645 => 'Pacific/Auckland',
3114
  646 => 'Pacific/Auckland',
3115
  647 => 'Pacific/Auckland',
3116
- 6480 => 'Pacific/Auckland',
3117
- 6486 => 'Pacific/Auckland',
3118
  649 => 'Pacific/Auckland',
3119
  65 => 'Asia/Singapore',
3120
  66 => 'Asia/Bangkok',
@@ -3192,6 +3191,7 @@ return array (
3192
  7713 => 'Asia/Aqtobe',
3193
  772 => 'Asia/Almaty',
3194
  7729 => 'Asia/Aqtobe',
 
3195
  7800 => 'Asia/Almaty&Asia/Aqtobe&Europe/Moscow',
3196
  7803 => 'Europe/Moscow',
3197
  7804 => 'Europe/Moscow',
3113
  645 => 'Pacific/Auckland',
3114
  646 => 'Pacific/Auckland',
3115
  647 => 'Pacific/Auckland',
3116
+ 648 => 'Pacific/Auckland',
 
3117
  649 => 'Pacific/Auckland',
3118
  65 => 'Asia/Singapore',
3119
  66 => 'Asia/Bangkok',
3191
  7713 => 'Asia/Aqtobe',
3192
  772 => 'Asia/Almaty',
3193
  7729 => 'Asia/Aqtobe',
3194
+ 779 => 'Asia/Almaty',
3195
  7800 => 'Asia/Almaty&Asia/Aqtobe&Europe/Moscow',
3196
  7803 => 'Europe/Moscow',
3197
  7804 => 'Europe/Moscow',
wgact.php CHANGED
@@ -10,7 +10,7 @@
10
  * Developer URI: https://sweetcode.com
11
  * Text Domain: woocommerce-google-adwords-conversion-tracking-tag
12
  * Domain path: /languages
13
- * * Version: 1.27.7
14
  *
15
  * WC requires at least: 3.7
16
  * WC tested up to: 7.1
@@ -19,7 +19,7 @@
19
  * License URI: http://www.gnu.org/licenses/gpl-3.0.html
20
  *
21
  **/
22
- const WPM_CURRENT_VERSION = '1.27.7' ;
23
  // TODO add option checkbox on uninstall and ask if user wants to delete options from db
24
 
25
  if ( !defined( 'ABSPATH' ) ) {
@@ -191,9 +191,6 @@ if ( function_exists( 'wpm_fs' ) ) {
191
 
192
  public function register_hooks_for_woocommerce()
193
  {
194
- if ( wp_doing_ajax() ) {
195
- return;
196
- }
197
  add_action( 'pmw_reactivate_duplication_prevention', function () {
198
  Admin::get_instance()->deduper_enable();
199
  } );
10
  * Developer URI: https://sweetcode.com
11
  * Text Domain: woocommerce-google-adwords-conversion-tracking-tag
12
  * Domain path: /languages
13
+ * * Version: 1.27.8
14
  *
15
  * WC requires at least: 3.7
16
  * WC tested up to: 7.1
19
  * License URI: http://www.gnu.org/licenses/gpl-3.0.html
20
  *
21
  **/
22
+ const WPM_CURRENT_VERSION = '1.27.8' ;
23
  // TODO add option checkbox on uninstall and ask if user wants to delete options from db
24
 
25
  if ( !defined( 'ABSPATH' ) ) {
191
 
192
  public function register_hooks_for_woocommerce()
193
  {
 
 
 
194
  add_action( 'pmw_reactivate_duplication_prevention', function () {
195
  Admin::get_instance()->deduper_enable();
196
  } );