WordPress Page Builder – Beaver Builder - Version 2.2.4.3

Version Description

Download this release

Release Info

Developer pross
Plugin Icon 128x128 WordPress Page Builder – Beaver Builder
Version 2.2.4.3
Comparing to
See all releases

Code changes from version 2.2.2.5 to 2.2.4.3

Files changed (74) hide show
  1. changelog.txt +143 -0
  2. classes/class-fl-builder-admin-posts.php +1 -1
  3. classes/class-fl-builder-admin-settings.php +3 -3
  4. classes/class-fl-builder-admin.php +31 -5
  5. classes/class-fl-builder-ajax.php +8 -1
  6. classes/class-fl-builder-auto-suggest.php +1 -5
  7. classes/class-fl-builder-debug.php +5 -3
  8. classes/class-fl-builder-export.php +1 -1
  9. classes/class-fl-builder-fonts.php +4 -2
  10. classes/class-fl-builder-importer.php +88 -23
  11. classes/class-fl-builder-loader.php +1 -1
  12. classes/class-fl-builder-loop.php +32 -17
  13. classes/class-fl-builder-model.php +12 -9
  14. classes/class-fl-builder-service-infusionsoft.php +1 -1
  15. classes/class-fl-builder-shortcodes.php +1 -1
  16. classes/class-fl-builder-ui-settings-forms.php +11 -4
  17. classes/class-fl-builder-update.php +14 -0
  18. classes/class-fl-builder-utils.php +12 -0
  19. classes/class-fl-builder-wpcli-command.php +3 -7
  20. classes/class-fl-builder.php +95 -5
  21. css/fl-builder-admin-settings.css +12 -0
  22. css/fl-builder.css +3 -2
  23. css/fl-builder.min.css +1 -1
  24. extensions/fl-builder-cache-helper/includes/admin-settings-cache-plugins.php +2 -1
  25. extensions/fl-builder-cache-helper/plugins/acf.php +19 -0
  26. extensions/fl-builder-cache-helper/plugins/hummingbird.php +1 -1
  27. extensions/fl-builder-cache-helper/plugins/pantheon.php +13 -0
  28. extensions/fl-builder-cache-helper/plugins/supercache.php +5 -1
  29. extensions/fl-builder-multisite/classes/class-fl-builder-multisite.php +1 -5
  30. extensions/fl-builder-seo-plugins/classes/class-fl-builder-seo-plugins.php +151 -0
  31. extensions/fl-builder-seo-plugins/fl-builder-seo-plugins.php +8 -0
  32. extensions/fl-builder-seo-plugins/js/plugin-rankmath.js +20 -0
  33. extensions/fl-builder-seo-plugins/js/plugin-yoast.js +13 -0
  34. fl-builder.php +1 -1
  35. fonts/fontawesome/css/all.min.css +2 -2
  36. fonts/fontawesome/css/v4-shims.min.css +1 -1
  37. fonts/fontawesome/webfonts/fa-brands-400.eot +0 -0
  38. fonts/fontawesome/webfonts/fa-brands-400.svg +71 -88
  39. fonts/fontawesome/webfonts/fa-brands-400.ttf +0 -0
  40. fonts/fontawesome/webfonts/fa-brands-400.woff +0 -0
  41. fonts/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
  42. fonts/fontawesome/webfonts/fa-regular-400.eot +0 -0
  43. fonts/fontawesome/webfonts/fa-regular-400.svg +2 -2
  44. fonts/fontawesome/webfonts/fa-regular-400.ttf +0 -0
  45. fonts/fontawesome/webfonts/fa-regular-400.woff +0 -0
  46. fonts/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
  47. fonts/fontawesome/webfonts/fa-solid-900.eot +0 -0
  48. fonts/fontawesome/webfonts/fa-solid-900.svg +304 -182
  49. fonts/fontawesome/webfonts/fa-solid-900.ttf +0 -0
  50. fonts/fontawesome/webfonts/fa-solid-900.woff +0 -0
  51. fonts/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
  52. includes/admin-settings-tools.php +8 -2
  53. includes/column-settings.php +4 -0
  54. includes/compatibility.php +201 -0
  55. includes/global-settings.php +1 -1
  56. includes/module-settings.php +4 -0
  57. includes/row-settings.php +5 -1
  58. includes/ui-bar.php +19 -5
  59. includes/ui-js-config.php +3 -2
  60. includes/ui-js-templates.php +6 -2
  61. includes/ui-settings-config.php +1 -1
  62. includes/updater-config.php +1 -1
  63. includes/updater/includes/form.php +1 -1
  64. includes/vendor/infusionsoft/isdk.php +2 -2
  65. includes/vendor/infusionsoft/xmlrpc-3.0/Changelog +0 -1573
  66. includes/vendor/infusionsoft/xmlrpc-3.0/Makefile +0 -123
  67. includes/vendor/infusionsoft/xmlrpc-3.0/NEWS +0 -333
  68. includes/vendor/infusionsoft/xmlrpc-3.0/README +0 -13
  69. includes/vendor/infusionsoft/xmlrpc-3.0/lib/xmlrpc.inc +0 -3840
  70. includes/vendor/infusionsoft/xmlrpc-3.0/lib/xmlrpc_wrappers.inc +0 -955
  71. includes/vendor/infusionsoft/xmlrpc-3.0/lib/xmlrpcs.inc +0 -1246
  72. includes/vendor/infusionsoft/xmlrpc/lib/xmlrpc.inc +214 -0
  73. js/build/builder.bundle.js +14 -2
  74. js/build/builder.bundle.min.js +1 -2
changelog.txt CHANGED
@@ -1,3 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <h4>2.2.2.5 - 04/16/2019</h4>
2
  <p><strong>Hot Fix</strong></p>
3
  <ul>
1
+ <h4>2.2.4.3 - 07/31/2019</h4>
2
+ <p><strong>Bug Fixes</strong></p>
3
+ <ul>
4
+ <li>Fixed issue when json_encode returns no output stopping module settings from displaying.</li>
5
+ <li>Fixed possible JS issue and PHP buffer issue when editing pages when SEO plugins are enabled.</li>
6
+ </ul>
7
+
8
+ <h4>2.2.4.2 - 07/24/2019</h4>
9
+ <p><strong>Enhancements</strong></p>
10
+ <ul>
11
+ <li>Added support for Yoast and RankMath to analyse layout contents for SEO in post edit screen.</li>
12
+ <li>Removed template post-type from Yoast and RankMath sitemaps.</li>
13
+ </ul>
14
+ <p><strong>Bug Fixes</strong></p>
15
+ <ul>
16
+ <li>Fixed database query issue when duplicating layouts on MariaDB 10.3+</li>
17
+ <li>Fixed issue with ThirstyAffiliates plugin.</li>
18
+ </ul>
19
+
20
+ <h4>2.2.4.1 - 07/20/2019</h4>
21
+ <p><strong>Hot Fix</strong></p>
22
+ <ul>
23
+ <li>Fixed AJAX response 0 error popup for 3rd party extensions.</li>
24
+ </ul>
25
+
26
+ <h4>2.2.4 - 07/19/2019</h4>
27
+ <p><strong>Enhancements</strong></p>
28
+ <ul>
29
+ <li>Added support for ACF to clear cache when ACF fields are updated.</li>
30
+ <li>Added detection for 403 errors in ajax with link to KB.</li>
31
+ <li>Removed deprecated functions like_escape and wp_get_sites.</li>
32
+ <li>Added Themer connection for max number in Number Module.</li>
33
+ <li>New filter <code>fl_builder_after_render_shortcodes</code>.</li>
34
+ <li>New action <code>fl_builder_hidden_node</code>.</li>
35
+ <li>Added responsive support for match height option in the posts module.</li>
36
+ </ul>
37
+
38
+ <p><strong>Bug Fixes</strong></p>
39
+ <ul>
40
+ <li>Fixed relative url issues in text editor and inline editor for links and images.</li>
41
+ <li>Fixed issue with Pipedrive Chat plugin.</li>
42
+ <li>Fixed issue with Post Type Switcher plugin.</li>
43
+ <li>Fixed issue with Google Reviews Business Plugin.</li>
44
+ <li>Fixed PHP notice in posts grid module.</li>
45
+ <li>Fixed multisite issue with wp-super-cache, only active site cache is cleared not entire cache.</li>
46
+ <li>Fixed branding on Tools settings page.</li>
47
+ <li>Fixed icon-group CSS issues and removed empty element when there is no text.</li>
48
+ <li>Fixed Gallery collage impacting animations in other modules.</li>
49
+ <li>Fixed background/border CSS issue in Accordion module.</li>
50
+ <li>Fixed mobile menu icon missing at 993px in Menu module.</li>
51
+ <li>Fixed expanded mobile menu not closing when clicked outside of the module.</li>
52
+ <li>Fixed missing quotes in Accordian module markup.</li>
53
+ <li>Removed flpaging query string in pagination.</li>
54
+ <li>Keep initial $post object and reset globals after loop.</li>
55
+ <li>Various branding updates to error messages.</li>
56
+ <li>Updated Infusionsoft xmlrpc library for PHP7.2 support.</li>
57
+ </ul>
58
+
59
+ <h4>2.2.3.3 - 06/19/2019</h4>
60
+ <p><strong>Hot Fix</strong></p>
61
+ <ul>
62
+ <li>Fix unclosed element in icon markup.</li>
63
+ </ul>
64
+
65
+ <h4>2.2.3.2 - 06/19/2019</h4>
66
+ <p><strong>Bug Fixes</strong></p>
67
+ <ul>
68
+ <li>Fixed wrong CSS when in preview mode and typography is set to vw.</li>
69
+ <li>Fixed Featured Image size missing in List layout.</li>
70
+ <li>Fixed text field not working on Icon module when using render_module_html function.</li>
71
+ </ul>
72
+
73
+ <h4>2.2.3.1 - 06/13/2019</h4>
74
+ <p><strong>Enhancements</strong></p>
75
+ <ul>
76
+ <li>Updated Font Awesome to 5.9.0</li>
77
+ <li>Added comments to layout.js when in debug mode to show user/global JS.</li>
78
+ <li>New filter <code>fl_builder_google_font_args</code> to pass args to google font url See: <code>https://developers.google.com/fonts/docs/getting_started#enabling_font_effects_beta</code> for examples.</li>
79
+ <li>Updated language files.</li>
80
+ </ul>
81
+ <p><strong>Bug Fixes</strong></p>
82
+ <ul>
83
+ <li>Fixed JS error caused by um-switcher plugin.</li>
84
+ <li>Fixed user level issue when adding global modules and user does not have edit permissions.</li>
85
+ <li>Fixed typos in global settings and contact form help texts.</li>
86
+ <li>Fixed relative urls issue in rich-text module.</li>
87
+ <li>Fixed PHP warning in font system if font is still being used but is no longer registered in the system.</li>
88
+ <li>Fixed fatal error when clearing cache if Hummingbird cache is still installed but not active.</li>
89
+ </ul>
90
+
91
+ <h4>2.2.3 - 05/08/2019</h4>
92
+ <p><strong>Enhancements</strong></p>
93
+ <ul>
94
+ <li>New option for post grid, featured image fallback image.</li>
95
+ <li>Added ability to disable ALL schema via <code>fl_builder_disable_schema</code> filter.</li>
96
+ <li>Added support for Pantheon cache.</li>
97
+ <li>Crash message now uses white label product name.</li>
98
+ <li>New filter <code>fl_builder_crash_white_label_text</code> to change info text.</li>
99
+ <li>Added url field connection to pricing table button.</li>
100
+ <li>New filter <code>fl_builder_photo_attributes</code> added to Photo module.</li>
101
+ </ul>
102
+ <p><strong>Bug Fixes</strong></p>
103
+ <ul>
104
+ <li>Show warning popup if Max Input Vars is exceeded during save action.</li>
105
+ <li>Fixed the missing bottom border at certain screen sizes for post carousel.</li>
106
+ <li>Fixed layout CSS for layouts other than the one being actively edited not rendering in the builder.</li>
107
+ <li>Fixed global settings not refreshing for nodes after saving.</li>
108
+ <li>Fixed importer issue.</li>
109
+ <li>Removed HTML added by a chrome extension in template dat files.</li>
110
+ <li>Fix icon issues with Frontend Dashboard version 1.3.4+</li>
111
+ <li>Fixed date dropdown being hidden when adding media.</li>
112
+ <li>Fixed no follow not being used in icon group module.</li>
113
+ <li>Fixed duplicate posts when paginating random order with scroll or load more pagination.</li>
114
+ <li>Fixed TinyMCE colors not overriding style tab colors in the Text Editor module.</li>
115
+ <li>Fixed strong tags not showing as bold when a weight is set in the Text Editor module.</li>
116
+ <li>Fixed gallery lightbox pagination issue when an image caption contain links.</li>
117
+ <li>Make sure global column is clickable when restrict editing is enabled.</li>
118
+ <li>Added width to photo container so it works with shrink header in Themer.</li>
119
+ <li>Fixed saved columns categories not showing in the builder panel.</li>
120
+ <li>Fixed flashing behaviour when using insert layout shortcode</li>
121
+ <li>Fixed WP-Rocket lazyload issue on Themer layouts</li>
122
+ <li>Fixed issue on multisite if the old fa4 set was enabled on main site you could not use any other sets.</li>
123
+ </ul>
124
+
125
+ <h4>2.2.2.6 - 04/25/2019</h4>
126
+ <p><strong>Hot Fix</strong></p>
127
+ <ul>
128
+ <li>Fixed issue with Grammerly, LastPass and Keeper browser extensions all breaking AJAX save actions.</li>
129
+ <li>Fixed schema output in post-grid module.</li>
130
+ <li>Dont show Beaver Builder enabled post count on our own post type pages.</li>
131
+ <li>Show warning on license settings page if Curl is not installed.</li>
132
+ <li>Debug mode will now auto turn off after 48 hours.</li>
133
+ <li>New filter <code>fl_render_content_by_id_attrs</code> in render_content_by_id function to filter the html attributes for the container.</li>
134
+ <li>New filters added for the UI Bar buttons text:</li>
135
+ <ul>
136
+ <li><code>fl_builder_ui_bar_discard</code></li>
137
+ <li><code>fl_builder_ui_bar_draft</code></li>
138
+ <li><code>fl_builder_ui_bar_review</code></li>
139
+ <li><code>fl_builder_ui_bar_publish</code></li>
140
+ <li><code>fl_builder_ui_bar_cancel</code></li>
141
+ </ul>
142
+ </ul>
143
+
144
  <h4>2.2.2.5 - 04/16/2019</h4>
145
  <p><strong>Hot Fix</strong></p>
146
  <ul>
classes/class-fl-builder-admin-posts.php CHANGED
@@ -106,7 +106,7 @@ final class FLBuilderAdminPosts {
106
  if ( 'edit.php' == $pagenow && true === apply_filters( 'fl_builder_admin_edit_sort_bb_enabled', true ) ) {
107
  $post_types = FLBuilderModel::get_post_types();
108
  $post_type = self::get_post_type();
109
- if ( in_array( $post_type, $post_types ) ) {
110
  wp_enqueue_script( 'fl-builder-admin-posts-list', FL_BUILDER_URL . 'js/fl-builder-admin-posts-list.js', array( 'jquery' ), FL_BUILDER_VERSION );
111
  $args = array(
112
  'post_type' => $post_type,
106
  if ( 'edit.php' == $pagenow && true === apply_filters( 'fl_builder_admin_edit_sort_bb_enabled', true ) ) {
107
  $post_types = FLBuilderModel::get_post_types();
108
  $post_type = self::get_post_type();
109
+ if ( 'fl-builder-template' !== $post_type && 'fl-theme-layout' !== $post_type && in_array( $post_type, $post_types ) ) {
110
  wp_enqueue_script( 'fl-builder-admin-posts-list', FL_BUILDER_URL . 'js/fl-builder-admin-posts-list.js', array( 'jquery' ), FL_BUILDER_VERSION );
111
  $args = array(
112
  'post_type' => $post_type,
classes/class-fl-builder-admin-settings.php CHANGED
@@ -650,12 +650,12 @@ final class FLBuilderAdminSettings {
650
  if ( ! FLBuilderAdmin::current_user_can_access_settings() ) {
651
  return;
652
  } elseif ( isset( $_POST['fl-debug-nonce'] ) && wp_verify_nonce( $_POST['fl-debug-nonce'], 'debug' ) ) {
653
- $debugmode = get_option( 'fl_debug_mode', false );
654
 
655
  if ( ! $debugmode ) {
656
- update_option( 'fl_debug_mode', md5( rand() ) );
657
  } else {
658
- delete_option( 'fl_debug_mode' );
659
  }
660
  }
661
  }
650
  if ( ! FLBuilderAdmin::current_user_can_access_settings() ) {
651
  return;
652
  } elseif ( isset( $_POST['fl-debug-nonce'] ) && wp_verify_nonce( $_POST['fl-debug-nonce'], 'debug' ) ) {
653
+ $debugmode = get_transient( 'fl_debug_mode' );
654
 
655
  if ( ! $debugmode ) {
656
+ set_transient( 'fl_debug_mode', md5( rand() ), 172800 ); // 48 hours 172800
657
  } else {
658
+ delete_transient( 'fl_debug_mode' );
659
  }
660
  }
661
  }
classes/class-fl-builder-admin.php CHANGED
@@ -22,9 +22,11 @@ final class FLBuilderAdmin {
22
  // Actions
23
  add_action( 'admin_init', __CLASS__ . '::show_activate_notice' );
24
  add_action( 'admin_init', __CLASS__ . '::sanity_checks' );
 
25
 
26
  // Filters
27
  add_filter( 'plugin_action_links_' . $basename, __CLASS__ . '::render_plugin_action_links' );
 
28
  }
29
 
30
  /**
@@ -39,8 +41,8 @@ final class FLBuilderAdmin {
39
  global $wp_version;
40
 
41
  // Check for WordPress 3.5 and above.
42
- if ( ! version_compare( $wp_version, '3.5', '>=' ) ) {
43
- self::show_activate_error( __( 'The <strong>Page Builder</strong> plugin requires WordPress version 3.5 or greater. Please update WordPress before activating the plugin.', 'fl-builder' ) );
44
  }
45
 
46
  /**
@@ -60,7 +62,7 @@ final class FLBuilderAdmin {
60
  'utm_campaign' => 'no-multisite-support',
61
  ) );
62
  /* translators: %s: upgrade url */
63
- self::show_activate_error( sprintf( __( 'This version of the <strong>Page Builder</strong> plugin is not compatible with WordPress Multisite. <a%s>Please upgrade</a> to the Multisite version of this plugin.', 'fl-builder' ), ' href="' . $url . '" target="_blank"' ) );
64
  }
65
 
66
  // Success! Run the install.
@@ -183,11 +185,11 @@ final class FLBuilderAdmin {
183
  if ( FL_BUILDER_LITE !== true ) {
184
  $hash = '#license';
185
  /* translators: %s: link to licence page */
186
- $message = __( 'Page Builder activated! <a%s>Click here</a> to enable remote updates.', 'fl-builder' );
187
  } else {
188
  $hash = '#welcome';
189
  /* translators: %s: link to welcome page */
190
- $message = __( 'Page Builder activated! <a%s>Click here</a> to get started.', 'fl-builder' );
191
  }
192
 
193
  $url = apply_filters( 'fl_builder_activate_redirect_url', admin_url( '/options-general.php?page=fl-builder-settings' . $hash ) );
@@ -224,6 +226,14 @@ final class FLBuilderAdmin {
224
  * @return array
225
  */
226
  static public function render_plugin_action_links( $actions ) {
 
 
 
 
 
 
 
 
227
  if ( FL_BUILDER_LITE === true ) {
228
  $url = FLBuilderModel::get_upgrade_url( array(
229
  'utm_medium' => 'bb-lite',
@@ -245,6 +255,22 @@ final class FLBuilderAdmin {
245
  return $actions;
246
  }
247
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
248
  /**
249
  * @since 1.0
250
  * @deprecated 1.8
22
  // Actions
23
  add_action( 'admin_init', __CLASS__ . '::show_activate_notice' );
24
  add_action( 'admin_init', __CLASS__ . '::sanity_checks' );
25
+ add_action( 'fl_after_license_form', __CLASS__ . '::check_curl', 11 );
26
 
27
  // Filters
28
  add_filter( 'plugin_action_links_' . $basename, __CLASS__ . '::render_plugin_action_links' );
29
+
30
  }
31
 
32
  /**
41
  global $wp_version;
42
 
43
  // Check for WordPress 3.5 and above.
44
+ if ( ! version_compare( $wp_version, '4.6', '>=' ) ) {
45
+ self::show_activate_error( __( 'The <strong>Beaver Builder</strong> plugin requires WordPress version 4.6 or greater. Please update WordPress before activating the plugin.', 'fl-builder' ) );
46
  }
47
 
48
  /**
62
  'utm_campaign' => 'no-multisite-support',
63
  ) );
64
  /* translators: %s: upgrade url */
65
+ self::show_activate_error( sprintf( __( 'This version of the <strong>Beaver Builder</strong> plugin is not compatible with WordPress Multisite. <a%s>Please upgrade</a> to the Multisite version of this plugin.', 'fl-builder' ), ' href="' . $url . '" target="_blank"' ) );
66
  }
67
 
68
  // Success! Run the install.
185
  if ( FL_BUILDER_LITE !== true ) {
186
  $hash = '#license';
187
  /* translators: %s: link to licence page */
188
+ $message = __( 'Beaver Builder activated! <a%s>Click here</a> to enable remote updates.', 'fl-builder' );
189
  } else {
190
  $hash = '#welcome';
191
  /* translators: %s: link to welcome page */
192
+ $message = __( 'Beaver Builder activated! <a%s>Click here</a> to get started.', 'fl-builder' );
193
  }
194
 
195
  $url = apply_filters( 'fl_builder_activate_redirect_url', admin_url( '/options-general.php?page=fl-builder-settings' . $hash ) );
226
  * @return array
227
  */
228
  static public function render_plugin_action_links( $actions ) {
229
+
230
+ /**
231
+ * Some bad plugins set $actions to '' or false to remove all plugin actions
232
+ * when it should be an empty array, in later PHP versions this results in a fatal error.
233
+ */
234
+ if ( ! is_array( $actions ) ) {
235
+ $actions = array();
236
+ }
237
  if ( FL_BUILDER_LITE === true ) {
238
  $url = FLBuilderModel::get_upgrade_url( array(
239
  'utm_medium' => 'bb-lite',
255
  return $actions;
256
  }
257
 
258
+ /**
259
+ * If Curl module is not installed, inform user on license page as updates are likely to not work.
260
+ * @since 2.2.2
261
+ */
262
+ static public function check_curl() {
263
+
264
+ $curl = ( function_exists( 'curl_version' ) ) ? true : false;
265
+
266
+ if ( ! $curl ) {
267
+ $text = __( 'We’ve detected that your server does not have the PHP cURL extension installed. Ask your hosting provider to install it so you’ll be able to perform automatic updates without error.', 'fl-builder' );
268
+ $link = 'https://kb.wpbeaverbuilder.com/article/740-troubleshooting-error-when-trying-to-install-update';
269
+ $link_txt = __( 'See our Knowledge Base for more info.', 'fl-builder' );
270
+ printf( '<div class="curl-alert"><p>%s</p><p><a target="_blank" href="%s">%s</a></p></div>', $text, $link, $link_txt );
271
+ }
272
+ }
273
+
274
  /**
275
  * @since 1.0
276
  * @deprecated 1.8
classes/class-fl-builder-ajax.php CHANGED
@@ -233,8 +233,15 @@ final class FLBuilderAJAX {
233
  */
234
  do_action( 'fl_ajax_after_' . $action['action'], $keys_args );
235
 
 
 
 
 
 
 
 
236
  // JSON encode the result.
237
- echo json_encode( $result );
238
 
239
  // Complete the request.
240
  die();
233
  */
234
  do_action( 'fl_ajax_after_' . $action['action'], $keys_args );
235
 
236
+ /**
237
+ * Set header for JSON if headers have not been sent.
238
+ */
239
+ if ( ! headers_sent() ) {
240
+ header( 'Content-Type:text/plain' );
241
+ }
242
+
243
  // JSON encode the result.
244
+ echo FLBuilderUtils::json_encode( $result );
245
 
246
  // Complete the request.
247
  die();
classes/class-fl-builder-auto-suggest.php CHANGED
@@ -105,11 +105,7 @@ final class FLBuilderAutoSuggest {
105
 
106
  $like = stripslashes( urldecode( $_REQUEST['fl_as_query'] ) );
107
 
108
- if ( method_exists( $wpdb, 'esc_like' ) ) {
109
- $like = esc_sql( $wpdb->esc_like( $like ) );
110
- } else {
111
- $like = like_escape( esc_sql( $like ) );
112
- }
113
 
114
  return $like;
115
  }
105
 
106
  $like = stripslashes( urldecode( $_REQUEST['fl_as_query'] ) );
107
 
108
+ $like = esc_sql( $wpdb->esc_like( $like ) );
 
 
 
 
109
 
110
  return $like;
111
  }
classes/class-fl-builder-debug.php CHANGED
@@ -5,15 +5,17 @@ final class FL_Debug {
5
  static private $tests = array();
6
 
7
  public static function init() {
8
- if ( isset( $_GET['fldebug'] ) && get_option( 'fl_debug_mode', false ) === $_GET['fldebug'] ) {
9
  add_action( 'init', array( 'FL_Debug', 'display_tests' ) );
10
  }
11
 
12
- if ( get_option( 'fl_debug_mode', false ) ) {
13
  self::enable_logging();
 
14
  }
15
  }
16
 
 
17
  public static function enable_logging() {
18
  @ini_set( 'display_errors', 1 ); // @codingStandardsIgnoreLine
19
  @ini_set( 'display_startup_errors', 1 ); // @codingStandardsIgnoreLine
@@ -79,7 +81,7 @@ final class FL_Debug {
79
  return $plugins;
80
  }
81
 
82
- private static function safe_ini_get( $ini ) {
83
  return @ini_get( $ini ); // @codingStandardsIgnoreLine
84
  }
85
 
5
  static private $tests = array();
6
 
7
  public static function init() {
8
+ if ( isset( $_GET['fldebug'] ) && get_transient( 'fl_debug_mode', false ) === $_GET['fldebug'] ) {
9
  add_action( 'init', array( 'FL_Debug', 'display_tests' ) );
10
  }
11
 
12
+ if ( get_transient( 'fl_debug_mode' ) ) {
13
  self::enable_logging();
14
+ add_filter( 'fl_is_debug', '__return_true' );
15
  }
16
  }
17
 
18
+
19
  public static function enable_logging() {
20
  @ini_set( 'display_errors', 1 ); // @codingStandardsIgnoreLine
21
  @ini_set( 'display_startup_errors', 1 ); // @codingStandardsIgnoreLine
81
  return $plugins;
82
  }
83
 
84
+ public static function safe_ini_get( $ini ) {
85
  return @ini_get( $ini ); // @codingStandardsIgnoreLine
86
  }
87
 
classes/class-fl-builder-export.php CHANGED
@@ -74,7 +74,7 @@ final class FLBuilderExport {
74
  );
75
  }
76
 
77
- echo json_encode( $data );
78
 
79
  die();
80
  }
74
  );
75
  }
76
 
77
+ echo FLBuilderUtils::json_encode( $data );
78
 
79
  die();
80
  }
classes/class-fl-builder-fonts.php CHANGED
@@ -224,7 +224,7 @@ final class FLBuilderFonts {
224
  foreach ( $fields as $name => $field ) {
225
  if ( 'font' == $field['type'] && isset( $module->settings->$name ) ) {
226
  self::add_font( $module->settings->$name );
227
- } elseif ( 'typography' == $field['type'] && ! empty( $module->settings->$name ) && isset( $module->settings->{ $name }['font_family'] ) ) {
228
  $fname = $module->settings->{ $name }['font_family'];
229
  $weight = $module->settings->{ $name }['font_weight'];
230
 
@@ -372,7 +372,7 @@ final class FLBuilderFonts {
372
  // Check for any enqueued `fonts.googleapis.com` from BB theme or plugin
373
  if ( isset( $wp_styles->queue ) ) {
374
 
375
- $google_fonts_domain = 'https://fonts.googleapis.com/css';
376
  $enqueued_google_fonts = array();
377
  $families = array();
378
  $subsets = array();
@@ -450,6 +450,8 @@ final class FLBuilderFonts {
450
  $font_args['subset'] = implode( ',', $subsets );
451
  }
452
 
 
 
453
  $src = add_query_arg( $font_args, $google_fonts_domain );
454
 
455
  // Enqueue google fonts into one URL request
224
  foreach ( $fields as $name => $field ) {
225
  if ( 'font' == $field['type'] && isset( $module->settings->$name ) ) {
226
  self::add_font( $module->settings->$name );
227
+ } elseif ( 'typography' == $field['type'] && ! empty( $module->settings->$name ) && isset( $module->settings->{ $name }['font_family'] ) && isset( $module->settings->{ $name }['font_weight'] ) ) {
228
  $fname = $module->settings->{ $name }['font_family'];
229
  $weight = $module->settings->{ $name }['font_weight'];
230
 
372
  // Check for any enqueued `fonts.googleapis.com` from BB theme or plugin
373
  if ( isset( $wp_styles->queue ) ) {
374
 
375
+ $google_fonts_domain = apply_filters( 'fl_builder_google_fonts_domain', '//fonts.googleapis.com/css' );
376
  $enqueued_google_fonts = array();
377
  $families = array();
378
  $subsets = array();
450
  $font_args['subset'] = implode( ',', $subsets );
451
  }
452
 
453
+ $font_args = apply_filters( 'fl_builder_google_font_args', $font_args );
454
+
455
  $src = add_query_arg( $font_args, $google_fonts_domain );
456
 
457
  // Enqueue google fonts into one URL request
classes/class-fl-builder-importer.php CHANGED
@@ -14,11 +14,93 @@ class FLBuilderImporter extends WP_Import {
14
  * @return array
15
  */
16
  function parse( $file ) {
17
- $parser = new FLBuilderImportParserRegex();
18
- return $parser->parse( $file );
 
 
 
 
 
19
  }
20
  }
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  /**
23
  * The Regex parser is the only parser we have found that
24
  * doesn't break serialized data. It does have two bugs
@@ -35,6 +117,7 @@ class FLBuilderImportParserRegex extends WXR_Parser_Regex {
35
  * @return array
36
  */
37
  function parse( $file ) {
 
38
  // @codingStandardsIgnoreLine
39
  $wxr_version = $in_post = false;
40
 
@@ -91,8 +174,6 @@ class FLBuilderImportParserRegex extends WXR_Parser_Regex {
91
 
92
  $this->set_pcre_limit( apply_filters( 'fl_builder_importer_pcre', '23001337' ) );
93
  $this->posts[] = $this->process_post( $post );
94
- $this->set_pcre_limit( 'default' );
95
-
96
  continue;
97
  }
98
  if ( $in_post ) {
@@ -130,6 +211,7 @@ class FLBuilderImportParserRegex extends WXR_Parser_Regex {
130
  );
131
  }
132
 
 
133
  /**
134
  * Try increasing PCRE limit to avoid failing of importing huge postmeta data.
135
  *
@@ -137,25 +219,8 @@ class FLBuilderImportParserRegex extends WXR_Parser_Regex {
137
  * @param string $value
138
  */
139
  function set_pcre_limit( $value ) {
140
-
141
- if ( ! isset( $this->default_backtrack_limit ) ) {
142
- $this->default_backtrack_limit = @ini_get( 'pcre.backtrack_limit' ); // @codingStandardsIgnoreLine
143
- $this->default_recursion_limit = @ini_get( 'pcre.recursion_limit' ); // @codingStandardsIgnoreLine
144
- }
145
-
146
- if ( 'default' != $value ) {
147
- @ini_set( 'pcre.backtrack_limit', $value ); // @codingStandardsIgnoreLine
148
- @ini_set( 'pcre.recursion_limit', $value ); // @codingStandardsIgnoreLine
149
- } else {
150
- // Reset limit back to default.
151
- if ( is_numeric( $this->default_backtrack_limit ) ) {
152
- @ini_set( 'pcre.backtrack_limit', $this->default_backtrack_limit ); // @codingStandardsIgnoreLine
153
- }
154
-
155
- if ( is_numeric( $this->default_recursion_limit ) ) {
156
- @ini_set( 'pcre.recursion_limit', $this->default_recursion_limit ); // @codingStandardsIgnoreLine
157
- }
158
- }
159
  }
160
  }
161
 
14
  * @return array
15
  */
16
  function parse( $file ) {
17
+ if ( extension_loaded( 'xml' ) ) {
18
+ $parser = new FLBuilderImportParserXML();
19
+ return $parser->parse( $file );
20
+ } else {
21
+ $parser = new FLBuilderImportParserRegex();
22
+ return $parser->parse( $file );
23
+ }
24
  }
25
  }
26
 
27
+ class FLBuilderImportParserXML extends WXR_Parser_XML {
28
+
29
+ function tag_close( $parser, $tag ) {
30
+ switch ( $tag ) {
31
+ case 'wp:comment':
32
+ unset( $this->sub_data['key'], $this->sub_data['value'] ); // remove meta sub_data
33
+ if ( ! empty( $this->sub_data ) ) {
34
+ $this->data['comments'][] = $this->sub_data;
35
+ }
36
+ $this->sub_data = false;
37
+ break;
38
+ case 'wp:commentmeta':
39
+ $this->sub_data['commentmeta'][] = array(
40
+ 'key' => $this->sub_data['key'],
41
+ 'value' => $this->sub_data['value'],
42
+ );
43
+ break;
44
+ case 'category':
45
+ if ( ! empty( $this->sub_data ) ) {
46
+ $this->sub_data['name'] = $this->cdata;
47
+ $this->data['terms'][] = $this->sub_data;
48
+ }
49
+ $this->sub_data = false;
50
+ break;
51
+ case 'wp:postmeta':
52
+ if ( ! empty( $this->sub_data ) ) {
53
+ if ( stristr( $this->sub_data['key'], '_fl_builder_' ) ) {
54
+ $this->set_pcre_limit( apply_filters( 'fl_builder_importer_pcre', '23001337' ) );
55
+ $this->sub_data['value'] = FLBuilderImporterDataFix::run( serialize( $this->sub_data['value'] ) );
56
+ }
57
+ $this->data['postmeta'][] = $this->sub_data;
58
+ }
59
+ $this->sub_data = false;
60
+ break;
61
+ case 'item':
62
+ $this->posts[] = $this->data;
63
+ $this->data = false;
64
+ break;
65
+ case 'wp:category':
66
+ case 'wp:tag':
67
+ case 'wp:term':
68
+ $n = substr( $tag, 3 );
69
+ array_push( $this->$n, $this->data );
70
+ $this->data = false;
71
+ break;
72
+ case 'wp:author':
73
+ if ( ! empty( $this->data['author_login'] ) ) {
74
+ $this->authors[ $this->data['author_login'] ] = $this->data;
75
+ }
76
+ $this->data = false;
77
+ break;
78
+ case 'wp:base_site_url':
79
+ $this->base_url = $this->cdata;
80
+ break;
81
+ case 'wp:wxr_version':
82
+ $this->wxr_version = $this->cdata;
83
+ break;
84
+ default:
85
+ if ( $this->in_sub_tag ) {
86
+ $this->sub_data[ $this->in_sub_tag ] = ! empty( $this->cdata ) ? $this->cdata : '';
87
+ $this->in_sub_tag = false;
88
+ } elseif ( $this->in_tag ) {
89
+ $this->data[ $this->in_tag ] = ! empty( $this->cdata ) ? $this->cdata : '';
90
+ $this->in_tag = false;
91
+ }
92
+ }
93
+ $this->cdata = false;
94
+ }
95
+
96
+ function set_pcre_limit( $value ) {
97
+
98
+ @ini_set( 'pcre.backtrack_limit', $value ); // @codingStandardsIgnoreLine
99
+ @ini_set( 'pcre.recursion_limit', $value ); // @codingStandardsIgnoreLine
100
+ }
101
+ }
102
+
103
+
104
  /**
105
  * The Regex parser is the only parser we have found that
106
  * doesn't break serialized data. It does have two bugs
117
  * @return array
118
  */
119
  function parse( $file ) {
120
+
121
  // @codingStandardsIgnoreLine
122
  $wxr_version = $in_post = false;
123
 
174
 
175
  $this->set_pcre_limit( apply_filters( 'fl_builder_importer_pcre', '23001337' ) );
176
  $this->posts[] = $this->process_post( $post );
 
 
177
  continue;
178
  }
179
  if ( $in_post ) {
211
  );
212
  }
213
 
214
+
215
  /**
216
  * Try increasing PCRE limit to avoid failing of importing huge postmeta data.
217
  *
219
  * @param string $value
220
  */
221
  function set_pcre_limit( $value ) {
222
+ @ini_set( 'pcre.backtrack_limit', $value ); // @codingStandardsIgnoreLine
223
+ @ini_set( 'pcre.recursion_limit', $value ); // @codingStandardsIgnoreLine
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
224
  }
225
  }
226
 
classes/class-fl-builder-loader.php CHANGED
@@ -46,7 +46,7 @@ if ( ! class_exists( 'FLBuilderLoader' ) ) {
46
  * @return void
47
  */
48
  static private function define_constants() {
49
- define( 'FL_BUILDER_VERSION', '2.2.2.5' );
50
  define( 'FL_BUILDER_FILE', trailingslashit( dirname( dirname( __FILE__ ) ) ) . 'fl-builder.php' );
51
  define( 'FL_BUILDER_DIR', plugin_dir_path( FL_BUILDER_FILE ) );
52
  define( 'FL_BUILDER_URL', plugins_url( '/', FL_BUILDER_FILE ) );
46
  * @return void
47
  */
48
  static private function define_constants() {
49
+ define( 'FL_BUILDER_VERSION', '2.2.4.3' );
50
  define( 'FL_BUILDER_FILE', trailingslashit( dirname( dirname( __FILE__ ) ) ) . 'fl-builder.php' );
51
  define( 'FL_BUILDER_DIR', plugin_dir_path( FL_BUILDER_FILE ) );
52
  define( 'FL_BUILDER_URL', plugins_url( '/', FL_BUILDER_FILE ) );
classes/class-fl-builder-loop.php CHANGED
@@ -53,6 +53,14 @@ final class FLBuilderLoop {
53
  */
54
  static private $_rewrote_taxonomy = false;
55
 
 
 
 
 
 
 
 
 
56
  /**
57
  * Initializes hooks.
58
  *
@@ -99,6 +107,17 @@ final class FLBuilderLoop {
99
  // Count how many times this method has been called
100
  self::$loop_counter++;
101
 
 
 
 
 
 
 
 
 
 
 
 
102
  if ( isset( $settings->data_source ) && 'main_query' == $settings->data_source ) {
103
  $query = self::main_query();
104
  } else {
@@ -164,7 +183,7 @@ final class FLBuilderLoop {
164
  $users = empty( $settings->users ) ? '' : $settings->users;
165
  $fields = empty( $settings->fields ) ? '' : $settings->fields;
166
  $exclude_self = '';
167
- if ( isset( $settings->exclude_self ) && 'yes' == $settings->exclude_self ) {
168
  $exclude_self = $post->ID;
169
  }
170
 
@@ -207,6 +226,11 @@ final class FLBuilderLoop {
207
  $args['meta_key'] = $settings->order_by_meta_key;
208
  }
209
 
 
 
 
 
 
210
  // Order by author
211
  if ( 'author' == $order_by ) {
212
  $args['orderby'] = array(
@@ -684,8 +708,10 @@ final class FLBuilderLoop {
684
  return false;
685
  }
686
 
687
- if ( $query->is_archive && $query->is_category ) {
688
- if ( $query->post_count < 1 && ! isset( $_GET['flpaging'] ) ) {
 
 
689
  return false;
690
  }
691
  }
@@ -747,14 +773,9 @@ final class FLBuilderLoop {
747
  $base = self::build_base_url( $permalink_structure, $base );
748
  $format = self::paged_format( $permalink_structure, $base );
749
 
750
- // Flag if it's a first posts module in an archive page.
751
- // Fix pagination issues in archive page since it's using the main WP query for pagination.
752
- if ( $query->is_archive && 1 === self::$loop_counter ) {
753
- if ( isset( $query->query['settings']->data_source ) && 'custom_query' == $query->query['settings']->data_source ) {
754
- $add_args = array(
755
- 'flpaging' => 1,
756
- );
757
- }
758
  }
759
 
760
  echo paginate_links(array(
@@ -798,12 +819,6 @@ final class FLBuilderLoop {
798
  $link = strtok( $link, '?' );
799
  $link = add_query_arg( $link_args, $link );
800
  }
801
- } elseif ( false !== strpos( $link, 'flpaging' ) && self::$loop_counter > 1 ) {
802
- $link_params = str_replace( 'flpaging=1', '', $link_params );
803
- wp_parse_str( $link_params, $link_args );
804
-
805
- $link = strtok( $link, '?' );
806
- $link = add_query_arg( $link_args, $link );
807
  }
808
 
809
  return $link;
53
  */
54
  static private $_rewrote_taxonomy = false;
55
 
56
+ /**
57
+ * Set random seed to avoid duplicate posts in pagination.
58
+ *
59
+ * @since 2.2.3
60
+ * @var int
61
+ */
62
+ static private $rand_seed = 0;
63
+
64
  /**
65
  * Initializes hooks.
66
  *
107
  // Count how many times this method has been called
108
  self::$loop_counter++;
109
 
110
+ // Set random order seed for load_more and scroll paginations.
111
+ if ( isset( $settings->order_by ) && 'rand' == $settings->order_by ) {
112
+ if ( isset( $settings->pagination ) && in_array( $settings->pagination, array( 'scroll', 'load_more' ) ) ) {
113
+ if ( ! isset( $_GET['fl_rand_seed'] ) ) {
114
+ self::$rand_seed = rand();
115
+ } else {
116
+ self::$rand_seed = $_GET['fl_rand_seed'];
117
+ }
118
+ }
119
+ }
120
+
121
  if ( isset( $settings->data_source ) && 'main_query' == $settings->data_source ) {
122
  $query = self::main_query();
123
  } else {
183
  $users = empty( $settings->users ) ? '' : $settings->users;
184
  $fields = empty( $settings->fields ) ? '' : $settings->fields;
185
  $exclude_self = '';
186
+ if ( $post && isset( $settings->exclude_self ) && 'yes' == $settings->exclude_self ) {
187
  $exclude_self = $post->ID;
188
  }
189
 
226
  $args['meta_key'] = $settings->order_by_meta_key;
227
  }
228
 
229
+ // Random order seed.
230
+ if ( 'rand' == $order_by && self::$rand_seed > 0 ) {
231
+ $args['orderby'] = 'RAND(' . self::$rand_seed . ')';
232
+ }
233
+
234
  // Order by author
235
  if ( 'author' == $order_by ) {
236
  $args['orderby'] = array(
708
  return false;
709
  }
710
 
711
+ if ( $query->is_archive && $query->is_category && $query->post_count < 1 ) {
712
+
713
+ $post_grid_posts = fl_theme_builder_cat_archive_post_grid( $query );
714
+ if ( ! $post_grid_posts || $post_grid_posts->post_count < 1 ) {
715
  return false;
716
  }
717
  }
773
  $base = self::build_base_url( $permalink_structure, $base );
774
  $format = self::paged_format( $permalink_structure, $base );
775
 
776
+ // Add random order seed for scroll and load more.
777
+ if ( self::$rand_seed > 0 ) {
778
+ $add_args['fl_rand_seed'] = self::$rand_seed;
 
 
 
 
 
779
  }
780
 
781
  echo paginate_links(array(
819
  $link = strtok( $link, '?' );
820
  $link = add_query_arg( $link_args, $link );
821
  }
 
 
 
 
 
 
822
  }
823
 
824
  return $link;
classes/class-fl-builder-model.php CHANGED
@@ -4118,8 +4118,6 @@ final class FLBuilderModel {
4118
 
4119
  if ( count( $post_meta ) !== 0 ) {
4120
 
4121
- $sql = "INSERT INTO {$wpdb->postmeta} (post_id, meta_key, meta_value) ";
4122
-
4123
  foreach ( $post_meta as $meta_info ) {
4124
  $meta_key = $meta_info->meta_key;
4125
 
@@ -4128,14 +4126,10 @@ final class FLBuilderModel {
4128
  } else {
4129
  $meta_value = addslashes( $meta_info->meta_value );
4130
  }
4131
-
4132
- $sql_select[] = "SELECT {$new_post_id}, '{$meta_key}', '{$meta_value}'";
 
4133
  }
4134
-
4135
- $sql .= implode( ' UNION ALL ', $sql_select );
4136
- // @codingStandardsIgnoreStart
4137
- $wpdb->query($sql);
4138
- // @codingStandardsIgnoreEnd
4139
  }
4140
 
4141
  // Duplicate post terms.
@@ -6333,6 +6327,15 @@ final class FLBuilderModel {
6333
  static public function get_enabled_icons() {
6334
  $value = self::get_admin_settings_option( '_fl_builder_enabled_icons', true );
6335
 
 
 
 
 
 
 
 
 
 
6336
  return ! $value ? array( 'font-awesome-5-regular', 'font-awesome-5-solid', 'font-awesome-5-brands', 'foundation-icons', 'dashicons' ) : $value;
6337
  }
6338
 
4118
 
4119
  if ( count( $post_meta ) !== 0 ) {
4120
 
 
 
4121
  foreach ( $post_meta as $meta_info ) {
4122
  $meta_key = $meta_info->meta_key;
4123
 
4126
  } else {
4127
  $meta_value = addslashes( $meta_info->meta_value );
4128
  }
4129
+ // @codingStandardsIgnoreStart
4130
+ $wpdb->query( "INSERT INTO {$wpdb->postmeta} (post_id, meta_key, meta_value) values ({$new_post_id}, '{$meta_key}', '{$meta_value}')" );
4131
+ // @codingStandardsIgnoreEnd
4132
  }
 
 
 
 
 
4133
  }
4134
 
4135
  // Duplicate post terms.
6327
  static public function get_enabled_icons() {
6328
  $value = self::get_admin_settings_option( '_fl_builder_enabled_icons', true );
6329
 
6330
+ /**
6331
+ * font-awesome should not be a key in this array, if it is it can cause issues.
6332
+ */
6333
+ if ( is_array( $value ) ) {
6334
+ $key = array_search( 'font-awesome', $value, true );
6335
+ if ( false !== $key ) {
6336
+ unset( $value[ $key ] );
6337
+ }
6338
+ }
6339
  return ! $value ? array( 'font-awesome-5-regular', 'font-awesome-5-solid', 'font-awesome-5-brands', 'foundation-icons', 'dashicons' ) : $value;
6340
  }
6341
 
classes/class-fl-builder-service-infusionsoft.php CHANGED
@@ -208,7 +208,7 @@ final class FLBuilderServiceInfusionsoft extends FLBuilderService {
208
  'row_class' => 'fl-builder-service-field-row',
209
  'class' => 'fl-builder-service-list-select',
210
  'type' => 'select',
211
- 'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
212
  'options' => $options,
213
  'preview' => array(
214
  'type' => 'none',
208
  'row_class' => 'fl-builder-service-field-row',
209
  'class' => 'fl-builder-service-list-select',
210
  'type' => 'select',
211
+ 'label' => _x( 'Select Tag', 'An email list from a third party provider.', 'fl-builder' ),
212
  'options' => $options,
213
  'preview' => array(
214
  'type' => 'none',
classes/class-fl-builder-shortcodes.php CHANGED
@@ -26,7 +26,7 @@ final class FLBuilderShortcodes {
26
  * @return string
27
  */
28
  static public function insert_layout( $attrs ) {
29
- $builder_active = in_the_loop() && FLBuilderModel::is_builder_active();
30
  $post_type = isset( $attrs['type'] ) ? $attrs['type'] : get_post_types();
31
  $site_id = isset( $attrs['site'] ) ? absint( $attrs['site'] ) : null;
32
  $args = array(
26
  * @return string
27
  */
28
  static public function insert_layout( $attrs ) {
29
+ $builder_active = FLBuilderModel::is_builder_active();
30
  $post_type = isset( $attrs['type'] ) ? $attrs['type'] : get_post_types();
31
  $site_id = isset( $attrs['site'] ) ? absint( $attrs['site'] ) : null;
32
  $args = array(
classes/class-fl-builder-ui-settings-forms.php CHANGED
@@ -40,10 +40,17 @@ class FLBuilderUISettingsForms {
40
 
41
  if ( FLBuilderModel::is_builder_active() ) {
42
 
43
- $url = FLBuilderModel::get_edit_url( $wp_the_query->post->ID ) . '&fl_builder_load_settings_config';
44
- $script = 'var s = document.createElement("script");s.type = "text/javascript";s.src = "%s";document.head.appendChild(s);';
45
- $config = sprintf( $script, $url );
46
- $modules = sprintf( $script, $url . '=modules' );
 
 
 
 
 
 
 
47
 
48
  wp_add_inline_script( 'fl-builder', $config );
49
  wp_add_inline_script( 'fl-builder-min', $config );
40
 
41
  if ( FLBuilderModel::is_builder_active() ) {
42
 
43
+ $script_url = add_query_arg( array(
44
+ 'fl_builder_load_settings_config' => true,
45
+ 'ver' => rand(),
46
+ ), FLBuilderModel::get_edit_url( $wp_the_query->post->ID ) );
47
+ $modules_url = add_query_arg( array(
48
+ 'fl_builder_load_settings_config' => 'modules',
49
+ 'ver' => rand(),
50
+ ), FLBuilderModel::get_edit_url( $wp_the_query->post->ID ) );
51
+ $script = 'var s = document.createElement("script");s.type = "text/javascript";s.src = "%s";document.head.appendChild(s);';
52
+ $config = sprintf( $script, $script_url );
53
+ $modules = sprintf( $script, $modules_url );
54
 
55
  wp_add_inline_script( 'fl-builder', $config );
56
  wp_add_inline_script( 'fl-builder-min', $config );
classes/class-fl-builder-update.php CHANGED
@@ -90,6 +90,11 @@ final class FLBuilderUpdate {
90
  self::v_1_10();
91
  }
92
 
 
 
 
 
 
93
  // Clear all asset cache.
94
  FLBuilderModel::delete_asset_cache_for_all_posts();
95
 
@@ -562,6 +567,15 @@ final class FLBuilderUpdate {
562
 
563
  return $data;
564
  }
 
 
 
 
 
 
 
 
 
565
  }
566
 
567
  FLBuilderUpdate::init();
90
  self::v_1_10();
91
  }
92
 
93
+ // Update to 1.10 or greater.
94
+ if ( version_compare( $saved_version, '2.2.2.6', '<' ) ) {
95
+ self::v_2226();
96
+ }
97
+
98
  // Clear all asset cache.
99
  FLBuilderModel::delete_asset_cache_for_all_posts();
100
 
567
 
568
  return $data;
569
  }
570
+
571
+ static private function v_2226() {
572
+
573
+ if ( false !== get_option( 'fl_debug_mode', false ) ) {
574
+ $current = get_option( 'fl_debug_mode' );
575
+ set_transient( 'fl_debug_mode', $current, 172800 ); // 48 hours
576
+ delete_option( 'fl_debug_mode' );
577
+ }
578
+ }
579
  }
580
 
581
  FLBuilderUpdate::init();
classes/class-fl-builder-utils.php CHANGED
@@ -267,4 +267,16 @@ final class FLBuilderUtils {
267
  return 0;
268
  }
269
 
 
 
 
 
 
 
 
 
 
 
 
 
270
  }
267
  return 0;
268
  }
269
 
270
+ /**
271
+ * Version safe json_encode
272
+ * @since 2.2.4
273
+ */
274
+ static public function json_encode( $data ) {
275
+ if ( version_compare( PHP_VERSION, '5.5', '<' ) ) {
276
+ return json_encode( $data );
277
+ } else {
278
+ return json_encode( $data, JSON_PARTIAL_OUTPUT_ON_ERROR );
279
+ }
280
+ }
281
+
282
  }
classes/class-fl-builder-wpcli-command.php CHANGED
@@ -46,11 +46,7 @@ class FLbuilder_WPCLI_Command extends WP_CLI_Command {
46
 
47
  if ( true == $network ) {
48
 
49
- if ( function_exists( 'get_sites' ) ) {
50
- $blogs = get_sites();
51
- } else {
52
- $blogs = wp_get_sites();
53
- }
54
 
55
  foreach ( $blogs as $keys => $blog ) {
56
 
@@ -63,7 +59,7 @@ class FLbuilder_WPCLI_Command extends WP_CLI_Command {
63
  switch_to_blog( $blog_id );
64
  FLBuilderModel::delete_asset_cache_for_all_posts();
65
  /* translators: %s: current blog name */
66
- WP_CLI::success( sprintf( _x( 'Cleared the page builder cache for blog %s', 'current blog name', 'fl-builder' ), get_option( 'home' ) ) );
67
  if ( $all ) {
68
  FLCustomizer::refresh_css();
69
  /* translators: %s: current blog name */
@@ -73,7 +69,7 @@ class FLbuilder_WPCLI_Command extends WP_CLI_Command {
73
  }
74
  } else {
75
  FLBuilderModel::delete_asset_cache_for_all_posts();
76
- WP_CLI::success( __( 'Cleared the page builder cache', 'fl-builder' ) );
77
  if ( $all ) {
78
  FLCustomizer::refresh_css();
79
  WP_CLI::success( __( 'Rebuilt the theme cache', 'fl-builder' ) );
46
 
47
  if ( true == $network ) {
48
 
49
+ $blogs = get_sites();
 
 
 
 
50
 
51
  foreach ( $blogs as $keys => $blog ) {
52
 
59
  switch_to_blog( $blog_id );
60
  FLBuilderModel::delete_asset_cache_for_all_posts();
61
  /* translators: %s: current blog name */
62
+ WP_CLI::success( sprintf( _x( 'Cleared the Beaver Builder cache for blog %s', 'current blog name', 'fl-builder' ), get_option( 'home' ) ) );
63
  if ( $all ) {
64
  FLCustomizer::refresh_css();
65
  /* translators: %s: current blog name */
69
  }
70
  } else {
71
  FLBuilderModel::delete_asset_cache_for_all_posts();
72
+ WP_CLI::success( __( 'Cleared the Beaver Builder cache', 'fl-builder' ) );
73
  if ( $all ) {
74
  FLCustomizer::refresh_css();
75
  WP_CLI::success( __( 'Rebuilt the theme cache', 'fl-builder' ) );
classes/class-fl-builder.php CHANGED
@@ -68,7 +68,7 @@ final class FLBuilder {
68
  * @since 2.1
69
  */
70
  static public $fa4_url = '';
71
- static public $fa5_pro_url = 'https://pro.fontawesome.com/releases/v5.8.1/css/all.css';
72
 
73
  /**
74
  * Initializes hooks.
@@ -121,6 +121,13 @@ final class FLBuilder {
121
  $locale = apply_filters( 'plugin_locale', get_locale(), 'fl-builder' );
122
  }
123
 
 
 
 
 
 
 
 
124
  //Setup paths to current locale file
125
  $mofile_global = trailingslashit( WP_LANG_DIR ) . 'plugins/bb-plugin/' . $locale . '.mo';
126
  $mofile_local = trailingslashit( FL_BUILDER_DIR ) . 'languages/' . $locale . '.mo';
@@ -771,6 +778,23 @@ final class FLBuilder {
771
  }
772
  }
773
  wp_add_inline_style( 'admin-bar', '#wp-admin-bar-fl-builder-frontend-edit-link .ab-icon:before { content: "\f116" !important; top: 2px; margin-right: 3px; }' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
774
  }
775
 
776
  /**
@@ -1516,6 +1540,11 @@ final class FLBuilder {
1516
 
1517
  // Build the attributes string.
1518
  $attr_string = '';
 
 
 
 
 
1519
 
1520
  foreach ( $attrs as $attr_key => $attr_value ) {
1521
  $attr_string .= ' ' . $attr_key . '="' . $attr_value . '"';
@@ -1558,6 +1587,12 @@ final class FLBuilder {
1558
  $content = preg_replace_callback( "/$pattern/s", 'FLBuilder::double_escape_shortcodes', $content );
1559
  $content = $wp_embed->run_shortcode( $content );
1560
  $content = do_shortcode( $content );
 
 
 
 
 
 
1561
  }
1562
 
1563
  // Add srcset attrs to images with the class wp-image-<ID>.
@@ -1923,6 +1958,12 @@ final class FLBuilder {
1923
  * @see fl_builder_after_render_row
1924
  */
1925
  do_action( 'fl_builder_after_render_row', $row, $groups );
 
 
 
 
 
 
1926
  }
1927
  }
1928
 
@@ -2160,6 +2201,12 @@ final class FLBuilder {
2160
 
2161
  if ( $active || $visible ) {
2162
  include FL_BUILDER_DIR . 'includes/column.php';
 
 
 
 
 
 
2163
  }
2164
  }
2165
 
@@ -2308,6 +2355,12 @@ final class FLBuilder {
2308
  * @see fl_builder_after_render_module
2309
  */
2310
  do_action( 'fl_builder_after_render_module', $module );
 
 
 
 
 
 
2311
  }
2312
  }
2313
 
@@ -2500,6 +2553,8 @@ final class FLBuilder {
2500
  */
2501
 
2502
  static public function render_css( $include_global = true ) {
 
 
2503
  $active = FLBuilderModel::is_builder_active();
2504
  $nodes = FLBuilderModel::get_categorized_nodes();
2505
  $node_status = FLBuilderModel::get_node_status();
@@ -2622,7 +2677,7 @@ final class FLBuilder {
2622
  $css .= self::render_global_nodes_custom_code( 'css' );
2623
 
2624
  // Custom Layout CSS
2625
- if ( 'published' == $node_status ) {
2626
  $css .= FLBuilderModel::get_layout_settings()->css;
2627
  }
2628
 
@@ -3092,8 +3147,8 @@ final class FLBuilder {
3092
 
3093
  // Add the layout settings JS.
3094
  if ( ! isset( $_GET['safemode'] ) ) {
3095
- $js .= self::render_global_nodes_custom_code( 'js' );
3096
- $js .= ( is_array( $layout_settings->js ) || is_object( $layout_settings->js ) ) ? json_encode( $layout_settings->js ) : $layout_settings->js;
3097
  }
3098
 
3099
  // Call the FLBuilder._renderLayoutComplete method if we're currently editing.
@@ -3166,8 +3221,14 @@ final class FLBuilder {
3166
  $js .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . 'js/fl-builder-layout.js' );
3167
 
3168
  // Add the global settings JS.
3169
- $js .= $global_settings->js;
 
 
 
 
 
3170
 
 
3171
  return $js;
3172
  }
3173
 
@@ -3459,6 +3520,35 @@ final class FLBuilder {
3459
  return $query;
3460
  }
3461
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3462
  /**
3463
  * @since 1.0
3464
  * @deprecated 1.7.4
68
  * @since 2.1
69
  */
70
  static public $fa4_url = '';
71
+ static public $fa5_pro_url = 'https://pro.fontawesome.com/releases/v5.9.0/css/all.css';
72
 
73
  /**
74
  * Initializes hooks.
121
  $locale = apply_filters( 'plugin_locale', get_locale(), 'fl-builder' );
122
  }
123
 
124
+ /**
125
+ * Allow users to overide the locale.
126
+ * @see fl_set_ui_locale
127
+ * @since 2.2.4
128
+ */
129
+ $locale = apply_filters( 'fl_set_ui_locale', $locale );
130
+
131
  //Setup paths to current locale file
132
  $mofile_global = trailingslashit( WP_LANG_DIR ) . 'plugins/bb-plugin/' . $locale . '.mo';
133
  $mofile_local = trailingslashit( FL_BUILDER_DIR ) . 'languages/' . $locale . '.mo';
778
  }
779
  }
780
  wp_add_inline_style( 'admin-bar', '#wp-admin-bar-fl-builder-frontend-edit-link .ab-icon:before { content: "\f116" !important; top: 2px; margin-right: 3px; }' );
781
+ $args = array(
782
+ 'product' => FLBuilderModel::get_branding(),
783
+ 'white_label' => FLBuilderModel::is_white_labeled(),
784
+ /**
785
+ * Custom info text for crash popup.
786
+ * @see fl_builder_crash_white_label_text
787
+ */
788
+ 'labeled_txt' => apply_filters( 'fl_builder_crash_white_label_text', '' ),
789
+ 'vars' => array(
790
+ 'PHP Version' => phpversion(),
791
+ 'Memory Limit' => FL_Debug::safe_ini_get( 'memory_limit' ),
792
+ 'max_input_vars' => FL_Debug::safe_ini_get( 'max_input_vars' ),
793
+ 'modsecfix' => ( defined( 'FL_BUILDER_MODSEC_FIX' ) && FL_BUILDER_MODSEC_FIX ) ? 'Enabled' : 'Disabled',
794
+ ),
795
+ );
796
+ wp_localize_script( 'fl-builder-min', 'crash_vars', $args );
797
+ wp_localize_script( 'fl-builder', 'crash_vars', $args );
798
  }
799
 
800
  /**
1540
 
1541
  // Build the attributes string.
1542
  $attr_string = '';
1543
+ /**
1544
+ * Change attributes for container.
1545
+ * @see fl_render_content_by_id_attrs
1546
+ */
1547
+ $attrs = apply_filters( 'fl_render_content_by_id_attrs', $attrs, $post_id );
1548
 
1549
  foreach ( $attrs as $attr_key => $attr_value ) {
1550
  $attr_string .= ' ' . $attr_key . '="' . $attr_value . '"';
1587
  $content = preg_replace_callback( "/$pattern/s", 'FLBuilder::double_escape_shortcodes', $content );
1588
  $content = $wp_embed->run_shortcode( $content );
1589
  $content = do_shortcode( $content );
1590
+ /**
1591
+ * Allow content to be filtered after shortcodes are processed.
1592
+ * @see fl_builder_after_render_shortcodes
1593
+ * @since 2.2.4
1594
+ */
1595
+ $content = apply_filters( 'fl_builder_after_render_shortcodes', $content );
1596
  }
1597
 
1598
  // Add srcset attrs to images with the class wp-image-<ID>.
1958
  * @see fl_builder_after_render_row
1959
  */
1960
  do_action( 'fl_builder_after_render_row', $row, $groups );
1961
+ } else {
1962
+ /**
1963
+ * Fires in place of a hidden row.
1964
+ * @see fl_builder_hidden_node
1965
+ */
1966
+ do_action( 'fl_builder_hidden_node', $row );
1967
  }
1968
  }
1969
 
2201
 
2202
  if ( $active || $visible ) {
2203
  include FL_BUILDER_DIR . 'includes/column.php';
2204
+ } else {
2205
+ /**
2206
+ * Fires in place of a hidden column.
2207
+ * @see fl_builder_hidden_node
2208
+ */
2209
+ do_action( 'fl_builder_hidden_node', $col );
2210
  }
2211
  }
2212
 
2355
  * @see fl_builder_after_render_module
2356
  */
2357
  do_action( 'fl_builder_after_render_module', $module );
2358
+ } else {
2359
+ /**
2360
+ * Fires in place of a hidden module.
2361
+ * @see fl_builder_hidden_node
2362
+ */
2363
+ do_action( 'fl_builder_hidden_node', $module );
2364
  }
2365
  }
2366
 
2553
  */
2554
 
2555
  static public function render_css( $include_global = true ) {
2556
+ global $wp_the_query;
2557
+
2558
  $active = FLBuilderModel::is_builder_active();
2559
  $nodes = FLBuilderModel::get_categorized_nodes();
2560
  $node_status = FLBuilderModel::get_node_status();
2677
  $css .= self::render_global_nodes_custom_code( 'css' );
2678
 
2679
  // Custom Layout CSS
2680
+ if ( 'published' == $node_status || $post_id !== $wp_the_query->post->ID ) {
2681
  $css .= FLBuilderModel::get_layout_settings()->css;
2682
  }
2683
 
3147
 
3148
  // Add the layout settings JS.
3149
  if ( ! isset( $_GET['safemode'] ) ) {
3150
+ $js .= self::js_comment( 'Global Node Custom JS', self::render_global_nodes_custom_code( 'js' ) );
3151
+ $js .= ( is_array( $layout_settings->js ) || is_object( $layout_settings->js ) ) ? self::js_comment( 'Layout Custom JS', json_encode( $layout_settings->js ) ) : self::js_comment( 'Layout Custom JS', $layout_settings->js );
3152
  }
3153
 
3154
  // Call the FLBuilder._renderLayoutComplete method if we're currently editing.
3221
  $js .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . 'js/fl-builder-layout.js' );
3222
 
3223
  // Add the global settings JS.
3224
+ $js .= self::js_comment( 'Global JS', $global_settings->js );
3225
+
3226
+ return $js;
3227
+ }
3228
+
3229
+ static public function js_comment( $comment, $js ) {
3230
 
3231
+ $js = sprintf( "\n/* Start %s */\n%s\n/* End %s */\n\n", $comment, $js, $comment );
3232
  return $js;
3233
  }
3234
 
3520
  return $query;
3521
  }
3522
 
3523
+ /**
3524
+ * @since 2.2.3
3525
+ */
3526
+ static public function is_schema_enabled() {
3527
+
3528
+ /**
3529
+ * Disable all schema.
3530
+ * @see fl_builder_disable_schema
3531
+ */
3532
+ if ( false !== apply_filters( 'fl_builder_disable_schema', false ) ) {
3533
+ return false;
3534
+ } else {
3535
+ return true;
3536
+ }
3537
+ }
3538
+
3539
+ /**
3540
+ * @since 2.2.3
3541
+ */
3542
+ static public function print_schema( $schema, $echo = true ) {
3543
+ if ( self::is_schema_enabled() ) {
3544
+ if ( $echo ) {
3545
+ echo $schema;
3546
+ } else {
3547
+ return $schema;
3548
+ }
3549
+ }
3550
+ }
3551
+
3552
  /**
3553
  * @since 1.0
3554
  * @deprecated 1.7.4
css/fl-builder-admin-settings.css CHANGED
@@ -191,6 +191,18 @@ body .ms-options-wrap > .ms-options > ul input[type="checkbox"] {
191
  display: inline-block;
192
  }
193
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  /* Templates
195
  ----------------------------------------------------------- */
196
 
191
  display: inline-block;
192
  }
193
 
194
+ .curl-alert {
195
+ padding: 16px 25px 16px 20px;
196
+ background-color: #fde8e8;
197
+ border-left: 5px solid #e7aaaa;
198
+ margin-bottom: 2em;
199
+ }
200
+ .curl-alert p {
201
+ font-size: 1rem;
202
+ color: #333;
203
+ }
204
+
205
+
206
  /* Templates
207
  ----------------------------------------------------------- */
208
 
css/fl-builder.css CHANGED
@@ -612,7 +612,7 @@ body .fl-builder-bar .fl-builder-bar-content.is-muted > *:not(.fl-builder-publis
612
  padding:0;
613
  z-index: -1;
614
  font-size: 16px;
615
- overflow: visible;
616
  height: auto !important;
617
  max-height: calc(100vh - 66px);
618
  min-height: 300px;
@@ -3895,7 +3895,7 @@ body .fl-lightbox-has-tab-overflow .fl-builder-settings-tabs-more {
3895
  }
3896
 
3897
  .wp-core-ui #media-attachment-date-filters {
3898
- width: 275px;
3899
  }
3900
 
3901
  .wp-core-ui input[type=search]::placeholder{
@@ -5371,6 +5371,7 @@ body > .fl-builder-tour-dimmed {
5371
 
5372
  .fl-builder-shortcode-mask-wrap {
5373
  position: relative;
 
5374
  }
5375
  .fl-builder-shortcode-mask {
5376
  bottom: -1px;
612
  padding:0;
613
  z-index: -1;
614
  font-size: 16px;
615
+ overflow-y: scroll;
616
  height: auto !important;
617
  max-height: calc(100vh - 66px);
618
  min-height: 300px;
3895
  }
3896
 
3897
  .wp-core-ui #media-attachment-date-filters {
3898
+ width: auto;
3899
  }
3900
 
3901
  .wp-core-ui input[type=search]::placeholder{
5371
 
5372
  .fl-builder-shortcode-mask-wrap {
5373
  position: relative;
5374
+ pointer-events: none;
5375
  }
5376
  .fl-builder-shortcode-mask {
5377
  bottom: -1px;
css/fl-builder.min.css CHANGED
@@ -1 +1 @@
1
- .fl-color-picker-ui{width:300px}.fl-color-picker-ui.fl-color-alpha-enabled{width:334px}.fl-color-picker-ui .iris-picker{float:left;width:100%;height:224px;display:block;position:relative;border-top:1px solid rgba(0,0,0,.1)}.fl-color-picker-ui .iris-picker .iris-square-inner,.fl-color-picker-ui .iris-picker-inner{position:absolute;left:0;top:0;bottom:0;right:0}.fl-color-picker-ui .iris-picker,.iris-picker *{box-sizing:content-box}.fl-color-picker-ui .iris-error{background-color:#ffafaf}.fl-color-picker-ui .iris-picker .iris-square{width:300px;height:200px}.fl-color-picker-ui .iris-picker .iris-palette,.fl-color-picker-ui .iris-picker .iris-slider,.fl-color-picker-ui .iris-picker .iris-square-inner{height:100%;width:12.5%}.fl-color-picker-ui .iris-picker .iris-placeholder,.fl-color-picker-ui .iris-picker .iris-square{position:relative}.fl-color-picker-ui .iris-picker .iris-square-inner{width:auto;margin:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square,.fl-color-picker-ui .iris-ie-9 .iris-square-inner{box-shadow:none;border-radius:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square{outline:rgba(0,0,0,.1) solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-palette,.fl-color-picker-ui .iris-ie-lt9 .iris-slider,.fl-color-picker-ui .iris-ie-lt9 .iris-square,.fl-color-picker-ui .iris-ie-lt9 .iris-square-inner{outline:#999 solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-square .ui-slider-handle{outline:#999 solid 1px;background-color:#fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"}.fl-color-picker-ui .iris-ie-lt9 .iris-square .iris-square-handle{background:0 0;border:3px solid #fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"}.fl-color-picker-ui .iris-picker .iris-strip{box-sizing:border-box;width:calc(300px - 12px);margin:5px 6px 6px;border-radius:4px;position:relative;height:22px;transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle{width:6px;position:absolute;right:0;top:-2px;bottom:-2px;margin:0;border-radius:3px;background:#fff;box-shadow:0 0 2px rgba(0,0,0,.5);z-index:5;cursor:ew-resize}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle:focus{outline:#00a0d2 solid 2px}.fl-color-picker-ui .iris-picker .iris-slider-offset{position:absolute;top:0;left:6px;right:0;bottom:0;width:auto;height:auto;background:0 0;border:none;border-radius:0;transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-square-handle{background:0 0;border:5px solid #999;border-radius:50%;border-color:rgba(128,128,128,.5);box-shadow:none;width:12px;height:12px;position:absolute;left:-10px;top:-10px;cursor:move;opacity:1;z-index:10}.fl-color-picker-ui .iris-picker .ui-state-focus .iris-square-handle{opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover{border-color:#999}.fl-color-picker-ui .iris-picker .iris-square-value:focus .iris-square-handle{box-shadow:0 0 2px rgba(0,0,0,.75);opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover::after{border-color:#fff}.fl-color-picker-ui .iris-picker .iris-square-handle::after{position:absolute;bottom:-4px;right:-4px;left:-4px;top:-4px;border:3px solid #f9f9f9;border-color:rgba(255,255,255,.8);border-radius:50%;content:" "}.fl-color-picker-ui .iris-picker .iris-square-value{width:0;height:0;position:absolute}.iris-ie-lt9 .iris-square-value,.iris-mozilla .iris-square-value{width:1px;height:1px}.fl-color-picker-wrapper{position:relative;width:48px;height:32px}.fl-color-picker{box-shadow:0 2px 4px 0 rgba(0,0,0,.12);background:url(../img/transp_bg.png) #fff;border-radius:4px;width:120px;height:36px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-color-picker-color{-ms-flex:1 1 100%;flex:1 1 100%;box-sizing:border-box!important;position:relative;border-radius:4px;background-color:transparent;cursor:pointer;border:2px solid transparent;padding:0;-ms-flex-pack:center;justify-content:center;display:-ms-flexbox;display:flex}.fl-color-picker-clear:hover,.fl-color-picker-color:hover{background:0 0;border:2px solid transparent}.fl-color-picker-clear:focus,.fl-color-picker-color.fl-color-picker-empty:focus,.fl-color-picker-color:focus{outline:0;top:0;border:2px solid #00a0d2;background:0 0}.fl-color-picker.fl-color-picker-has-reset .fl-color-picker-color:not(.fl-color-picker-empty){border-top-right-radius:0;border-bottom-right-radius:0}.fl-color-picker-icon{display:none;margin:auto}.fl-color-picker-color.fl-color-picker-empty{border-color:transparent}.fl-color-picker-color.fl-color-picker-empty svg.fl-color-picker-icon{display:block}.fl-color-picker-color.fl-color-picker-empty svg.fl-color-picker-icon path{fill:inherit}.fl-color-picker-clear{box-sizing:border-box;position:relative;display:-ms-flexbox;display:flex;-ms-flex:0 0 36px;flex:0 0 36px;-ms-flex-pack:center;justify-content:center;padding:0;border:2px solid transparent;fill:#A2AABE;background-color:#E7EBEF;cursor:pointer;border-radius:0 4px 4px 0}.fl-color-picker-clear:hover{fill:#6B6E75;background-color:#E7EBEF}.fl-color-picker-color.fl-color-picker-empty+.fl-color-picker-clear{display:none}.fl-color-picker-ui{display:inline-block;font-family:Helvetica,Verdana,sans-serif;z-index:1;position:fixed;overflow:hidden;padding-bottom:45px;border:1px solid rgba(0,0,0,.1);color:#999;background-color:#FAFAFA;border-radius:3px;box-shadow:0 9px 20px rgba(0,0,0,.17);transition:opacity .2s,visibility .2s;visibility:hidden;opacity:0;-webkit-transform:translate3d(0,0,0)}.fl-color-picker-ui.fl-color-picker-active{visibility:visible;opacity:1;z-index:999999}.fl-color-picker-ui .fl-color-picker-input,.fl-color-picker-ui .fl-color-picker-input:focus{width:100%;height:30px;border:none!important;font-size:14px!important;padding:0 8px;vertical-align:middle;color:#656c6e;background-color:#fff;border-radius:0;box-shadow:none}.fl-color-picker-ui .iris-square-value{transition:none}.fl-color-picker-preset-add{position:absolute;top:8px;right:8px;width:14px;height:14px;background-color:#656c6e;border-radius:50%;cursor:pointer;transition:all .2s}.fl-color-picker-preset-add:hover{background-color:#333}.fl-color-picker-preset-add:after,.fl-color-picker-preset-add:before{content:'';display:block;position:relative;background-color:#fff}.fl-color-picker-preset-add:before{top:6px;left:3px;width:8px;height:2px}.fl-color-picker-preset-add:after{left:6px;top:1px;width:2px;height:8px}.fl-color-picker-presets{position:absolute;left:0;bottom:0;width:100%;z-index:15;overflow:auto;border-top:1px solid rgba(0,0,0,.1);background-color:#FAFAFA}.fl-color-picker-presets-list .fl-color-picker-preset:hover,.fl-color-picker-presets-toggle:hover{background-color:#EDEDED}.fl-color-picker-presets-toggle{position:relative;overflow:hidden;width:100%;height:35px;text-align:center;line-height:35px;font-size:12px;font-weight:700;cursor:pointer;transition:all .1s}.fl-color-picker-presets-close-label,.fl-color-picker-presets-open-label{position:absolute;top:50%;left:50%;visibility:hidden;color:#999;transition:all .5s;transform:translate(-50%,-50%);opacity:0;width:100%}.fl-color-picker-presets-close-label.fl-color-picker-active,.fl-color-picker-presets-open-label.fl-color-picker-active{color:#656c6e;visibility:visible;opacity:1;z-index:999999}.fl-color-picker-presets-list{width:100%;list-style:none;margin:0;padding:0;overflow:auto}.fl-color-picker-presets-list .fl-color-picker-no-preset,.fl-color-picker-presets-list .fl-color-picker-preset{position:relative;padding:5px;font-size:12px;border-top:1px solid rgba(0,0,0,.1);transition:all .1s}.fl-color-picker-presets-list .fl-color-picker-no-preset{padding:18px 5px;text-align:center}.fl-color-picker-presets-list .fl-color-picker-preset-color{display:inline-block;width:40px;height:20px;margin-right:3px;vertical-align:middle;border:1px solid rgba(0,0,0,.1);border-radius:2px;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-label{vertical-align:middle;color:#333;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-remove{position:absolute;top:50%;cursor:pointer;transform:translateY(-50%)}.fl-color-picker-clear .fl-color-picker-icon-remove{right:auto;top:auto;margin:auto}.fl-color-picker-presets-list .fl-color-picker-preset-remove{right:5px}.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:after,.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:before{background-color:#333}.fl-color-picker-added{position:absolute;width:100%;top:0;left:0;right:0;bottom:35px;z-index:10;color:#fff;text-align:center;background-color:rgba(0,0,0,.8)}.fl-color-picker-added-text{position:absolute;top:50%;left:50%;width:80%;font-size:14px;color:#fff!important;transform:translate(-50%,-50%)}.fl-color-picker-icon-check{position:relative;width:50px;height:50px;margin:5px auto}.fl-color-picker-icon-check:before{content:'';display:block;position:relative;width:15px;height:30px;margin-left:14px;border:7px solid #fff;border-left:none;border-top:none;transform:rotate(45deg)}.fl-color-picker-icon-arrow-down,.fl-color-picker-icon-arrow-up{display:inline-block;position:relative;width:10px;height:10px;margin-left:5px}.fl-color-picker-icon-arrow-down:before,.fl-color-picker-icon-arrow-up:before{content:'';display:block;position:relative;width:6px;height:6px;border:2px solid #999;border-left:none;border-top:none;transform:rotate(45deg)}.fl-color-picker-icon-arrow-up{top:2px;transform:rotate(180deg)}.fl-color-picker-icon-remove{width:15px;height:15px}.fl-color-picker-icon-remove:after,.fl-color-picker-icon-remove:before{content:'';display:block;position:relative;background-color:#6f7881}.fl-color-picker-icon-remove:before{left:6px;width:2px;height:10px;margin-top:3px;transform:rotate(-45deg)}.fl-color-picker-icon-remove:after{left:6px;width:2px;height:10px;margin-top:-10px;transform:rotate(45deg)}.fl-alpha-wrap{position:absolute;width:32px;height:215px;padding:0 5px;right:4px;border-top:none}.fl-alpha-slider{height:190px;position:absolute;top:12px;width:28px}.fl-alpha-slider .ui-slider-handle{background:rgba(0,0,0,0);border-color:#aaa;border-radius:4px;border-style:solid;border-width:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);cursor:ns-resize;height:12px;left:0;opacity:.9;position:absolute;right:0;width:30px;z-index:14}.fl-alpha-slider .ui-slider-handle:before{content:" ";position:absolute;left:-2px;right:-2px;top:-3px;bottom:-3px;border:2px solid #fff;border-radius:3px}.fl-theme-builder-preview-select-title i:before,body .fl-theme-builder-preview-select .fa-caret-down i:before,body .fl-theme-builder-preview-select-item-title i:before{content:"\f078"}.fl-alpha-slider-offset{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAASCAYAAAAe/ZHXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkNEQUQ0ODM4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkNEQUQ0ODQ4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2Q0RBRDQ4MThFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2Q0RBRDQ4MjhFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/r/N8AAAWYSURBVHjarFvvR3VBEN45JZGIPkREHyIiIhJJf3qUSERE9CGiDxERkcg9z9u92uucvTszz5z7xnHPj93Z2d359cxscn5+jpTS+EoiMr3/+51cZ2dn4+e29i2/u7y8RKf/pO3vc+o+n5ycoNK31+f6+jrfZ37yuG2mf3R01H3fa5N/b29vU6dP5qft0G4PDg5MGuPr/v4+jz1t27mfvN/b21P75+fHx8eZfiV/Ozs7rUJnSu/5+RlFv+m6ZJpbW1s1PnrvXl9fZ/qX89zY2LB4mfy+v7/nsdV1XltbK/dr5vnz87OcV5bJabuVlRVLBifjfX9/l/xkGtM+S0tLNXnu0szfU/P3IMn/k0678h6ddqjQFGccVL6hoCsVfsq+NZ5QtCv5rfFS41sq37W+UPhMyhxEWTetvce3NR8oewqD39qalXuGAK/WPltjajIC4x2c9Ye1f43SGcqGwRBeTZjhMNntL4pCWZMQYhE05RVl02EovRgC4RkCbUNSQAGhGB/GsKG4h6FQoigDa2i8fRBy3uLMXYIG3Vr3aZvRaCRdBYlYIMZywhBGCVhgzzOlgRuUSOvC0GMEWxOM/+EtQFh1OIIXtfwg1tRaayGjg5px0jyZKEaTle3e+AsLCygVRAh3FlEgKbReE3oYGj9EgIR00QiEgKw3ZBQbRGjBeAMtDETQmHiKDsezJNLgCTFGItZXlAgCSiQggblP+9c8SDI0lXWlFv5g3K63KZ51FOcZzthQ3LomoNHwJmKIQISI3vqzSpwIQ8liSjGMFQjDpoVgaQ6cWgvLhOC7qiAwiHrWbEg4JMSmeUrBuHoYwioOQNXmhmAcrs096s1gJCGi3hSEVU8DQxYElYHhKwUUGAa+NqOBMsSSAQJuhQhCAH4vxozExsxiihPuaIrjCVYKWlYEsjSM52G8Kxxryngl5j0j+EyGTIiED4s1Itm0ZGWxMFCLJaBAcEI6OBkmFgNBoc8Cait2ZnENE/6wQN8LJSJeSMNAjKVm+LUMAIt3PR5AQgIGp1Z5zxhE8PtXUYReYeXi4mKmOPNXBMzt2tPT07LIUtJqr66uusXEbkFnWiQ6Pj72ikrtzc1NKopuvbbj58PDwxqNHp27u7tuYWumUDV+v7+/Xyu6pc59+/DwUCsC9ujt7u6qRbt8//T01C3elbyN70fb29uZ/1FSincvLy/lPGb42tzc9IqJeHt7q61Pr2C6vr7u7tfHx8fMPhV0sLq6WhZtU0n36+uru8elPE7aLi8v1wqJPXn++fmZKYgX8ozFxcXJb0NaQTHClZT8+gBjsYdaFc+zWcUkGTCWENY66ta92oSVzo3WI6IZKGtukeyfBLFKBNAj6bUOBgaoe9wE4n04IBNkLMoC7+Skj630ZlTJMYdyMsU2T8AwpzALkVFilZgJcT2l9PCWDDSAMBSjVlJgZNk0lE1AIby0qCiCnBQNj6aBGQslZIZJ5hB6D/AzQHto5Z9Nk8tARdN4q2ExBnsyIJ311EymShyjan2rKk0zh1Ay1oQVWAZQRnkUA8RFw7TahjBnmNgMVMQrsCGZJezRtGlU0cUZ1zuaxGZPpbhApM+ZpFQqQ6xadoMtBrEKpBVo4GRXvNSxpaRixKiR+TChCYhsDwZkfFj8IkErjAHejcUI0XQrgwehhNSMHAz21E0wZ23FcCAmj8Sd/PXy2xLYLAuwRw4IMsqjFaWYOpMEhDySAPFCWyFkgAHrEcA+BNeJ4UE8HCzJPpCrerUmQIx1pWJkjqxJD8EikUo2c5aI8ZYgsAkM4WQtnHd0ns0ORgVTBghy5ISy928SGsbTMqYg523RUY8oNYG4FIYiyRyZCnFCJC87IoRAIMVOqQ7BKexxCS2hYVl9JhvlpYjnAe4MhmRPMWhhvLfXINaI9WKM0Zu0+SfAAFLE1EgfVSv7AAAAAElFTkSuQmCC) center;box-shadow:0 0 5px rgba(0,0,0,.4) inset;-moz-box-shadow:0 0 5px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4) inset;width:200px;height:22px;transform:rotate(-90deg);bottom:48%;left:-80px;position:absolute}.fl-alpha-text{width:30px;font-size:12px;text-align:center;color:#999;position:absolute;bottom:-5px}.fl-lightbox-mask,.fl-lightbox-wrap{bottom:0;left:0;position:fixed;right:0;z-index:100010}@keyframes fl-lightbox-zoom{from{transform:scale(.4)}to{transform:scale(1)}}.fl-lightbox-wrap{display:none;overflow:auto;padding:0;top:43px;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);pointer-events:none}.fl-builder-draggable-is-dragging .fl-lightbox-wrap,.fl-builder-resizable-is-resizing .fl-lightbox-wrap,.fl-lightbox,.fl-lightbox-mask{pointer-events:auto}.fl-lightbox-mask{background:#000;opacity:.7;filter:alpha(opacity=70);top:0}.fl-lightbox{background:#F5F7F9;border-radius:4px;box-shadow:rgba(0,0,0,1) 0 4px 30px;-moz-box-shadow:rgba(0,0,0,1) 0 4px 30px;-webkit-box-shadow:rgba(0,0,0,1) 0 4px 30px;position:relative;display:-ms-flexbox;display:flex;z-index:100011;transform-origin:center;animation-name:fl-lightbox-zoom;animation-duration:.25s}.fl-lightbox.fl-lightbox-prevent-animation{animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s}.fl-lightbox :not(i){color:#333;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:12px;line-height:14px;text-decoration:none;text-transform:none}.fl-lightbox *,.fl-lightbox :after,.fl-lightbox :before{box-sizing:content-box}#fl-ui-root .fl-nanoscroller-pane,.fl-builder--content-library-panel .fl-nanoscroller-pane,.fl-lightbox .fl-nanoscroller-pane{bottom:2px;right:2px;width:6px}.fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider{background-color:#bac0ca;transition-property:height,background-color;transition-duration:.25s}#wpadminbar,html{transition-duration:.35s}.fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider:hover{background-color:#c8cdd4}.fl-nanoscroller>.fl-nanoscroller-pane.active>.fl-nanoscroller-slider{background-color:#029fd2}.fl-lightbox .dashicons{font-family:dashicons}.fl-lightbox.ui-draggable{box-shadow:rgba(0,0,0,.2) 0 7px 30px;-moz-box-shadow:rgba(0,0,0,.2) 0 7px 30px;-webkit-box-shadow:rgba(0,0,0,.2) 0 7px 30px}#wpadminbar,.fl-builder-bar.is-hidden{pointer-events:none}.fl-lightbox-resizable{height:500px;width:380px}@media (max-width:500px){.fl-lightbox-resizable{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox-resizable .ui-resizable-handle{display:none!important}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:default!important}.fl-lightbox-controls{display:none}}.fl-lightbox-width-full{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox-width-full .fl-lightbox-header{cursor:inherit!important}.fl-lightbox-controls{position:absolute;right:10px;top:10px;z-index:5}.fl-lightbox-controls .fa{color:#bdbdbd;font-size:14px;padding:5px}.fl-lightbox-controls .fa:hover{color:#aaa;cursor:pointer}.fl-lightbox-header-wrap{border-top-left-radius:4px;border-top-right-radius:4px}.fl-lightbox-header{position:relative}.fl-lightbox-header h1{color:#333!important;font-size:16px!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;font-weight:400!important;margin:0!important;padding:14px 34px 15px 28px!important;text-align:left!important;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;line-height:1}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:move}.fl-lightbox-header h1 .fl-builder-badge{margin-left:10px;color:#fff;background-color:#F7A408}.fl-lightbox-content,.fl-lightbox-content-wrap{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1 100%;flex:1 100%;max-width:100%}.fl-lightbox-footer{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end;-ms-flex:0 0;flex:0 0;-ms-flex-preferred-size:44px;flex-basis:44px;padding:4px;text-align:right}.fl-lightbox-footer .fl-builder-button{height:36px;margin-left:5px!important;-ms-flex:0 0 0%;flex:0 0 0%;-ms-flex-pack:center;justify-content:center}.fl-lightbox-width-slim .fl-lightbox-footer{-ms-flex-pack:stretch;justify-content:stretch;padding:4px 5px}.fl-lightbox-width-slim .fl-lightbox-footer .fl-builder-button{-ms-flex:1 1 100%;flex:1 1 100%;display:block;text-align:center}.fl-lightbox-width-slim .fl-lightbox-footer .fl-builder-button:first-child{margin-left:0!important}.fl-lightbox table,.fl-lightbox td,.fl-lightbox th,.fl-lightbox tr{border:none}.fl-lightbox-wrap.fl-icon-selector{z-index:1000111}.fl-icon-selector .fl-lightbox{height:100%}.fl-icons-filter{height:auto!important;margin:0!important;position:absolute!important;right:0;top:0;padding:10px 16px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-icons-filter select{vertical-align:middle;width:195px;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;color:#000;border:2px solid #e4e7ea!important;border-right:none!important;margin:0;padding:2px 10px;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;-ms-flex:1 1 195px;flex:1 1 195px;border-radius:0}.fl-icons-filter input[type=text]{line-height:18px;vertical-align:middle;width:160px;-ms-flex:1 1 160px;flex:1 1 160px;border:2px solid #e4e7ea!important;border-radius:0!important;padding:2px 10px!important}.fl-icons-filter input[type=text]:focus,.fl-icons-filter select:focus{border:2px solid #00A0D2!important}.fl-icons-list{bottom:52px;left:0;overflow:auto;padding:20px;position:absolute;right:0;top:48px}.fl-icons-list::-webkit-scrollbar{background-color:#ccc;-webkit-appearance:none;width:10px}.fl-icons-list::-webkit-scrollbar-thumb{background-color:#666;border:1px solid #ccc}.fl-icons-section{text-align:center}.fl-icons-section h2{border-bottom:1px solid #dfdfdf;color:#333!important;font-family:Helvetica,Verdana,sans-serif!important;font-size:16px!important;font-weight:700!important;margin:0 0 20px!important;padding:0 0 10px!important;text-align:left}.fl-icons-list i,.fl-icons-list i:before{cursor:pointer;display:inline-block;font-size:40px;height:100px;line-height:100px;width:100px;background:0 0}.fl-icons-list i:hover{background:#fff;box-shadow:0 10px 20px rgba(0,0,0,.15);border-radius:4px}.fl-icon-selector-footer{bottom:0;left:0;position:absolute;right:0}html{transition-property:margin}html.fl-builder-is-showing-toolbar{margin-top:calc(44px + 1px)!important}.fl-builder-edit body{position:static!important}.fl-builder-edit:after,.fl-builder-edit:before{z-index:0!important}.fl-builder-edit .fl-builder-content{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none}#wpadminbar{transition-property:transform,opacity;transform-origin:bottom;transform-style:preserve-3d;transform:rotateX(89deg) translateY(46px);opacity:0;will-change:transform}html.fl-builder-show-admin-bar{margin-top:32px}html.fl-builder-show-admin-bar #wpadminbar{transform:rotateX(0) translateY(0);pointer-events:auto;opacity:1}@media screen and (max-width:782px){html.fl-builder-show-admin-bar{margin-top:46px}}.fl-clear{clear:both}.screen-reader-text{position:absolute;left:-1000em;top:-1000em;height:1px;width:1px;overflow:hidden}.fl-builder-loading{background:url(../img/ajax-loader.svg) center center no-repeat rgba(240,240,240,.8);bottom:0;display:none;left:0;position:fixed;right:0;text-align:center;top:0;z-index:12000000}.fl-builder-settings .fl-builder-loading{background:url(../img/ajax-loader.svg) center center no-repeat rgba(255,255,255,.8);display:block;position:absolute}.fl-field-loader{color:#B3B3B3!important;font-style:italic}.fl-builder-node-loading{opacity:.35!important}.fl-builder-node-loading-placeholder{background:url(../img/ajax-loader.svg) center center no-repeat;height:50px}.fl-col-group-has-child-loading{display:-ms-flexbox;display:flex}.fl-col-group-has-child-loading>.fl-builder-node-loading-placeholder{width:50px}.fl-node-hidden{display:none}.fl-builder-edit .fl-node-hidden{display:block}html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-desktop,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-desktop-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-medium-mobile,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-mobile{display:block!important}html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-desktop,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-desktop-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-medium-mobile,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-mobile{display:-ms-flexbox!important;display:flex!important}.fl-responsive-preview-enabled body{overflow:hidden!important}.fl-responsive-preview-mask{background:#F7F7F7;bottom:0;left:0;position:fixed;right:0;top:0;z-index:99999}.fl-responsive-preview{bottom:0;left:0;position:fixed;right:0;top:0;margin-top:50px;z-index:100000}.fl-builder-preview .fl-responsive-preview{margin:0!important}.fl-responsive-preview-content{background:#F5F7F9;padding:20px 20px 45px;overflow:scroll;position:absolute;top:45px;right:0;bottom:0;left:0}.fl-responsive-preview-content .fl-builder-content-editing{overflow:visible!important}.fl-responsive-preview-message{background:#F5F7F9;color:#b3b3b3;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;font-size:14px;font-weight:400;padding:15px;text-align:center;position:absolute;top:0;left:0;right:0;z-index:999999}.fl-responsive-preview-message span{display:inline-block;margin-right:8px}.fl-responsive-preview-message .fl-builder-button{display:inline-block;margin-left:2px;padding:0 10px}.fl-responsive-preview-message .fl-builder-button i{font-size:14px;height:14px;width:14px}.fl-responsive-preview .fl-builder-content{box-shadow:0 0 8px rgba(0,0,0,.2);margin-left:auto;margin-right:auto;max-width:100%;overflow:visible;position:relative}#fl-builder-preview-frame,#fl-builder-preview-mask{bottom:0;height:100%;position:fixed;top:0;width:100%;right:0}.fl-responsive-preview .fl-block-col-resize{display:none}.fl-builder-button,body .fl-builder-bar .fl-builder-bar-content{display:-ms-flexbox;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important}#fl-builder-preview-mask{background:url(../img/ajax-loader.svg) center center no-repeat #F7F7F7;left:0;z-index:999999}#fl-builder-preview-frame{left:50%;transform:translateX(-50%);-moz-transform:translateX(-50%);-webkit-transform:translateX(-50%);z-index:1000000}body button[class*=fl-builder],body button[class*=fl-builder]:focus,body button[class*=fl-builder]:hover{box-shadow:none;max-height:none;max-width:none;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none}.fl-builder-button{-webkit-appearance:none;-ms-flex-align:center;align-items:center;background:#e7ebef;border:2px solid transparent;border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;color:#676F7A!important;cursor:pointer;display:flex;fill:#676F7A!important;font-size:14px!important;font-style:normal!important;font-weight:500!important;height:33px;letter-spacing:normal!important;line-height:1!important;margin:0;padding:0 12px;text-align:center;transition-property:background-color,width;transition-duration:.2s;white-space:nowrap;width:auto;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder--search-results-panel,.fl-builder-bar,.fl-builder-panel{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-touch-callout:none}.fl-builder-button:hover{background:#dadfe5;color:#222;border:2px solid transparent!important}.fl-builder-button:active{background:#DCDCDC}button.fl-builder-button:focus{position:static;top:auto;outline:0;background:#E4E7EA;border:2px solid #00A0D0!important}.fl-builder-bar .fl-builder-button{height:auto}.fl-builder-button-primary,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button{background:#00A0D2;color:#fff!important;text-decoration:none;border:2px solid transparent!important}.fl-builder-button.fl-builder-button-primary:focus,body.fl-builder--layout-has-drafted-changes .fl-builder-button.fl-builder-done-button:focus{background:#00A0D2;border:2px solid #ffc217!important}.fl-builder-button-primary:hover,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button:hover{background:#0197C6;color:#fff!important}.fl-builder-button-primary:active,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button:active{background:#0484AC}.fl-builder-button-large{height:30px}.fl-builder-button-small{font-size:11px!important;line-height:1!important}.fl-builder-help-button{color:#b3b3b3;font-size:16px!important}.fl-builder-help-button i{position:relative;top:-1px}.fl-builder-help-button:hover{color:#666}.fl-builder-publish-button{line-height:45px!important}.fl-builder-content-panel-button,.fl-builder-content-panel-button:hover{fill:#00A0D2!important;font-size:30px!important;padding-bottom:4px}.fl-builder-button-silent,.fl-builder-button-silent:hover{padding:0 12px;background:0 0!important;border:2px solid transparent!important;box-shadow:none!important}.fl-builder-done-button,.fl-builder-done-button:hover{font-weight:600}.fl-field .fl-builder-button{display:inline-block;height:auto;padding:11px 12px;vertical-align:middle;box-shadow:0 2px 4px 0 rgba(0,0,0,.12)}.fl-builder-badge{background:#333;border-radius:2px;color:#fff!important;display:inline;font-size:11px!important;font-weight:400;letter-spacing:1px;margin-left:2px;padding:2px 4px;vertical-align:middle}.fl-builder-badge-global{background:#ff9600;transform:translateY(0);transition-duration:.25s;transition-property:transform}.fl-builder-blocks-node-template .fl-builder-badge-global{position:absolute;right:0;top:0}.fl-builder-block:hover .fl-builder-badge-global{display:none}.fl-builder-bar{left:0;position:fixed;right:0;top:0;z-index:999999;user-select:none;transition-property:transform opacity;transition-duration:.35s;transform-style:preserve-3d;perspective:1100px}.fl-builder-bar.is-hidden .fl-builder-bar-content{transform:translateY(-100%) rotateX(90deg)}body .fl-builder-bar .fl-builder-bar-content{display:flex;box-sizing:border-box;background:#fff;border-bottom:1px solid #eceef1;color:#999;font-size:14px!important;height:calc(44px + 1px);transition-property:background-color,opacity,transform;transition-duration:.35s;pointer-events:auto}.fl-builder-draggable-is-dragging .fl-builder-content,.fl-builder-draggable-is-dragging .fl-builder-panel .fl-lightbox,.fl-builder-resizable-is-resizing .fl-builder-content,.fl-builder-resizable-is-resizing .fl-builder-panel .fl-lightbox,body .fl-builder-bar .fl-builder-bar-content.is-muted{pointer-events:none}body .fl-builder-bar .fl-builder-bar-content.is-muted>:not(.fl-builder-publish-actions){-webkit-filter:saturate(20%) blur(1px);filter:saturate(20%) blur(1px);opacity:.4}.fl-builder-bar-title{box-sizing:border-box;color:#333;display:-ms-flexbox;display:flex;-ms-flex:0 0 380px;flex:0 0 380px;max-width:380px;border-right:1px solid #eceef1;cursor:pointer}.fl-builder-bar-title:hover{background:#fff}.fl-builder-bar-title.is-showing-menu .fl-builder-bar-title-caret>svg{transform:rotate(180deg)}.fl-builder-simple .fl-builder-bar-title{cursor:auto}.fl-builder-simple .fl-builder-bar-title:hover{cursor:auto;background:0 0}.fl-builder-bar-title span{vertical-align:middle}.fl-builder-bar-title-icon{box-sizing:border-box;background:0 0;-ms-flex:0 0 46px;flex:0 0 46px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:4px}.fl-builder-bar-title-icon img{max-width:100%!important;height:auto!important}.fl-builder-bar-title.fl-builder-bar-title-no-icon{padding-left:12px}.fl-builder-bar-title-area{box-sizing:border-box;-ms-flex:1 1 100%;flex:1 1 100%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden;padding:4px}.fl-builder-layout-title,.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{font-size:16px;font-weight:400;line-height:1.3;color:#161B20;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fl-builder-bar-title-caret,.fl-builder-layout-pretitle,.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{font-size:12px;font-weight:500;line-height:1.3;color:#656d77;text-align:left;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fl-builder-bar-title-caret i,.fl-theme-builder-preview-select-title i{color:inherit!important;font-size:14px}.fl-builder-bar-title-caret{margin-left:auto!important;-ms-flex:0 0 46px;flex:0 0 46px}.fl-theme-builder-preview-select-title i{padding:12px}.fl-theme-builder-preview-select.fl-builder-button{position:relative;border-radius:0;background:0 0;min-width:0;display:-ms-flexbox;display:flex;-ms-flex:0 0 360px;flex:0 0 360px;max-width:360px;margin:0!important;padding:4px 10px;border:none!important;border-right:2px solid #d5dadd!important;box-shadow:none}.fl-theme-builder-preview-select.fl-builder-button:hover{border:none!important;border-right:2px solid #d5dadd!important}.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-pack:end;justify-content:flex-end;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.fl-theme-builder-preview-select-title div{-ms-flex:1;flex:1}.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{display:block}.fl-theme-builder-preview-select-open .fl-theme-builder-preview-select-items{position:absolute;top:calc(48px + 10px);left:10px;width:calc(100% - 20px)!important;background:#fff;border-radius:4px;border:2px solid #D5DADD;border-top:3px solid #00a0d2;box-shadow:0 15px 45px 8px rgba(0,0,0,.04);margin:0!important;padding:0;z-index:-1;font-size:16px;overflow:visible;height:auto!important;max-height:calc(100vh - 66px);min-height:300px;display:-ms-flexbox!important;display:flex!important;-ms-flex-direction:column;flex-direction:column}.fl-theme-builder-preview-select-item{padding:4px 0!important;border-bottom:none!important;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;text-align:initial}.fl-theme-builder-preview-select-item:hover{text-decoration:none;color:#111;background:0 0!important}body .fl-theme-builder-preview-select .fa-caret-down{float:none}body .fl-theme-builder-preview-select-item-title{padding:10px 15px;color:#222;font-size:14px}body .fl-theme-builder-preview-select-item-children{overflow:auto}body .fl-theme-builder-preview-select-item-child{overflow:hidden;text-overflow:ellipsis;line-height:1.1;margin:0 10px;border:2px solid transparent;border-radius:4px;padding:8px 10px 10px;font-size:14px;font-weight:400;color:#222}body .fl-theme-builder-preview-select-item-child:hover{background:#e6eaed!important}.fl-theme-builder-preview-select-item .fa-caret-down{color:#606D77}.fl-builder-bar-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex:1 1 100%;flex:1 1 100%;padding:4px}.fl-builder-bar .fl-builder-button{margin:0 0 0 4px}.fl-builder-bar-actions .fl-builder-button:last-child{margin:0}.fl-builder-bar-actions:after{clear:both}.fl-builder-bar .fl-builder-content-panel-button{-ms-flex-align:baseline!important;align-items:baseline!important;padding-top:1px;font-weight:400}.fl-builder-content-panel-button svg{transition-property:transform;transition-duration:.25s;transform:rotate(0) scale(1);transform-origin:center}.fl-builder-content-panel-is-showing .fl-builder-content-panel-button svg{transform:rotate(135deg) scale(1.1) translate(.5px,-.5px)}.fl-builder--saving-indicator{cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-item-align:center;align-self:center;padding:0 10px;font-size:12px;font-style:italic;color:#676f7a;-ms-flex-align:center;align-items:center;line-height:1.2;min-width:180px;-ms-flex-pack:end;justify-content:flex-end}.fl-builder--saving-indicator:hover{color:#676f7a}.fl-builder--saving-indicator .fa-question-circle{font-size:13px;margin:3px 0 3px 5px}.fl-builder-buy-button,.fl-builder-feedback-button,.fl-builder-upgrade-button{background:#F7A407;color:#fff!important;text-decoration:none}.fl-builder-buy-button i.fa-external-link-alt,.fl-builder-feedback-button i.fa-external-link-alt,.fl-builder-upgrade-button i.fa-external-link-alt{color:#FFC733;margin:0 0 0 6px}.fl-builder-buy-button:hover,.fl-builder-feedback-button:hover,.fl-builder-upgrade-button:hover{background:#EE8E0D;color:#fff!important}@media (max-width:980px){.fl-builder--main-menu-panel{width:calc(100% - 20px)!important}.fl-builder--main-menu-panel:before{right:auto;left:20px}.fl-builder-bar-title,.fl-theme-builder-preview-select{-ms-flex:1 .5 380px!important;flex:1 .5 380px!important}}@media (max-width:620px){.fl-theme-builder-preview-select.fl-builder-button{display:none}}@media (max-width:500px){#fl-builder-toggle-notifications,.fl-builder--main-menu-panel:before,.fl-builder--panel-arrow,.fl-builder-bar-title-area,.fl-builder-panel-drag-handle,.fl-builder-panel:before{display:none}.fl-builder--main-menu-panel,.fl-builder-panel{width:auto!important;top:44px!important;left:0!important;right:0!important;bottom:0!important;border-radius:0!important;box-shadow:none!important}.fl-builder--main-menu-panel{border-left:transparent!important;border-right:transparent!important;border-bottom:transparent!important;max-height:calc(100% - 44px)!important}.fl-builder-bar-title{-ms-flex:0 0 80px!important;flex:0 0 80px!important}.fl-builder-bar-title-caret{padding-left:0;padding-right:0;max-width:24px}.fl-builder-bar-actions{max-width:calc(100% - 80px);overflow:hidden}.fl-builder--panel-header{border-radius:0!important;cursor:default!important}.fl-builder--panel-header .fl-builder--tabs{cursor:default!important}.fl-builder-publish-actions{width:100%!important;padding-left:4px!important}.fl-builder-bar-actions .fl-builder-button{padding:0 8px!important}}.fl-builder--preview-actions{display:none;position:fixed;top:4px;left:4px;z-index:10000001;padding:4px;-ms-flex-pack:center;justify-content:center;background:#fff;border-radius:4px}.fl-builder-preview .fl-builder--preview-actions{display:-ms-flexbox;display:flex}.fl-builder--preview-actions .device-icons{color:#555;background:#e4e4e4;border:none!important;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;text-decoration:none;font-size:14px!important;line-height:1!important;margin:0 4px 0 0;padding:0 6px;cursor:pointer;-webkit-border-radius:3px;-webkit-appearance:none;border-radius:3px}.fl-builder--preview-actions .device-icons i{margin:0 6px}@keyframes fl-builder-ui-pin-zone-pulse{0%,100%{opacity:1;filter:alpha( opacity=1 )}50%{opacity:.5;filter:alpha( opacity=35 )}}.fl-builder-ui-pin-zone{animation:fl-builder-ui-pin-zone-pulse 2s infinite;transition:width .3s ease;background:rgba(0,160,210,.5);bottom:0;top:0;position:fixed;width:35px;z-index:100001}.fl-builder-ui-show-pin-zone-left .fl-builder-ui-pin-zone-left,.fl-builder-ui-show-pin-zone-right .fl-builder-ui-pin-zone-right{width:75px}.fl-builder-ui-pin-zone-left{left:0}.fl-builder-ui-pin-zone-right{right:0}.fl-builder-content-panel-pin-zone .fl-builder-content-panel-button{display:-ms-flexbox!important;display:flex!important;background:rgba(0,160,210,.5)!important;padding:2px 4px;width:80px;animation:fl-builder-ui-pin-zone-pulse 2s infinite}.fl-builder-content-panel-pin-zone .fl-builder-content-panel-button svg{display:none}.fl-builder-content-panel-pin-zone-hover .fl-builder-content-panel-button{width:120px}.fl-builder-content-panel-pin-zone-hover .fl-builder-content-panel-button svg{display:none!important;width:100%;transform:none!important;fill:#00A0D2!important;border-radius:3px}.fl-builder-ui-is-pinned .fl-builder-content-panel-button,.fl-builder-ui-pinned-container .fl-lightbox-controls{display:none}.fl-builder-content-panel-pin-zone .fl-builder-done-button{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.fl-builder-panel.fl-builder-ui-pinned{top:45px!important;bottom:0!important;height:auto!important;border-radius:0;border:none;box-shadow:none;animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s;z-index:11}.fl-builder-panel.fl-builder-ui-pinned-right{left:auto!important;right:0;border-left:1px solid #eceef1}.fl-builder-panel.fl-builder-ui-pinned-left{left:0;right:auto;border-right:1px solid #eceef1}.fl-builder-panel.fl-builder-ui-pinned .fl-builder--panel-header{border-radius:0!important}.fl-builder-ui-pinned-container .fl-lightbox-wrap{position:absolute;z-index:11}.fl-builder-ui-pinned-container .fl-lightbox{position:absolute;top:0;bottom:0;left:0;right:0;width:auto!important;height:auto;border-radius:0;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s}.fl-builder-ui-pinned-container .fl-lightbox-header-wrap{border-radius:0}.fl-builder-ui-pinned-container .fl-lightbox.ui-draggable .fl-lightbox-header{cursor:auto}.fl-builder-ui-pinned-container .fl-lightbox-header h1{padding:12px 20px 10px!important}.fl-builder-ui-pinned-content-transform{transform:scale(1);transform-origin:center top 0}.fl-builder-ui-pinned-collapse{cursor:pointer;display:none;position:absolute!important;bottom:2px;padding:5px;border:2px solid transparent;background:0 0;width:36px;height:36px;border-radius:4px;fill:#778794;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}.fl-builder-ui-pinned-collapse:focus,.fl-builder-ui-pinned-collapse:hover{top:auto!important;background:0 0;border:2px solid transparent;outline:0;fill:#00A0D2}.fl-builder-ui-pinned-collapse:focus{background:#E4E7EA}.fl-builder-ui-pinned-collapse>*{margin:auto;line-height:1}.fl-builder-ui-pinned-collapse svg g{fill:inherit}.fl-builder-ui-is-pinned-right .fl-builder-ui-pinned-right-collapse{display:-ms-flexbox;display:flex;left:-40px}.fl-builder-ui-is-pinned-left .fl-builder-ui-pinned-left-collapse{display:-ms-flexbox;display:flex;right:-40px}.fl-builder-ui-pinned-collapse i[data-toggle=show],.fl-builder-ui-pinned-is-collapsed i[data-toggle=hide]{display:none}.fl-builder-ui-pinned-is-collapsed i[data-toggle=show]{display:block}.fl-builder--panel-no-settings,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-content,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-controls,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--tab-wrap,.fl-builder-ui-pinned-is-collapsed .fl-builder--panel-header{display:none}.fl-builder-ui-is-pinned-left [data-toggle=hide],.fl-builder-ui-is-pinned-right [data-toggle=show]{transform:rotateY(180deg)}.fl-builder-ui-pinned-is-collapsed .fl-lightbox{box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-header{background:0 0;border:none;z-index:10}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-lightbox-wrap{top:0}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-lightbox-header h1{padding:14px 28px 15px!important}.fl-builder-simple-pinned .fl-builder--panel-no-settings{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;right:0;bottom:0}@keyframes fl-builder-show-panel{from{transform:scale(.8)}to{transform:scale(1)}}.fl-builder--search-results-panel,.fl-builder-panel{box-sizing:border-box;position:fixed!important;right:20px;top:calc(43px + 10px);width:380px;bottom:20px;background:#F5F7F9;color:#676F7A;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;border-radius:4px;box-shadow:0 8px 40px 4px rgba(0,0,0,.3);z-index:10000007;will-change:transform;user-select:none}.fl-builder-panel{transform-origin:top right;animation-name:fl-builder-show-panel;animation-duration:.15s;animation-fill-mode:both;-ms-flex:1;flex:1;display:none}.fl-builder--search-results-panel{display:none;position:absolute;right:0;top:93px;left:0;bottom:0;width:auto!important;border:none;border-radius:0;box-shadow:none;min-height:100px;max-height:calc(100vh - 54px);overflow:auto;z-index:1}.fl-builder-content-panel-is-showing .fl-builder-panel,.fl-builder-search-results-panel-is-showing .fl-builder--search-results-panel{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fl-builder-panel .fl-lightbox .fl-builder-panel-drag-handle,.fl-builder-ui-is-pinned .fl-builder--panel-arrow,.fl-lightbox-width-full .fl-builder-panel-drag-handle,body.fl-builder-draggable-is-dragging .fl-builder--panel-arrow{display:none}.fl-builder--search-results-panel .fl-builder--no-results{text-align:center;padding:50px 20px}.fl-builder--panel-arrow{position:absolute;top:-13px;right:10px}.fl-builder--panel-arrow polygon{fill:#00a0d2}.fl-builder--panel-header{border-top:3px solid #00a0d2;border-top-right-radius:4px;border-top-left-radius:4px}.fl-builder-ui-is-pinned .fl-builder--panel-header{border-top:none}.fl-builder-panel-drag-handle{position:absolute;top:7px;left:10px;fill:#ccd4da;width:6px}.fl-builder-ui-is-pinned-left .fl-builder-panel-drag-handle{left:auto;right:10px}.fl-builder--panel-header .fl-builder--panel-controls{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative}.fl-builder--panel-header .fl-builder--panel-controls .fl-builder-content-group-select{-ms-flex:1 1;flex:1 1}.fl-builder--panel-header .fl-builder--panel-controls .fl-builder-panel-search{-ms-flex:0 0;flex:0 0;padding:0 10px 6px 0;margin-left:-4px}.fl-builder--panel-controls .fl-builder-panel-search button{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:30px;background:0 0!important;border:2px solid transparent!important;font-size:inherit;height:36px;margin:0;padding:0}.fl-builder--panel-controls .fl-builder-panel-search button:active,.fl-builder--panel-controls .fl-builder-panel-search button:focus{top:0;outline:0}.fl-builder-panel-search button svg{height:auto;width:20px}.fl-builder-panel-search button.fl-builder-dismiss-panel-search svg{width:16px}.fl-builder-panel-search button svg .filled-shape{fill:#000}.fl-builder--panel-controls .fl-builder-panel-search button:active svg .filled-shape,.fl-builder--panel-controls .fl-builder-panel-search button:focus svg .filled-shape{fill:#00A0D2}.fl-builder-panel-search .fl-builder-panel-search-input{display:none;position:absolute;top:0;left:0;right:0;bottom:0;background:#f5f7f9}.fl-builder-panel-search.is-showing-input .fl-builder-panel-search-input{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:0 10px 6px}.fl-builder-panel-search-input input{-ms-flex:1 1 100%;flex:1 1 100%;border:2px solid #e6eaed;background:#fff;border-radius:4px;margin:0 4px 0 0;padding:10px;color:#333}.fl-builder-panel-search-input input:focus{border-color:#0197C6;outline:0}.fl-builder-panel-content-wrap{bottom:0;height:auto;left:0;overflow:hidden;position:absolute;right:0;top:43px}.fl-builder-panel-content{padding-bottom:60px}.fl-builder--panel-view .fl-builder-blocks-section:first-child{border-top:none}.fl-builder-blocks-group:first-child{padding:20px 0 0}.fl-builder-blocks-group .fl-builder-blocks-section-group-name{display:block;padding:0 30px 15px;color:#000;font-size:20px;font-weight:600;line-height:1.4}.fl-builder-blocks-section .fl-builder-block{display:block;line-height:1.1;padding:15px 20px}.fl-builder--template-collection-section-header,.fl-builder-blocks-section .fl-builder-blocks-section-header{line-height:1.2;color:#333;margin:0!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e7ebef;border-top:4px solid #e7ebef;height:30px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-builder-blocks-section .fl-builder-blocks-section-title{background:#F5F7F9;color:#353535;padding:2px 16px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.fl-builder-blocks-section .fl-builder-blocks-section-title i{color:#bfbfbf;float:right}.fl-builder-blocks-section-content{overflow:auto;padding:10px 10px 20px}.fl-builder-blocks-section-content:before{content:none}.fl-builder-blocks-section-content:after{float:none;clear:both}.fl-builder-blocks-section-content.fl-builder-modules,.fl-builder-blocks-section-content.fl-builder-rows,.fl-builder-blocks-section-content.fl-builder-widgets{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}@supports (display:grid){.fl-builder--template-collection-section-content,.fl-builder-blocks-section-content.fl-builder-modules,.fl-builder-blocks-section-content.fl-builder-rows,.fl-builder-blocks-section-content.fl-builder-widgets{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr))}.fl-builder--template-collection-section-content>*,.fl-builder-blocks-section-content.fl-builder-modules>*,.fl-builder-blocks-section-content.fl-builder-rows>*,.fl-builder-blocks-section-content.fl-builder-widgets>*{width:auto!important}}.fl-builder-blocks-section-content .fl-builder-block-module,.fl-builder-blocks-section-content .fl-builder-block-row{-ms-flex:1 1 50%;flex:1 1 50%;width:50%;box-sizing:border-box}.fl-builder--search-results-panel .fl-builder-blocks-section-content .fl-builder-block-module{-ms-flex:1 1 100%;flex:1 1 100%;width:100%}.fl-builder-blocks-section.fl-active .fl-builder-blocks-section-content{display:block}.fl-builder-blocks-section-content .fl-builder-block{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;font-size:13px;line-height:1.1;font-weight:400;color:#38404a}.fl-builder-block{position:relative;height:47px}.fl-builder-block.fl-builder-block-col-group{height:84px}.fl-builder-block.fl-builder-block-has-thumbnail{height:auto!important;padding:10px!important}.fl-builder-block.fl-builder-block-has-thumbnail:hover{padding:0!important}.fl-builder-block.fl-builder-block-has-thumbnail .fl-builder-block-content{position:relative!important}.fl-builder-block.fl-builder-block-has-thumbnail:hover .fl-builder-block-content{padding:10px!important}.fl-builder-block.fl-builder-block-has-thumbnail .fl-builder-block-details{margin:0 10px 4px!important}.fl-builder-block:hover{overflow:visible;z-index:1}.fl-builder-block:hover .fl-builder-block-content{display:block;box-sizing:border-box;position:absolute;top:0;left:0;width:100%;padding:15px 20px;border-radius:4px;background:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);text-decoration:none;color:#111;cursor:move;overflow:hidden}.fl-builder-blocks-node-template .fl-builder-block,.fl-builder-blocks-section-content .fl-builder-block .fl-builder-block-details{position:relative}.fl-builder-block-module:hover .fl-builder-block-content{width:auto;min-width:100%}.fl-builder-block .fl-builder-block-content .fl-builder-block-visual{display:block;margin-bottom:7px}.fl-builder-block-drag-helper .fl-builder-block-content .fl-builder-block-visual{display:none!important}.fl-builder-block .fl-builder-block-content .fl-builder-block-visual.fl-cols-visual{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;height:30px}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{-ms-flex:1 100%;flex:1 100%;background:#464a4c;height:30px;margin:0 2px;border-radius:2px}.fl-builder-block:hover .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{background:#000}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col:first-child{margin-left:0!important}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col:last-child{margin-right:0!important}.fl-cols-visual.left-right-sidebar .fl-cols-visual-col:first-child,.fl-cols-visual.left-right-sidebar .fl-cols-visual-col:last-child,.fl-cols-visual.left-sidebar .fl-cols-visual-col:first-child,.fl-cols-visual.right-sidebar .fl-cols-visual-col:last-child{-ms-flex-preferred-size:60px;flex-basis:60px}.fl-builder-block-saved-column.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-column:hover .fl-builder-block-title,.fl-builder-block-saved-module.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-module:hover .fl-builder-block-title,.fl-builder-block-saved-row.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-row:hover .fl-builder-block-title{margin-right:70px}.fl-builder-block-module:nth-child(even):hover .fl-builder-block-content{left:auto;right:0}.fl-builder-block-thumbnail{border-radius:4px;background-size:contain;background-repeat:no-repeat;background-position:center;background-color:rgba(0,0,0,.06);margin-bottom:10px;transform-origin:bottom;transition-property:transform,box-shadow;transition-duration:.15s}.fl-builder-block:hover .fl-builder-block-thumbnail{transform:scale(1.05);box-shadow:0 20px 40px rgba(0,0,0,.08)}.fl-builder-block .fl-builder-block-icon{margin-right:7px;fill:#000;display:inline-block;width:20px;height:20px;vertical-align:middle}.fl-builder-block-thumbnail:before{content:"";display:block;padding-top:50%}.fl-builder-block-thumbnail img{max-width:100%;max-height:160px;margin:0;-o-object-fit:cover;object-fit:cover}.fl-builder-blocks-section-content .fl-builder-block{box-shadow:0 0 0 transparent;transition-property:box-shadow;transition-duration:.15s}.fl-builder-blocks-section-content .fl-builder-block i,.fl-user-template-actions i{color:#000;margin-right:10px}.fl-builder-blocks-separator{background:#f1f1f1;height:6px}.fl-builder-block:hover .fl-builder-badge{background:#2ea2cc}.ui-sortable-helper .fl-builder-badge{display:none!important}.fl-builder-modules-cta a{color:#999!important;display:block!important;font-size:12px!important;font-style:italic!important;padding:15px 20px!important;line-height:16px!important}.fl-builder-modules-cta a:hover{background:#e5e5e5!important;color:#666!important;text-decoration:none!important}.fl-builder-modules-cta a:focus{text-decoration:none!important}.fl-builder-modules-cta .fa{float:right!important;font-size:14px!important;margin:3px 0 0 9px!important}.fl-builder--panel-message{text-align:center;padding:40px 20px;font-size:16px}.fl-builder--panel-message .fl-builder-button{display:inline-block;padding:10px}.fl-builder--panel-cta{padding:20px 30px;font-size:16px;text-align:center}.fl-builder--panel-cta a{color:inherit;text-decoration:none}.fl-builder--panel-cta a:hover{text-decoration:none}.fl-builder-block-template-image{margin:5px 0 10px;max-width:100%;border:1px solid #dfdfdf}.fl-builder-block .fl-builder-block-title{overflow:hidden;text-overflow:ellipsis;vertical-align:middle;line-height:1.3}.ui-sortable-helper .fl-builder-block-template-image{display:none!important}@keyframes fl-builder-template-item-enter{from{transform:translateY(100px) scale(.3);opacity:0}to{transform:scale(1);opacity:1}}.fl-builder--template-collection{clear:both;padding:10px 0}.fl-builder--template-collection-section-content{padding:0 10px}.fl-builder--template-collection-item{box-sizing:border-box;width:50%;float:left;padding:10px;cursor:pointer;font-size:13px;transform-origin:center;opacity:1}.fl-builder--template-thumbnail{background-size:cover;background-clip:content-box;background-position:center top;background-color:#fff;border:2px solid transparent;transform-origin:bottom;transition-property:transform,box-shadow;transition-duration:.15s}.fl-builder--template-collection-item[data-id="0"] .fl-builder--template-thumbnail,.fl-user-template .fl-builder--template-thumbnail{border-color:#e4e7ea}.fl-builder--template-thumbnail:before{display:block;content:"";padding-top:120%}.fl-builder--template-thumbnail:hover{transform:scale(1.05);box-shadow:0 20px 40px rgba(0,0,0,.08)}.fl-builder--template-name{text-align:center;padding:4px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.fl-builder--template-collection-section{padding-bottom:10px;border-bottom:1px solid #dfdfdf}.fl-builder--template-collection-section:last-child{border-bottom:none}.fl-builder--template-collection-section:after,.fl-builder--template-collection-section:before{content:"";display:block;clear:both}.fl-builder--template-collection-section-name{padding:15px 10px 10px}span.fl-builder-block-no-node-templates{display:block;padding:15px 20px;text-align:center}span.fl-builder-block-no-node-templates:hover{cursor:default}.fl-builder-blocks-section-content .fl-builder-node-template-actions{bottom:0;cursor:default;display:none;position:absolute;right:0;top:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete,.fl-builder-blocks-section-content .fl-builder-node-template-edit{display:inline;cursor:pointer;margin:0;padding:15px 10px;text-align:center;width:30px}.fl-builder-block-details .fl-builder-node-template-delete,.fl-builder-block-details .fl-builder-node-template-edit{padding-top:0!important}.fl-builder-blocks-section-content .fl-builder-node-template-delete i,.fl-builder-blocks-section-content .fl-builder-node-template-edit i{margin:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete:hover i,.fl-builder-blocks-section-content .fl-builder-node-template-edit:hover i{color:#444}.fl-builder-blocks-node-template .fl-builder-block:hover .fl-builder-node-template-actions{display:block}.ui-sortable-helper .fl-builder-node-template-delete,.ui-sortable-helper .fl-builder-node-template-edit{display:none!important}.fl-builder--tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-align:center;align-items:center}.fl-builder-panel .fl-builder--panel-header{cursor:move}.fl-builder-panel .fl-builder--tabs{-ms-flex-pack:distribute;justify-content:space-around;padding:4px 24px;cursor:pointer}.fl-builder--tab-wrap{-ms-flex:1 1 100%;flex:1 1 100%;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;margin:auto;max-width:400px}.fl-builder--tabs button,.fl-builder--tabs button:active,.fl-builder--tabs button:focus,.fl-builder--tabs button:hover{-ms-flex:1 1 100%;flex:1 1 100%;display:inline-block;text-decoration:none;text-transform:none;color:inherit;text-align:center;letter-spacing:normal!important;margin:0;padding:5px;cursor:pointer;font-size:13px!important;font-weight:500!important;line-height:1.3!important;background:0 0!important;outline:0!important;border:2px solid transparent;border-radius:4px;min-height:36px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;top:0;transition-property:background,color;transition-duration:.25s}.fl-builder--tabs button:focus{background:#e6eaed!important}.fl-builder--tabs button.is-showing{color:#0086b0}.fl-builder--panel-content{-ms-flex:1;flex:1}.fl-builder--panel-view{display:none;overflow:hidden}.fl-builder--panel-view.is-showing{display:block}.fl-builder--content-library-panel.ui-draggable-dragging{height:500px!important}.fl-builder--content-library-panel .fl-builder-drop-zone{display:none!important}.fl-builder--panel-header .fl-builder--tabs{cursor:move}.fl-builder--category-select{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;position:relative}.fl-builder--selector-display{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;-ms-flex-pack:justify;justify-content:space-between;color:#161B20;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;cursor:pointer;font-size:13px;font-weight:700;line-height:16px;border-radius:4px;-ms-flex-align:stretch;align-items:stretch}.fl-builder--selector-display-label{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;font-size:inherit;line-height:inherit;width:100%;margin:0!important;padding:0!important;color:#6D6D6D;background:0 0;border:2px solid transparent;box-shadow:0 1px 2px 0 rgba(0,0,0,.12)!important;border-radius:4px;font-family:inherit;text-transform:none}.fl-builder--selector-display-label:hover{top:0;color:inherit;background:0 0;border:2px solid transparent;border-radius:4px}.fl-builder--selector-display-label:active{top:0;color:inherit;background:0 0;border:2px solid #e4e7ea;border-radius:4px}.fl-builder--selector-display-label:focus{top:0;color:inherit;background:0 0;border:2px solid #00A0D2;outline:0}.fl-builder--group-label{color:inherit;-ms-flex:0 0 0%;flex:0 0 0%;padding:4px 12px 4px 10px;background:#e7ebef;border-radius:3px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.fl-builder--current-view-name{-ms-flex:1 1 100%;flex:1 1 100%;color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;padding:8px 10px;text-align:left}.fl-builder--selector-menu{display:none;color:#293138;position:absolute;top:46px;left:0;width:100%;background:#fff;border-radius:4px;box-shadow:0 0 20px 2px rgba(0,0,0,.2);overflow:visible;z-index:2}.fl-builder--selector-menu:before{bottom:100%;right:8px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:10px;margin-left:-10px}.fl-builder--category-select.is-showing .fl-builder--selector-menu{display:-ms-flexbox;display:flex;max-height:calc(100vh - 150px)}.fl-builder--category-select.is-showing .fl-builder--selector-menu .fl-builder--menu{margin:10px 0;-ms-flex:1 100%;flex:1 100%;overflow:auto}button.fl-builder-button.fl-builder-bar-title-caret{margin:4px}button.fl-builder-button.fl-builder-bar-title-caret:focus{background-color:#e6eaed!important;border-color:transparent!important}.fl-builder--category-select.is-showing .fl-builder-bar-title-caret i{transform:rotate(180deg)}.fl-builder--menu{margin-bottom:2px}.fl-builder--menu>a,.fl-builder--menu>button,.fl-builder--menu>span{display:block;padding:8px 10px 10px;border-radius:4px;color:inherit;text-decoration:none;background:0 0!important;border:2px solid transparent!important;font-weight:400;font-family:inherit}.fl-builder--menu>a:active,.fl-builder--menu>a:focus,.fl-builder--menu>a:hover,.fl-builder--menu>button:active,.fl-builder--menu>button:focus,.fl-builder--menu>button:hover{background:#e6eaed!important;border:2px solid transparent!important;top:0}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging,.fl-builder-drop-zone,.fl-builder-empty{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-builder--menu>a:focus,.fl-builder--menu>button:focus{outline:0;color:inherit;text-decoration:none}.fl-builder--menu .fl-has-children>svg{float:right;margin:0 7px 0 0;height:16px;width:9px;transition-property:transform;transition-duration:.15s;transform:rotate(-90deg)}.fl-builder--menu .fl-has-children.fl-has-children-showing>svg{transform:rotate(0)}.fl-builder--menu .fl-inset{display:none;padding-left:35px;font-size:14px;line-height:1.25}.fl-builder--menu a.fl-template-collection{color:#161B20}.fl-builder--menu>:after{clear:both}.fl-builder--menu * .fl-builder--menu-item-accessory{float:right;color:#000;text-transform:uppercase;text-align:center;min-width:20px;letter-spacing:2px}.fl-builder--menu * .fl-builder--menu-item-accessory i{font-size:1em;margin-top:2px}.fl-builder--menu .fl-builder-video-wrap iframe{display:block;margin:4px 0;width:100%}.fl-builder-publish-actions{display:-ms-flexbox;display:flex;box-sizing:border-box;position:absolute;top:0;right:0;width:380px;max-width:100%;height:44px;padding:4px 4px 4px 0;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end;opacity:1;pointer-events:auto;transform:scaleX(1) translateX(0);transform-origin:right;transition-property:transform,opacity;transition-duration:.15s}.fl-builder-publish-actions.is-hidden{transform:scaleX(.23) translateX(68px);opacity:0;pointer-events:none}.fl-builder-bar .fl-builder-button-group{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%}.fl-builder-bar .fl-builder-button-group>.fl-builder-button{border-radius:0;margin-left:0;-ms-flex-preferred-size:100%;flex-basis:100%;text-align:center;-ms-flex-pack:distribute;justify-content:space-around;box-shadow:none}.fl-builder-bar .fl-builder-button-group>.fl-builder-button:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.fl-builder-bar .fl-builder-button-group>.fl-builder-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.fl-builder-publish-actions-click-away-mask{display:none;position:fixed;top:0;left:0;right:0;height:100vh;background:0 0}.fl-builder-dragging .fl-builder-content:not(.fl-builder-empty){padding:16px 0}.fl-builder-empty{display:none;border:2px dashed #969696;border-radius:8px;color:#909090;font-size:20px;font-weight:700;margin:10px;padding:250px 20px;position:relative;text-align:center;text-transform:uppercase}.fl-builder-drop-zone,.fl-builder-has-submenu>ul.fl-builder-submenu li a{font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fl-builder-edit .fl-builder-empty{display:block}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging{background:rgba(255,255,255,.95)!important;border:2px solid #000;border-radius:4px;box-shadow:0 0 8px rgba(0,0,0,.2);-moz-box-shadow:0 0 8px rgba(0,0,0,.2);-webkit-box-shadow:0 0 8px rgba(0,0,0,.2);color:#333!important;font-size:13px!important;height:47px!important;line-height:40px!important;overflow:hidden;padding:0 20px;position:fixed!important;text-overflow:ellipsis;white-space:nowrap;width:180px!important;z-index:100010!important;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-line-pack:center;align-content:center;-ms-flex-pack:start;justify-content:flex-start}.fl-builder-block.fl-builder-block-drag-helper:hover{padding:0;box-shadow:none}.fl-builder-block-drag-helper:hover .fl-builder-block-content{position:static;padding:0 20px}.fl-col-has-highlight-guide .fl-col-content,.fl-col-highlight,.fl-row-highlight .fl-col-group{position:relative}.fl-builder-block-saved-column.fl-builder-block-drag-helper:hover .fl-builder-block-content,.fl-builder-block-saved-module.fl-builder-block-drag-helper:hover .fl-builder-block-content,.fl-builder-block-saved-row.fl-builder-block-drag-helper:hover .fl-builder-block-content{padding:14px 20px}.fl-builder-block-drag-helper .fl-builder-block-icon{fill:#000;margin-top:-10px}.fl-builder-drop-zone{animation:fl-builder-drop-zone-pulse 2s infinite;background:#00A2D7;border-radius:4px;color:#fff!important;display:block;font-size:12px;letter-spacing:1px;line-height:14px;margin:10px;padding:6px 8px 5px;position:relative;text-align:left;text-shadow:none;text-transform:none;z-index:10}@keyframes fl-builder-drop-zone-pulse{0%,100%{background-color:#00A2D7}50%{background-color:#79DEFF}}.fl-builder-drop-zone-global{animation:fl-builder-drop-zone-global-pulse 2s infinite;background:#ff9600}@keyframes fl-builder-drop-zone-global-pulse{0%,100%{background-color:#FFBC5C}50%{background-color:#ff9600}}.fl-builder-content>.fl-builder-drop-zone{margin:10px 20px}.fl-row-content>.fl-builder-drop-zone{margin:3px 7px}.fl-col-has-cols>.fl-col-content>.fl-builder-drop-zone{margin:3px 10px}.fl-sortable-disabled>.fl-builder-drop-zone{display:none!important}.fl-col-group-equal-height.fl-col-group-align-center .fl-col-content>.fl-builder-drop-zone{width:100%}.fl-row-highlight{padding:16px 0}.fl-row-highlight .fl-row-content{border:2px dashed rgba(203,205,206,.5);padding:8px;border-radius:6px}.fl-row-highlight.fl-node-global .fl-row-content{border-color:#ff9600}.fl-col-highlight{padding:8px}.fl-col-highlight .fl-col-content{border-style:dashed!important;border-color:#00a0d2!important;border-radius:4px;min-height:100px;overflow-x:hidden;border-width:2px!important}.fl-col-has-cols.fl-col-highlight>.fl-col-content{padding:8px}.fl-col-highlight.fl-node-global .fl-col-content{border-color:#ff9600!important}.fl-builder-simple .fl-col-highlight .fl-col-content{border:none!important}.fl-col-highlight-guide{background:rgba(0,160,210,.05);border:2px solid #00A0D2;border-radius:4px;bottom:4px;left:4px;position:absolute;right:4px;top:4px;z-index:1}.fl-node-global .fl-col-highlight-guide{border-color:#ff9600!important;background-color:rgba(255,150,0,.06)!important}.fl-col-has-highlight-guide .fl-block-overlay{background:0 0;border-color:transparent}.fl-col-has-highlight-guide .fl-block-col-resize{display:none}.fl-col-has-highlight-guide .fl-col-highlight .fl-col-content{border-color:transparent!important}.fl-col-drop-target{bottom:8px;display:none;left:-9px;position:absolute;top:8px;width:18px;z-index:1}.fl-col-highlight .fl-col-drop-target{display:block}.fl-col-drop-target-last{left:auto;right:-9px}.fl-col-drop-target .fl-builder-drop-zone{bottom:0;left:2px;margin:0;padding:0;position:absolute;right:2px;top:0}.fl-col-group-drop-target{display:none;left:8px;height:18px;position:absolute;right:8px;top:-9px;z-index:1}.fl-row-highlight .fl-col-group-drop-target{display:block}.fl-col-group-drop-target-last{top:auto;bottom:-9px}.fl-col-group-drop-target .fl-builder-drop-zone{bottom:2px;left:0;margin:0;padding:0;position:absolute;right:0;top:2px}.fl-row-content>.fl-col-group-drop-target{position:static}.fl-row-content>.fl-col-group-drop-target .fl-builder-drop-zone{height:18px;position:static}.fl-row-drop-target{display:none;left:0;height:24px;margin-top:-28px;position:absolute;right:0;z-index:1}.fl-row-highlight .fl-row-drop-target{display:block}.fl-row-drop-target-last{margin-top:4px}.fl-row .fl-row-drop-target .fl-builder-drop-zone{bottom:0;left:4px;margin:0;position:absolute;right:4px;top:0}.fl-builder-content>.fl-row-drop-target{margin:0;position:static}.fl-builder-dragging .fl-builder-content.fl-builder-empty>.fl-row-drop-target{bottom:10px;display:block;height:auto;left:0;position:absolute;right:0;top:10px}.fl-builder-content .fl-row-drop-target .fl-builder-drop-zone{margin-bottom:0;margin-top:0}.fl-col-group:focus,.fl-col:focus,.fl-module:focus,.fl-row:focus{outline:0}.fl-sortable-proxy{display:none}.fl-block-overlay,.fl-block-overlay *{text-shadow:none;-webkit-touch-callout:none;transition-property:border-color;transition-duration:.3s}.fl-block-overlay-active{position:relative}.fl-block-overlay-actions{background:#00A0D2;float:left;height:30px;margin:-1px -1px 0;padding:0 4px;text-shadow:none;border-bottom-right-radius:5px;border-top-left-radius:3px;transition-property:background-color;transition-duration:.3s}.fl-row-overlay-header-bottom .fl-block-overlay-actions{border-radius:0 5px 0 3px}.fl-builder-col-resizing .fl-block-overlay-actions,.fl-builder-row-resizing .fl-block-overlay-actions{overflow:hidden}.fl-block-overlay-actions>span{display:block;float:left}.fl-block-overlay-actions i{color:#fff!important;cursor:pointer;display:block!important;float:left;font-size:16px!important;height:28px!important;line-height:28px!important;opacity:.8;filter:alpha(opacity=80);text-align:center;width:32px!important}.fl-block-overlay-actions i:hover{opacity:1;filter:alpha(opacity=100)}.fl-block-overlay-actions>i:first-child{padding-left:4px}.fl-block-overlay-actions>i:last-child{padding-right:2px}.fl-block-overlay-actions .fl-block-move{cursor:move}.fl-block-has-rules{color:#00A0D2!important;cursor:pointer;padding:7px;position:absolute;right:0;top:0}.fl-block-overlay-title,.fl-builder-has-submenu>ul.fl-builder-submenu li a{color:#fff!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-block-overlay-title{float:left;font-size:14px;height:30px;line-height:29px;margin-right:2px;padding:0 12px 0 8px}.fl-col-overlay,.fl-module-overlay,.fl-row-overlay{background:rgba(190,239,255,0);color:#fff}.fl-row-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:0;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;left:0;position:absolute;top:-33px;right:0;z-index:100006}.fl-row-overlay.fl-row-menu-active,.fl-row-overlay.fl-row-menu-active.fl-block-overlay.fl-block-overlay-global{z-index:100007}.fl-row-full-width .fl-row-overlay{left:2px;right:2px;bottom:2px}.fl-row-overlay-header-bottom{bottom:-32px!important;top:0}.fl-row-overlay-header-bottom .fl-block-overlay-header{position:absolute;bottom:0}.fl-block-overlay-active .fl-row-content-wrap{position:relative}.fl-block-overlay-active .fl-row-content{position:relative;z-index:100007!important}.fl-builder-row-resizing .fl-col.fl-block-overlay-active,.fl-builder-row-resizing .fl-module.fl-block-overlay-active{position:static}.fl-col-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:8px;cursor:pointer;left:8px;position:absolute;right:8px;top:8px;z-index:100008}.fl-module-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:4px;cursor:pointer;left:4px;min-height:32px;position:absolute;right:4px;top:4px;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-module-overlay{cursor:default}.fl-module-adjust-height{padding-bottom:15px;padding-top:15px}.fl-col-bg-overlay .fl-block-overlay-active.fl-module{z-index:100008}.fl-block-overlay-global{background:rgba(255,150,0,0);border:2px solid #F7A407;border-radius:4px}.fl-block-overlay-global .fl-block-overlay-actions{background:#F7A407}.fl-block-overlay-title-global{background:#fff;color:#ff9600!important;font-size:11px;letter-spacing:1px;margin-left:4px;padding:2px 4px;vertical-align:top}.fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,0);cursor:pointer;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-row-overlay{cursor:default}.fl-builder-row-template .fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,0);cursor:default;z-index:100006}.fl-block-overlay-global.fl-row-overlay .fl-block-col-resize{display:none}.fl-block-overlay-muted .fl-row-overlay{background:rgba(85,93,102,0);border:2px solid #555D66}.fl-block-overlay-muted .fl-row-overlay .fl-block-overlay-actions{background:#555D66}.fl-block-overlay-muted .fl-row-overlay .fl-block-has-rules{color:#555D66!important}.fl-block-overlay-muted .fl-row-overlay .fl-block-col-resize{display:none}.fl-node-disabled .fl-row-content-wrap,.fl-node-disabled>.fl-col-content{opacity:.3}.fl-block-col-resize{bottom:0!important;position:absolute;top:0!important;width:6px}.fl-block-col-resize-e{cursor:ew-resize;left:auto!important;right:-2px!important}.fl-block-col-resize-w{cursor:ew-resize;left:-7px!important}.fl-block-col-resize-handle-wrap{margin:-4px 0 0 -5px;padding:0 5px;position:absolute;top:50%!important}.fl-block-col-resize-e .fl-block-col-resize-handle-wrap{margin-left:-6px}.fl-block-col-resize-handle{background:#fff;border:2px solid #00A0D2;border-radius:50%;height:12px;width:12px}.fl-node-global .fl-block-col-resize-handle{border-color:#ff9600}.fl-block-col-resize-feedback{color:#333!important;display:none;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:11px!important;position:absolute}.fl-block-col-resize-feedback-left,.fl-block-col-resize-feedback-right{background:#fff;border:1px solid #3ba0ff;padding:2px 4px}.fl-block-col-resize-feedback-left{right:20px;top:-7px}.fl-block-col-resize-feedback-right{left:20px;top:-7px}.fl-builder-has-submenu{position:relative}.fl-builder-has-submenu>ul.fl-builder-submenu{background:#00A0D2;box-shadow:0 0 20px rgba(0,0,0,.2);border-radius:0 4px 4px;display:none;left:0;list-style:none;margin:0;padding:6px 0;position:absolute;text-align:left;top:100%;width:165px;z-index:100008}.fl-builder-has-submenu>ul.fl-builder-submenu li{list-style:none;margin:0;padding:0}.fl-builder-submenu-right ul.fl-builder-submenu{left:auto;right:0}.fl-builder-has-submenu.fl-builder-submenu-open>ul.fl-builder-submenu{display:block}.fl-builder-has-submenu>ul.fl-builder-submenu li a{border-bottom:0 none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;display:block;line-height:13px;font-size:13px;opacity:.8;filter:alpha(opacity=80);padding:6px 12px;text-decoration:none}.fl-builder-has-submenu>ul.fl-builder-submenu li a:hover{background:#0197C6;color:#fff;opacity:1;filter:alpha(opacity=100);text-decoration:none}.fl-builder-actions-title,.fl-builder-alert-lightbox .fl-lightbox-message,.fl-builder-alert-lightbox .fl-lightbox-message-info{color:#333!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px!important}.fl-builder-has-submenu .fl-builder-submenu .fa,.fl-builder-has-submenu .fl-builder-submenu .far,.fl-builder-has-submenu .fl-builder-submenu .fas{float:right;height:12px!important;line-height:12px!important;position:relative;right:-5px;width:14px!important}.fl-builder-has-submenu .fl-builder-has-submenu .fl-builder-submenu{display:none;left:100%;top:0}.fl-builder-has-submenu .fl-builder-submenu-right.fl-builder-has-submenu .fl-builder-submenu{left:auto;right:100%}.fl-builder-has-submenu .fl-builder-has-submenu:hover .fl-builder-submenu{display:block}.fl-builder-submenu-sep{padding:7px 0!important}.fl-builder-submenu-sep div{border-bottom:1px solid rgba(255,255,255,.4)}.fl-block-col-move,.fl-block-col-move-parent{cursor:move;position:relative}.fl-builder-submenu .fa-arrows-alt{cursor:move;display:none!important}.fl-builder-submenu a:hover .fa-arrows-alt{display:block!important;float:right;line-height:12px!important;height:12px!important}.fl-block-overlay-global ul.fl-builder-submenu{background:#ff9600!important}.fl-block-overlay-global ul.fl-builder-submenu li a:hover{background:#fa3}.fl-builder-actions-lightbox .fl-lightbox{display:block;width:300px;border-radius:4px}.fl-builder-actions-lightbox .fl-lightbox-content-wrap{display:block}.fl-builder-actions-lightbox .fl-builder-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:25px;text-align:center}.fl-builder-actions-title{display:block;margin-bottom:20px}.fl-builder-actions .fl-builder-button{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:7px;min-height:36px}.fl-builder-alert-lightbox{padding:20px;z-index:30000000;top:0;pointer-events:auto}.fl-builder-alert-lightbox .fl-lightbox{max-width:440px;width:auto}.fl-builder-alert-lightbox .fl-lightbox-content-wrap{display:block}.fl-builder-alert-lightbox .fl-lightbox-message,.fl-builder-alert-lightbox .fl-lightbox-message-info{line-height:24px;padding:30px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox{max-width:60%}.fl-lightbox-width-slim .fl-compound-field,.fl-lightbox-width-slim .fl-dimension-field-units{max-width:none}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-content{padding:20px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-message{padding:10px 20px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-message h1{font-size:20px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-message p{font-size:14px;padding-top:5px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .link{color:#428bca;text-decoration:underline}.fl-builder-alert-lightbox .fl-lightbox-message-info{padding:0 20px;font-size:14px!important}.fl-builder-alert-lightbox .fl-lightbox-message-info p{line-height:20px;padding:10px 0 0 10px}.fl-builder-alert-lightbox .fl-lightbox-message-info a{font-size:14px}@keyframes fl-builder-content-section-entry{from{transform:translateY(150px) translateX(100px) scale(.3);opacity:0}to{transform:translateY(0) translateX(0) scale(1);opacity:1}}.fl-template-category-select{width:180px!important}.fl-template-selector .fl-builder-settings-section{margin:0 0 10px}.fl-template-selector .fl-builder-settings-fields{height:470px}.fl-template-selector .fl-builder-settings-tab{width:560px}.fl-template-selector .fl-builder-settings-tab-description{font-size:15px!important;margin:0!important;padding:10px 0 25px;text-align:center}.fl-template-preview{float:left;margin:0 25px 30px 0;position:relative;text-align:center;width:170px}.fl-template-preview.fl-last{margin-right:0}.fl-template-image{border:1px solid #d9d9d9;cursor:pointer;margin-bottom:12px;height:164px;overflow:hidden}.fl-template-image:hover{border-color:red}.fl-template-image img{max-height:none;width:100%}.fl-template-preview span{display:block;text-align:center}.fl-user-template-category-name{background:#f2f2f2;border-bottom:3px solid #dfdfdf;border-top:2px solid #dfdfdf;font-weight:700;padding:8px 15px}.fl-user-templates{border-bottom:1px solid #dfdfdf;padding:10px 0 20px}.fl-builder--user-templates-section-content{border-bottom:2px solid #e6eaed;padding:10px}.fl-builder--user-templates-section-content:first-child{padding-top:0}.fl-builder--user-templates-section-content:last-child,.fl-user-templates:last-child{border-bottom:none}.fl-builder--user-templates-section-name{font-weight:700;font-size:16px;color:#333;z-index:9999;padding:15px 10px;margin:0 10px}@keyframes fl-list-item-entry{from{opacity:0;transform:scale(.5) translateY(100px)}to{opacity:1;transform:scale(1) translateY(0)}}.fl-builder--save-new-user-template,.fl-user-template{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;font-size:16px;font-weight:200;line-height:1.1;padding:10px 20px;color:#6d6d6d}.fl-user-template:hover{cursor:pointer;background:#fff;box-shadow:0 6px 20px rgba(0,0,0,.08);text-decoration:none;color:#111;padding-right:68px}.fl-user-template-name{overflow:hidden;text-overflow:ellipsis;-ms-flex:1;flex:1}.fl-user-template-actions{display:none;bottom:0;position:absolute;right:0;top:0}.fl-user-template:hover .fl-user-template-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.fl-user-template-actions a{display:inline-block;padding:15px 0;width:30px}.fl-user-template:hover a:hover i{color:#444!important}.fl-user-templates-message{display:none}.fl-user-template-thumbnail{-ms-flex:0;flex:0;margin-right:20px}.fl-user-template-thumbnail .fl-builder--template-thumbnail{background-size:cover;background-position:center top;width:45px}.fl-user-template-thumbnail .fl-builder--template-thumbnail:hover{box-shadow:none;transform:scale(1);transition-property:none}.fl-builder--save-new-user-template .fl-user-template-thumbnail .fl-builder--template-thumbnail{border-style:dashed;border-width:2px;border-color:#ccd4da}.fl-builder--save-new-user-template .fl-save-control{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex:1;flex:1}.fl-builder--save-new-user-template .fl-save-control input{background:0 0;border:none!important;-ms-flex:1;flex:1;font-size:16px;margin-right:10px;margin-left:-12px;color:#000}.fl-builder--save-new-user-template .fl-save-control input::-webkit-input-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input::-moz-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input:-ms-input-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input:-moz-placeholder{color:#777}@keyframes fl-slide-in-right{from{transform:translateX(50px)}to{transform:translateX(0)}}.fl-builder--save-new-user-template .fl-save-control button{display:none;animation-name:fl-slide-in-right;animation-duration:.25s;background-color:#00a0d2;border:none;padding:0 15px}.fl-save-control-mask{display:none;background:0 0;position:absolute;top:-50px;left:0;bottom:0;right:0;z-index:-1;min-height:80vh}.fl-builder-templates-cta{margin-bottom:20px}.fl-builder-templates-cta p{display:inline-block!important;width:75%!important;font-size:14px!important;line-height:1.5!important;margin-bottom:0!important}.fl-builder-templates-cta .fl-builder-upgrade-button{font-size:13px!important;line-height:13px!important;position:relative;top:8px;left:15px;padding:1px 12px}.fl-builder-settings-message,.fl-builder-settings-message *{font-size:15px!important;line-height:23px!important}.single-fl-builder-template .fl-content{width:100%!important}form.fl-builder-settings{height:100%;margin:0;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fl-builder-settings-message{padding:20px 25px!important;background:#f2f2f2!important}.fl-builder-preview-loader{position:relative;top:-2px;margin-left:3px}.fl-lightbox-header .fl-builder-preview-loader{margin:0;position:absolute;right:40px;top:15px}@keyframes fl-grab-attention{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}.fl-lightbox-width-slim .fl-form-table{margin:10px 12px 10px 10px!important;width:calc(100% - 40px)}.fl-lightbox-width-slim .fl-form-table th{display:block;position:relative;padding:10px 0 0 12px!important;width:auto!important}.fl-lightbox-width-slim .fl-form-table td{display:block}.fl-lightbox-width-slim .fl-form-table .fl-field[data-type=editor] td:first-child,.fl-lightbox-width-slim .fl-form-table td:first-child{padding-left:0!important}.fl-field-label .fl-field-responsive-toggle,.fl-lightbox-width-slim .fl-field-control-wrapper .fl-field-responsive-toggle{display:none}.fl-lightbox-width-slim .fl-field-label .fl-field-responsive-toggle{display:inline-block;padding:0 5px!important}.fl-lightbox-width-slim input.text-full+.fl-field-description,.fl-lightbox-width-slim select+.fl-field-description{display:block;padding:8px 10px;margin:0}.fl-lightbox-width-slim .fl-builder-settings-fields select{width:100%}.fl-lightbox-width-slim .fl-color-picker{display:-ms-flexbox;display:flex;width:auto}.fl-lightbox-width-slim .fl-color-picker-clear{-ms-flex:0 0 40px;flex:0 0 40px}.fl-lightbox-width-slim .fl-field[data-type=dimension] .fl-field-responsive-setting{width:100%}.fl-lightbox-width-slim .fl-dimension-field-unit-select select{width:auto!important}.fl-lightbox-width-slim .fl-gradient-picker-color-row{width:50%}.fl-lightbox-width-slim .fl-color-picker.fl-gradient-picker-color,.fl-lightbox-width-slim .fl-typography-field-align .fl-button-group-field-option{width:100%}.fl-lightbox-width-slim .fl-typography-field-align .fl-button-group-field-options{float:none}.fl-lightbox-width-slim .mce-menubtn.mce-fixed-width button{width:72px!important}.fl-lightbox-width-slim .fl-builder-settings-tab-description{margin:20px 10px}.fl-lightbox-width-micro .mce-menubtn.mce-fixed-width button{width:38px!important}.fl-lightbox-width-micro .mce-btn[aria-label=Fullscreen],.fl-lightbox-width-micro .mce-btn[aria-label=Blockquote]{display:none}.fl-lightbox-width-micro .mce-toolbar i.mce-ico{width:18px}.fl-lightbox-width-slim .fl-field[data-type=editor] .fl-field-control-wrapper,.fl-lightbox-width-slim .fl-field[data-type=code] .fl-field-control-wrapper{margin-left:-10px;margin-right:-30px}.fl-lightbox .wp-editor-tools{padding-left:6px;padding-right:28px}.fl-lightbox .mce-top-part::before{box-shadow:none!important}.mce-container .mce-stack-layout span{color:initial}.fl-lightbox div.mce-toolbar-grp{background:0 0;border:none}.fl-lightbox div.mce-toolbar-grp>div{padding:0 3px}.fl-lightbox .fl-builder-settings .wp-switch-editor{background:#e7ebef;border:1px solid transparent}.fl-lightbox .html-active .switch-html,.fl-lightbox .quicktags-toolbar,.fl-lightbox .tmce-active .switch-tmce{background:#fff}.fl-lightbox .quicktags-toolbar,.fl-lightbox .wp-editor-container{border:none}.fl-lightbox .mce-toolbar .mce-container-body{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-lightbox-width-slim .mce-toolbar .mce-container-body{-ms-flex-pack:center;justify-content:center}.fl-lightbox textarea.wp-editor-area{line-height:1.5;padding:20px;width:calc(100% - 10px)}.fl-lightbox .wp-core-ui .button,.fl-lightbox .wp-core-ui .button-secondary{border:none;box-shadow:none;background:#e7ebef}.fl-lightbox-width-slim .fl-shadow-field .fl-dimension-field-units{width:auto}.fl-lightbox-width-slim .fl-shadow-field .fl-dimension-field-units input{max-width:none;width:100%!important}.fl-lightbox-width-slim .fl-builder-field-multiple{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-field-control,.fl-lightbox-width-slim .fl-builder-field-multiple .fl-field-label{width:100%!important}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-form-field-preview-text{max-width:225px}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-builder-field-actions{position:absolute!important;top:0;right:0;width:70px;z-index:1}.fl-lightbox-width-slim .fl-builder-field-actions-single .fl-builder-field-copy{float:right!important;margin-right:5px}.fl-lightbox-width-slim .fl-field[data-type=time] select{width:auto}.fl-builder-settings-tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;overflow:hidden;height:32px;background:#e7ebef}.fl-builder-content-group-select{padding:0 10px 6px;display:none}.fl-builder-content-group-select select{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;box-sizing:border-box;padding:8px 10px;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;border:2px solid #e4e7ea;color:#161B20}select:focus{border-width:2px!important;border-style:solid!important;border-color:#00a0d2!important;outline:0!important}.fl-legacy-settings-tab{background:url(../img/ajax-loader.svg) center center no-repeat;height:100px}.fl-builder-settings-tab:first-child .fl-legacy-settings-tab{background:0 0;height:auto}body .fl-builder-settings-tabs>*{box-sizing:border-box;color:#676F7A!important;fill:#676F7A!important;background:0 0;border:2px solid transparent;border-radius:0;margin:0;outline:0;padding:1px 16px;text-decoration:none!important;font-size:13px;font-weight:400!important;-ms-flex:0 0 auto;flex:0 0 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}body .fl-lightbox-width-slim .fl-builder-settings-tabs>*{-ms-flex:1 1 auto;flex:1 1 auto}body .fl-builder-settings-tabs>.fl-builder-settings-tabs-more{-ms-flex:0 0 60px;flex:0 0 60px;display:none;margin-left:auto;-ms-flex-pack:center;justify-content:center}.fl-builder-settings-tabs-more svg{width:16px;height:auto;margin:auto}.fl-builder-settings-tabs-more g,.fl-builder-settings-tabs-more path,.fl-builder-settings-tabs-more svg{fill:inherit}body .fl-lightbox-has-tab-overflow .fl-builder-settings-tabs-more{display:-ms-flexbox;display:flex}.fl-builder-settings-tabs>:active,.fl-builder-settings-tabs>:hover{top:0;color:#333;background:0 0;border:2px solid transparent}.fl-builder-settings-tabs>:focus{top:0;outline:0;border:2px solid transparent;background:0 0;color:#0086b0;fill:#0086b0}.fl-builder-settings-tabs .fl-active,.fl-builder-settings-tabs-more.fl-contains-active,.fl-builder-settings-tabs-overflow-menu .fl-active{color:#0086b0!important;fill:#0086b0!important;position:relative;background:#fff}.fl-builder-settings-tabs .fl-active.fl-overflowed,.fl-builder-settings-tabs .fl-overflowed{display:none!important}.fl-builder-settings-tabs .error{color:#d03436;padding-right:10px}.fl-builder-settings-tabs .error .fl-error-icon,.fl-builder-settings-tabs-overflow-menu .error .fl-error-icon{background:url(../img/sprite.png) -148px -5px no-repeat;display:inline-block;height:16px;margin-left:7px;position:relative;top:3px;width:16px}.fl-builder-settings-tabs-more.fl-contains-errors{fill:#d03436!important}.fl-builder-settings-tab{display:none;width:auto!important}.fl-builder-settings-tab.fl-active{display:block}.fl-builder-settings-tab-description{background:#e4e7ea;padding:10px 15px;border-radius:4px;margin:20px}.fl-builder-settings-tab-description a{text-decoration:underline!important}.fl-builder-settings-tab-description a:hover{color:#333}.fl-builder-settings-tabs-overflow-menu{display:none;position:absolute;left:0;right:0;border:2px solid #e6eaed;border-top:3px solid #00a0d2;border-radius:4px;background:#fff;z-index:9999;margin:0 6px;padding:10px;-ms-flex-direction:column;flex-direction:column;box-shadow:0 0 20px 2px rgba(0,0,0,.2)}.fl-builder-settings-tabs-overflow-menu:before{bottom:100%;right:20px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#00a0d2;border-width:10px;margin-left:-10px}.fl-builder-settings-tabs-overflow-menu>a{display:block;padding:10px 15px;font-size:14px;font-weight:600!important;border:2px solid transparent;border-radius:4px;outline:0}.fl-builder-settings-tabs-overflow-menu>a:hover{background:#e6eaed;text-decoration:none}.fl-builder-settings-tabs-overflow-click-mask{display:none;position:fixed;top:0;bottom:0;left:0;right:0;background:0 0;z-index:11}.fl-form-table{background:none;border:none;width:calc(100% - 35px)}.fl-form-table tbody{border:none}.fl-form-table tr,.fl-form-table tr:nth-child(even){background:0 0}.fl-form-table td,.fl-form-table th{background:0 0!important;border:none!important;font-weight:400!important;text-align:left!important}.fl-form-table th{padding:10px 15px 10px 30px!important;vertical-align:top!important;width:200px!important}.fl-form-table td:first-child{padding-left:30px!important}.fl-form-table th label{color:#333;width:auto;max-width:100%}.fl-form-table th label i{color:grey}.fl-form-table th label i:hover{color:#555}.fl-form-table td{padding:8px 10px}.fl-lightbox-width-slim .fl-form-table td{padding:4px 0 5px}.fl-builder-settings-fields{margin:0;overflow:hidden;position:relative;-ms-flex:1 100%;flex:1 100%;visibility:hidden}.fl-lightbox-header .fl-builder-settings-fields{height:auto;margin:0;position:absolute;right:10px;top:10px}.fl-builder-settings-fields .fl-nanoscroller-content{padding:4px 0 0}.fl-builder-settings-fields .fl-field-control-wrapper{position:relative}.fl-field{animation-duration:.25s;animation-delay:.1s}.fl-builder-settings-fields input[type=date],.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select,.fl-builder-settings-fields textarea{background:#fff!important;border-color:transparent!important;border-style:solid;border-width:2px;border-radius:4px!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);color:#333!important;display:inline;font-size:13px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px 6px;width:auto;box-sizing:border-box}i.fl-dimension-field-link,i.fl-field-responsive-toggle{line-height:18px!important;cursor:pointer;vertical-align:middle}.fl-builder-settings-fields input[type=date],.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select:not(multiple){height:36px!important}.fl-builder-settings-fields select,.fl-builder-settings-fields select[multiple]{height:auto!important}.fl-builder-settings-fields input[type=number]{width:70px}.fl-builder-lightbox .fl-builder-settings-fields input[type=date]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=email]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=file]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=number]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=password]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=search]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=tel]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=text]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=url]:focus,.fl-builder-lightbox .fl-builder-settings-fields select:focus,.fl-builder-lightbox .fl-builder-settings-fields textarea:not(.wp-editor-area):focus{border-width:2px!important;border-style:solid!important;border-color:#00a0d2!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.12)!important}.fl-builder-settings-fields ::-webkit-input-placeholder{color:#999!important;font-size:13px}.fl-builder-settings-fields input:-moz-placeholder{color:#999;font-size:13px}.fl-builder-settings-fields ::-moz-placeholder{color:#999!important;font-size:13px}.fl-builder-settings-fields input:-ms-input-placeholder{color:#999;font-size:13px}.fl-builder-settings-fields label{display:inline-block;font-weight:400;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-bottom:3px;font-size:12px}.fl-builder-settings-fields select{-webkit-appearance:none;-moz-appearance:none;box-sizing:border-box;color:#000;margin:0 0 2px;padding:2px 10px;padding-right:30px!important;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important}.fl-dimension-field-unit input[type=number],.fl-unit-field-inputs input[type=number]{-moz-appearance:textfield}.fl-builder-settings-fields select[multiple]{height:60px;background-image:none!important}.fl-builder-custom-field select,.fl-photo-field select{box-shadow:none;border-color:#e6eaed!important}.fl-builder-settings-section:first-child{border-top:none!important}.fl-builder-settings-section-header{background-color:#e7ebef;border-top:4px solid #e7ebef;cursor:pointer;height:30px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-builder-settings-description{padding:0 10px 10px;margin:0;font-style:italic;opacity:.75}.fl-builder-settings-fields table{margin:20px 0}.fl-builder-settings-fields .fl-builder-settings-title{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;background:#F5F7F9;color:#353535;padding:2px 10px;margin:0;font-size:13px!important;font-weight:400;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:2px solid transparent;border-radius:0}.fl-builder-settings-fields .fl-builder-settings-title:active,.fl-builder-settings-fields .fl-builder-settings-title:hover{top:0}.fl-builder-settings-fields .fl-builder-settings-title:focus{top:0;border-color:#e0e4ea}.fl-builder-settings-fields .fl-builder-settings-title>svg{height:6px;width:9px;margin-right:7px;transition-property:transform;transition-duration:.15s}.fl-builder-settings-section-collapsed{margin-bottom:4px}.fl-builder-settings-section-collapsed .fl-builder-settings-section-content{display:none}.fl-builder-settings-section-collapsed .fl-builder-settings-title{background:0 0;-ms-flex:1 1 100%;flex:1 1 100%}.fl-builder-settings-section-collapsed .fl-builder-settings-title>svg{transform:rotate(-90deg)}.wp-core-ui h1,.wp-core-ui h2,.wp-core-ui h3,.wp-core-ui h4,.wp-core-ui h5,.wp-core-ui h6,.wp-core-ui p{color:#333;font-family:inherit}.wp-core-ui #media-attachment-date-filters{width:275px}.wp-core-ui input[type=search]::-webkit-input-placeholder{color:#333}.wp-core-ui input[type=search]:-ms-input-placeholder{color:#333}.wp-core-ui input[type=search]::-ms-input-placeholder{color:#333}.wp-core-ui input[type=search]::placeholder{color:#333}.wp-core-ui .submitbox .submitdelete{color:#a00}.wp-core-ui button{font-weight:400}.wp-core-ui input[type=date],.wp-core-ui input[type=email],.wp-core-ui input[type=file],.wp-core-ui input[type=number],.wp-core-ui input[type=password],.wp-core-ui input[type=search],.wp-core-ui input[type=tel],.wp-core-ui input[type=text],.wp-core-ui input[type=url],.wp-core-ui select,.wp-core-ui textarea{background-color:#fff;border-color:#dfdfdf;border-style:solid;border-width:1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#333;font-weight:400}.wp-core-ui input[type=date]:focus,.wp-core-ui input[type=email]:focus,.wp-core-ui input[type=file]:focus,.wp-core-ui input[type=number]:focus,.wp-core-ui input[type=password]:focus,.wp-core-ui input[type=search]:focus,.wp-core-ui input[type=tel]:focus,.wp-core-ui input[type=text]:focus,.wp-core-ui input[type=url]:focus,.wp-core-ui select:focus,.wp-core-ui textarea:focus{background:0 0;border-color:#aaa}.wp-core-ui input[type=search]{background-image:none;padding:6px}.fl-field-responsive-setting{display:inline-block;width:100%}.fl-field-responsive-setting-medium,.fl-field-responsive-setting-responsive{display:none}.fl-field-control-wrapper i.fl-field-responsive-toggle{padding:9px 0 0;position:absolute;left:-25px}i.fl-field-responsive-toggle{color:grey;display:inline-block;font-size:15px!important;height:auto;text-align:left;width:20px}.fl-builder-settings-fields input.text-full,.fl-builder-settings-fields textarea{width:100%}i.fl-field-responsive-toggle:hover{color:#000}.fl-builder-settings-fields .fl-text-field-add-value{min-width:50%;margin-top:.62em}.fl-field[data-type=shadow] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-shadow-field .fl-color-picker{margin-bottom:15px;width:100%}.fl-color-picker{cursor:pointer}.fl-color-picker .fl-color-picker-clear{box-sizing:border-box;display:inline-block}.fl-color-picker .fl-color-picker-clear:hover{background-color:#ededed}.colorpicker input{padding:0!important;font-size:11px!important;color:#fff!important;width:29px!important;height:auto!important;background:0 0!important;border:none!important}.colorpicker .colorpicker_hex input{width:45px!important}.fl-gradient-picker-type{display:-ms-flexbox;display:flex;margin-bottom:15px}.fl-gradient-picker-type input{margin:0!important}.fl-gradient-picker-type select{margin-bottom:0!important}.fl-gradient-picker-type-select{margin-right:10px!important}.fl-gradient-picker-colors{display:-ms-flexbox;display:flex}.fl-gradient-picker-color-row{display:-ms-flexbox;display:flex;margin-right:15px}.fl-color-picker.fl-gradient-picker-color,.fl-gradient-picker-color-row:last-child{margin-right:0}.fl-color-picker.fl-gradient-picker-color .fl-color-picker-color{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-gradient-picker .fl-gradient-picker-stop input{border-top-left-radius:0!important;border-bottom-left-radius:0!important;margin:0!important}.fl-field[data-type=dimension] .fl-field-label label{padding-right:35px}.fl-field[data-type=dimension] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-field[data-type=dimension] .fl-field-description{padding:9px 0 0 5px}.fl-field[data-type=dimension] .fl-field-responsive-setting{width:auto}.fl-dimension-field-units{border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex;height:36px;margin:1px 1px 20px;position:relative;max-width:350px}.fl-dimension-field-units>*{border-right:1px solid #e6eaed;width:100%}body .fl-dimension-field-units>:last-child{border-right:none!important}body .fl-dimension-field-units>:first-child>input[type]{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important}body .fl-dimension-field-units>:last-child>*{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.fl-dimension-field-unit input[type],.fl-dimension-field-units .fl-field-unit-select{box-shadow:none!important;margin:0!important;border-radius:0!important}.fl-dimension-field-unit input{width:100%!important}.fl-dimension-field-unit input::-webkit-inner-spin-button,.fl-dimension-field-unit input::-webkit-outer-spin-button{-webkit-appearance:none}.fl-dimension-field-unit label{padding:5px 0 0;font-size:11px;font-weight:700;color:inherit!important;display:block;text-align:center;opacity:.5}.fl-dimension-field-unit .fl-field-popup-slider{margin-top:27px}i.fl-dimension-field-link{color:grey;font-size:15px!important;height:auto;text-align:left;width:20px}i.fl-dimension-field-link:hover{color:#000}i.fl-dimension-field-link.dashicons-editor-unlink,i.fl-dimension-field-link.dashicons-editor-unlink:hover{color:#0086b0}.fl-field-label .fl-dimension-field-link,.fl-lightbox-width-slim .fl-dimension-field-link{display:none}.fl-lightbox-width-slim .fl-field-label .fl-dimension-field-link{display:inline-block}.fl-field-control-wrapper .fl-dimension-field-link{padding:9px 0 0;left:-50px;position:absolute}.fl-dimension-field-unit-select{display:-ms-flexbox;display:flex;width:auto!important}.fl-field[data-type=unit] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-field[data-type=unit] .fl-field-description{margin-left:7px!important;padding-top:9px}.fl-field[data-type=unit] .fl-field-responsive-setting{width:auto}.fl-unit-field-inputs{background:0 0;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex}.fl-unit-field-inputs .fl-field-unit-select,.fl-unit-field-inputs input[type]{box-shadow:none!important;margin:0!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-unit-field-inputs .fl-field-unit-select{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.fl-unit-field-inputs input::-webkit-inner-spin-button,.fl-unit-field-inputs input::-webkit-outer-spin-button{-webkit-appearance:none}.fl-unit-field-input{border-right:1px solid #e6eaed!important}body .fl-unit-field-input:last-child{border-right:none!important}body .fl-unit-field-input:last-child>*{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.fl-unit-field-unit-select{display:-ms-flexbox;display:flex;width:auto!important}select.fl-field-unit-select{background-color:#E7EBEF!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important}div.fl-field-unit-select{background-color:#E7EBEF!important;padding:9px 7px!important;width:100%}.fl-field-popup-slider{background:#fff;border-radius:4px;box-shadow:0 4px 25px 0 rgba(0,0,0,.18);display:none;margin-top:10px;padding:15px;position:absolute;left:0;right:0;z-index:9999}.fl-field-popup-slider-top{margin-top:0!important;top:-100%;transform:translateY(-10px)}.fl-field-popup-slider-input{background:#E7EBEF;cursor:pointer;height:4px;text-align:left;position:relative;border-radius:3px}.fl-field-popup-slider-input .ui-slider-handle{background:#fff;border:2px solid #3AA4CC;border-radius:100%;cursor:pointer;height:12px;width:12px;position:absolute;top:-6px;margin-left:-7px}.fl-field-popup-slider-input .ui-slider-handle:focus{outline:0}.fl-field-popup-slider-arrow{position:absolute;top:-22px}.fl-field-popup-slider-arrow:after{content:' ';border-color:transparent transparent #fff;border-style:solid;border-width:0 8px 8px;width:0;height:0}.fl-field-popup-slider-top .fl-field-popup-slider-arrow{top:auto;bottom:-24px}.fl-field-popup-slider-top .fl-field-popup-slider-arrow:after{border-bottom-width:0;border-top-width:8px;border-top-color:#fff}input[type=number].fl-field-popup-slider-focus{border:2px solid #00a0d2!important}.fl-font-field{display:-ms-flexbox;display:flex}.fl-font-field label{display:block!important;margin:0!important;padding:0 0 6px 12px}.fl-font-field .fl-font-field-font-wrapper{margin-right:8px;width:70%!important}.fl-font-field .fl-font-field-weight-wrapper{width:30%!important}.fl-compound-field{max-width:350px}.fl-compound-field-section-toggle{background:#E7EAEF;border-radius:4px;border-top:2px solid transparent;border-bottom:2px solid transparent;cursor:pointer;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:32px;margin-bottom:8px;padding:0 12px}.fl-compound-field-section-toggle:hover{background:#dadfe5}.fl-compound-field-section-toggle .dashicons{font-size:15px;height:15px;margin-right:5px;width:15px}.fl-compound-field-section:last-child .fl-compound-field-section-toggle{margin-bottom:0}.fl-compound-field-section.fl-compound-field-section-visible{padding-bottom:12px}.fl-compound-field-section.fl-compound-field-section-visible:last-child{padding-bottom:0}.fl-compound-field-section-visible .fl-compound-field-section-toggle{background:0 0;border-top:2px solid #E7EBEF;border-radius:0}.fl-compound-field-section-visible .fl-compound-field-section-toggle:hover{background:0 0}.fl-compound-field-section-visible .fl-compound-field-section-toggle .dashicons:before{content:'\f347'}.fl-compound-field-row{display:none;padding-bottom:12px}.fl-compound-field-section-visible .fl-compound-field-row{display:-ms-flexbox;display:flex}.fl-compound-field-label{display:block!important;margin:0!important;padding:0 0 6px 12px}.fl-compound-field-label-bottom{padding:6px 0 0 12px}.fl-compound-field-label .fl-dimension-field-link{display:inline-block;padding:0 0 0 2px;position:relative;left:auto;top:-1px}.fl-compound-field-setting{padding-right:8px;width:100%}.fl-compound-field-setting:last-child{padding-right:0}.fl-compound-field-setting select{margin:0!important;width:100%}.fl-compound-field-setting .fl-unit-field-input input{width:100%!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-compound-field-setting .fl-unit-field-input{width:50%!important}.fl-compound-field-setting .fl-unit-field-input select.fl-field-unit-select{background-position:center right 2px!important;padding:2px 5px!important;width:100%;font-size:11px}.fl-typography-field .fl-font-field-font-wrapper{margin-right:8px!important}.fl-typography-field-spacing{width:calc(33.33% - 8px)}.fl-typography-field-transform{width:66.66%}.fl-typography-field-transform .fl-button-group-field-options{float:none}.fl-typography-field-transform .fl-button-group-field-option{width:100%;padding:0 7px}.fl-typography-field .fl-shadow-field{display:-ms-flexbox;display:flex}.fl-typography-field .fl-shadow-field .fl-color-picker{margin:0 8px 0 0;width:calc(33.33% - 8px)}.fl-typography-field .fl-shadow-field .fl-dimension-field-units{margin-left:0;margin-top:0;margin-right:0;width:66.66%}.fl-button-group-field-options{background:#E7EBEF;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex;float:left;height:36px;overflow:hidden}.fl-button-group-field-option{cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:0 5px;border-radius:0;border:2px solid transparent;background:0 0}.fl-button-group-field-option:hover{top:0;background-color:transparent;color:#000;border:2px solid transparent}.fl-button-group-field-option:focus{top:0;background-color:transparent;border:2px solid #00a0d2;color:#333}.fl-button-group-field-option:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.fl-button-group-field-option:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.fl-button-group-field-option[data-selected="1"]{background-color:#fff;color:#000}.fl-button-group-field-option i{color:#6B6E75}.fl-button-group-field-option:hover i{color:#333}.fl-compound-field-cell{width:50%;display:block;float:left;padding-top:13px}.fl-compound-field-cell:first-child{padding-right:4px}.fl-compound-field-cell:last-child{padding-left:4px}.fl-compound-field-cell label{padding:5px 0 0;font-size:11px;font-weight:700;color:inherit!important;display:block;text-align:center;opacity:.5}.fl-shape-transform-field .fl-compound-field-row{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-shape-transform-field .fl-compound-field-row>*{width:auto;-ms-flex:1 1 auto;flex:1 1 auto}.fl-shape-transform-field .fl-compound-field-row>:first-child{-ms-flex:0 0 auto;flex:0 0 auto}.fl-shape-transform-field .fl-shape-orientation-controls{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-shape-transform-field .fl-shape-orientation-controls>*{-ms-flex:0 0 auto;flex:0 0 auto}.fl-shape-transform-field .fl-shape-orientation-controls .fl-button-group-field>*,.fl-shape-transform-field .fl-shape-orientation-controls .fl-button-group-field>* button{border-radius:0}.fl-shape-orientation-controls .fl-button-group-field:first-child>*,.fl-shape-orientation-controls .fl-button-group-field:first-child>* button{border-top-left-radius:4px;border-bottom-left-radius:4px}.fl-shape-orientation-controls .fl-button-group-field:last-child>*,.fl-shape-orientation-controls .fl-button-group-field:last-child>* button{border-top-right-radius:4px;border-bottom-right-radius:4px}.fl-builder-custom-field{background:#fff;border:2px solid transparent;border-radius:4px;padding:7px 10px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);min-height:36px;box-sizing:border-box}.fl-builder-field-multiple .fl-builder-custom-field{cursor:move}.fl-builder-custom-field a{color:#21759b!important;text-decoration:underline!important}.fl-builder-custom-field a:hover{color:#d54e21!important}.fl-builder-custom-field label.error{margin-top:5px}.fl-photo-field .fl-photo-preview{display:-ms-flexbox;display:flex}.fl-photo-field .fl-photo-select,.fl-photo-field.fl-photo-empty .fl-photo-preview{display:none}.fl-photo-field.fl-photo-empty .fl-photo-select{display:block}.fl-photo-field .fl-photo-preview-img{line-height:0;margin:5px 0}.fl-photo-field .fl-photo-preview-img img{max-width:60px}.fl-photo-field .fl-photo-preview select{margin:8px 0 8px 10px;width:calc(100% - 10px)}.fl-photo-field.fl-photo-no-attachment .fl-photo-preview select{display:none}.fl-photo-field .fl-photo-preview-filename{display:none;font-size:13px;font-weight:700;margin:5px 0 9px 11px}.fl-photo-field.fl-photo-no-attachment .fl-photo-preview-filename{display:inline-block;word-break:break-all}.fl-multiple-photos-field .fl-multiple-photos-select,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-add,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-count,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-edit,.fl-multiple-photos-lightbox .gallery-settings,.fl-photo-field.fl-photo-no-attachment .fl-photo-edit{display:none}.fl-photo-field .fl-photo-edit{margin:0 0 0 11px}.fl-photo-field .fl-photo-remove,.fl-photo-field .fl-photo-replace{margin:0 0 0 8px}.fl-builder-edit .media-modal{z-index:9999991}.fl-builder-edit .media-modal-backdrop{z-index:999999}.fl-builder-edit .media-frame{-webkit-backface-visibility:hidden;backface-visibility:hidden}.fl-builder-edit .media-modal-content h1{font-family:inherit}.fl-builder-edit form#wp-link,.popover[class*=tour-],ul.as-list{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-builder-edit .media-modal-content .thumbnail{padding:0;border:none;border-radius:0}.fl-builder-edit .media-modal-content .attachment-preview .thumbnail{margin-bottom:0}.fl-builder-edit .media-modal-content .attachment-preview .thumbnail img{max-width:none}.fl-builder-edit button.media-modal-close{position:absolute;box-shadow:none;-webkit-box-shadow:none}.fl-builder-edit .media-frame.hide-menu{visibility:visible}span.select2-container.select2-container--open{z-index:9999999}.fl-multiple-photos-field .fl-multiple-photos-add{margin:0 0 0 8px}.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-select{display:inline}.fl-multiple-photos-count{font-weight:700;margin-bottom:3px}.fl-video-field .fl-video-select,.fl-video-field.fl-video-empty .fl-video-preview{display:none}.fl-video-field.fl-video-empty .fl-video-select{display:block}.fl-video-field .fl-video-preview-img{float:left;line-height:0;margin:5px 0}.fl-video-field .fl-video-preview-img img{max-width:60px}.fl-video-field .fl-video-preview-img .dashicons.dashicons-media-video{display:block;font-size:60px;height:60px;line-height:60px;width:60px}.fl-video-field .fl-video-preview-filename{display:inline-block;font-size:14px;font-weight:700;margin:7px 0 5px 11px}.fl-video-field .fl-video-remove,.fl-video-field .fl-video-replace{margin:0 0 0 11px}.fl-multiple-audios-field .fl-multiple-audios-select,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-add,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-edit{display:none}.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-select{display:block}.fl-multiple-audios-field .fl-multiple-audios-add{margin:0 0 0 8px}.fl-icon-field .fl-icon-select,.fl-icon-field.fl-icon-empty .fl-icon-preview{display:none}.fl-icon-field.fl-icon-empty .fl-icon-select{display:block}.fl-icon-field .fl-icon-preview i{display:inline-block;font-size:28px;margin:10px 10px 9px;vertical-align:middle}.fl-icon-field .fl-icon-remove{margin:0 0 0 8px}.fl-builder-hidden-editor{display:none}.fl-builder-settings .wp-switch-editor{border-radius:0;color:#333;margin-top:2px}.fl-builder-settings .mce-toolbar .mce-btn-group .mce-btn{margin:2px 0}.fl-builder-settings .mce-menubtn.mce-fixed-width button{width:100px}.fl-builder-settings .mce-menubtn.mce-fixed-width span{width:100%}.mce-close:active,.mce-close:hover,.mce-toolbar .mce-btn button:active,.mce-toolbar .mce-btn button:hover,.mce-window .mce-btn button:active,.mce-window .mce-btn button:hover{background:0 0;border:none}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:1px!important}.wp-editor-container textarea.wp-editor-area{background:0 0;border:none;padding:10px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.fl-builder-edit form#wp-link{color:#000;font-size:13px}.fl-builder-edit form#wp-link #link-options label{display:block;margin-bottom:2px}.fl-builder-edit form#wp-link #link-options label span{padding-right:10px;vertical-align:middle}.fl-builder-edit form#wp-link #link-options input[type=text]{display:inline-block;height:auto;margin:5px 0 0;padding:3px 5px;width:80%}.fl-builder-edit form#wp-link .query-results{top:225px}.fl-code-field{border:1px solid #E6E6E6;border-left:none}.ace_editor,.ace_editor *{font-family:Monaco,Menlo,"Ubuntu Mono","Droid Sans Mono",Consolas,monospace!important;font-size:12px!important;font-weight:400!important;letter-spacing:0!important}.fl-layout-field-option{border:2px solid #d9d9d9;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;cursor:pointer;float:left;line-height:0;max-width:23%;margin:0 1% 2%;padding:5px}.fl-layout-field-option-selected,.fl-layout-field-option:hover{border-color:red}.fl-layout-field-option img{max-width:100%}.fl-link-field .fl-link-field-input-wrap{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-link-field-input{width:auto!important;-ms-flex:1 1 100%;flex:1 1 100%}.fl-link-field .fl-link-field-input-wrap button{-ms-flex:0 0 0%;flex:0 0 0%;height:36px;margin:1px 1px 1px 5px}.fl-link-field-options-wrap{padding:7px 0 0 12px}.fl-link-field-options-wrap label{margin-right:7px}.fl-link-field-options-wrap span{font-size:11px;font-weight:700;color:inherit!important;text-align:center;opacity:.5}.fl-link-field-search{display:none;border:2px solid #e6eaed;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;margin:4px 0 0;padding:10px}.fl-link-field-search-title{display:block;margin:0 0 3px 2px}.fl-link-field-search-cancel{margin-top:6px}.fl-link-field-search input{box-shadow:none!important;width:100%!important;padding:3px 9px!important}.fl-link-field-search #as-original-link-search{width:100%}.fl-field-connections-toggle{padding:10px 0}.fl-field[data-type=editor] .fl-field-connections-toggle{-ms-flex-align:start;align-items:flex-start}.fl-field[data-type=link] .fl-field-connections-toggle{height:24px;margin-top:1px;-ms-flex-align:start;align-items:flex-start}.fl-field[data-type=link] .fl-field-connection{bottom:25px}.fl-field-connections-menu[data-field=fl-field-text]{margin-top:30px}.fl-help-tooltip{display:inline-block;position:relative}.fl-lightbox-width-slim .fl-help-tooltip{position:static}.fl-help-tooltip-icon{color:#999!important;cursor:pointer;font-size:15px!important;padding:5px;vertical-align:middle}.fl-help-tooltip-text{box-sizing:border-box;background:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ccc;-moz-box-shadow:0 0 5px #ccc;-webkit-box-shadow:0 0 5px #ccc;display:none;font-weight:400;left:23px;padding:10px 13px;position:absolute;top:-6px;width:250px;z-index:1000;border-radius:4px}.fl-lightbox-width-slim .fl-help-tooltip-text{top:30px;left:0;width:100%}.fl-field-control .fl-form-field{margin-bottom:0}.fl-form-field[data-preview-text=icon]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.fl-form-field-preview-text i{display:inline-block;font-size:18px;line-height:22px;margin-right:10px}.fl-builder-field-actions{padding-left:0!important;padding-right:0!important;text-align:center;width:85px}.fl-builder-field-actions i{color:#999!important;cursor:pointer;font-size:13px!important;line-height:29px!important;width:16px}.fl-builder-field-actions i:hover{color:#000!important}.fl-builder-field-actions i.fl-builder-field-copy,.fl-builder-field-actions i.fl-builder-field-delete{margin-left:5px}.fl-builder-field-actions i.fl-builder-field-move{cursor:move}.fl-builder-field-dd-helper{background:#ccc;height:30px!important;float:left;width:130px!important}.fl-builder-field-dd-zone{border:1px dashed #ccc;height:30px}.fl-builder-field-actions-single .fl-builder-field-delete,.fl-builder-field-actions-single .fl-builder-field-move{display:none!important}.fl-builder-field-multiple .fl-builder-field-actions,.fl-builder-field-multiple .fl-field-control,.fl-builder-field-multiple .fl-field-label{padding-top:2px!important;padding-bottom:2px!important}.fl-builder-field-multiple .fl-builder-field-actions{min-width:70px!important}.fl-builder-field-multiple[data-field=icons] .fl-builder-field-actions{width:70px!important}.fl-builder-field-multiple.ui-sortable-helper .fl-field-control{width:60%}.fl-builder-field-multiple.ui-sortable-helper .fl-builder-field-actions{display:none}.fl-builder-widget-settings input{display:inline-block!important;margin:5px 10px 8px!important}.fl-builder-lightbox-loading{background:url(../img/ajax-loader.svg) center center no-repeat;height:100px}.fl-builder-settings .error,.fl-builder-settings input.error{color:#d03436!important}.fl-builder-settings label.error,.fl-builder-settings p.error{color:#d03436;display:block;margin-top:5px}.fl-builder-settings .fl-form-table .fl-field-description{color:#464646;font-style:normal;margin-left:2px}.fl-lightbox .fl-field-connection{right:-1px}.fl-lightbox .fl-field-connection-content{border:2px solid transparent!important;background:#e7ebef!important}.fl-field-connection-content .fl-field-connection-label{color:#676f7a!important}.fl-field-connections-toggle{pointer-events:none;width:20px;right:-25px}.has-scrollbar .fl-field-connections-toggle{right:-22px}.fl-lightbox-width-slim tr[data-type=code] .fl-field-connections-toggle{right:10px}.fl-lightbox-width-slim .fl-code-field{width:90%}.fl-field-connections-toggle-open{transform:none!important}.fl-field-connections-toggle i{pointer-events:auto;color:#abb1ba;font-size:13px!important;transition-property:transform;transition-duration:.15s}.fl-field-connections-toggle-open i{transform:rotate(-45deg)}ul.as-selections{background-color:#fff;border:none;border-radius:4px;box-shadow:none;color:#333;font-size:12px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px;width:auto}ul.as-selections.loading{background:url(../img/ajax-loader-small.svg) 98% center no-repeat}ul.as-selections li.as-selection-item{background:#d4eaf6;border:none;font-size:11px;line-height:14px;padding:8px 15px;border-radius:4px;margin:2px}ul.as-selections li.as-selection-item.blur{background:#f4f4f4}ul.as-selections li.as-selection-item a.as-close{line-height:12px}ul.as-selections li.as-original{margin:0}ul.as-selections li.as-original input{height:auto;font-size:12px;margin:0;padding:0;box-shadow:none}ul.as-list{margin:0;font-size:13px;color:#000;background-color:#fff;background-color:rgba(255,255,255,.95);z-index:2;box-shadow:0 0 10px rgba(0,0,0,.1);border:none;border:1px solid #dfdfdf;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}li.as-message,li.as-result-item{border:none}li.as-result-item.active{background:#e5e5e5;border-radius:0;color:#333;text-shadow:none}li.as-result-item em{background:0 0!important;color:#333!important;font-size:12px;padding:0!important;font-weight:700}.fl-custom-query-filter{display:none}.fl-custom-query .fl-field[data-type=suggest] select{margin-bottom:5px;width:100%}.fl-builder-service-settings{position:relative}.fl-builder-service-error{color:red!important;padding:15px 0 0}.fl-builder-service-account-delete{color:red!important;margin-left:10px;position:relative;top:2px}.fl-lightbox-width-slim .fl-builder-service-account-delete{display:block;padding-top:7px}#fl-field-visibility_user_capability .fl-field-description,.fl-builder-service-connect-row .fl-field-description{background:#f0f0f0;color:#333!important;display:block;float:none;margin:10px 0 0;padding:10px}#fl-field-visibility_user_capability .fl-field-description a,.fl-builder-service-connect-row .fl-field-description a{color:#21759b!important;text-decoration:underline!important}.fl-ordering-field-option{background:#fff;border:1px solid #dfdfdf;border-radius:3px;cursor:move;margin-bottom:5px;padding:5px 10px}.fl-ordering-field-option .fa{color:#ccc;float:right;line-height:16px}#tiptip_holder{z-index:1000000}#tiptip_holder.tip_top #tiptip_arrow_inner{border-top-color:#333}#tiptip_holder.tip_bottom #tiptip_arrow_inner{border-bottom-color:#333}#tiptip_holder.tip_right #tiptip_arrow_inner{border-right-color:#333}#tiptip_holder.tip_left #tiptip_arrow_inner{border-left-color:#333}#tiptip_content{background:#333;box-shadow:none}.fl-builder-getting-started-video{line-height:0!important;padding:10px}.fl-builder-getting-started-video iframe{border:none;height:326px;width:100%}.fl-builder-tour-actions .fl-builder-actions-title{font-size:14px!important;line-height:19px}.fl-builder-tour-mask{bottom:0;left:0;position:fixed;right:0;top:0;z-index:100000000}.fl-builder-tour-dimmed{background:rgba(0,0,0,.7);bottom:0;left:0;position:absolute;right:0;top:0}body>.fl-builder-tour-dimmed{position:fixed}.tour-backdrop{z-index:110000}.popover[class*=tour-]{border:1px solid #ccc;border-radius:0;box-shadow:0 0 40px rgba(0,0,0,.3);color:#666;font-size:13px;font-weight:400;line-height:18px;max-width:none;padding:0;width:300px;z-index:100000001}.popover[class*=tour-].bottom>.arrow{border-bottom-color:#ccc}.popover[class*=tour-].bottom>.arrow:after{border-bottom-color:#f7f7f7}.popover[class*=tour-] .popover-title{border-radius:0;color:#333;letter-spacing:normal;text-transform:none}.popover[class*=tour-] .fa-times{color:#b3b3b3;cursor:pointer;font-size:16px;padding:5px;position:absolute;right:3px;top:2px}.popover[class*=tour-] .fa-times:hover{color:#666}.popover[class*=tour-] .popover-content{border-bottom:1px solid #d9d9d9;padding:13px 15px}.popover[class*=tour-] .fl-builder-tour-next{display:block;float:none;width:100%}.popover-navigation button{min-height:36px}.fl-builder-shortcode-mask-wrap{position:relative}.fl-builder-shortcode-mask{bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fl-builder--search{border:2px solid transparent;position:relative;padding:0;width:54px;transition-property:width;transition-delay:.1s;transition-duration:.15s}.fl-builder--search.is-expanded{border:2px solid #00A0D0}.fl-builder--search input[type=text],.fl-builder--search input[type=text]:focus{background-color:transparent;border:none!important;box-sizing:border-box;width:100%;font-size:16px;text-align:center}.fl-builder--search:before{display:-ms-flexbox;display:flex;top:0;left:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;content:"\f002";font:normal normal normal 14px/1 Font Awesome\ 5 Free;text-align:center;width:100%;height:100%;position:absolute;pointer-events:none;color:rgba(128,128,128,.6);font-size:17px;opacity:1;transition-property:opacity;transition-duration:.15s}.fl-builder--main-menu-panel,.fl-builder-ui-keyboard-shortcuts{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important}.fl-builder--search.has-text:before,.fl-builder--search.is-expanded:before{opacity:0}.fl-builder--search input::-webkit-input-placeholder{color:rgba(128,128,128,0)!important;transition:color .25s}.fl-builder--search input:focus::-webkit-input-placeholder{color:rgba(128,128,128,.4)!important}.fl-builder--search .search-label{cursor:text}.fl-builder--search .search-clear{display:none;padding:10px 10px 10px 30px;color:#a7a7a7;font-size:12px;position:absolute;right:0;top:0;background-color:#eff1f2;background:linear-gradient(to left,#e4e7ea,#e4e7ea 75%,rgba(228,231,234,0))}.fl-builder--search.has-text .search-clear,.fl-builder--search.is-expanded input{display:inline-block}.fl-builder--search:hover .search-clear{color:#888;background-color:#eff1f2;background:linear-gradient(to left,#dadfe5,#dadfe5 75%,rgba(218,223,229,0))}.fl-builder--search.is-expanded{width:246px}@keyframes fl-builder-show-menu-item{from{transform:translateY(10px) scale(.8);opacity:0}to{transform:translateX(0) translateY(0) scale(1);opacity:1}}.fl-builder--main-menu-panel{display:none;box-sizing:border-box;position:fixed;top:calc(45px + 10px);left:10px;width:360px;color:#222;max-height:calc(100% - 66px);border-radius:4px;background:#fff;border:none;border-top:3px solid #00a0d2;box-shadow:0 11px 45px 8px rgba(0,0,0,.1);font-size:14px!important;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:10000009;pointer-events:auto}.fl-builder--main-menu-panel.is-showing{display:-ms-flexbox;display:flex}.fl-builder--main-menu-panel:before,.fl-theme-builder-preview-select-open .fl-theme-builder-preview-select-items:before{bottom:100%;right:6px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#00a0d2;border-width:13px;margin-left:-13px}.fl-builder--main-menu-panel-views{-ms-flex:1 1 100%;flex:1 1 100%;overflow:auto}.fl-builder--main-menu-panel-mask{display:none;position:fixed;top:0;left:0;right:0;bottom:0;z-index:1000119}.fl-builder--main-menu-panel .fl-builder--tabs{padding-left:20px;padding-top:15px}.fl-builder--main-menu-panel-view{display:none}.fl-builder--main-menu-panel-view.is-showing{display:block}.fl-builder--main-menu-panel-view-title{font-size:24px;font-weight:600;padding:25px 22px 0;line-height:1;white-space:nowrap}.fl-builder--main-menu-panel-view-title .title-accessory{float:right;color:#b1b1b1}.fl-builder--main-menu-panel-view-title .title-accessory>i{font-size:20px!important;width:25px!important}.fl-builder--main-menu-panel-view-title .title-accessory>i:hover{color:#222}.fl-builder--main-menu-panel-view-title .pop-view{padding:10px;margin-left:-10px;opacity:.5;font-size:25px;font-weight:400;cursor:pointer;background:0 0;outline:0;border:none;color:inherit}.fl-builder--main-menu-panel-view-title .pop-view:focus{outline:0;top:0;background:#E5EAED!important}.fl-builder--menu-item:before{display:block;content:"";float:none;clear:both}.fl-builder--menu-item{color:inherit;text-align:left;box-sizing:border-box;display:block;padding:10px 15px;margin:0 10px;width:calc(100% - 20px);background:0 0;border:none;border-radius:4px;font-size:14px;line-height:1.1;cursor:pointer;opacity:1;text-transform:none}.fl-builder--menu-item .menu-view.view-revisions{opacity:.5;padding-left:5px}.fl-builder--menu-item .menu-event.event-showGlobalSettings,.fl-builder--menu-item .menu-event.event-showLayoutSettings{color:#6bc373;padding-left:5px}.fl-builder--menu-item:hover{background:#eaf1f8;border:none;text-decoration:none;color:#000}.fl-builder--selector-menu .fl-builder--menu-item:hover{background:#fff}.fl-builder--menu-item-accessory{float:right;text-align:center;display:inline-block;min-width:40px;font-size:14px}.fl-builder--menu-item-accessory.view-arrow{font-size:18px}.fl-builder--menu{padding:0;margin:20px 0}.fl-builder--menu hr{margin:8px 0;background:#e6eaed!important;height:1px;border:none}.fl-builder--menu .fl-builder-video-wrap{padding:0 10px 10px}.fl-revision-list-item{display:-ms-flexbox;display:flex}.fl-revision-list-item-text{padding-left:15px}.fl-revision-list-item-date{padding-bottom:5px}.fl-builder--revision-actions{display:none;position:fixed;top:4px;left:4px;z-index:100008;padding:4px 4px 6px;-ms-flex-pack:center;justify-content:center;background:#fff;border-radius:4px}.fl-builder--revision-actions *{margin-right:5px}.fl-builder--revision-actions :last-child{margin:0}.fl-builder--menu-item[data-event=noRevisionsMessage]:hover{background:0 0;box-shadow:none;cursor:default}.fl-no-revisions-message-title{font-weight:700;margin-bottom:10px}.fl-no-revisions-message-text{line-height:22px}.fl-builder-module-placeholder-message{border:1px dashed #ccc;overflow:hidden;padding:20px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fl-field-connections-menu{z-index:999999}.fl-field[data-type=editor] .fl-field-connections-toggle{right:5px!important}.fl-field-connections-inline-toggle{display:inline;color:#9a9b9c;margin-left:6px}.fl-field-connections-inline-toggle i{transition-property:transform;transition-duration:.15s}.fl-field-connections-inline-toggle.fl-field-connections-toggle-open i{transform:rotate(45deg)}.fl-builder-add-ultimate-presets-button,.fl-builder-add-ultimate-rows-button,.fl-builder-pp-add-template-button,.pp-preview-button,.uabb-live-preview-button{display:none!important}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none;background:0 0;transition-property:background;transition-duration:.15s}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-ne,.ui-resizable-nw,.ui-resizable-se,.ui-resizable-sw{width:12px;height:12px}.ui-resizable-se{cursor:se-resize;right:-4px;bottom:-4px}.ui-resizable-sw{cursor:sw-resize;left:-4px;bottom:-4px}.ui-resizable-nw{cursor:nw-resize;left:-4px;top:-4px}.ui-resizable-ne{cursor:ne-resize;right:-4px;top:-4px}.fl-builder-resizable-iframe-fix{position:absolute;top:0;right:0;bottom:0;left:0;z-index:100000000}.fl-builder-panel .ui-resizable-handle:active,.fl-builder-panel .ui-resizable-handle:hover,.fl-lightbox .ui-resizable-handle:active,.fl-lightbox .ui-resizable-handle:hover{background:#00a0d2}.fl-builder-panel .ui-resizable-n,.fl-builder-panel .ui-resizable-s,.fl-lightbox .ui-resizable-n,.fl-lightbox .ui-resizable-s{height:6px}.fl-builder-panel .ui-resizable-n,.fl-lightbox .ui-resizable-n{top:-3px}.fl-builder-panel .ui-resizable-s,.fl-lightbox .ui-resizable-s{bottom:-3px}.fl-builder-panel .ui-resizable-e,.fl-builder-panel .ui-resizable-w,.fl-lightbox .ui-resizable-e,.fl-lightbox .ui-resizable-w{width:6px}.fl-builder-panel .ui-resizable-e,.fl-lightbox .ui-resizable-e{right:-3px}.fl-builder-panel .ui-resizable-w,.fl-lightbox .ui-resizable-w{left:-3px}.fl-lightbox .ui-resizable-ne,.fl-lightbox .ui-resizable-nw,.fl-lightbox .ui-resizable-se,.fl-lightbox .ui-resizable-sw{background:0 0;border:6px solid transparent}.fl-lightbox .ui-resizable-ne:active,.fl-lightbox .ui-resizable-ne:hover,.fl-lightbox .ui-resizable-nw:active,.fl-lightbox .ui-resizable-nw:hover,.fl-lightbox .ui-resizable-se:active,.fl-lightbox .ui-resizable-se:hover,.fl-lightbox .ui-resizable-sw:active,.fl-lightbox .ui-resizable-sw:hover{background:0 0;border-color:#00a0d2}.fl-lightbox .ui-resizable-ne{border-bottom:none;border-left:none;border-top-right-radius:4px}.fl-lightbox .ui-resizable-nw{border-bottom:none;border-right:none;border-top-left-radius:4px}.fl-lightbox .ui-resizable-se{border-top:none;border-left:none;border-bottom-right-radius:4px}.fl-lightbox .ui-resizable-sw{border-top:none;border-right:none;border-bottom-left-radius:4px}.fl-builder-ui-keyboard-shortcuts{display:none;position:fixed;top:0;left:0;bottom:0;right:0;z-index:999999;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;background:rgba(50,50,50,.88);font-size:15px;line-height:1.3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder-ui-keyboard-shortcuts.is-showing{display:-ms-flexbox;display:flex}.fl-builder-ui-keyboard-shortcuts-content{box-sizing:border-box;width:500px;background:#f5f7f9;border-radius:4px;padding:30px 0 0;box-shadow:0 10px 30px rgba(0,0,0,.15)}.fl-builder-ui-keyboard-shortcut-item{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;padding:12px 40px}.fl-builder-ui-keyboard-shortcut-item:nth-child(even){background:#eef2f5}.fl-builder-ui-shortcut-keycode{margin-left:auto;text-transform:uppercase;letter-spacing:2px}.fl-builder-ui-keyboard-shortcust-footer{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;padding:10px}.dismiss-shortcut-ui{padding:10px;border-radius:4px;background:#fff;color:#000;font-size:14px;border:2px solid #fff}.dismiss-shortcut-ui:focus,.dismiss-shortcut-ui:hover{top:0;color:#000;background:#eef2f5;border:2px solid #eef2f5}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel,.fl-builder-ui-skin--dark .fl-builder--preview-actions,.fl-builder-ui-skin--dark .fl-builder--search-results-panel,.fl-builder-ui-skin--dark .fl-builder-panel,.fl-builder-ui-skin--dark .fl-lightbox,body.fl-builder-ui-skin--dark .fl-builder-bar .fl-builder-bar-content{background:#23282d;color:#b4b9be;border-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder--panel-header{color:#b4b9be;border-bottom-color:#1d1d1d;border-top-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder-panel.fl-builder-ui-pinned .fl-builder--panel-header{border-top-color:#1d2227}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel:before{border-bottom-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder--panel-arrow polygon{fill:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder-panel-search .fl-builder-panel-search-input{background:#24282e}.fl-builder-ui-skin--dark .fl-responsive-preview-content{background:#131619}.fl-builder-ui-skin--dark .fl-form-table th{background:#23282d!important;color:#7d8690}.fl-builder-ui-skin--dark .fl-builder--preview-actions .device-icons,.fl-builder-ui-skin--dark .fl-builder-button{background:#2c333a}.fl-builder-ui-skin--dark .fl-builder-button:focus{background:#131a22}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-button-primary{color:#fff!important;fill:#fff!important;background:#00A0D2}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-buy-button,.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-feedback-button,.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-upgrade-button{background-color:#F7A407;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-button-silent:focus{border:2px solid #00a0d2!important}.fl-builder-ui-skin--dark .fl-builder-content-panel--button:hover,.fl-builder-ui-skin--dark .fl-builder-content-panel-button{color:#00A0D2!important}.fl-builder-ui-skin--dark .fl-builder--menu>a:hover,.fl-builder-ui-skin--dark .fl-builder--menu>button:hover{background:#101215!important}.fl-builder-ui-skin--dark .fl-builder--menu>a:focus,.fl-builder-ui-skin--dark .fl-builder--menu>button:focus{background:#101215!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-bar-title{border-color:#101215}.fl-builder-ui-skin--dark .fl-builder-bar-title:hover{background-color:#181b1f}.fl-builder-simple.fl-builder-ui-skin--dark .fl-builder-bar-title:hover{background-color:transparent}.fl-builder-ui-skin--dark .fl-builder-layout-title{color:#c6cdd6}.fl-builder-ui-skin--dark .fl-builder-bar-title-caret i,.fl-builder-ui-skin--dark .fl-builder-layout-pretitle,.fl-builder-ui-skin--dark .fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{color:#7d8690}.fl-builder-ui-skin--dark button.fl-builder-button.fl-builder-bar-title-caret:focus{background-color:#101215!important}.fl-builder-ui-skin--dark .fl-builder--search:before{color:rgba(162,173,184,.73)}.fl-builder-ui-skin--dark .fl-builder--search input:focus::-webkit-input-placeholder{color:rgba(162,173,184,.73)!important}.fl-builder-ui-skin--dark .fl-builder--search .search-clear{color:rgba(162,173,184,.5);background-color:#e4e4e4;background:linear-gradient(to left,#383f46,#383f46 75%,rgba(56,63,70,0))}.fl-builder-ui-skin--dark .fl-builder--menu hr{background-color:#23282d!important;border:none}.fl-builder-ui-skin--dark .fl-builder--tabs{border-color:#383f46!important}.fl-builder-ui-skin--dark .fl-builder--tabs .is-showing,.fl-builder-ui-skin--dark .fl-builder-settings-tabs a.fl-active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-more.fl-contains-active{color:#fff!important;fill:#fff!important;background:#181b20!important}.fl-builder-ui-skin--dark .fl-builder--tabs :focus{background-color:#101215!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder--tabs .is-showing:focus{color:#00a0d2!important}.fl-builder-ui-skin--dark .fl-builder--menu-item:hover{background:#383f46;color:#a8b3bf}.fl-builder-ui-skin--dark .fl-builder--menu * .fl-builder--menu-item-accessory,.fl-builder-ui-skin--dark .fl-builder-blocks-section-group-name{color:#7d8690}.fl-builder-ui-skin--dark .fl-builder--selector-display{color:#c6cdd6;background:url(../img/svg/select-arrow-down-alt2-light.svg) center right 10px no-repeat #1a1b22!important}.fl-builder-ui-skin--dark .fl-builder--selector-display-label{color:#b5becb}.fl-builder-ui-skin--dark .fl-builder-panel-search-input input{border-color:#5b656f;color:#b8c2ce;background:#171b1f!important}.fl-builder-ui-skin--dark .fl-builder--selector-display-label:focus,.fl-builder-ui-skin--dark .fl-builder-panel-search-input input:focus{border-color:#00a0d2}.fl-builder-ui-skin--dark .fl-builder--group-label{color:#aaafb5!important;background:#24282e}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu{border-color:#101215!important;color:#7c858e;background-color:#101215}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu:before{border-bottom-color:#101215}.fl-builder-ui-skin--dark .fl-builder--menu>a,.fl-builder-ui-skin--dark .fl-builder--menu>button,.fl-builder-ui-skin--dark .fl-builder--menu>span{color:#a1adb9}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu .fl-builder--menu-item:hover{background:#23282d!important;color:#a1adb9}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu .fl-builder--menu-item:focus{background:#23282d!important;color:#00a0d2!important}.fl-builder-ui-skin--dark .fl-builder-panel-drag-handle{fill:#5b656f}.fl-builder-ui-skin--dark .fl-builder--template-collection-section-header,.fl-builder-ui-skin--dark .fl-builder-blocks-section .fl-builder-blocks-section-header,.fl-builder-ui-skin--dark .fl-builder-settings-section-header{background-color:#191b21;border-color:#191b21}.fl-builder-ui-skin--dark .fl-builder--template-collection-section-name,.fl-builder-ui-skin--dark .fl-builder--user-templates-section-name,.fl-builder-ui-skin--dark .fl-builder-blocks-section .fl-builder-blocks-section-title,.fl-builder-ui-skin--dark .fl-builder-settings-fields .fl-builder-settings-title{color:#7d8690!important;fill:#7d8690;background:#24282e}.fl-builder-ui-skin--dark .fl-builder-settings-fields .fl-builder-settings-title:focus{border-color:#7d8690}.fl-builder-ui-skin--dark .fl-builder-blocks-section-content .fl-builder-block,.fl-builder-ui-skin--dark .fl-user-template{color:#b8c2ce}.fl-builder-ui-skin--dark .fl-builder-block:hover .fl-builder-block-content,.fl-builder-ui-skin--dark .fl-user-template:hover{background:#171b1f;color:#fff}.fl-builder-ui-skin--dark .fl-builder-block:hover i,.fl-builder-ui-skin--dark .fl-user-template:hover i{color:#6d7782!important}.fl-builder-ui-skin--dark .fl-builder-block:hover a:hover i,.fl-builder-ui-skin--dark .fl-user-template:hover a:hover i{color:#9eacbb!important}.fl-builder-ui-skin--dark .fl-builder-block .fl-builder-block-icon{fill:#b5becb}.fl-builder-ui-skin--dark .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col,.fl-builder-ui-skin--dark .fl-builder-block:hover .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{background:#7d8690}.fl-builder-ui-skin--dark .fl-user-templates{border-color:#101215}.fl-builder-ui-skin--dark .fl-builder--template-thumbnail{border-color:#393f44}.fl-builder-ui-skin--dark .fl-builder--menu a.fl-template-collection{color:#a8b3bf}.fl-builder-ui-skin--dark .fl-lightbox .fl-lightbox-header h1{color:#fff!important}.fl-builder-ui-skin--dark .fl-form-table th label{color:#a8b3bf!important}.fl-builder-ui-skin--dark .fl-builder-settings-tabs{background-color:#2c333a!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields h3.fl-builder-settings-title{background:#24282e}.fl-builder-ui-skin--dark h3.fl-builder-settings-title .fl-builder-settings-title-text-wrap{color:#a8b3bf;background-color:#1b2025}.fl-builder-ui-skin--dark .fl-lightbox :not(i){color:#a7b1bb!important}.fl-builder-ui-skin--dark .fl-builder-button{color:#c6cdd6!important;fill:#c6cdd6!important}.fl-builder-ui-skin--dark .fl-builder-content-panel--button:hover,.fl-builder-ui-skin--dark .fl-builder-content-panel-button{fill:#00A0D2!important}.fl-builder-ui-skin--dark .fl-lightbox .fl-builder-button.fl-builder-button-primary{color:#fff!important}.fl-builder-ui-skin--dark .fl-color-picker-color.fl-color-picker-empty{background:#1a1b22}.fl-color-picker-color.fl-color-picker-empty .fl-color-picker-icon{fill:#6f7881}.fl-builder-ui-skin--dark .fl-color-picker-clear{background-color:#121a23}.fl-builder-ui-skin--dark .fl-color-picker-clear:hover{background-color:#373f46}.fl-builder-ui-skin--dark span.fl-builder-block-no-node-templates:hover{background:#1d2025}.fl-builder-ui-skin--dark .fl-builder-settings-tab-description{background:#1d2227}.fl-builder-ui-skin--dark .fl-builder-panel-search button svg .filled-shape{fill:#b5becb}.fl-builder-ui-skin--dark .fl-builder-custom-field,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=email],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=file],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=number],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=password],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=search],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=tel],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=text],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=url],.fl-builder-ui-skin--dark .fl-builder-settings-fields select,.fl-builder-ui-skin--dark .fl-builder-settings-fields textarea{background-color:#181b20!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=email]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=file]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=number]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=password]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=search]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=tel]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=text]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=url]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields select:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields textarea:focus{border-color:#00a0d2!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields select{background-image:url(../img/svg/select-arrow-down-alt2-light.svg)!important}.fl-builder-ui-skin--dark .fl-builder-custom-field select,.fl-builder-ui-skin--dark .fl-photo-field select{border-color:#7d8690!important}.fl-builder-ui-skin--dark .fl-field i.fl-field-responsive-toggle{color:#6b747d}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel-view-title,.fl-builder-ui-skin--dark .fl-field i.fl-field-responsive-toggle:hover{color:#a8b3bf}.fl-builder-ui-skin--dark .fl-builder--saving-indicator{color:#858f99}.fl-builder-ui-skin--dark .fl-icons-list i:hover{background-color:#16191d;color:#fff}.fl-builder-ui-skin--dark .fl-color-picker-clear .fl-color-picker-icon-remove:after,.fl-builder-ui-skin--dark .fl-color-picker-clear .fl-color-picker-icon-remove:before{background:#6f7881}.fl-builder-ui-skin--dark .fl-builder--user-templates-section-content{border-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select.fl-builder-button{background:0 0;border-right-color:#101215!important}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select.fl-builder-button:hover{background:#181b1f}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{color:#c6cdd6}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu{background:#131a22;border-color:#353c43 #131a22 #131a22}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu:before{border-bottom-color:#353c43}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:focus,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:hover{background:#383f46}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a.fl-active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:hover.fl-active{color:#fff!important;background:#383f46}.fl-builder-ui-skin--dark ul.as-selections{background-color:#121a23}.fl-builder-ui-skin--dark .fl-custom-query .fl-builder-settings-section{border-top:2px solid #1b2026!important}.fl-builder-ui-skin--dark div.fl-field-unit-select{background-color:#181b20!important}.fl-builder-ui-skin--dark .fl-dimension-field-units>*{border-right:1px solid #383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider,.fl-builder-ui-skin--dark .fl-field-popup-slider-input .ui-slider-handle{background:#383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider-arrow:after{border-bottom-color:#383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider-input{background-color:#121a23}.fl-builder-ui-skin--dark .fl-unit-field-input{border-right:1px solid #383f46!important}.fl-builder-ui-skin--dark .fl-button-group-field-option[data-selected="1"]{background-color:#383f46;color:#fff}.fl-builder-ui-skin--dark .fl-button-group-field-option[data-selected="1"] i{color:#fff!important}.fl-builder-ui-skin--dark .fl-button-group-field-options{background:#181b20}.fl-builder-ui-skin--dark .fl-compound-field-section-toggle{background-color:#181b20}.fl-builder-ui-skin--dark .fl-compound-field-section-toggle:hover{background-color:#383f46}.fl-builder-ui-skin--dark .fl-compound-field-section-visible .fl-compound-field-section-toggle{border-top-color:#121a23!important;background-color:transparent}.fl-builder-ui-skin--dark .fl-field-connections-toggle i{color:#7c8590}.fl-builder-ui-skin--dark .fl-lightbox .fl-field-connection-content{background-color:#191b20!important}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider{background-color:#181b20}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane:hover>.fl-nanoscroller-slider{background-color:#5a646f}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane.active>.fl-nanoscroller-slider{background-color:#00A0D2}.fl-builder-ui-skin--dark .fl-lightbox div.mce-panel{background:#383f46}.fl-builder-ui-skin--dark .fl-lightbox .mce-toolbar .mce-ico{color:#a7b1bb}.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary{background:#383f46;border:none;box-shadow:none}.fl-builder-ui-skin--dark .fl-lightbox .fl-builder-settings .wp-switch-editor{background:#23282d}.fl-builder-ui-skin--dark .fl-lightbox .html-active .switch-html,.fl-builder-ui-skin--dark .fl-lightbox .quicktags-toolbar,.fl-builder-ui-skin--dark .fl-lightbox .tmce-active .switch-tmce{background:#383f46}.fl-builder-ui-skin--dark .fl-lightbox textarea.wp-editor-area{background:0 0!important}.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary:focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary:hover,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button.focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button.hover,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button:focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button:hover{background:#191b20}
1
+ .fl-color-picker-ui{width:300px}.fl-color-picker-ui.fl-color-alpha-enabled{width:334px}.fl-color-picker-ui .iris-picker{float:left;width:100%;height:224px;display:block;position:relative;border-top:1px solid rgba(0,0,0,.1)}.fl-color-picker-ui .iris-picker .iris-square-inner,.fl-color-picker-ui .iris-picker-inner{position:absolute;left:0;top:0;bottom:0;right:0}.fl-color-picker-ui .iris-picker,.iris-picker *{box-sizing:content-box}.fl-color-picker-ui .iris-error{background-color:#ffafaf}.fl-color-picker-ui .iris-picker .iris-square{width:300px;height:200px}.fl-color-picker-ui .iris-picker .iris-palette,.fl-color-picker-ui .iris-picker .iris-slider,.fl-color-picker-ui .iris-picker .iris-square-inner{height:100%;width:12.5%}.fl-color-picker-ui .iris-picker .iris-placeholder,.fl-color-picker-ui .iris-picker .iris-square{position:relative}.fl-color-picker-ui .iris-picker .iris-square-inner{width:auto;margin:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square,.fl-color-picker-ui .iris-ie-9 .iris-square-inner{box-shadow:none;border-radius:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square{outline:rgba(0,0,0,.1) solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-palette,.fl-color-picker-ui .iris-ie-lt9 .iris-slider,.fl-color-picker-ui .iris-ie-lt9 .iris-square,.fl-color-picker-ui .iris-ie-lt9 .iris-square-inner{outline:#999 solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-square .ui-slider-handle{outline:#999 solid 1px;background-color:#fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"}.fl-color-picker-ui .iris-ie-lt9 .iris-square .iris-square-handle{background:0 0;border:3px solid #fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"}.fl-color-picker-ui .iris-picker .iris-strip{box-sizing:border-box;width:calc(300px - 12px);margin:5px 6px 6px;border-radius:4px;position:relative;height:22px;transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle{width:6px;position:absolute;right:0;top:-2px;bottom:-2px;margin:0;border-radius:3px;background:#fff;box-shadow:0 0 2px rgba(0,0,0,.5);z-index:5;cursor:ew-resize}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle:focus{outline:#00a0d2 solid 2px}.fl-color-picker-ui .iris-picker .iris-slider-offset{position:absolute;top:0;left:6px;right:0;bottom:0;width:auto;height:auto;background:0 0;border:none;border-radius:0;transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-square-handle{background:0 0;border:5px solid #999;border-radius:50%;border-color:rgba(128,128,128,.5);box-shadow:none;width:12px;height:12px;position:absolute;left:-10px;top:-10px;cursor:move;opacity:1;z-index:10}.fl-color-picker-ui .iris-picker .ui-state-focus .iris-square-handle{opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover{border-color:#999}.fl-color-picker-ui .iris-picker .iris-square-value:focus .iris-square-handle{box-shadow:0 0 2px rgba(0,0,0,.75);opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover::after{border-color:#fff}.fl-color-picker-ui .iris-picker .iris-square-handle::after{position:absolute;bottom:-4px;right:-4px;left:-4px;top:-4px;border:3px solid #f9f9f9;border-color:rgba(255,255,255,.8);border-radius:50%;content:" "}.fl-color-picker-ui .iris-picker .iris-square-value{width:0;height:0;position:absolute}.iris-ie-lt9 .iris-square-value,.iris-mozilla .iris-square-value{width:1px;height:1px}.fl-color-picker-wrapper{position:relative;width:48px;height:32px}.fl-color-picker{box-shadow:0 2px 4px 0 rgba(0,0,0,.12);background:url(../img/transp_bg.png) #fff;border-radius:4px;width:120px;height:36px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-color-picker-color{-ms-flex:1 1 100%;flex:1 1 100%;box-sizing:border-box!important;position:relative;border-radius:4px;background-color:transparent;cursor:pointer;border:2px solid transparent;padding:0;-ms-flex-pack:center;justify-content:center;display:-ms-flexbox;display:flex}.fl-color-picker-clear:hover,.fl-color-picker-color:hover{background:0 0;border:2px solid transparent}.fl-color-picker-clear:focus,.fl-color-picker-color.fl-color-picker-empty:focus,.fl-color-picker-color:focus{outline:0;top:0;border:2px solid #00a0d2;background:0 0}.fl-color-picker.fl-color-picker-has-reset .fl-color-picker-color:not(.fl-color-picker-empty){border-top-right-radius:0;border-bottom-right-radius:0}.fl-color-picker-icon{display:none;margin:auto}.fl-color-picker-color.fl-color-picker-empty{border-color:transparent}.fl-color-picker-color.fl-color-picker-empty svg.fl-color-picker-icon{display:block}.fl-color-picker-color.fl-color-picker-empty svg.fl-color-picker-icon path{fill:inherit}.fl-color-picker-clear{box-sizing:border-box;position:relative;display:-ms-flexbox;display:flex;-ms-flex:0 0 36px;flex:0 0 36px;-ms-flex-pack:center;justify-content:center;padding:0;border:2px solid transparent;fill:#A2AABE;background-color:#E7EBEF;cursor:pointer;border-radius:0 4px 4px 0}.fl-color-picker-clear:hover{fill:#6B6E75;background-color:#E7EBEF}.fl-color-picker-color.fl-color-picker-empty+.fl-color-picker-clear{display:none}.fl-color-picker-ui{display:inline-block;font-family:Helvetica,Verdana,sans-serif;z-index:1;position:fixed;overflow:hidden;padding-bottom:45px;border:1px solid rgba(0,0,0,.1);color:#999;background-color:#FAFAFA;border-radius:3px;box-shadow:0 9px 20px rgba(0,0,0,.17);transition:opacity .2s,visibility .2s;visibility:hidden;opacity:0;-webkit-transform:translate3d(0,0,0)}.fl-color-picker-ui.fl-color-picker-active{visibility:visible;opacity:1;z-index:999999}.fl-color-picker-ui .fl-color-picker-input,.fl-color-picker-ui .fl-color-picker-input:focus{width:100%;height:30px;border:none!important;font-size:14px!important;padding:0 8px;vertical-align:middle;color:#656c6e;background-color:#fff;border-radius:0;box-shadow:none}.fl-color-picker-ui .iris-square-value{transition:none}.fl-color-picker-preset-add{position:absolute;top:8px;right:8px;width:14px;height:14px;background-color:#656c6e;border-radius:50%;cursor:pointer;transition:all .2s}.fl-color-picker-preset-add:hover{background-color:#333}.fl-color-picker-preset-add:after,.fl-color-picker-preset-add:before{content:'';display:block;position:relative;background-color:#fff}.fl-color-picker-preset-add:before{top:6px;left:3px;width:8px;height:2px}.fl-color-picker-preset-add:after{left:6px;top:1px;width:2px;height:8px}.fl-color-picker-presets{position:absolute;left:0;bottom:0;width:100%;z-index:15;overflow:auto;border-top:1px solid rgba(0,0,0,.1);background-color:#FAFAFA}.fl-color-picker-presets-list .fl-color-picker-preset:hover,.fl-color-picker-presets-toggle:hover{background-color:#EDEDED}.fl-color-picker-presets-toggle{position:relative;overflow:hidden;width:100%;height:35px;text-align:center;line-height:35px;font-size:12px;font-weight:700;cursor:pointer;transition:all .1s}.fl-color-picker-presets-close-label,.fl-color-picker-presets-open-label{position:absolute;top:50%;left:50%;visibility:hidden;color:#999;transition:all .5s;transform:translate(-50%,-50%);opacity:0;width:100%}.fl-color-picker-presets-close-label.fl-color-picker-active,.fl-color-picker-presets-open-label.fl-color-picker-active{color:#656c6e;visibility:visible;opacity:1;z-index:999999}.fl-color-picker-presets-list{width:100%;list-style:none;margin:0;padding:0;overflow:auto}.fl-color-picker-presets-list .fl-color-picker-no-preset,.fl-color-picker-presets-list .fl-color-picker-preset{position:relative;padding:5px;font-size:12px;border-top:1px solid rgba(0,0,0,.1);transition:all .1s}.fl-color-picker-presets-list .fl-color-picker-no-preset{padding:18px 5px;text-align:center}.fl-color-picker-presets-list .fl-color-picker-preset-color{display:inline-block;width:40px;height:20px;margin-right:3px;vertical-align:middle;border:1px solid rgba(0,0,0,.1);border-radius:2px;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-label{vertical-align:middle;color:#333;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-remove{position:absolute;top:50%;cursor:pointer;transform:translateY(-50%)}.fl-color-picker-clear .fl-color-picker-icon-remove{right:auto;top:auto;margin:auto}.fl-color-picker-presets-list .fl-color-picker-preset-remove{right:5px}.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:after,.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:before{background-color:#333}.fl-color-picker-added{position:absolute;width:100%;top:0;left:0;right:0;bottom:35px;z-index:10;color:#fff;text-align:center;background-color:rgba(0,0,0,.8)}.fl-color-picker-added-text{position:absolute;top:50%;left:50%;width:80%;font-size:14px;color:#fff!important;transform:translate(-50%,-50%)}.fl-color-picker-icon-check{position:relative;width:50px;height:50px;margin:5px auto}.fl-color-picker-icon-check:before{content:'';display:block;position:relative;width:15px;height:30px;margin-left:14px;border:7px solid #fff;border-left:none;border-top:none;transform:rotate(45deg)}.fl-color-picker-icon-arrow-down,.fl-color-picker-icon-arrow-up{display:inline-block;position:relative;width:10px;height:10px;margin-left:5px}.fl-color-picker-icon-arrow-down:before,.fl-color-picker-icon-arrow-up:before{content:'';display:block;position:relative;width:6px;height:6px;border:2px solid #999;border-left:none;border-top:none;transform:rotate(45deg)}.fl-color-picker-icon-arrow-up{top:2px;transform:rotate(180deg)}.fl-color-picker-icon-remove{width:15px;height:15px}.fl-color-picker-icon-remove:after,.fl-color-picker-icon-remove:before{content:'';display:block;position:relative;background-color:#6f7881}.fl-color-picker-icon-remove:before{left:6px;width:2px;height:10px;margin-top:3px;transform:rotate(-45deg)}.fl-color-picker-icon-remove:after{left:6px;width:2px;height:10px;margin-top:-10px;transform:rotate(45deg)}.fl-alpha-wrap{position:absolute;width:32px;height:215px;padding:0 5px;right:4px;border-top:none}.fl-alpha-slider{height:190px;position:absolute;top:12px;width:28px}.fl-alpha-slider .ui-slider-handle{background:rgba(0,0,0,0);border-color:#aaa;border-radius:4px;border-style:solid;border-width:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);cursor:ns-resize;height:12px;left:0;opacity:.9;position:absolute;right:0;width:30px;z-index:14}.fl-alpha-slider .ui-slider-handle:before{content:" ";position:absolute;left:-2px;right:-2px;top:-3px;bottom:-3px;border:2px solid #fff;border-radius:3px}.fl-theme-builder-preview-select-title i:before,body .fl-theme-builder-preview-select .fa-caret-down i:before,body .fl-theme-builder-preview-select-item-title i:before{content:"\f078"}.fl-alpha-slider-offset{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAASCAYAAAAe/ZHXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkNEQUQ0ODM4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkNEQUQ0ODQ4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2Q0RBRDQ4MThFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2Q0RBRDQ4MjhFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/r/N8AAAWYSURBVHjarFvvR3VBEN45JZGIPkREHyIiIhJJf3qUSERE9CGiDxERkcg9z9u92uucvTszz5z7xnHPj93Z2d359cxscn5+jpTS+EoiMr3/+51cZ2dn4+e29i2/u7y8RKf/pO3vc+o+n5ycoNK31+f6+jrfZ37yuG2mf3R01H3fa5N/b29vU6dP5qft0G4PDg5MGuPr/v4+jz1t27mfvN/b21P75+fHx8eZfiV/Ozs7rUJnSu/5+RlFv+m6ZJpbW1s1PnrvXl9fZ/qX89zY2LB4mfy+v7/nsdV1XltbK/dr5vnz87OcV5bJabuVlRVLBifjfX9/l/xkGtM+S0tLNXnu0szfU/P3IMn/k0678h6ddqjQFGccVL6hoCsVfsq+NZ5QtCv5rfFS41sq37W+UPhMyhxEWTetvce3NR8oewqD39qalXuGAK/WPltjajIC4x2c9Ye1f43SGcqGwRBeTZjhMNntL4pCWZMQYhE05RVl02EovRgC4RkCbUNSQAGhGB/GsKG4h6FQoigDa2i8fRBy3uLMXYIG3Vr3aZvRaCRdBYlYIMZywhBGCVhgzzOlgRuUSOvC0GMEWxOM/+EtQFh1OIIXtfwg1tRaayGjg5px0jyZKEaTle3e+AsLCygVRAh3FlEgKbReE3oYGj9EgIR00QiEgKw3ZBQbRGjBeAMtDETQmHiKDsezJNLgCTFGItZXlAgCSiQggblP+9c8SDI0lXWlFv5g3K63KZ51FOcZzthQ3LomoNHwJmKIQISI3vqzSpwIQ8liSjGMFQjDpoVgaQ6cWgvLhOC7qiAwiHrWbEg4JMSmeUrBuHoYwioOQNXmhmAcrs096s1gJCGi3hSEVU8DQxYElYHhKwUUGAa+NqOBMsSSAQJuhQhCAH4vxozExsxiihPuaIrjCVYKWlYEsjSM52G8Kxxryngl5j0j+EyGTIiED4s1Itm0ZGWxMFCLJaBAcEI6OBkmFgNBoc8Cait2ZnENE/6wQN8LJSJeSMNAjKVm+LUMAIt3PR5AQgIGp1Z5zxhE8PtXUYReYeXi4mKmOPNXBMzt2tPT07LIUtJqr66uusXEbkFnWiQ6Pj72ikrtzc1NKopuvbbj58PDwxqNHp27u7tuYWumUDV+v7+/Xyu6pc59+/DwUCsC9ujt7u6qRbt8//T01C3elbyN70fb29uZ/1FSincvLy/lPGb42tzc9IqJeHt7q61Pr2C6vr7u7tfHx8fMPhV0sLq6WhZtU0n36+uru8elPE7aLi8v1wqJPXn++fmZKYgX8ozFxcXJb0NaQTHClZT8+gBjsYdaFc+zWcUkGTCWENY66ta92oSVzo3WI6IZKGtukeyfBLFKBNAj6bUOBgaoe9wE4n04IBNkLMoC7+Skj630ZlTJMYdyMsU2T8AwpzALkVFilZgJcT2l9PCWDDSAMBSjVlJgZNk0lE1AIby0qCiCnBQNj6aBGQslZIZJ5hB6D/AzQHto5Z9Nk8tARdN4q2ExBnsyIJ311EymShyjan2rKk0zh1Ay1oQVWAZQRnkUA8RFw7TahjBnmNgMVMQrsCGZJezRtGlU0cUZ1zuaxGZPpbhApM+ZpFQqQ6xadoMtBrEKpBVo4GRXvNSxpaRixKiR+TChCYhsDwZkfFj8IkErjAHejcUI0XQrgwehhNSMHAz21E0wZ23FcCAmj8Sd/PXy2xLYLAuwRw4IMsqjFaWYOpMEhDySAPFCWyFkgAHrEcA+BNeJ4UE8HCzJPpCrerUmQIx1pWJkjqxJD8EikUo2c5aI8ZYgsAkM4WQtnHd0ns0ORgVTBghy5ISy928SGsbTMqYg523RUY8oNYG4FIYiyRyZCnFCJC87IoRAIMVOqQ7BKexxCS2hYVl9JhvlpYjnAe4MhmRPMWhhvLfXINaI9WKM0Zu0+SfAAFLE1EgfVSv7AAAAAElFTkSuQmCC) center;box-shadow:0 0 5px rgba(0,0,0,.4) inset;-moz-box-shadow:0 0 5px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4) inset;width:200px;height:22px;transform:rotate(-90deg);bottom:48%;left:-80px;position:absolute}.fl-alpha-text{width:30px;font-size:12px;text-align:center;color:#999;position:absolute;bottom:-5px}.fl-lightbox-mask,.fl-lightbox-wrap{bottom:0;left:0;position:fixed;right:0;z-index:100010}@keyframes fl-lightbox-zoom{from{transform:scale(.4)}to{transform:scale(1)}}.fl-lightbox-wrap{display:none;overflow:auto;padding:0;top:43px;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);pointer-events:none}.fl-builder-draggable-is-dragging .fl-lightbox-wrap,.fl-builder-resizable-is-resizing .fl-lightbox-wrap,.fl-lightbox,.fl-lightbox-mask{pointer-events:auto}.fl-lightbox-mask{background:#000;opacity:.7;filter:alpha(opacity=70);top:0}.fl-lightbox{background:#F5F7F9;border-radius:4px;box-shadow:rgba(0,0,0,1) 0 4px 30px;-moz-box-shadow:rgba(0,0,0,1) 0 4px 30px;-webkit-box-shadow:rgba(0,0,0,1) 0 4px 30px;position:relative;display:-ms-flexbox;display:flex;z-index:100011;transform-origin:center;animation-name:fl-lightbox-zoom;animation-duration:.25s}.fl-lightbox.fl-lightbox-prevent-animation{animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s}.fl-lightbox :not(i){color:#333;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:12px;line-height:14px;text-decoration:none;text-transform:none}.fl-lightbox *,.fl-lightbox :after,.fl-lightbox :before{box-sizing:content-box}#fl-ui-root .fl-nanoscroller-pane,.fl-builder--content-library-panel .fl-nanoscroller-pane,.fl-lightbox .fl-nanoscroller-pane{bottom:2px;right:2px;width:6px}.fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider{background-color:#bac0ca;transition-property:height,background-color;transition-duration:.25s}#wpadminbar,html{transition-duration:.35s}.fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider:hover{background-color:#c8cdd4}.fl-nanoscroller>.fl-nanoscroller-pane.active>.fl-nanoscroller-slider{background-color:#029fd2}.fl-lightbox .dashicons{font-family:dashicons}.fl-lightbox.ui-draggable{box-shadow:rgba(0,0,0,.2) 0 7px 30px;-moz-box-shadow:rgba(0,0,0,.2) 0 7px 30px;-webkit-box-shadow:rgba(0,0,0,.2) 0 7px 30px}#wpadminbar,.fl-builder-bar.is-hidden{pointer-events:none}.fl-lightbox-resizable{height:500px;width:380px}@media (max-width:500px){.fl-lightbox-resizable{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox-resizable .ui-resizable-handle{display:none!important}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:default!important}.fl-lightbox-controls{display:none}}.fl-lightbox-width-full{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox-width-full .fl-lightbox-header{cursor:inherit!important}.fl-lightbox-controls{position:absolute;right:10px;top:10px;z-index:5}.fl-lightbox-controls .fa{color:#bdbdbd;font-size:14px;padding:5px}.fl-lightbox-controls .fa:hover{color:#aaa;cursor:pointer}.fl-lightbox-header-wrap{border-top-left-radius:4px;border-top-right-radius:4px}.fl-lightbox-header{position:relative}.fl-lightbox-header h1{color:#333!important;font-size:16px!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;font-weight:400!important;margin:0!important;padding:14px 34px 15px 28px!important;text-align:left!important;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;line-height:1}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:move}.fl-lightbox-header h1 .fl-builder-badge{margin-left:10px;color:#fff;background-color:#F7A408}.fl-lightbox-content,.fl-lightbox-content-wrap{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1 100%;flex:1 100%;max-width:100%}.fl-lightbox-footer{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end;-ms-flex:0 0;flex:0 0;-ms-flex-preferred-size:44px;flex-basis:44px;padding:4px;text-align:right}.fl-lightbox-footer .fl-builder-button{height:36px;margin-left:5px!important;-ms-flex:0 0 0%;flex:0 0 0%;-ms-flex-pack:center;justify-content:center}.fl-lightbox-width-slim .fl-lightbox-footer{-ms-flex-pack:stretch;justify-content:stretch;padding:4px 5px}.fl-lightbox-width-slim .fl-lightbox-footer .fl-builder-button{-ms-flex:1 1 100%;flex:1 1 100%;display:block;text-align:center}.fl-lightbox-width-slim .fl-lightbox-footer .fl-builder-button:first-child{margin-left:0!important}.fl-lightbox table,.fl-lightbox td,.fl-lightbox th,.fl-lightbox tr{border:none}.fl-lightbox-wrap.fl-icon-selector{z-index:1000111}.fl-icon-selector .fl-lightbox{height:100%}.fl-icons-filter{height:auto!important;margin:0!important;position:absolute!important;right:0;top:0;padding:10px 16px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-icons-filter select{vertical-align:middle;width:195px;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;color:#000;border:2px solid #e4e7ea!important;border-right:none!important;margin:0;padding:2px 10px;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;-ms-flex:1 1 195px;flex:1 1 195px;border-radius:0}.fl-icons-filter input[type=text]{line-height:18px;vertical-align:middle;width:160px;-ms-flex:1 1 160px;flex:1 1 160px;border:2px solid #e4e7ea!important;border-radius:0!important;padding:2px 10px!important}.fl-icons-filter input[type=text]:focus,.fl-icons-filter select:focus{border:2px solid #00A0D2!important}.fl-icons-list{bottom:52px;left:0;overflow:auto;padding:20px;position:absolute;right:0;top:48px}.fl-icons-list::-webkit-scrollbar{background-color:#ccc;-webkit-appearance:none;width:10px}.fl-icons-list::-webkit-scrollbar-thumb{background-color:#666;border:1px solid #ccc}.fl-icons-section{text-align:center}.fl-icons-section h2{border-bottom:1px solid #dfdfdf;color:#333!important;font-family:Helvetica,Verdana,sans-serif!important;font-size:16px!important;font-weight:700!important;margin:0 0 20px!important;padding:0 0 10px!important;text-align:left}.fl-icons-list i,.fl-icons-list i:before{cursor:pointer;display:inline-block;font-size:40px;height:100px;line-height:100px;width:100px;background:0 0}.fl-icons-list i:hover{background:#fff;box-shadow:0 10px 20px rgba(0,0,0,.15);border-radius:4px}.fl-icon-selector-footer{bottom:0;left:0;position:absolute;right:0}html{transition-property:margin}html.fl-builder-is-showing-toolbar{margin-top:calc(44px + 1px)!important}.fl-builder-edit body{position:static!important}.fl-builder-edit:after,.fl-builder-edit:before{z-index:0!important}.fl-builder-edit .fl-builder-content{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none}#wpadminbar{transition-property:transform,opacity;transform-origin:bottom;transform-style:preserve-3d;transform:rotateX(89deg) translateY(46px);opacity:0;will-change:transform}html.fl-builder-show-admin-bar{margin-top:32px}html.fl-builder-show-admin-bar #wpadminbar{transform:rotateX(0) translateY(0);pointer-events:auto;opacity:1}@media screen and (max-width:782px){html.fl-builder-show-admin-bar{margin-top:46px}}.fl-clear{clear:both}.screen-reader-text{position:absolute;left:-1000em;top:-1000em;height:1px;width:1px;overflow:hidden}.fl-builder-loading{background:url(../img/ajax-loader.svg) center center no-repeat rgba(240,240,240,.8);bottom:0;display:none;left:0;position:fixed;right:0;text-align:center;top:0;z-index:12000000}.fl-builder-settings .fl-builder-loading{background:url(../img/ajax-loader.svg) center center no-repeat rgba(255,255,255,.8);display:block;position:absolute}.fl-field-loader{color:#B3B3B3!important;font-style:italic}.fl-builder-node-loading{opacity:.35!important}.fl-builder-node-loading-placeholder{background:url(../img/ajax-loader.svg) center center no-repeat;height:50px}.fl-col-group-has-child-loading{display:-ms-flexbox;display:flex}.fl-col-group-has-child-loading>.fl-builder-node-loading-placeholder{width:50px}.fl-node-hidden{display:none}.fl-builder-edit .fl-node-hidden{display:block}html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-desktop,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-desktop-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-medium-mobile,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-mobile{display:block!important}html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-desktop,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-desktop-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-medium-mobile,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-mobile{display:-ms-flexbox!important;display:flex!important}.fl-responsive-preview-enabled body{overflow:hidden!important}.fl-responsive-preview-mask{background:#F7F7F7;bottom:0;left:0;position:fixed;right:0;top:0;z-index:99999}.fl-responsive-preview{bottom:0;left:0;position:fixed;right:0;top:0;margin-top:50px;z-index:100000}.fl-builder-preview .fl-responsive-preview{margin:0!important}.fl-responsive-preview-content{background:#F5F7F9;padding:20px 20px 45px;overflow:scroll;position:absolute;top:45px;right:0;bottom:0;left:0}.fl-responsive-preview-content .fl-builder-content-editing{overflow:visible!important}.fl-responsive-preview-message{background:#F5F7F9;color:#b3b3b3;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;font-size:14px;font-weight:400;padding:15px;text-align:center;position:absolute;top:0;left:0;right:0;z-index:999999}.fl-responsive-preview-message span{display:inline-block;margin-right:8px}.fl-responsive-preview-message .fl-builder-button{display:inline-block;margin-left:2px;padding:0 10px}.fl-responsive-preview-message .fl-builder-button i{font-size:14px;height:14px;width:14px}.fl-responsive-preview .fl-builder-content{box-shadow:0 0 8px rgba(0,0,0,.2);margin-left:auto;margin-right:auto;max-width:100%;overflow:visible;position:relative}#fl-builder-preview-frame,#fl-builder-preview-mask{bottom:0;height:100%;position:fixed;top:0;width:100%;right:0}.fl-responsive-preview .fl-block-col-resize{display:none}.fl-builder-button,body .fl-builder-bar .fl-builder-bar-content{display:-ms-flexbox;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important}#fl-builder-preview-mask{background:url(../img/ajax-loader.svg) center center no-repeat #F7F7F7;left:0;z-index:999999}#fl-builder-preview-frame{left:50%;transform:translateX(-50%);-moz-transform:translateX(-50%);-webkit-transform:translateX(-50%);z-index:1000000}body button[class*=fl-builder],body button[class*=fl-builder]:focus,body button[class*=fl-builder]:hover{box-shadow:none;max-height:none;max-width:none;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none}.fl-builder-button{-webkit-appearance:none;-ms-flex-align:center;align-items:center;background:#e7ebef;border:2px solid transparent;border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;color:#676F7A!important;cursor:pointer;display:flex;fill:#676F7A!important;font-size:14px!important;font-style:normal!important;font-weight:500!important;height:33px;letter-spacing:normal!important;line-height:1!important;margin:0;padding:0 12px;text-align:center;transition-property:background-color,width;transition-duration:.2s;white-space:nowrap;width:auto;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder--search-results-panel,.fl-builder-bar,.fl-builder-panel{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-touch-callout:none}.fl-builder-button:hover{background:#dadfe5;color:#222;border:2px solid transparent!important}.fl-builder-button:active{background:#DCDCDC}button.fl-builder-button:focus{position:static;top:auto;outline:0;background:#E4E7EA;border:2px solid #00A0D0!important}.fl-builder-bar .fl-builder-button{height:auto}.fl-builder-button-primary,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button{background:#00A0D2;color:#fff!important;text-decoration:none;border:2px solid transparent!important}.fl-builder-button.fl-builder-button-primary:focus,body.fl-builder--layout-has-drafted-changes .fl-builder-button.fl-builder-done-button:focus{background:#00A0D2;border:2px solid #ffc217!important}.fl-builder-button-primary:hover,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button:hover{background:#0197C6;color:#fff!important}.fl-builder-button-primary:active,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button:active{background:#0484AC}.fl-builder-button-large{height:30px}.fl-builder-button-small{font-size:11px!important;line-height:1!important}.fl-builder-help-button{color:#b3b3b3;font-size:16px!important}.fl-builder-help-button i{position:relative;top:-1px}.fl-builder-help-button:hover{color:#666}.fl-builder-publish-button{line-height:45px!important}.fl-builder-content-panel-button,.fl-builder-content-panel-button:hover{fill:#00A0D2!important;font-size:30px!important;padding-bottom:4px}.fl-builder-button-silent,.fl-builder-button-silent:hover{padding:0 12px;background:0 0!important;border:2px solid transparent!important;box-shadow:none!important}.fl-builder-done-button,.fl-builder-done-button:hover{font-weight:600}.fl-field .fl-builder-button{display:inline-block;height:auto;padding:11px 12px;vertical-align:middle;box-shadow:0 2px 4px 0 rgba(0,0,0,.12)}.fl-builder-badge{background:#333;border-radius:2px;color:#fff!important;display:inline;font-size:11px!important;font-weight:400;letter-spacing:1px;margin-left:2px;padding:2px 4px;vertical-align:middle}.fl-builder-badge-global{background:#ff9600;transform:translateY(0);transition-duration:.25s;transition-property:transform}.fl-builder-blocks-node-template .fl-builder-badge-global{position:absolute;right:0;top:0}.fl-builder-block:hover .fl-builder-badge-global{display:none}.fl-builder-bar{left:0;position:fixed;right:0;top:0;z-index:999999;user-select:none;transition-property:transform opacity;transition-duration:.35s;transform-style:preserve-3d;perspective:1100px}.fl-builder-bar.is-hidden .fl-builder-bar-content{transform:translateY(-100%) rotateX(90deg)}body .fl-builder-bar .fl-builder-bar-content{display:flex;box-sizing:border-box;background:#fff;border-bottom:1px solid #eceef1;color:#999;font-size:14px!important;height:calc(44px + 1px);transition-property:background-color,opacity,transform;transition-duration:.35s;pointer-events:auto}.fl-builder-draggable-is-dragging .fl-builder-content,.fl-builder-draggable-is-dragging .fl-builder-panel .fl-lightbox,.fl-builder-resizable-is-resizing .fl-builder-content,.fl-builder-resizable-is-resizing .fl-builder-panel .fl-lightbox,body .fl-builder-bar .fl-builder-bar-content.is-muted{pointer-events:none}body .fl-builder-bar .fl-builder-bar-content.is-muted>:not(.fl-builder-publish-actions){-webkit-filter:saturate(20%) blur(1px);filter:saturate(20%) blur(1px);opacity:.4}.fl-builder-bar-title{box-sizing:border-box;color:#333;display:-ms-flexbox;display:flex;-ms-flex:0 0 380px;flex:0 0 380px;max-width:380px;border-right:1px solid #eceef1;cursor:pointer}.fl-builder-bar-title:hover{background:#fff}.fl-builder-bar-title.is-showing-menu .fl-builder-bar-title-caret>svg{transform:rotate(180deg)}.fl-builder-simple .fl-builder-bar-title{cursor:auto}.fl-builder-simple .fl-builder-bar-title:hover{cursor:auto;background:0 0}.fl-builder-bar-title span{vertical-align:middle}.fl-builder-bar-title-icon{box-sizing:border-box;background:0 0;-ms-flex:0 0 46px;flex:0 0 46px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:4px}.fl-builder-bar-title-icon img{max-width:100%!important;height:auto!important}.fl-builder-bar-title.fl-builder-bar-title-no-icon{padding-left:12px}.fl-builder-bar-title-area{box-sizing:border-box;-ms-flex:1 1 100%;flex:1 1 100%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden;padding:4px}.fl-builder-layout-title,.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{font-size:16px;font-weight:400;line-height:1.3;color:#161B20;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fl-builder-bar-title-caret,.fl-builder-layout-pretitle,.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{font-size:12px;font-weight:500;line-height:1.3;color:#656d77;text-align:left;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fl-builder-bar-title-caret i,.fl-theme-builder-preview-select-title i{color:inherit!important;font-size:14px}.fl-builder-bar-title-caret{margin-left:auto!important;-ms-flex:0 0 46px;flex:0 0 46px}.fl-theme-builder-preview-select-title i{padding:12px}.fl-theme-builder-preview-select.fl-builder-button{position:relative;border-radius:0;background:0 0;min-width:0;display:-ms-flexbox;display:flex;-ms-flex:0 0 360px;flex:0 0 360px;max-width:360px;margin:0!important;padding:4px 10px;border:none!important;border-right:2px solid #d5dadd!important;box-shadow:none}.fl-theme-builder-preview-select.fl-builder-button:hover{border:none!important;border-right:2px solid #d5dadd!important}.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-pack:end;justify-content:flex-end;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.fl-theme-builder-preview-select-title div{-ms-flex:1;flex:1}.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{display:block}.fl-theme-builder-preview-select-open .fl-theme-builder-preview-select-items{position:absolute;top:calc(48px + 10px);left:10px;width:calc(100% - 20px)!important;background:#fff;border-radius:4px;border:2px solid #D5DADD;border-top:3px solid #00a0d2;box-shadow:0 15px 45px 8px rgba(0,0,0,.04);margin:0!important;padding:0;z-index:-1;font-size:16px;overflow-y:scroll;height:auto!important;max-height:calc(100vh - 66px);min-height:300px;display:-ms-flexbox!important;display:flex!important;-ms-flex-direction:column;flex-direction:column}.fl-theme-builder-preview-select-item{padding:4px 0!important;border-bottom:none!important;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;text-align:initial}.fl-theme-builder-preview-select-item:hover{text-decoration:none;color:#111;background:0 0!important}body .fl-theme-builder-preview-select .fa-caret-down{float:none}body .fl-theme-builder-preview-select-item-title{padding:10px 15px;color:#222;font-size:14px}body .fl-theme-builder-preview-select-item-children{overflow:auto}body .fl-theme-builder-preview-select-item-child{overflow:hidden;text-overflow:ellipsis;line-height:1.1;margin:0 10px;border:2px solid transparent;border-radius:4px;padding:8px 10px 10px;font-size:14px;font-weight:400;color:#222}body .fl-theme-builder-preview-select-item-child:hover{background:#e6eaed!important}.fl-theme-builder-preview-select-item .fa-caret-down{color:#606D77}.fl-builder-bar-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex:1 1 100%;flex:1 1 100%;padding:4px}.fl-builder-bar .fl-builder-button{margin:0 0 0 4px}.fl-builder-bar-actions .fl-builder-button:last-child{margin:0}.fl-builder-bar-actions:after{clear:both}.fl-builder-bar .fl-builder-content-panel-button{-ms-flex-align:baseline!important;align-items:baseline!important;padding-top:1px;font-weight:400}.fl-builder-content-panel-button svg{transition-property:transform;transition-duration:.25s;transform:rotate(0) scale(1);transform-origin:center}.fl-builder-content-panel-is-showing .fl-builder-content-panel-button svg{transform:rotate(135deg) scale(1.1) translate(.5px,-.5px)}.fl-builder--saving-indicator{cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-item-align:center;align-self:center;padding:0 10px;font-size:12px;font-style:italic;color:#676f7a;-ms-flex-align:center;align-items:center;line-height:1.2;min-width:180px;-ms-flex-pack:end;justify-content:flex-end}.fl-builder--saving-indicator:hover{color:#676f7a}.fl-builder--saving-indicator .fa-question-circle{font-size:13px;margin:3px 0 3px 5px}.fl-builder-buy-button,.fl-builder-feedback-button,.fl-builder-upgrade-button{background:#F7A407;color:#fff!important;text-decoration:none}.fl-builder-buy-button i.fa-external-link-alt,.fl-builder-feedback-button i.fa-external-link-alt,.fl-builder-upgrade-button i.fa-external-link-alt{color:#FFC733;margin:0 0 0 6px}.fl-builder-buy-button:hover,.fl-builder-feedback-button:hover,.fl-builder-upgrade-button:hover{background:#EE8E0D;color:#fff!important}@media (max-width:980px){.fl-builder--main-menu-panel{width:calc(100% - 20px)!important}.fl-builder--main-menu-panel:before{right:auto;left:20px}.fl-builder-bar-title,.fl-theme-builder-preview-select{-ms-flex:1 .5 380px!important;flex:1 .5 380px!important}}@media (max-width:620px){.fl-theme-builder-preview-select.fl-builder-button{display:none}}@media (max-width:500px){#fl-builder-toggle-notifications,.fl-builder--main-menu-panel:before,.fl-builder--panel-arrow,.fl-builder-bar-title-area,.fl-builder-panel-drag-handle,.fl-builder-panel:before{display:none}.fl-builder--main-menu-panel,.fl-builder-panel{width:auto!important;top:44px!important;left:0!important;right:0!important;bottom:0!important;border-radius:0!important;box-shadow:none!important}.fl-builder--main-menu-panel{border-left:transparent!important;border-right:transparent!important;border-bottom:transparent!important;max-height:calc(100% - 44px)!important}.fl-builder-bar-title{-ms-flex:0 0 80px!important;flex:0 0 80px!important}.fl-builder-bar-title-caret{padding-left:0;padding-right:0;max-width:24px}.fl-builder-bar-actions{max-width:calc(100% - 80px);overflow:hidden}.fl-builder--panel-header{border-radius:0!important;cursor:default!important}.fl-builder--panel-header .fl-builder--tabs{cursor:default!important}.fl-builder-publish-actions{width:100%!important;padding-left:4px!important}.fl-builder-bar-actions .fl-builder-button{padding:0 8px!important}}.fl-builder--preview-actions{display:none;position:fixed;top:4px;left:4px;z-index:10000001;padding:4px;-ms-flex-pack:center;justify-content:center;background:#fff;border-radius:4px}.fl-builder-preview .fl-builder--preview-actions{display:-ms-flexbox;display:flex}.fl-builder--preview-actions .device-icons{color:#555;background:#e4e4e4;border:none!important;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;text-decoration:none;font-size:14px!important;line-height:1!important;margin:0 4px 0 0;padding:0 6px;cursor:pointer;-webkit-border-radius:3px;-webkit-appearance:none;border-radius:3px}.fl-builder--preview-actions .device-icons i{margin:0 6px}@keyframes fl-builder-ui-pin-zone-pulse{0%,100%{opacity:1;filter:alpha( opacity=1 )}50%{opacity:.5;filter:alpha( opacity=35 )}}.fl-builder-ui-pin-zone{animation:fl-builder-ui-pin-zone-pulse 2s infinite;transition:width .3s ease;background:rgba(0,160,210,.5);bottom:0;top:0;position:fixed;width:35px;z-index:100001}.fl-builder-ui-show-pin-zone-left .fl-builder-ui-pin-zone-left,.fl-builder-ui-show-pin-zone-right .fl-builder-ui-pin-zone-right{width:75px}.fl-builder-ui-pin-zone-left{left:0}.fl-builder-ui-pin-zone-right{right:0}.fl-builder-content-panel-pin-zone .fl-builder-content-panel-button{display:-ms-flexbox!important;display:flex!important;background:rgba(0,160,210,.5)!important;padding:2px 4px;width:80px;animation:fl-builder-ui-pin-zone-pulse 2s infinite}.fl-builder-content-panel-pin-zone .fl-builder-content-panel-button svg{display:none}.fl-builder-content-panel-pin-zone-hover .fl-builder-content-panel-button{width:120px}.fl-builder-content-panel-pin-zone-hover .fl-builder-content-panel-button svg{display:none!important;width:100%;transform:none!important;fill:#00A0D2!important;border-radius:3px}.fl-builder-ui-is-pinned .fl-builder-content-panel-button,.fl-builder-ui-pinned-container .fl-lightbox-controls{display:none}.fl-builder-content-panel-pin-zone .fl-builder-done-button{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.fl-builder-panel.fl-builder-ui-pinned{top:45px!important;bottom:0!important;height:auto!important;border-radius:0;border:none;box-shadow:none;animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s;z-index:11}.fl-builder-panel.fl-builder-ui-pinned-right{left:auto!important;right:0;border-left:1px solid #eceef1}.fl-builder-panel.fl-builder-ui-pinned-left{left:0;right:auto;border-right:1px solid #eceef1}.fl-builder-panel.fl-builder-ui-pinned .fl-builder--panel-header{border-radius:0!important}.fl-builder-ui-pinned-container .fl-lightbox-wrap{position:absolute;z-index:11}.fl-builder-ui-pinned-container .fl-lightbox{position:absolute;top:0;bottom:0;left:0;right:0;width:auto!important;height:auto;border-radius:0;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s}.fl-builder-ui-pinned-container .fl-lightbox-header-wrap{border-radius:0}.fl-builder-ui-pinned-container .fl-lightbox.ui-draggable .fl-lightbox-header{cursor:auto}.fl-builder-ui-pinned-container .fl-lightbox-header h1{padding:12px 20px 10px!important}.fl-builder-ui-pinned-content-transform{transform:scale(1);transform-origin:center top 0}.fl-builder-ui-pinned-collapse{cursor:pointer;display:none;position:absolute!important;bottom:2px;padding:5px;border:2px solid transparent;background:0 0;width:36px;height:36px;border-radius:4px;fill:#778794;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}.fl-builder-ui-pinned-collapse:focus,.fl-builder-ui-pinned-collapse:hover{top:auto!important;background:0 0;border:2px solid transparent;outline:0;fill:#00A0D2}.fl-builder-ui-pinned-collapse:focus{background:#E4E7EA}.fl-builder-ui-pinned-collapse>*{margin:auto;line-height:1}.fl-builder-ui-pinned-collapse svg g{fill:inherit}.fl-builder-ui-is-pinned-right .fl-builder-ui-pinned-right-collapse{display:-ms-flexbox;display:flex;left:-40px}.fl-builder-ui-is-pinned-left .fl-builder-ui-pinned-left-collapse{display:-ms-flexbox;display:flex;right:-40px}.fl-builder-ui-pinned-collapse i[data-toggle=show],.fl-builder-ui-pinned-is-collapsed i[data-toggle=hide]{display:none}.fl-builder-ui-pinned-is-collapsed i[data-toggle=show]{display:block}.fl-builder--panel-no-settings,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-content,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-controls,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--tab-wrap,.fl-builder-ui-pinned-is-collapsed .fl-builder--panel-header{display:none}.fl-builder-ui-is-pinned-left [data-toggle=hide],.fl-builder-ui-is-pinned-right [data-toggle=show]{transform:rotateY(180deg)}.fl-builder-ui-pinned-is-collapsed .fl-lightbox{box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-header{background:0 0;border:none;z-index:10}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-lightbox-wrap{top:0}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-lightbox-header h1{padding:14px 28px 15px!important}.fl-builder-simple-pinned .fl-builder--panel-no-settings{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;right:0;bottom:0}@keyframes fl-builder-show-panel{from{transform:scale(.8)}to{transform:scale(1)}}.fl-builder--search-results-panel,.fl-builder-panel{box-sizing:border-box;position:fixed!important;right:20px;top:calc(43px + 10px);width:380px;bottom:20px;background:#F5F7F9;color:#676F7A;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;border-radius:4px;box-shadow:0 8px 40px 4px rgba(0,0,0,.3);z-index:10000007;will-change:transform;user-select:none}.fl-builder-panel{transform-origin:top right;animation-name:fl-builder-show-panel;animation-duration:.15s;animation-fill-mode:both;-ms-flex:1;flex:1;display:none}.fl-builder--search-results-panel{display:none;position:absolute;right:0;top:93px;left:0;bottom:0;width:auto!important;border:none;border-radius:0;box-shadow:none;min-height:100px;max-height:calc(100vh - 54px);overflow:auto;z-index:1}.fl-builder-content-panel-is-showing .fl-builder-panel,.fl-builder-search-results-panel-is-showing .fl-builder--search-results-panel{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fl-builder-panel .fl-lightbox .fl-builder-panel-drag-handle,.fl-builder-ui-is-pinned .fl-builder--panel-arrow,.fl-lightbox-width-full .fl-builder-panel-drag-handle,body.fl-builder-draggable-is-dragging .fl-builder--panel-arrow{display:none}.fl-builder--search-results-panel .fl-builder--no-results{text-align:center;padding:50px 20px}.fl-builder--panel-arrow{position:absolute;top:-13px;right:10px}.fl-builder--panel-arrow polygon{fill:#00a0d2}.fl-builder--panel-header{border-top:3px solid #00a0d2;border-top-right-radius:4px;border-top-left-radius:4px}.fl-builder-ui-is-pinned .fl-builder--panel-header{border-top:none}.fl-builder-panel-drag-handle{position:absolute;top:7px;left:10px;fill:#ccd4da;width:6px}.fl-builder-ui-is-pinned-left .fl-builder-panel-drag-handle{left:auto;right:10px}.fl-builder--panel-header .fl-builder--panel-controls{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative}.fl-builder--panel-header .fl-builder--panel-controls .fl-builder-content-group-select{-ms-flex:1 1;flex:1 1}.fl-builder--panel-header .fl-builder--panel-controls .fl-builder-panel-search{-ms-flex:0 0;flex:0 0;padding:0 10px 6px 0;margin-left:-4px}.fl-builder--panel-controls .fl-builder-panel-search button{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:30px;background:0 0!important;border:2px solid transparent!important;font-size:inherit;height:36px;margin:0;padding:0}.fl-builder--panel-controls .fl-builder-panel-search button:active,.fl-builder--panel-controls .fl-builder-panel-search button:focus{top:0;outline:0}.fl-builder-panel-search button svg{height:auto;width:20px}.fl-builder-panel-search button.fl-builder-dismiss-panel-search svg{width:16px}.fl-builder-panel-search button svg .filled-shape{fill:#000}.fl-builder--panel-controls .fl-builder-panel-search button:active svg .filled-shape,.fl-builder--panel-controls .fl-builder-panel-search button:focus svg .filled-shape{fill:#00A0D2}.fl-builder-panel-search .fl-builder-panel-search-input{display:none;position:absolute;top:0;left:0;right:0;bottom:0;background:#f5f7f9}.fl-builder-panel-search.is-showing-input .fl-builder-panel-search-input{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:0 10px 6px}.fl-builder-panel-search-input input{-ms-flex:1 1 100%;flex:1 1 100%;border:2px solid #e6eaed;background:#fff;border-radius:4px;margin:0 4px 0 0;padding:10px;color:#333}.fl-builder-panel-search-input input:focus{border-color:#0197C6;outline:0}.fl-builder-panel-content-wrap{bottom:0;height:auto;left:0;overflow:hidden;position:absolute;right:0;top:43px}.fl-builder-panel-content{padding-bottom:60px}.fl-builder--panel-view .fl-builder-blocks-section:first-child{border-top:none}.fl-builder-blocks-group:first-child{padding:20px 0 0}.fl-builder-blocks-group .fl-builder-blocks-section-group-name{display:block;padding:0 30px 15px;color:#000;font-size:20px;font-weight:600;line-height:1.4}.fl-builder-blocks-section .fl-builder-block{display:block;line-height:1.1;padding:15px 20px}.fl-builder--template-collection-section-header,.fl-builder-blocks-section .fl-builder-blocks-section-header{line-height:1.2;color:#333;margin:0!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e7ebef;border-top:4px solid #e7ebef;height:30px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-builder-blocks-section .fl-builder-blocks-section-title{background:#F5F7F9;color:#353535;padding:2px 16px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.fl-builder-blocks-section .fl-builder-blocks-section-title i{color:#bfbfbf;float:right}.fl-builder-blocks-section-content{overflow:auto;padding:10px 10px 20px}.fl-builder-blocks-section-content:before{content:none}.fl-builder-blocks-section-content:after{float:none;clear:both}.fl-builder-blocks-section-content.fl-builder-modules,.fl-builder-blocks-section-content.fl-builder-rows,.fl-builder-blocks-section-content.fl-builder-widgets{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}@supports (display:grid){.fl-builder--template-collection-section-content,.fl-builder-blocks-section-content.fl-builder-modules,.fl-builder-blocks-section-content.fl-builder-rows,.fl-builder-blocks-section-content.fl-builder-widgets{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr))}.fl-builder--template-collection-section-content>*,.fl-builder-blocks-section-content.fl-builder-modules>*,.fl-builder-blocks-section-content.fl-builder-rows>*,.fl-builder-blocks-section-content.fl-builder-widgets>*{width:auto!important}}.fl-builder-blocks-section-content .fl-builder-block-module,.fl-builder-blocks-section-content .fl-builder-block-row{-ms-flex:1 1 50%;flex:1 1 50%;width:50%;box-sizing:border-box}.fl-builder--search-results-panel .fl-builder-blocks-section-content .fl-builder-block-module{-ms-flex:1 1 100%;flex:1 1 100%;width:100%}.fl-builder-blocks-section.fl-active .fl-builder-blocks-section-content{display:block}.fl-builder-blocks-section-content .fl-builder-block{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;font-size:13px;line-height:1.1;font-weight:400;color:#38404a}.fl-builder-block{position:relative;height:47px}.fl-builder-block.fl-builder-block-col-group{height:84px}.fl-builder-block.fl-builder-block-has-thumbnail{height:auto!important;padding:10px!important}.fl-builder-block.fl-builder-block-has-thumbnail:hover{padding:0!important}.fl-builder-block.fl-builder-block-has-thumbnail .fl-builder-block-content{position:relative!important}.fl-builder-block.fl-builder-block-has-thumbnail:hover .fl-builder-block-content{padding:10px!important}.fl-builder-block.fl-builder-block-has-thumbnail .fl-builder-block-details{margin:0 10px 4px!important}.fl-builder-block:hover{overflow:visible;z-index:1}.fl-builder-block:hover .fl-builder-block-content{display:block;box-sizing:border-box;position:absolute;top:0;left:0;width:100%;padding:15px 20px;border-radius:4px;background:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);text-decoration:none;color:#111;cursor:move;overflow:hidden}.fl-builder-blocks-node-template .fl-builder-block,.fl-builder-blocks-section-content .fl-builder-block .fl-builder-block-details{position:relative}.fl-builder-block-module:hover .fl-builder-block-content{width:auto;min-width:100%}.fl-builder-block .fl-builder-block-content .fl-builder-block-visual{display:block;margin-bottom:7px}.fl-builder-block-drag-helper .fl-builder-block-content .fl-builder-block-visual{display:none!important}.fl-builder-block .fl-builder-block-content .fl-builder-block-visual.fl-cols-visual{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;height:30px}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{-ms-flex:1 100%;flex:1 100%;background:#464a4c;height:30px;margin:0 2px;border-radius:2px}.fl-builder-block:hover .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{background:#000}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col:first-child{margin-left:0!important}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col:last-child{margin-right:0!important}.fl-cols-visual.left-right-sidebar .fl-cols-visual-col:first-child,.fl-cols-visual.left-right-sidebar .fl-cols-visual-col:last-child,.fl-cols-visual.left-sidebar .fl-cols-visual-col:first-child,.fl-cols-visual.right-sidebar .fl-cols-visual-col:last-child{-ms-flex-preferred-size:60px;flex-basis:60px}.fl-builder-block-saved-column.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-column:hover .fl-builder-block-title,.fl-builder-block-saved-module.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-module:hover .fl-builder-block-title,.fl-builder-block-saved-row.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-row:hover .fl-builder-block-title{margin-right:70px}.fl-builder-block-module:nth-child(even):hover .fl-builder-block-content{left:auto;right:0}.fl-builder-block-thumbnail{border-radius:4px;background-size:contain;background-repeat:no-repeat;background-position:center;background-color:rgba(0,0,0,.06);margin-bottom:10px;transform-origin:bottom;transition-property:transform,box-shadow;transition-duration:.15s}.fl-builder-block:hover .fl-builder-block-thumbnail{transform:scale(1.05);box-shadow:0 20px 40px rgba(0,0,0,.08)}.fl-builder-block .fl-builder-block-icon{margin-right:7px;fill:#000;display:inline-block;width:20px;height:20px;vertical-align:middle}.fl-builder-block-thumbnail:before{content:"";display:block;padding-top:50%}.fl-builder-block-thumbnail img{max-width:100%;max-height:160px;margin:0;-o-object-fit:cover;object-fit:cover}.fl-builder-blocks-section-content .fl-builder-block{box-shadow:0 0 0 transparent;transition-property:box-shadow;transition-duration:.15s}.fl-builder-blocks-section-content .fl-builder-block i,.fl-user-template-actions i{color:#000;margin-right:10px}.fl-builder-blocks-separator{background:#f1f1f1;height:6px}.fl-builder-block:hover .fl-builder-badge{background:#2ea2cc}.ui-sortable-helper .fl-builder-badge{display:none!important}.fl-builder-modules-cta a{color:#999!important;display:block!important;font-size:12px!important;font-style:italic!important;padding:15px 20px!important;line-height:16px!important}.fl-builder-modules-cta a:hover{background:#e5e5e5!important;color:#666!important;text-decoration:none!important}.fl-builder-modules-cta a:focus{text-decoration:none!important}.fl-builder-modules-cta .fa{float:right!important;font-size:14px!important;margin:3px 0 0 9px!important}.fl-builder--panel-message{text-align:center;padding:40px 20px;font-size:16px}.fl-builder--panel-message .fl-builder-button{display:inline-block;padding:10px}.fl-builder--panel-cta{padding:20px 30px;font-size:16px;text-align:center}.fl-builder--panel-cta a{color:inherit;text-decoration:none}.fl-builder--panel-cta a:hover{text-decoration:none}.fl-builder-block-template-image{margin:5px 0 10px;max-width:100%;border:1px solid #dfdfdf}.fl-builder-block .fl-builder-block-title{overflow:hidden;text-overflow:ellipsis;vertical-align:middle;line-height:1.3}.ui-sortable-helper .fl-builder-block-template-image{display:none!important}@keyframes fl-builder-template-item-enter{from{transform:translateY(100px) scale(.3);opacity:0}to{transform:scale(1);opacity:1}}.fl-builder--template-collection{clear:both;padding:10px 0}.fl-builder--template-collection-section-content{padding:0 10px}.fl-builder--template-collection-item{box-sizing:border-box;width:50%;float:left;padding:10px;cursor:pointer;font-size:13px;transform-origin:center;opacity:1}.fl-builder--template-thumbnail{background-size:cover;background-clip:content-box;background-position:center top;background-color:#fff;border:2px solid transparent;transform-origin:bottom;transition-property:transform,box-shadow;transition-duration:.15s}.fl-builder--template-collection-item[data-id="0"] .fl-builder--template-thumbnail,.fl-user-template .fl-builder--template-thumbnail{border-color:#e4e7ea}.fl-builder--template-thumbnail:before{display:block;content:"";padding-top:120%}.fl-builder--template-thumbnail:hover{transform:scale(1.05);box-shadow:0 20px 40px rgba(0,0,0,.08)}.fl-builder--template-name{text-align:center;padding:4px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.fl-builder--template-collection-section{padding-bottom:10px;border-bottom:1px solid #dfdfdf}.fl-builder--template-collection-section:last-child{border-bottom:none}.fl-builder--template-collection-section:after,.fl-builder--template-collection-section:before{content:"";display:block;clear:both}.fl-builder--template-collection-section-name{padding:15px 10px 10px}span.fl-builder-block-no-node-templates{display:block;padding:15px 20px;text-align:center}span.fl-builder-block-no-node-templates:hover{cursor:default}.fl-builder-blocks-section-content .fl-builder-node-template-actions{bottom:0;cursor:default;display:none;position:absolute;right:0;top:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete,.fl-builder-blocks-section-content .fl-builder-node-template-edit{display:inline;cursor:pointer;margin:0;padding:15px 10px;text-align:center;width:30px}.fl-builder-block-details .fl-builder-node-template-delete,.fl-builder-block-details .fl-builder-node-template-edit{padding-top:0!important}.fl-builder-blocks-section-content .fl-builder-node-template-delete i,.fl-builder-blocks-section-content .fl-builder-node-template-edit i{margin:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete:hover i,.fl-builder-blocks-section-content .fl-builder-node-template-edit:hover i{color:#444}.fl-builder-blocks-node-template .fl-builder-block:hover .fl-builder-node-template-actions{display:block}.ui-sortable-helper .fl-builder-node-template-delete,.ui-sortable-helper .fl-builder-node-template-edit{display:none!important}.fl-builder--tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-align:center;align-items:center}.fl-builder-panel .fl-builder--panel-header{cursor:move}.fl-builder-panel .fl-builder--tabs{-ms-flex-pack:distribute;justify-content:space-around;padding:4px 24px;cursor:pointer}.fl-builder--tab-wrap{-ms-flex:1 1 100%;flex:1 1 100%;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;margin:auto;max-width:400px}.fl-builder--tabs button,.fl-builder--tabs button:active,.fl-builder--tabs button:focus,.fl-builder--tabs button:hover{-ms-flex:1 1 100%;flex:1 1 100%;display:inline-block;text-decoration:none;text-transform:none;color:inherit;text-align:center;letter-spacing:normal!important;margin:0;padding:5px;cursor:pointer;font-size:13px!important;font-weight:500!important;line-height:1.3!important;background:0 0!important;outline:0!important;border:2px solid transparent;border-radius:4px;min-height:36px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;top:0;transition-property:background,color;transition-duration:.25s}.fl-builder--tabs button:focus{background:#e6eaed!important}.fl-builder--tabs button.is-showing{color:#0086b0}.fl-builder--panel-content{-ms-flex:1;flex:1}.fl-builder--panel-view{display:none;overflow:hidden}.fl-builder--panel-view.is-showing{display:block}.fl-builder--content-library-panel.ui-draggable-dragging{height:500px!important}.fl-builder--content-library-panel .fl-builder-drop-zone{display:none!important}.fl-builder--panel-header .fl-builder--tabs{cursor:move}.fl-builder--category-select{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;position:relative}.fl-builder--selector-display{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;-ms-flex-pack:justify;justify-content:space-between;color:#161B20;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;cursor:pointer;font-size:13px;font-weight:700;line-height:16px;border-radius:4px;-ms-flex-align:stretch;align-items:stretch}.fl-builder--selector-display-label{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;font-size:inherit;line-height:inherit;width:100%;margin:0!important;padding:0!important;color:#6D6D6D;background:0 0;border:2px solid transparent;box-shadow:0 1px 2px 0 rgba(0,0,0,.12)!important;border-radius:4px;font-family:inherit;text-transform:none}.fl-builder--selector-display-label:hover{top:0;color:inherit;background:0 0;border:2px solid transparent;border-radius:4px}.fl-builder--selector-display-label:active{top:0;color:inherit;background:0 0;border:2px solid #e4e7ea;border-radius:4px}.fl-builder--selector-display-label:focus{top:0;color:inherit;background:0 0;border:2px solid #00A0D2;outline:0}.fl-builder--group-label{color:inherit;-ms-flex:0 0 0%;flex:0 0 0%;padding:4px 12px 4px 10px;background:#e7ebef;border-radius:3px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.fl-builder--current-view-name{-ms-flex:1 1 100%;flex:1 1 100%;color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;padding:8px 10px;text-align:left}.fl-builder--selector-menu{display:none;color:#293138;position:absolute;top:46px;left:0;width:100%;background:#fff;border-radius:4px;box-shadow:0 0 20px 2px rgba(0,0,0,.2);overflow:visible;z-index:2}.fl-builder--selector-menu:before{bottom:100%;right:8px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:10px;margin-left:-10px}.fl-builder--category-select.is-showing .fl-builder--selector-menu{display:-ms-flexbox;display:flex;max-height:calc(100vh - 150px)}.fl-builder--category-select.is-showing .fl-builder--selector-menu .fl-builder--menu{margin:10px 0;-ms-flex:1 100%;flex:1 100%;overflow:auto}button.fl-builder-button.fl-builder-bar-title-caret{margin:4px}button.fl-builder-button.fl-builder-bar-title-caret:focus{background-color:#e6eaed!important;border-color:transparent!important}.fl-builder--category-select.is-showing .fl-builder-bar-title-caret i{transform:rotate(180deg)}.fl-builder--menu{margin-bottom:2px}.fl-builder--menu>a,.fl-builder--menu>button,.fl-builder--menu>span{display:block;padding:8px 10px 10px;border-radius:4px;color:inherit;text-decoration:none;background:0 0!important;border:2px solid transparent!important;font-weight:400;font-family:inherit}.fl-builder--menu>a:active,.fl-builder--menu>a:focus,.fl-builder--menu>a:hover,.fl-builder--menu>button:active,.fl-builder--menu>button:focus,.fl-builder--menu>button:hover{background:#e6eaed!important;border:2px solid transparent!important;top:0}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging,.fl-builder-drop-zone,.fl-builder-empty{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-builder--menu>a:focus,.fl-builder--menu>button:focus{outline:0;color:inherit;text-decoration:none}.fl-builder--menu .fl-has-children>svg{float:right;margin:0 7px 0 0;height:16px;width:9px;transition-property:transform;transition-duration:.15s;transform:rotate(-90deg)}.fl-builder--menu .fl-has-children.fl-has-children-showing>svg{transform:rotate(0)}.fl-builder--menu .fl-inset{display:none;padding-left:35px;font-size:14px;line-height:1.25}.fl-builder--menu a.fl-template-collection{color:#161B20}.fl-builder--menu>:after{clear:both}.fl-builder--menu * .fl-builder--menu-item-accessory{float:right;color:#000;text-transform:uppercase;text-align:center;min-width:20px;letter-spacing:2px}.fl-builder--menu * .fl-builder--menu-item-accessory i{font-size:1em;margin-top:2px}.fl-builder--menu .fl-builder-video-wrap iframe{display:block;margin:4px 0;width:100%}.fl-builder-publish-actions{display:-ms-flexbox;display:flex;box-sizing:border-box;position:absolute;top:0;right:0;width:380px;max-width:100%;height:44px;padding:4px 4px 4px 0;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end;opacity:1;pointer-events:auto;transform:scaleX(1) translateX(0);transform-origin:right;transition-property:transform,opacity;transition-duration:.15s}.fl-builder-publish-actions.is-hidden{transform:scaleX(.23) translateX(68px);opacity:0;pointer-events:none}.fl-builder-bar .fl-builder-button-group{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%}.fl-builder-bar .fl-builder-button-group>.fl-builder-button{border-radius:0;margin-left:0;-ms-flex-preferred-size:100%;flex-basis:100%;text-align:center;-ms-flex-pack:distribute;justify-content:space-around;box-shadow:none}.fl-builder-bar .fl-builder-button-group>.fl-builder-button:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.fl-builder-bar .fl-builder-button-group>.fl-builder-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.fl-builder-publish-actions-click-away-mask{display:none;position:fixed;top:0;left:0;right:0;height:100vh;background:0 0}.fl-builder-dragging .fl-builder-content:not(.fl-builder-empty){padding:16px 0}.fl-builder-empty{display:none;border:2px dashed #969696;border-radius:8px;color:#909090;font-size:20px;font-weight:700;margin:10px;padding:250px 20px;position:relative;text-align:center;text-transform:uppercase}.fl-builder-drop-zone,.fl-builder-has-submenu>ul.fl-builder-submenu li a{font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fl-builder-edit .fl-builder-empty{display:block}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging{background:rgba(255,255,255,.95)!important;border:2px solid #000;border-radius:4px;box-shadow:0 0 8px rgba(0,0,0,.2);-moz-box-shadow:0 0 8px rgba(0,0,0,.2);-webkit-box-shadow:0 0 8px rgba(0,0,0,.2);color:#333!important;font-size:13px!important;height:47px!important;line-height:40px!important;overflow:hidden;padding:0 20px;position:fixed!important;text-overflow:ellipsis;white-space:nowrap;width:180px!important;z-index:100010!important;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-line-pack:center;align-content:center;-ms-flex-pack:start;justify-content:flex-start}.fl-builder-block.fl-builder-block-drag-helper:hover{padding:0;box-shadow:none}.fl-builder-block-drag-helper:hover .fl-builder-block-content{position:static;padding:0 20px}.fl-col-has-highlight-guide .fl-col-content,.fl-col-highlight,.fl-row-highlight .fl-col-group{position:relative}.fl-builder-block-saved-column.fl-builder-block-drag-helper:hover .fl-builder-block-content,.fl-builder-block-saved-module.fl-builder-block-drag-helper:hover .fl-builder-block-content,.fl-builder-block-saved-row.fl-builder-block-drag-helper:hover .fl-builder-block-content{padding:14px 20px}.fl-builder-block-drag-helper .fl-builder-block-icon{fill:#000;margin-top:-10px}.fl-builder-drop-zone{animation:fl-builder-drop-zone-pulse 2s infinite;background:#00A2D7;border-radius:4px;color:#fff!important;display:block;font-size:12px;letter-spacing:1px;line-height:14px;margin:10px;padding:6px 8px 5px;position:relative;text-align:left;text-shadow:none;text-transform:none;z-index:10}@keyframes fl-builder-drop-zone-pulse{0%,100%{background-color:#00A2D7}50%{background-color:#79DEFF}}.fl-builder-drop-zone-global{animation:fl-builder-drop-zone-global-pulse 2s infinite;background:#ff9600}@keyframes fl-builder-drop-zone-global-pulse{0%,100%{background-color:#FFBC5C}50%{background-color:#ff9600}}.fl-builder-content>.fl-builder-drop-zone{margin:10px 20px}.fl-row-content>.fl-builder-drop-zone{margin:3px 7px}.fl-col-has-cols>.fl-col-content>.fl-builder-drop-zone{margin:3px 10px}.fl-sortable-disabled>.fl-builder-drop-zone{display:none!important}.fl-col-group-equal-height.fl-col-group-align-center .fl-col-content>.fl-builder-drop-zone{width:100%}.fl-row-highlight{padding:16px 0}.fl-row-highlight .fl-row-content{border:2px dashed rgba(203,205,206,.5);padding:8px;border-radius:6px}.fl-row-highlight.fl-node-global .fl-row-content{border-color:#ff9600}.fl-col-highlight{padding:8px}.fl-col-highlight .fl-col-content{border-style:dashed!important;border-color:#00a0d2!important;border-radius:4px;min-height:100px;overflow-x:hidden;border-width:2px!important}.fl-col-has-cols.fl-col-highlight>.fl-col-content{padding:8px}.fl-col-highlight.fl-node-global .fl-col-content{border-color:#ff9600!important}.fl-builder-simple .fl-col-highlight .fl-col-content{border:none!important}.fl-col-highlight-guide{background:rgba(0,160,210,.05);border:2px solid #00A0D2;border-radius:4px;bottom:4px;left:4px;position:absolute;right:4px;top:4px;z-index:1}.fl-node-global .fl-col-highlight-guide{border-color:#ff9600!important;background-color:rgba(255,150,0,.06)!important}.fl-col-has-highlight-guide .fl-block-overlay{background:0 0;border-color:transparent}.fl-col-has-highlight-guide .fl-block-col-resize{display:none}.fl-col-has-highlight-guide .fl-col-highlight .fl-col-content{border-color:transparent!important}.fl-col-drop-target{bottom:8px;display:none;left:-9px;position:absolute;top:8px;width:18px;z-index:1}.fl-col-highlight .fl-col-drop-target{display:block}.fl-col-drop-target-last{left:auto;right:-9px}.fl-col-drop-target .fl-builder-drop-zone{bottom:0;left:2px;margin:0;padding:0;position:absolute;right:2px;top:0}.fl-col-group-drop-target{display:none;left:8px;height:18px;position:absolute;right:8px;top:-9px;z-index:1}.fl-row-highlight .fl-col-group-drop-target{display:block}.fl-col-group-drop-target-last{top:auto;bottom:-9px}.fl-col-group-drop-target .fl-builder-drop-zone{bottom:2px;left:0;margin:0;padding:0;position:absolute;right:0;top:2px}.fl-row-content>.fl-col-group-drop-target{position:static}.fl-row-content>.fl-col-group-drop-target .fl-builder-drop-zone{height:18px;position:static}.fl-row-drop-target{display:none;left:0;height:24px;margin-top:-28px;position:absolute;right:0;z-index:1}.fl-row-highlight .fl-row-drop-target{display:block}.fl-row-drop-target-last{margin-top:4px}.fl-row .fl-row-drop-target .fl-builder-drop-zone{bottom:0;left:4px;margin:0;position:absolute;right:4px;top:0}.fl-builder-content>.fl-row-drop-target{margin:0;position:static}.fl-builder-dragging .fl-builder-content.fl-builder-empty>.fl-row-drop-target{bottom:10px;display:block;height:auto;left:0;position:absolute;right:0;top:10px}.fl-builder-content .fl-row-drop-target .fl-builder-drop-zone{margin-bottom:0;margin-top:0}.fl-col-group:focus,.fl-col:focus,.fl-module:focus,.fl-row:focus{outline:0}.fl-sortable-proxy{display:none}.fl-block-overlay,.fl-block-overlay *{text-shadow:none;-webkit-touch-callout:none;transition-property:border-color;transition-duration:.3s}.fl-block-overlay-active{position:relative}.fl-block-overlay-actions{background:#00A0D2;float:left;height:30px;margin:-1px -1px 0;padding:0 4px;text-shadow:none;border-bottom-right-radius:5px;border-top-left-radius:3px;transition-property:background-color;transition-duration:.3s}.fl-row-overlay-header-bottom .fl-block-overlay-actions{border-radius:0 5px 0 3px}.fl-builder-col-resizing .fl-block-overlay-actions,.fl-builder-row-resizing .fl-block-overlay-actions{overflow:hidden}.fl-block-overlay-actions>span{display:block;float:left}.fl-block-overlay-actions i{color:#fff!important;cursor:pointer;display:block!important;float:left;font-size:16px!important;height:28px!important;line-height:28px!important;opacity:.8;filter:alpha(opacity=80);text-align:center;width:32px!important}.fl-block-overlay-actions i:hover{opacity:1;filter:alpha(opacity=100)}.fl-block-overlay-actions>i:first-child{padding-left:4px}.fl-block-overlay-actions>i:last-child{padding-right:2px}.fl-block-overlay-actions .fl-block-move{cursor:move}.fl-block-has-rules{color:#00A0D2!important;cursor:pointer;padding:7px;position:absolute;right:0;top:0}.fl-block-overlay-title,.fl-builder-has-submenu>ul.fl-builder-submenu li a{color:#fff!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-block-overlay-title{float:left;font-size:14px;height:30px;line-height:29px;margin-right:2px;padding:0 12px 0 8px}.fl-col-overlay,.fl-module-overlay,.fl-row-overlay{background:rgba(190,239,255,0);color:#fff}.fl-row-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:0;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;left:0;position:absolute;top:-33px;right:0;z-index:100006}.fl-row-overlay.fl-row-menu-active,.fl-row-overlay.fl-row-menu-active.fl-block-overlay.fl-block-overlay-global{z-index:100007}.fl-row-full-width .fl-row-overlay{left:2px;right:2px;bottom:2px}.fl-row-overlay-header-bottom{bottom:-32px!important;top:0}.fl-row-overlay-header-bottom .fl-block-overlay-header{position:absolute;bottom:0}.fl-block-overlay-active .fl-row-content-wrap{position:relative}.fl-block-overlay-active .fl-row-content{position:relative;z-index:100007!important}.fl-builder-row-resizing .fl-col.fl-block-overlay-active,.fl-builder-row-resizing .fl-module.fl-block-overlay-active{position:static}.fl-col-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:8px;cursor:pointer;left:8px;position:absolute;right:8px;top:8px;z-index:100008}.fl-module-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:4px;cursor:pointer;left:4px;min-height:32px;position:absolute;right:4px;top:4px;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-module-overlay{cursor:default}.fl-module-adjust-height{padding-bottom:15px;padding-top:15px}.fl-col-bg-overlay .fl-block-overlay-active.fl-module{z-index:100008}.fl-block-overlay-global{background:rgba(255,150,0,0);border:2px solid #F7A407;border-radius:4px}.fl-block-overlay-global .fl-block-overlay-actions{background:#F7A407}.fl-block-overlay-title-global{background:#fff;color:#ff9600!important;font-size:11px;letter-spacing:1px;margin-left:4px;padding:2px 4px;vertical-align:top}.fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,0);cursor:pointer;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-row-overlay{cursor:default}.fl-builder-row-template .fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,0);cursor:default;z-index:100006}.fl-block-overlay-global.fl-row-overlay .fl-block-col-resize{display:none}.fl-block-overlay-muted .fl-row-overlay{background:rgba(85,93,102,0);border:2px solid #555D66}.fl-block-overlay-muted .fl-row-overlay .fl-block-overlay-actions{background:#555D66}.fl-block-overlay-muted .fl-row-overlay .fl-block-has-rules{color:#555D66!important}.fl-block-overlay-muted .fl-row-overlay .fl-block-col-resize{display:none}.fl-node-disabled .fl-row-content-wrap,.fl-node-disabled>.fl-col-content{opacity:.3}.fl-block-col-resize{bottom:0!important;position:absolute;top:0!important;width:6px}.fl-block-col-resize-e{cursor:ew-resize;left:auto!important;right:-2px!important}.fl-block-col-resize-w{cursor:ew-resize;left:-7px!important}.fl-block-col-resize-handle-wrap{margin:-4px 0 0 -5px;padding:0 5px;position:absolute;top:50%!important}.fl-block-col-resize-e .fl-block-col-resize-handle-wrap{margin-left:-6px}.fl-block-col-resize-handle{background:#fff;border:2px solid #00A0D2;border-radius:50%;height:12px;width:12px}.fl-node-global .fl-block-col-resize-handle{border-color:#ff9600}.fl-block-col-resize-feedback{color:#333!important;display:none;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:11px!important;position:absolute}.fl-block-col-resize-feedback-left,.fl-block-col-resize-feedback-right{background:#fff;border:1px solid #3ba0ff;padding:2px 4px}.fl-block-col-resize-feedback-left{right:20px;top:-7px}.fl-block-col-resize-feedback-right{left:20px;top:-7px}.fl-builder-has-submenu{position:relative}.fl-builder-has-submenu>ul.fl-builder-submenu{background:#00A0D2;box-shadow:0 0 20px rgba(0,0,0,.2);border-radius:0 4px 4px;display:none;left:0;list-style:none;margin:0;padding:6px 0;position:absolute;text-align:left;top:100%;width:165px;z-index:100008}.fl-builder-has-submenu>ul.fl-builder-submenu li{list-style:none;margin:0;padding:0}.fl-builder-submenu-right ul.fl-builder-submenu{left:auto;right:0}.fl-builder-has-submenu.fl-builder-submenu-open>ul.fl-builder-submenu{display:block}.fl-builder-has-submenu>ul.fl-builder-submenu li a{border-bottom:0 none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;display:block;line-height:13px;font-size:13px;opacity:.8;filter:alpha(opacity=80);padding:6px 12px;text-decoration:none}.fl-builder-has-submenu>ul.fl-builder-submenu li a:hover{background:#0197C6;color:#fff;opacity:1;filter:alpha(opacity=100);text-decoration:none}.fl-builder-actions-title,.fl-builder-alert-lightbox .fl-lightbox-message,.fl-builder-alert-lightbox .fl-lightbox-message-info{color:#333!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px!important}.fl-builder-has-submenu .fl-builder-submenu .fa,.fl-builder-has-submenu .fl-builder-submenu .far,.fl-builder-has-submenu .fl-builder-submenu .fas{float:right;height:12px!important;line-height:12px!important;position:relative;right:-5px;width:14px!important}.fl-builder-has-submenu .fl-builder-has-submenu .fl-builder-submenu{display:none;left:100%;top:0}.fl-builder-has-submenu .fl-builder-submenu-right.fl-builder-has-submenu .fl-builder-submenu{left:auto;right:100%}.fl-builder-has-submenu .fl-builder-has-submenu:hover .fl-builder-submenu{display:block}.fl-builder-submenu-sep{padding:7px 0!important}.fl-builder-submenu-sep div{border-bottom:1px solid rgba(255,255,255,.4)}.fl-block-col-move,.fl-block-col-move-parent{cursor:move;position:relative}.fl-builder-submenu .fa-arrows-alt{cursor:move;display:none!important}.fl-builder-submenu a:hover .fa-arrows-alt{display:block!important;float:right;line-height:12px!important;height:12px!important}.fl-block-overlay-global ul.fl-builder-submenu{background:#ff9600!important}.fl-block-overlay-global ul.fl-builder-submenu li a:hover{background:#fa3}.fl-builder-actions-lightbox .fl-lightbox{display:block;width:300px;border-radius:4px}.fl-builder-actions-lightbox .fl-lightbox-content-wrap{display:block}.fl-builder-actions-lightbox .fl-builder-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:25px;text-align:center}.fl-builder-actions-title{display:block;margin-bottom:20px}.fl-builder-actions .fl-builder-button{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:7px;min-height:36px}.fl-builder-alert-lightbox{padding:20px;z-index:30000000;top:0;pointer-events:auto}.fl-builder-alert-lightbox .fl-lightbox{max-width:440px;width:auto}.fl-builder-alert-lightbox .fl-lightbox-content-wrap{display:block}.fl-builder-alert-lightbox .fl-lightbox-message,.fl-builder-alert-lightbox .fl-lightbox-message-info{line-height:24px;padding:30px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox{max-width:60%}.fl-lightbox-width-slim .fl-compound-field,.fl-lightbox-width-slim .fl-dimension-field-units{max-width:none}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-content{padding:20px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-message{padding:10px 20px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-message h1{font-size:20px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .fl-lightbox-message p{font-size:14px;padding-top:5px}.fl-builder-alert-lightbox.fl-builder-crash-lightbox .link{color:#428bca;text-decoration:underline}.fl-builder-alert-lightbox .fl-lightbox-message-info{padding:0 20px;font-size:14px!important}.fl-builder-alert-lightbox .fl-lightbox-message-info p{line-height:20px;padding:10px 0 0 10px}.fl-builder-alert-lightbox .fl-lightbox-message-info a{font-size:14px}@keyframes fl-builder-content-section-entry{from{transform:translateY(150px) translateX(100px) scale(.3);opacity:0}to{transform:translateY(0) translateX(0) scale(1);opacity:1}}.fl-template-category-select{width:180px!important}.fl-template-selector .fl-builder-settings-section{margin:0 0 10px}.fl-template-selector .fl-builder-settings-fields{height:470px}.fl-template-selector .fl-builder-settings-tab{width:560px}.fl-template-selector .fl-builder-settings-tab-description{font-size:15px!important;margin:0!important;padding:10px 0 25px;text-align:center}.fl-template-preview{float:left;margin:0 25px 30px 0;position:relative;text-align:center;width:170px}.fl-template-preview.fl-last{margin-right:0}.fl-template-image{border:1px solid #d9d9d9;cursor:pointer;margin-bottom:12px;height:164px;overflow:hidden}.fl-template-image:hover{border-color:red}.fl-template-image img{max-height:none;width:100%}.fl-template-preview span{display:block;text-align:center}.fl-user-template-category-name{background:#f2f2f2;border-bottom:3px solid #dfdfdf;border-top:2px solid #dfdfdf;font-weight:700;padding:8px 15px}.fl-user-templates{border-bottom:1px solid #dfdfdf;padding:10px 0 20px}.fl-builder--user-templates-section-content{border-bottom:2px solid #e6eaed;padding:10px}.fl-builder--user-templates-section-content:first-child{padding-top:0}.fl-builder--user-templates-section-content:last-child,.fl-user-templates:last-child{border-bottom:none}.fl-builder--user-templates-section-name{font-weight:700;font-size:16px;color:#333;z-index:9999;padding:15px 10px;margin:0 10px}@keyframes fl-list-item-entry{from{opacity:0;transform:scale(.5) translateY(100px)}to{opacity:1;transform:scale(1) translateY(0)}}.fl-builder--save-new-user-template,.fl-user-template{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;font-size:16px;font-weight:200;line-height:1.1;padding:10px 20px;color:#6d6d6d}.fl-user-template:hover{cursor:pointer;background:#fff;box-shadow:0 6px 20px rgba(0,0,0,.08);text-decoration:none;color:#111;padding-right:68px}.fl-user-template-name{overflow:hidden;text-overflow:ellipsis;-ms-flex:1;flex:1}.fl-user-template-actions{display:none;bottom:0;position:absolute;right:0;top:0}.fl-user-template:hover .fl-user-template-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.fl-user-template-actions a{display:inline-block;padding:15px 0;width:30px}.fl-user-template:hover a:hover i{color:#444!important}.fl-user-templates-message{display:none}.fl-user-template-thumbnail{-ms-flex:0;flex:0;margin-right:20px}.fl-user-template-thumbnail .fl-builder--template-thumbnail{background-size:cover;background-position:center top;width:45px}.fl-user-template-thumbnail .fl-builder--template-thumbnail:hover{box-shadow:none;transform:scale(1);transition-property:none}.fl-builder--save-new-user-template .fl-user-template-thumbnail .fl-builder--template-thumbnail{border-style:dashed;border-width:2px;border-color:#ccd4da}.fl-builder--save-new-user-template .fl-save-control{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex:1;flex:1}.fl-builder--save-new-user-template .fl-save-control input{background:0 0;border:none!important;-ms-flex:1;flex:1;font-size:16px;margin-right:10px;margin-left:-12px;color:#000}.fl-builder--save-new-user-template .fl-save-control input::-webkit-input-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input::-moz-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input:-ms-input-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input:-moz-placeholder{color:#777}@keyframes fl-slide-in-right{from{transform:translateX(50px)}to{transform:translateX(0)}}.fl-builder--save-new-user-template .fl-save-control button{display:none;animation-name:fl-slide-in-right;animation-duration:.25s;background-color:#00a0d2;border:none;padding:0 15px}.fl-save-control-mask{display:none;background:0 0;position:absolute;top:-50px;left:0;bottom:0;right:0;z-index:-1;min-height:80vh}.fl-builder-templates-cta{margin-bottom:20px}.fl-builder-templates-cta p{display:inline-block!important;width:75%!important;font-size:14px!important;line-height:1.5!important;margin-bottom:0!important}.fl-builder-templates-cta .fl-builder-upgrade-button{font-size:13px!important;line-height:13px!important;position:relative;top:8px;left:15px;padding:1px 12px}.fl-builder-settings-message,.fl-builder-settings-message *{font-size:15px!important;line-height:23px!important}.single-fl-builder-template .fl-content{width:100%!important}form.fl-builder-settings{height:100%;margin:0;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fl-builder-settings-message{padding:20px 25px!important;background:#f2f2f2!important}.fl-builder-preview-loader{position:relative;top:-2px;margin-left:3px}.fl-lightbox-header .fl-builder-preview-loader{margin:0;position:absolute;right:40px;top:15px}@keyframes fl-grab-attention{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}.fl-lightbox-width-slim .fl-form-table{margin:10px 12px 10px 10px!important;width:calc(100% - 40px)}.fl-lightbox-width-slim .fl-form-table th{display:block;position:relative;padding:10px 0 0 12px!important;width:auto!important}.fl-lightbox-width-slim .fl-form-table td{display:block}.fl-lightbox-width-slim .fl-form-table .fl-field[data-type=editor] td:first-child,.fl-lightbox-width-slim .fl-form-table td:first-child{padding-left:0!important}.fl-field-label .fl-field-responsive-toggle,.fl-lightbox-width-slim .fl-field-control-wrapper .fl-field-responsive-toggle{display:none}.fl-lightbox-width-slim .fl-field-label .fl-field-responsive-toggle{display:inline-block;padding:0 5px!important}.fl-lightbox-width-slim input.text-full+.fl-field-description,.fl-lightbox-width-slim select+.fl-field-description{display:block;padding:8px 10px;margin:0}.fl-lightbox-width-slim .fl-builder-settings-fields select{width:100%}.fl-lightbox-width-slim .fl-color-picker{display:-ms-flexbox;display:flex;width:auto}.fl-lightbox-width-slim .fl-color-picker-clear{-ms-flex:0 0 40px;flex:0 0 40px}.fl-lightbox-width-slim .fl-field[data-type=dimension] .fl-field-responsive-setting{width:100%}.fl-lightbox-width-slim .fl-dimension-field-unit-select select{width:auto!important}.fl-lightbox-width-slim .fl-gradient-picker-color-row{width:50%}.fl-lightbox-width-slim .fl-color-picker.fl-gradient-picker-color,.fl-lightbox-width-slim .fl-typography-field-align .fl-button-group-field-option{width:100%}.fl-lightbox-width-slim .fl-typography-field-align .fl-button-group-field-options{float:none}.fl-lightbox-width-slim .mce-menubtn.mce-fixed-width button{width:72px!important}.fl-lightbox-width-slim .fl-builder-settings-tab-description{margin:20px 10px}.fl-lightbox-width-micro .mce-menubtn.mce-fixed-width button{width:38px!important}.fl-lightbox-width-micro .mce-btn[aria-label=Fullscreen],.fl-lightbox-width-micro .mce-btn[aria-label=Blockquote]{display:none}.fl-lightbox-width-micro .mce-toolbar i.mce-ico{width:18px}.fl-lightbox-width-slim .fl-field[data-type=editor] .fl-field-control-wrapper,.fl-lightbox-width-slim .fl-field[data-type=code] .fl-field-control-wrapper{margin-left:-10px;margin-right:-30px}.fl-lightbox .wp-editor-tools{padding-left:6px;padding-right:28px}.fl-lightbox .mce-top-part::before{box-shadow:none!important}.mce-container .mce-stack-layout span{color:initial}.fl-lightbox div.mce-toolbar-grp{background:0 0;border:none}.fl-lightbox div.mce-toolbar-grp>div{padding:0 3px}.fl-lightbox .fl-builder-settings .wp-switch-editor{background:#e7ebef;border:1px solid transparent}.fl-lightbox .html-active .switch-html,.fl-lightbox .quicktags-toolbar,.fl-lightbox .tmce-active .switch-tmce{background:#fff}.fl-lightbox .quicktags-toolbar,.fl-lightbox .wp-editor-container{border:none}.fl-lightbox .mce-toolbar .mce-container-body{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-lightbox-width-slim .mce-toolbar .mce-container-body{-ms-flex-pack:center;justify-content:center}.fl-lightbox textarea.wp-editor-area{line-height:1.5;padding:20px;width:calc(100% - 10px)}.fl-lightbox .wp-core-ui .button,.fl-lightbox .wp-core-ui .button-secondary{border:none;box-shadow:none;background:#e7ebef}.fl-lightbox-width-slim .fl-shadow-field .fl-dimension-field-units{width:auto}.fl-lightbox-width-slim .fl-shadow-field .fl-dimension-field-units input{max-width:none;width:100%!important}.fl-lightbox-width-slim .fl-builder-field-multiple{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-field-control,.fl-lightbox-width-slim .fl-builder-field-multiple .fl-field-label{width:100%!important}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-form-field-preview-text{max-width:225px}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-builder-field-actions{position:absolute!important;top:0;right:0;width:70px;z-index:1}.fl-lightbox-width-slim .fl-builder-field-actions-single .fl-builder-field-copy{float:right!important;margin-right:5px}.fl-lightbox-width-slim .fl-field[data-type=time] select{width:auto}.fl-builder-settings-tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;overflow:hidden;height:32px;background:#e7ebef}.fl-builder-content-group-select{padding:0 10px 6px;display:none}.fl-builder-content-group-select select{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;box-sizing:border-box;padding:8px 10px;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;border:2px solid #e4e7ea;color:#161B20}select:focus{border-width:2px!important;border-style:solid!important;border-color:#00a0d2!important;outline:0!important}.fl-legacy-settings-tab{background:url(../img/ajax-loader.svg) center center no-repeat;height:100px}.fl-builder-settings-tab:first-child .fl-legacy-settings-tab{background:0 0;height:auto}body .fl-builder-settings-tabs>*{box-sizing:border-box;color:#676F7A!important;fill:#676F7A!important;background:0 0;border:2px solid transparent;border-radius:0;margin:0;outline:0;padding:1px 16px;text-decoration:none!important;font-size:13px;font-weight:400!important;-ms-flex:0 0 auto;flex:0 0 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}body .fl-lightbox-width-slim .fl-builder-settings-tabs>*{-ms-flex:1 1 auto;flex:1 1 auto}body .fl-builder-settings-tabs>.fl-builder-settings-tabs-more{-ms-flex:0 0 60px;flex:0 0 60px;display:none;margin-left:auto;-ms-flex-pack:center;justify-content:center}.fl-builder-settings-tabs-more svg{width:16px;height:auto;margin:auto}.fl-builder-settings-tabs-more g,.fl-builder-settings-tabs-more path,.fl-builder-settings-tabs-more svg{fill:inherit}body .fl-lightbox-has-tab-overflow .fl-builder-settings-tabs-more{display:-ms-flexbox;display:flex}.fl-builder-settings-tabs>:active,.fl-builder-settings-tabs>:hover{top:0;color:#333;background:0 0;border:2px solid transparent}.fl-builder-settings-tabs>:focus{top:0;outline:0;border:2px solid transparent;background:0 0;color:#0086b0;fill:#0086b0}.fl-builder-settings-tabs .fl-active,.fl-builder-settings-tabs-more.fl-contains-active,.fl-builder-settings-tabs-overflow-menu .fl-active{color:#0086b0!important;fill:#0086b0!important;position:relative;background:#fff}.fl-builder-settings-tabs .fl-active.fl-overflowed,.fl-builder-settings-tabs .fl-overflowed{display:none!important}.fl-builder-settings-tabs .error{color:#d03436;padding-right:10px}.fl-builder-settings-tabs .error .fl-error-icon,.fl-builder-settings-tabs-overflow-menu .error .fl-error-icon{background:url(../img/sprite.png) -148px -5px no-repeat;display:inline-block;height:16px;margin-left:7px;position:relative;top:3px;width:16px}.fl-builder-settings-tabs-more.fl-contains-errors{fill:#d03436!important}.fl-builder-settings-tab{display:none;width:auto!important}.fl-builder-settings-tab.fl-active{display:block}.fl-builder-settings-tab-description{background:#e4e7ea;padding:10px 15px;border-radius:4px;margin:20px}.fl-builder-settings-tab-description a{text-decoration:underline!important}.fl-builder-settings-tab-description a:hover{color:#333}.fl-builder-settings-tabs-overflow-menu{display:none;position:absolute;left:0;right:0;border:2px solid #e6eaed;border-top:3px solid #00a0d2;border-radius:4px;background:#fff;z-index:9999;margin:0 6px;padding:10px;-ms-flex-direction:column;flex-direction:column;box-shadow:0 0 20px 2px rgba(0,0,0,.2)}.fl-builder-settings-tabs-overflow-menu:before{bottom:100%;right:20px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#00a0d2;border-width:10px;margin-left:-10px}.fl-builder-settings-tabs-overflow-menu>a{display:block;padding:10px 15px;font-size:14px;font-weight:600!important;border:2px solid transparent;border-radius:4px;outline:0}.fl-builder-settings-tabs-overflow-menu>a:hover{background:#e6eaed;text-decoration:none}.fl-builder-settings-tabs-overflow-click-mask{display:none;position:fixed;top:0;bottom:0;left:0;right:0;background:0 0;z-index:11}.fl-form-table{background:none;border:none;width:calc(100% - 35px)}.fl-form-table tbody{border:none}.fl-form-table tr,.fl-form-table tr:nth-child(even){background:0 0}.fl-form-table td,.fl-form-table th{background:0 0!important;border:none!important;font-weight:400!important;text-align:left!important}.fl-form-table th{padding:10px 15px 10px 30px!important;vertical-align:top!important;width:200px!important}.fl-form-table td:first-child{padding-left:30px!important}.fl-form-table th label{color:#333;width:auto;max-width:100%}.fl-form-table th label i{color:grey}.fl-form-table th label i:hover{color:#555}.fl-form-table td{padding:8px 10px}.fl-lightbox-width-slim .fl-form-table td{padding:4px 0 5px}.fl-builder-settings-fields{margin:0;overflow:hidden;position:relative;-ms-flex:1 100%;flex:1 100%;visibility:hidden}.fl-lightbox-header .fl-builder-settings-fields{height:auto;margin:0;position:absolute;right:10px;top:10px}.fl-builder-settings-fields .fl-nanoscroller-content{padding:4px 0 0}.fl-builder-settings-fields .fl-field-control-wrapper{position:relative}.fl-field{animation-duration:.25s;animation-delay:.1s}.fl-builder-settings-fields input[type=date],.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select,.fl-builder-settings-fields textarea{background:#fff!important;border-color:transparent!important;border-style:solid;border-width:2px;border-radius:4px!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);color:#333!important;display:inline;font-size:13px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px 6px;width:auto;box-sizing:border-box}i.fl-dimension-field-link,i.fl-field-responsive-toggle{line-height:18px!important;cursor:pointer;vertical-align:middle}.fl-builder-settings-fields input[type=date],.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select:not(multiple){height:36px!important}.fl-builder-settings-fields select,.fl-builder-settings-fields select[multiple]{height:auto!important}.fl-builder-settings-fields input[type=number]{width:70px}.fl-builder-lightbox .fl-builder-settings-fields input[type=date]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=email]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=file]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=number]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=password]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=search]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=tel]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=text]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=url]:focus,.fl-builder-lightbox .fl-builder-settings-fields select:focus,.fl-builder-lightbox .fl-builder-settings-fields textarea:not(.wp-editor-area):focus{border-width:2px!important;border-style:solid!important;border-color:#00a0d2!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.12)!important}.fl-builder-settings-fields ::-webkit-input-placeholder{color:#999!important;font-size:13px}.fl-builder-settings-fields input:-moz-placeholder{color:#999;font-size:13px}.fl-builder-settings-fields ::-moz-placeholder{color:#999!important;font-size:13px}.fl-builder-settings-fields input:-ms-input-placeholder{color:#999;font-size:13px}.fl-builder-settings-fields label{display:inline-block;font-weight:400;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-bottom:3px;font-size:12px}.fl-builder-settings-fields select{-webkit-appearance:none;-moz-appearance:none;box-sizing:border-box;color:#000;margin:0 0 2px;padding:2px 10px;padding-right:30px!important;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important}.fl-dimension-field-unit input[type=number],.fl-unit-field-inputs input[type=number]{-moz-appearance:textfield}.fl-builder-settings-fields select[multiple]{height:60px;background-image:none!important}.fl-builder-custom-field select,.fl-photo-field select{box-shadow:none;border-color:#e6eaed!important}.fl-builder-settings-section:first-child{border-top:none!important}.fl-builder-settings-section-header{background-color:#e7ebef;border-top:4px solid #e7ebef;cursor:pointer;height:30px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-builder-settings-description{padding:0 10px 10px;margin:0;font-style:italic;opacity:.75}.fl-builder-settings-fields table{margin:20px 0}.fl-builder-settings-fields .fl-builder-settings-title{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;background:#F5F7F9;color:#353535;padding:2px 10px;margin:0;font-size:13px!important;font-weight:400;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:2px solid transparent;border-radius:0}.fl-builder-settings-fields .fl-builder-settings-title:active,.fl-builder-settings-fields .fl-builder-settings-title:hover{top:0}.fl-builder-settings-fields .fl-builder-settings-title:focus{top:0;border-color:#e0e4ea}.fl-builder-settings-fields .fl-builder-settings-title>svg{height:6px;width:9px;margin-right:7px;transition-property:transform;transition-duration:.15s}.fl-builder-settings-section-collapsed{margin-bottom:4px}.fl-builder-settings-section-collapsed .fl-builder-settings-section-content{display:none}.fl-builder-settings-section-collapsed .fl-builder-settings-title{background:0 0;-ms-flex:1 1 100%;flex:1 1 100%}.fl-builder-settings-section-collapsed .fl-builder-settings-title>svg{transform:rotate(-90deg)}.wp-core-ui h1,.wp-core-ui h2,.wp-core-ui h3,.wp-core-ui h4,.wp-core-ui h5,.wp-core-ui h6,.wp-core-ui p{color:#333;font-family:inherit}.wp-core-ui #media-attachment-date-filters{width:auto}.wp-core-ui input[type=search]::-webkit-input-placeholder{color:#333}.wp-core-ui input[type=search]:-ms-input-placeholder{color:#333}.wp-core-ui input[type=search]::-ms-input-placeholder{color:#333}.wp-core-ui input[type=search]::placeholder{color:#333}.wp-core-ui .submitbox .submitdelete{color:#a00}.wp-core-ui button{font-weight:400}.wp-core-ui input[type=date],.wp-core-ui input[type=email],.wp-core-ui input[type=file],.wp-core-ui input[type=number],.wp-core-ui input[type=password],.wp-core-ui input[type=search],.wp-core-ui input[type=tel],.wp-core-ui input[type=text],.wp-core-ui input[type=url],.wp-core-ui select,.wp-core-ui textarea{background-color:#fff;border-color:#dfdfdf;border-style:solid;border-width:1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#333;font-weight:400}.wp-core-ui input[type=date]:focus,.wp-core-ui input[type=email]:focus,.wp-core-ui input[type=file]:focus,.wp-core-ui input[type=number]:focus,.wp-core-ui input[type=password]:focus,.wp-core-ui input[type=search]:focus,.wp-core-ui input[type=tel]:focus,.wp-core-ui input[type=text]:focus,.wp-core-ui input[type=url]:focus,.wp-core-ui select:focus,.wp-core-ui textarea:focus{background:0 0;border-color:#aaa}.wp-core-ui input[type=search]{background-image:none;padding:6px}.fl-field-responsive-setting{display:inline-block;width:100%}.fl-field-responsive-setting-medium,.fl-field-responsive-setting-responsive{display:none}.fl-field-control-wrapper i.fl-field-responsive-toggle{padding:9px 0 0;position:absolute;left:-25px}i.fl-field-responsive-toggle{color:grey;display:inline-block;font-size:15px!important;height:auto;text-align:left;width:20px}.fl-builder-settings-fields input.text-full,.fl-builder-settings-fields textarea{width:100%}i.fl-field-responsive-toggle:hover{color:#000}.fl-builder-settings-fields .fl-text-field-add-value{min-width:50%;margin-top:.62em}.fl-field[data-type=shadow] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-shadow-field .fl-color-picker{margin-bottom:15px;width:100%}.fl-color-picker{cursor:pointer}.fl-color-picker .fl-color-picker-clear{box-sizing:border-box;display:inline-block}.fl-color-picker .fl-color-picker-clear:hover{background-color:#ededed}.colorpicker input{padding:0!important;font-size:11px!important;color:#fff!important;width:29px!important;height:auto!important;background:0 0!important;border:none!important}.colorpicker .colorpicker_hex input{width:45px!important}.fl-gradient-picker-type{display:-ms-flexbox;display:flex;margin-bottom:15px}.fl-gradient-picker-type input{margin:0!important}.fl-gradient-picker-type select{margin-bottom:0!important}.fl-gradient-picker-type-select{margin-right:10px!important}.fl-gradient-picker-colors{display:-ms-flexbox;display:flex}.fl-gradient-picker-color-row{display:-ms-flexbox;display:flex;margin-right:15px}.fl-color-picker.fl-gradient-picker-color,.fl-gradient-picker-color-row:last-child{margin-right:0}.fl-color-picker.fl-gradient-picker-color .fl-color-picker-color{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-gradient-picker .fl-gradient-picker-stop input{border-top-left-radius:0!important;border-bottom-left-radius:0!important;margin:0!important}.fl-field[data-type=dimension] .fl-field-label label{padding-right:35px}.fl-field[data-type=dimension] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-field[data-type=dimension] .fl-field-description{padding:9px 0 0 5px}.fl-field[data-type=dimension] .fl-field-responsive-setting{width:auto}.fl-dimension-field-units{border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex;height:36px;margin:1px 1px 20px;position:relative;max-width:350px}.fl-dimension-field-units>*{border-right:1px solid #e6eaed;width:100%}body .fl-dimension-field-units>:last-child{border-right:none!important}body .fl-dimension-field-units>:first-child>input[type]{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important}body .fl-dimension-field-units>:last-child>*{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.fl-dimension-field-unit input[type],.fl-dimension-field-units .fl-field-unit-select{box-shadow:none!important;margin:0!important;border-radius:0!important}.fl-dimension-field-unit input{width:100%!important}.fl-dimension-field-unit input::-webkit-inner-spin-button,.fl-dimension-field-unit input::-webkit-outer-spin-button{-webkit-appearance:none}.fl-dimension-field-unit label{padding:5px 0 0;font-size:11px;font-weight:700;color:inherit!important;display:block;text-align:center;opacity:.5}.fl-dimension-field-unit .fl-field-popup-slider{margin-top:27px}i.fl-dimension-field-link{color:grey;font-size:15px!important;height:auto;text-align:left;width:20px}i.fl-dimension-field-link:hover{color:#000}i.fl-dimension-field-link.dashicons-editor-unlink,i.fl-dimension-field-link.dashicons-editor-unlink:hover{color:#0086b0}.fl-field-label .fl-dimension-field-link,.fl-lightbox-width-slim .fl-dimension-field-link{display:none}.fl-lightbox-width-slim .fl-field-label .fl-dimension-field-link{display:inline-block}.fl-field-control-wrapper .fl-dimension-field-link{padding:9px 0 0;left:-50px;position:absolute}.fl-dimension-field-unit-select{display:-ms-flexbox;display:flex;width:auto!important}.fl-field[data-type=unit] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-field[data-type=unit] .fl-field-description{margin-left:7px!important;padding-top:9px}.fl-field[data-type=unit] .fl-field-responsive-setting{width:auto}.fl-unit-field-inputs{background:0 0;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex}.fl-unit-field-inputs .fl-field-unit-select,.fl-unit-field-inputs input[type]{box-shadow:none!important;margin:0!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-unit-field-inputs .fl-field-unit-select{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.fl-unit-field-inputs input::-webkit-inner-spin-button,.fl-unit-field-inputs input::-webkit-outer-spin-button{-webkit-appearance:none}.fl-unit-field-input{border-right:1px solid #e6eaed!important}body .fl-unit-field-input:last-child{border-right:none!important}body .fl-unit-field-input:last-child>*{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.fl-unit-field-unit-select{display:-ms-flexbox;display:flex;width:auto!important}select.fl-field-unit-select{background-color:#E7EBEF!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important}div.fl-field-unit-select{background-color:#E7EBEF!important;padding:9px 7px!important;width:100%}.fl-field-popup-slider{background:#fff;border-radius:4px;box-shadow:0 4px 25px 0 rgba(0,0,0,.18);display:none;margin-top:10px;padding:15px;position:absolute;left:0;right:0;z-index:9999}.fl-field-popup-slider-top{margin-top:0!important;top:-100%;transform:translateY(-10px)}.fl-field-popup-slider-input{background:#E7EBEF;cursor:pointer;height:4px;text-align:left;position:relative;border-radius:3px}.fl-field-popup-slider-input .ui-slider-handle{background:#fff;border:2px solid #3AA4CC;border-radius:100%;cursor:pointer;height:12px;width:12px;position:absolute;top:-6px;margin-left:-7px}.fl-field-popup-slider-input .ui-slider-handle:focus{outline:0}.fl-field-popup-slider-arrow{position:absolute;top:-22px}.fl-field-popup-slider-arrow:after{content:' ';border-color:transparent transparent #fff;border-style:solid;border-width:0 8px 8px;width:0;height:0}.fl-field-popup-slider-top .fl-field-popup-slider-arrow{top:auto;bottom:-24px}.fl-field-popup-slider-top .fl-field-popup-slider-arrow:after{border-bottom-width:0;border-top-width:8px;border-top-color:#fff}input[type=number].fl-field-popup-slider-focus{border:2px solid #00a0d2!important}.fl-font-field{display:-ms-flexbox;display:flex}.fl-font-field label{display:block!important;margin:0!important;padding:0 0 6px 12px}.fl-font-field .fl-font-field-font-wrapper{margin-right:8px;width:70%!important}.fl-font-field .fl-font-field-weight-wrapper{width:30%!important}.fl-compound-field{max-width:350px}.fl-compound-field-section-toggle{background:#E7EAEF;border-radius:4px;border-top:2px solid transparent;border-bottom:2px solid transparent;cursor:pointer;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:32px;margin-bottom:8px;padding:0 12px}.fl-compound-field-section-toggle:hover{background:#dadfe5}.fl-compound-field-section-toggle .dashicons{font-size:15px;height:15px;margin-right:5px;width:15px}.fl-compound-field-section:last-child .fl-compound-field-section-toggle{margin-bottom:0}.fl-compound-field-section.fl-compound-field-section-visible{padding-bottom:12px}.fl-compound-field-section.fl-compound-field-section-visible:last-child{padding-bottom:0}.fl-compound-field-section-visible .fl-compound-field-section-toggle{background:0 0;border-top:2px solid #E7EBEF;border-radius:0}.fl-compound-field-section-visible .fl-compound-field-section-toggle:hover{background:0 0}.fl-compound-field-section-visible .fl-compound-field-section-toggle .dashicons:before{content:'\f347'}.fl-compound-field-row{display:none;padding-bottom:12px}.fl-compound-field-section-visible .fl-compound-field-row{display:-ms-flexbox;display:flex}.fl-compound-field-label{display:block!important;margin:0!important;padding:0 0 6px 12px}.fl-compound-field-label-bottom{padding:6px 0 0 12px}.fl-compound-field-label .fl-dimension-field-link{display:inline-block;padding:0 0 0 2px;position:relative;left:auto;top:-1px}.fl-compound-field-setting{padding-right:8px;width:100%}.fl-compound-field-setting:last-child{padding-right:0}.fl-compound-field-setting select{margin:0!important;width:100%}.fl-compound-field-setting .fl-unit-field-input input{width:100%!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-compound-field-setting .fl-unit-field-input{width:50%!important}.fl-compound-field-setting .fl-unit-field-input select.fl-field-unit-select{background-position:center right 2px!important;padding:2px 5px!important;width:100%;font-size:11px}.fl-typography-field .fl-font-field-font-wrapper{margin-right:8px!important}.fl-typography-field-spacing{width:calc(33.33% - 8px)}.fl-typography-field-transform{width:66.66%}.fl-typography-field-transform .fl-button-group-field-options{float:none}.fl-typography-field-transform .fl-button-group-field-option{width:100%;padding:0 7px}.fl-typography-field .fl-shadow-field{display:-ms-flexbox;display:flex}.fl-typography-field .fl-shadow-field .fl-color-picker{margin:0 8px 0 0;width:calc(33.33% - 8px)}.fl-typography-field .fl-shadow-field .fl-dimension-field-units{margin-left:0;margin-top:0;margin-right:0;width:66.66%}.fl-button-group-field-options{background:#E7EBEF;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex;float:left;height:36px;overflow:hidden}.fl-button-group-field-option{cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:0 5px;border-radius:0;border:2px solid transparent;background:0 0}.fl-button-group-field-option:hover{top:0;background-color:transparent;color:#000;border:2px solid transparent}.fl-button-group-field-option:focus{top:0;background-color:transparent;border:2px solid #00a0d2;color:#333}.fl-button-group-field-option:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.fl-button-group-field-option:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.fl-button-group-field-option[data-selected="1"]{background-color:#fff;color:#000}.fl-button-group-field-option i{color:#6B6E75}.fl-button-group-field-option:hover i{color:#333}.fl-compound-field-cell{width:50%;display:block;float:left;padding-top:13px}.fl-compound-field-cell:first-child{padding-right:4px}.fl-compound-field-cell:last-child{padding-left:4px}.fl-compound-field-cell label{padding:5px 0 0;font-size:11px;font-weight:700;color:inherit!important;display:block;text-align:center;opacity:.5}.fl-shape-transform-field .fl-compound-field-row{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-shape-transform-field .fl-compound-field-row>*{width:auto;-ms-flex:1 1 auto;flex:1 1 auto}.fl-shape-transform-field .fl-compound-field-row>:first-child{-ms-flex:0 0 auto;flex:0 0 auto}.fl-shape-transform-field .fl-shape-orientation-controls{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-shape-transform-field .fl-shape-orientation-controls>*{-ms-flex:0 0 auto;flex:0 0 auto}.fl-shape-transform-field .fl-shape-orientation-controls .fl-button-group-field>*,.fl-shape-transform-field .fl-shape-orientation-controls .fl-button-group-field>* button{border-radius:0}.fl-shape-orientation-controls .fl-button-group-field:first-child>*,.fl-shape-orientation-controls .fl-button-group-field:first-child>* button{border-top-left-radius:4px;border-bottom-left-radius:4px}.fl-shape-orientation-controls .fl-button-group-field:last-child>*,.fl-shape-orientation-controls .fl-button-group-field:last-child>* button{border-top-right-radius:4px;border-bottom-right-radius:4px}.fl-builder-custom-field{background:#fff;border:2px solid transparent;border-radius:4px;padding:7px 10px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);min-height:36px;box-sizing:border-box}.fl-builder-field-multiple .fl-builder-custom-field{cursor:move}.fl-builder-custom-field a{color:#21759b!important;text-decoration:underline!important}.fl-builder-custom-field a:hover{color:#d54e21!important}.fl-builder-custom-field label.error{margin-top:5px}.fl-photo-field .fl-photo-preview{display:-ms-flexbox;display:flex}.fl-photo-field .fl-photo-select,.fl-photo-field.fl-photo-empty .fl-photo-preview{display:none}.fl-photo-field.fl-photo-empty .fl-photo-select{display:block}.fl-photo-field .fl-photo-preview-img{line-height:0;margin:5px 0}.fl-photo-field .fl-photo-preview-img img{max-width:60px}.fl-photo-field .fl-photo-preview select{margin:8px 0 8px 10px;width:calc(100% - 10px)}.fl-photo-field.fl-photo-no-attachment .fl-photo-preview select{display:none}.fl-photo-field .fl-photo-preview-filename{display:none;font-size:13px;font-weight:700;margin:5px 0 9px 11px}.fl-photo-field.fl-photo-no-attachment .fl-photo-preview-filename{display:inline-block;word-break:break-all}.fl-multiple-photos-field .fl-multiple-photos-select,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-add,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-count,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-edit,.fl-multiple-photos-lightbox .gallery-settings,.fl-photo-field.fl-photo-no-attachment .fl-photo-edit{display:none}.fl-photo-field .fl-photo-edit{margin:0 0 0 11px}.fl-photo-field .fl-photo-remove,.fl-photo-field .fl-photo-replace{margin:0 0 0 8px}.fl-builder-edit .media-modal{z-index:9999991}.fl-builder-edit .media-modal-backdrop{z-index:999999}.fl-builder-edit .media-frame{-webkit-backface-visibility:hidden;backface-visibility:hidden}.fl-builder-edit .media-modal-content h1{font-family:inherit}.fl-builder-edit form#wp-link,.popover[class*=tour-],ul.as-list{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-builder-edit .media-modal-content .thumbnail{padding:0;border:none;border-radius:0}.fl-builder-edit .media-modal-content .attachment-preview .thumbnail{margin-bottom:0}.fl-builder-edit .media-modal-content .attachment-preview .thumbnail img{max-width:none}.fl-builder-edit button.media-modal-close{position:absolute;box-shadow:none;-webkit-box-shadow:none}.fl-builder-edit .media-frame.hide-menu{visibility:visible}span.select2-container.select2-container--open{z-index:9999999}.fl-multiple-photos-field .fl-multiple-photos-add{margin:0 0 0 8px}.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-select{display:inline}.fl-multiple-photos-count{font-weight:700;margin-bottom:3px}.fl-video-field .fl-video-select,.fl-video-field.fl-video-empty .fl-video-preview{display:none}.fl-video-field.fl-video-empty .fl-video-select{display:block}.fl-video-field .fl-video-preview-img{float:left;line-height:0;margin:5px 0}.fl-video-field .fl-video-preview-img img{max-width:60px}.fl-video-field .fl-video-preview-img .dashicons.dashicons-media-video{display:block;font-size:60px;height:60px;line-height:60px;width:60px}.fl-video-field .fl-video-preview-filename{display:inline-block;font-size:14px;font-weight:700;margin:7px 0 5px 11px}.fl-video-field .fl-video-remove,.fl-video-field .fl-video-replace{margin:0 0 0 11px}.fl-multiple-audios-field .fl-multiple-audios-select,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-add,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-edit{display:none}.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-select{display:block}.fl-multiple-audios-field .fl-multiple-audios-add{margin:0 0 0 8px}.fl-icon-field .fl-icon-select,.fl-icon-field.fl-icon-empty .fl-icon-preview{display:none}.fl-icon-field.fl-icon-empty .fl-icon-select{display:block}.fl-icon-field .fl-icon-preview i{display:inline-block;font-size:28px;margin:10px 10px 9px;vertical-align:middle}.fl-icon-field .fl-icon-remove{margin:0 0 0 8px}.fl-builder-hidden-editor{display:none}.fl-builder-settings .wp-switch-editor{border-radius:0;color:#333;margin-top:2px}.fl-builder-settings .mce-toolbar .mce-btn-group .mce-btn{margin:2px 0}.fl-builder-settings .mce-menubtn.mce-fixed-width button{width:100px}.fl-builder-settings .mce-menubtn.mce-fixed-width span{width:100%}.mce-close:active,.mce-close:hover,.mce-toolbar .mce-btn button:active,.mce-toolbar .mce-btn button:hover,.mce-window .mce-btn button:active,.mce-window .mce-btn button:hover{background:0 0;border:none}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:1px!important}.wp-editor-container textarea.wp-editor-area{background:0 0;border:none;padding:10px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.fl-builder-edit form#wp-link{color:#000;font-size:13px}.fl-builder-edit form#wp-link #link-options label{display:block;margin-bottom:2px}.fl-builder-edit form#wp-link #link-options label span{padding-right:10px;vertical-align:middle}.fl-builder-edit form#wp-link #link-options input[type=text]{display:inline-block;height:auto;margin:5px 0 0;padding:3px 5px;width:80%}.fl-builder-edit form#wp-link .query-results{top:225px}.fl-code-field{border:1px solid #E6E6E6;border-left:none}.ace_editor,.ace_editor *{font-family:Monaco,Menlo,"Ubuntu Mono","Droid Sans Mono",Consolas,monospace!important;font-size:12px!important;font-weight:400!important;letter-spacing:0!important}.fl-layout-field-option{border:2px solid #d9d9d9;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;cursor:pointer;float:left;line-height:0;max-width:23%;margin:0 1% 2%;padding:5px}.fl-layout-field-option-selected,.fl-layout-field-option:hover{border-color:red}.fl-layout-field-option img{max-width:100%}.fl-link-field .fl-link-field-input-wrap{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-link-field-input{width:auto!important;-ms-flex:1 1 100%;flex:1 1 100%}.fl-link-field .fl-link-field-input-wrap button{-ms-flex:0 0 0%;flex:0 0 0%;height:36px;margin:1px 1px 1px 5px}.fl-link-field-options-wrap{padding:7px 0 0 12px}.fl-link-field-options-wrap label{margin-right:7px}.fl-link-field-options-wrap span{font-size:11px;font-weight:700;color:inherit!important;text-align:center;opacity:.5}.fl-link-field-search{display:none;border:2px solid #e6eaed;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;margin:4px 0 0;padding:10px}.fl-link-field-search-title{display:block;margin:0 0 3px 2px}.fl-link-field-search-cancel{margin-top:6px}.fl-link-field-search input{box-shadow:none!important;width:100%!important;padding:3px 9px!important}.fl-link-field-search #as-original-link-search{width:100%}.fl-field-connections-toggle{padding:10px 0}.fl-field[data-type=editor] .fl-field-connections-toggle{-ms-flex-align:start;align-items:flex-start}.fl-field[data-type=link] .fl-field-connections-toggle{height:24px;margin-top:1px;-ms-flex-align:start;align-items:flex-start}.fl-field[data-type=link] .fl-field-connection{bottom:25px}.fl-field-connections-menu[data-field=fl-field-text]{margin-top:30px}.fl-help-tooltip{display:inline-block;position:relative}.fl-lightbox-width-slim .fl-help-tooltip{position:static}.fl-help-tooltip-icon{color:#999!important;cursor:pointer;font-size:15px!important;padding:5px;vertical-align:middle}.fl-help-tooltip-text{box-sizing:border-box;background:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ccc;-moz-box-shadow:0 0 5px #ccc;-webkit-box-shadow:0 0 5px #ccc;display:none;font-weight:400;left:23px;padding:10px 13px;position:absolute;top:-6px;width:250px;z-index:1000;border-radius:4px}.fl-lightbox-width-slim .fl-help-tooltip-text{top:30px;left:0;width:100%}.fl-field-control .fl-form-field{margin-bottom:0}.fl-form-field[data-preview-text=icon]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.fl-form-field-preview-text i{display:inline-block;font-size:18px;line-height:22px;margin-right:10px}.fl-builder-field-actions{padding-left:0!important;padding-right:0!important;text-align:center;width:85px}.fl-builder-field-actions i{color:#999!important;cursor:pointer;font-size:13px!important;line-height:29px!important;width:16px}.fl-builder-field-actions i:hover{color:#000!important}.fl-builder-field-actions i.fl-builder-field-copy,.fl-builder-field-actions i.fl-builder-field-delete{margin-left:5px}.fl-builder-field-actions i.fl-builder-field-move{cursor:move}.fl-builder-field-dd-helper{background:#ccc;height:30px!important;float:left;width:130px!important}.fl-builder-field-dd-zone{border:1px dashed #ccc;height:30px}.fl-builder-field-actions-single .fl-builder-field-delete,.fl-builder-field-actions-single .fl-builder-field-move{display:none!important}.fl-builder-field-multiple .fl-builder-field-actions,.fl-builder-field-multiple .fl-field-control,.fl-builder-field-multiple .fl-field-label{padding-top:2px!important;padding-bottom:2px!important}.fl-builder-field-multiple .fl-builder-field-actions{min-width:70px!important}.fl-builder-field-multiple[data-field=icons] .fl-builder-field-actions{width:70px!important}.fl-builder-field-multiple.ui-sortable-helper .fl-field-control{width:60%}.fl-builder-field-multiple.ui-sortable-helper .fl-builder-field-actions{display:none}.fl-builder-widget-settings input{display:inline-block!important;margin:5px 10px 8px!important}.fl-builder-lightbox-loading{background:url(../img/ajax-loader.svg) center center no-repeat;height:100px}.fl-builder-settings .error,.fl-builder-settings input.error{color:#d03436!important}.fl-builder-settings label.error,.fl-builder-settings p.error{color:#d03436;display:block;margin-top:5px}.fl-builder-settings .fl-form-table .fl-field-description{color:#464646;font-style:normal;margin-left:2px}.fl-lightbox .fl-field-connection{right:-1px}.fl-lightbox .fl-field-connection-content{border:2px solid transparent!important;background:#e7ebef!important}.fl-field-connection-content .fl-field-connection-label{color:#676f7a!important}.fl-field-connections-toggle{pointer-events:none;width:20px;right:-25px}.has-scrollbar .fl-field-connections-toggle{right:-22px}.fl-lightbox-width-slim tr[data-type=code] .fl-field-connections-toggle{right:10px}.fl-lightbox-width-slim .fl-code-field{width:90%}.fl-field-connections-toggle-open{transform:none!important}.fl-field-connections-toggle i{pointer-events:auto;color:#abb1ba;font-size:13px!important;transition-property:transform;transition-duration:.15s}.fl-field-connections-toggle-open i{transform:rotate(-45deg)}ul.as-selections{background-color:#fff;border:none;border-radius:4px;box-shadow:none;color:#333;font-size:12px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px;width:auto}ul.as-selections.loading{background:url(../img/ajax-loader-small.svg) 98% center no-repeat}ul.as-selections li.as-selection-item{background:#d4eaf6;border:none;font-size:11px;line-height:14px;padding:8px 15px;border-radius:4px;margin:2px}ul.as-selections li.as-selection-item.blur{background:#f4f4f4}ul.as-selections li.as-selection-item a.as-close{line-height:12px}ul.as-selections li.as-original{margin:0}ul.as-selections li.as-original input{height:auto;font-size:12px;margin:0;padding:0;box-shadow:none}ul.as-list{margin:0;font-size:13px;color:#000;background-color:#fff;background-color:rgba(255,255,255,.95);z-index:2;box-shadow:0 0 10px rgba(0,0,0,.1);border:none;border:1px solid #dfdfdf;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}li.as-message,li.as-result-item{border:none}li.as-result-item.active{background:#e5e5e5;border-radius:0;color:#333;text-shadow:none}li.as-result-item em{background:0 0!important;color:#333!important;font-size:12px;padding:0!important;font-weight:700}.fl-custom-query-filter{display:none}.fl-custom-query .fl-field[data-type=suggest] select{margin-bottom:5px;width:100%}.fl-builder-service-settings{position:relative}.fl-builder-service-error{color:red!important;padding:15px 0 0}.fl-builder-service-account-delete{color:red!important;margin-left:10px;position:relative;top:2px}.fl-lightbox-width-slim .fl-builder-service-account-delete{display:block;padding-top:7px}#fl-field-visibility_user_capability .fl-field-description,.fl-builder-service-connect-row .fl-field-description{background:#f0f0f0;color:#333!important;display:block;float:none;margin:10px 0 0;padding:10px}#fl-field-visibility_user_capability .fl-field-description a,.fl-builder-service-connect-row .fl-field-description a{color:#21759b!important;text-decoration:underline!important}.fl-ordering-field-option{background:#fff;border:1px solid #dfdfdf;border-radius:3px;cursor:move;margin-bottom:5px;padding:5px 10px}.fl-ordering-field-option .fa{color:#ccc;float:right;line-height:16px}#tiptip_holder{z-index:1000000}#tiptip_holder.tip_top #tiptip_arrow_inner{border-top-color:#333}#tiptip_holder.tip_bottom #tiptip_arrow_inner{border-bottom-color:#333}#tiptip_holder.tip_right #tiptip_arrow_inner{border-right-color:#333}#tiptip_holder.tip_left #tiptip_arrow_inner{border-left-color:#333}#tiptip_content{background:#333;box-shadow:none}.fl-builder-getting-started-video{line-height:0!important;padding:10px}.fl-builder-getting-started-video iframe{border:none;height:326px;width:100%}.fl-builder-tour-actions .fl-builder-actions-title{font-size:14px!important;line-height:19px}.fl-builder-tour-mask{bottom:0;left:0;position:fixed;right:0;top:0;z-index:100000000}.fl-builder-tour-dimmed{background:rgba(0,0,0,.7);bottom:0;left:0;position:absolute;right:0;top:0}body>.fl-builder-tour-dimmed{position:fixed}.tour-backdrop{z-index:110000}.popover[class*=tour-]{border:1px solid #ccc;border-radius:0;box-shadow:0 0 40px rgba(0,0,0,.3);color:#666;font-size:13px;font-weight:400;line-height:18px;max-width:none;padding:0;width:300px;z-index:100000001}.popover[class*=tour-].bottom>.arrow{border-bottom-color:#ccc}.popover[class*=tour-].bottom>.arrow:after{border-bottom-color:#f7f7f7}.popover[class*=tour-] .popover-title{border-radius:0;color:#333;letter-spacing:normal;text-transform:none}.popover[class*=tour-] .fa-times{color:#b3b3b3;cursor:pointer;font-size:16px;padding:5px;position:absolute;right:3px;top:2px}.popover[class*=tour-] .fa-times:hover{color:#666}.popover[class*=tour-] .popover-content{border-bottom:1px solid #d9d9d9;padding:13px 15px}.popover[class*=tour-] .fl-builder-tour-next{display:block;float:none;width:100%}.popover-navigation button{min-height:36px}.fl-builder-shortcode-mask-wrap{position:relative;pointer-events:none}.fl-builder-shortcode-mask{bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fl-builder--search{border:2px solid transparent;position:relative;padding:0;width:54px;transition-property:width;transition-delay:.1s;transition-duration:.15s}.fl-builder--search.is-expanded{border:2px solid #00A0D0}.fl-builder--search input[type=text],.fl-builder--search input[type=text]:focus{background-color:transparent;border:none!important;box-sizing:border-box;width:100%;font-size:16px;text-align:center}.fl-builder--search:before{display:-ms-flexbox;display:flex;top:0;left:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;content:"\f002";font:normal normal normal 14px/1 Font Awesome\ 5 Free;text-align:center;width:100%;height:100%;position:absolute;pointer-events:none;color:rgba(128,128,128,.6);font-size:17px;opacity:1;transition-property:opacity;transition-duration:.15s}.fl-builder--main-menu-panel,.fl-builder-ui-keyboard-shortcuts{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important}.fl-builder--search.has-text:before,.fl-builder--search.is-expanded:before{opacity:0}.fl-builder--search input::-webkit-input-placeholder{color:rgba(128,128,128,0)!important;transition:color .25s}.fl-builder--search input:focus::-webkit-input-placeholder{color:rgba(128,128,128,.4)!important}.fl-builder--search .search-label{cursor:text}.fl-builder--search .search-clear{display:none;padding:10px 10px 10px 30px;color:#a7a7a7;font-size:12px;position:absolute;right:0;top:0;background-color:#eff1f2;background:linear-gradient(to left,#e4e7ea,#e4e7ea 75%,rgba(228,231,234,0))}.fl-builder--search.has-text .search-clear,.fl-builder--search.is-expanded input{display:inline-block}.fl-builder--search:hover .search-clear{color:#888;background-color:#eff1f2;background:linear-gradient(to left,#dadfe5,#dadfe5 75%,rgba(218,223,229,0))}.fl-builder--search.is-expanded{width:246px}@keyframes fl-builder-show-menu-item{from{transform:translateY(10px) scale(.8);opacity:0}to{transform:translateX(0) translateY(0) scale(1);opacity:1}}.fl-builder--main-menu-panel{display:none;box-sizing:border-box;position:fixed;top:calc(45px + 10px);left:10px;width:360px;color:#222;max-height:calc(100% - 66px);border-radius:4px;background:#fff;border:none;border-top:3px solid #00a0d2;box-shadow:0 11px 45px 8px rgba(0,0,0,.1);font-size:14px!important;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:10000009;pointer-events:auto}.fl-builder--main-menu-panel.is-showing{display:-ms-flexbox;display:flex}.fl-builder--main-menu-panel:before,.fl-theme-builder-preview-select-open .fl-theme-builder-preview-select-items:before{bottom:100%;right:6px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#00a0d2;border-width:13px;margin-left:-13px}.fl-builder--main-menu-panel-views{-ms-flex:1 1 100%;flex:1 1 100%;overflow:auto}.fl-builder--main-menu-panel-mask{display:none;position:fixed;top:0;left:0;right:0;bottom:0;z-index:1000119}.fl-builder--main-menu-panel .fl-builder--tabs{padding-left:20px;padding-top:15px}.fl-builder--main-menu-panel-view{display:none}.fl-builder--main-menu-panel-view.is-showing{display:block}.fl-builder--main-menu-panel-view-title{font-size:24px;font-weight:600;padding:25px 22px 0;line-height:1;white-space:nowrap}.fl-builder--main-menu-panel-view-title .title-accessory{float:right;color:#b1b1b1}.fl-builder--main-menu-panel-view-title .title-accessory>i{font-size:20px!important;width:25px!important}.fl-builder--main-menu-panel-view-title .title-accessory>i:hover{color:#222}.fl-builder--main-menu-panel-view-title .pop-view{padding:10px;margin-left:-10px;opacity:.5;font-size:25px;font-weight:400;cursor:pointer;background:0 0;outline:0;border:none;color:inherit}.fl-builder--main-menu-panel-view-title .pop-view:focus{outline:0;top:0;background:#E5EAED!important}.fl-builder--menu-item:before{display:block;content:"";float:none;clear:both}.fl-builder--menu-item{color:inherit;text-align:left;box-sizing:border-box;display:block;padding:10px 15px;margin:0 10px;width:calc(100% - 20px);background:0 0;border:none;border-radius:4px;font-size:14px;line-height:1.1;cursor:pointer;opacity:1;text-transform:none}.fl-builder--menu-item .menu-view.view-revisions{opacity:.5;padding-left:5px}.fl-builder--menu-item .menu-event.event-showGlobalSettings,.fl-builder--menu-item .menu-event.event-showLayoutSettings{color:#6bc373;padding-left:5px}.fl-builder--menu-item:hover{background:#eaf1f8;border:none;text-decoration:none;color:#000}.fl-builder--selector-menu .fl-builder--menu-item:hover{background:#fff}.fl-builder--menu-item-accessory{float:right;text-align:center;display:inline-block;min-width:40px;font-size:14px}.fl-builder--menu-item-accessory.view-arrow{font-size:18px}.fl-builder--menu{padding:0;margin:20px 0}.fl-builder--menu hr{margin:8px 0;background:#e6eaed!important;height:1px;border:none}.fl-builder--menu .fl-builder-video-wrap{padding:0 10px 10px}.fl-revision-list-item{display:-ms-flexbox;display:flex}.fl-revision-list-item-text{padding-left:15px}.fl-revision-list-item-date{padding-bottom:5px}.fl-builder--revision-actions{display:none;position:fixed;top:4px;left:4px;z-index:100008;padding:4px 4px 6px;-ms-flex-pack:center;justify-content:center;background:#fff;border-radius:4px}.fl-builder--revision-actions *{margin-right:5px}.fl-builder--revision-actions :last-child{margin:0}.fl-builder--menu-item[data-event=noRevisionsMessage]:hover{background:0 0;box-shadow:none;cursor:default}.fl-no-revisions-message-title{font-weight:700;margin-bottom:10px}.fl-no-revisions-message-text{line-height:22px}.fl-builder-module-placeholder-message{border:1px dashed #ccc;overflow:hidden;padding:20px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fl-field-connections-menu{z-index:999999}.fl-field[data-type=editor] .fl-field-connections-toggle{right:5px!important}.fl-field-connections-inline-toggle{display:inline;color:#9a9b9c;margin-left:6px}.fl-field-connections-inline-toggle i{transition-property:transform;transition-duration:.15s}.fl-field-connections-inline-toggle.fl-field-connections-toggle-open i{transform:rotate(45deg)}.fl-builder-add-ultimate-presets-button,.fl-builder-add-ultimate-rows-button,.fl-builder-pp-add-template-button,.pp-preview-button,.uabb-live-preview-button{display:none!important}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none;background:0 0;transition-property:background;transition-duration:.15s}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-ne,.ui-resizable-nw,.ui-resizable-se,.ui-resizable-sw{width:12px;height:12px}.ui-resizable-se{cursor:se-resize;right:-4px;bottom:-4px}.ui-resizable-sw{cursor:sw-resize;left:-4px;bottom:-4px}.ui-resizable-nw{cursor:nw-resize;left:-4px;top:-4px}.ui-resizable-ne{cursor:ne-resize;right:-4px;top:-4px}.fl-builder-resizable-iframe-fix{position:absolute;top:0;right:0;bottom:0;left:0;z-index:100000000}.fl-builder-panel .ui-resizable-handle:active,.fl-builder-panel .ui-resizable-handle:hover,.fl-lightbox .ui-resizable-handle:active,.fl-lightbox .ui-resizable-handle:hover{background:#00a0d2}.fl-builder-panel .ui-resizable-n,.fl-builder-panel .ui-resizable-s,.fl-lightbox .ui-resizable-n,.fl-lightbox .ui-resizable-s{height:6px}.fl-builder-panel .ui-resizable-n,.fl-lightbox .ui-resizable-n{top:-3px}.fl-builder-panel .ui-resizable-s,.fl-lightbox .ui-resizable-s{bottom:-3px}.fl-builder-panel .ui-resizable-e,.fl-builder-panel .ui-resizable-w,.fl-lightbox .ui-resizable-e,.fl-lightbox .ui-resizable-w{width:6px}.fl-builder-panel .ui-resizable-e,.fl-lightbox .ui-resizable-e{right:-3px}.fl-builder-panel .ui-resizable-w,.fl-lightbox .ui-resizable-w{left:-3px}.fl-lightbox .ui-resizable-ne,.fl-lightbox .ui-resizable-nw,.fl-lightbox .ui-resizable-se,.fl-lightbox .ui-resizable-sw{background:0 0;border:6px solid transparent}.fl-lightbox .ui-resizable-ne:active,.fl-lightbox .ui-resizable-ne:hover,.fl-lightbox .ui-resizable-nw:active,.fl-lightbox .ui-resizable-nw:hover,.fl-lightbox .ui-resizable-se:active,.fl-lightbox .ui-resizable-se:hover,.fl-lightbox .ui-resizable-sw:active,.fl-lightbox .ui-resizable-sw:hover{background:0 0;border-color:#00a0d2}.fl-lightbox .ui-resizable-ne{border-bottom:none;border-left:none;border-top-right-radius:4px}.fl-lightbox .ui-resizable-nw{border-bottom:none;border-right:none;border-top-left-radius:4px}.fl-lightbox .ui-resizable-se{border-top:none;border-left:none;border-bottom-right-radius:4px}.fl-lightbox .ui-resizable-sw{border-top:none;border-right:none;border-bottom-left-radius:4px}.fl-builder-ui-keyboard-shortcuts{display:none;position:fixed;top:0;left:0;bottom:0;right:0;z-index:999999;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;background:rgba(50,50,50,.88);font-size:15px;line-height:1.3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder-ui-keyboard-shortcuts.is-showing{display:-ms-flexbox;display:flex}.fl-builder-ui-keyboard-shortcuts-content{box-sizing:border-box;width:500px;background:#f5f7f9;border-radius:4px;padding:30px 0 0;box-shadow:0 10px 30px rgba(0,0,0,.15)}.fl-builder-ui-keyboard-shortcut-item{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;padding:12px 40px}.fl-builder-ui-keyboard-shortcut-item:nth-child(even){background:#eef2f5}.fl-builder-ui-shortcut-keycode{margin-left:auto;text-transform:uppercase;letter-spacing:2px}.fl-builder-ui-keyboard-shortcust-footer{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;padding:10px}.dismiss-shortcut-ui{padding:10px;border-radius:4px;background:#fff;color:#000;font-size:14px;border:2px solid #fff}.dismiss-shortcut-ui:focus,.dismiss-shortcut-ui:hover{top:0;color:#000;background:#eef2f5;border:2px solid #eef2f5}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel,.fl-builder-ui-skin--dark .fl-builder--preview-actions,.fl-builder-ui-skin--dark .fl-builder--search-results-panel,.fl-builder-ui-skin--dark .fl-builder-panel,.fl-builder-ui-skin--dark .fl-lightbox,body.fl-builder-ui-skin--dark .fl-builder-bar .fl-builder-bar-content{background:#23282d;color:#b4b9be;border-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder--panel-header{color:#b4b9be;border-bottom-color:#1d1d1d;border-top-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder-panel.fl-builder-ui-pinned .fl-builder--panel-header{border-top-color:#1d2227}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel:before{border-bottom-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder--panel-arrow polygon{fill:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder-panel-search .fl-builder-panel-search-input{background:#24282e}.fl-builder-ui-skin--dark .fl-responsive-preview-content{background:#131619}.fl-builder-ui-skin--dark .fl-form-table th{background:#23282d!important;color:#7d8690}.fl-builder-ui-skin--dark .fl-builder--preview-actions .device-icons,.fl-builder-ui-skin--dark .fl-builder-button{background:#2c333a}.fl-builder-ui-skin--dark .fl-builder-button:focus{background:#131a22}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-button-primary{color:#fff!important;fill:#fff!important;background:#00A0D2}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-buy-button,.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-feedback-button,.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-upgrade-button{background-color:#F7A407;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-button-silent:focus{border:2px solid #00a0d2!important}.fl-builder-ui-skin--dark .fl-builder-content-panel--button:hover,.fl-builder-ui-skin--dark .fl-builder-content-panel-button{color:#00A0D2!important}.fl-builder-ui-skin--dark .fl-builder--menu>a:hover,.fl-builder-ui-skin--dark .fl-builder--menu>button:hover{background:#101215!important}.fl-builder-ui-skin--dark .fl-builder--menu>a:focus,.fl-builder-ui-skin--dark .fl-builder--menu>button:focus{background:#101215!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-bar-title{border-color:#101215}.fl-builder-ui-skin--dark .fl-builder-bar-title:hover{background-color:#181b1f}.fl-builder-simple.fl-builder-ui-skin--dark .fl-builder-bar-title:hover{background-color:transparent}.fl-builder-ui-skin--dark .fl-builder-layout-title{color:#c6cdd6}.fl-builder-ui-skin--dark .fl-builder-bar-title-caret i,.fl-builder-ui-skin--dark .fl-builder-layout-pretitle,.fl-builder-ui-skin--dark .fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{color:#7d8690}.fl-builder-ui-skin--dark button.fl-builder-button.fl-builder-bar-title-caret:focus{background-color:#101215!important}.fl-builder-ui-skin--dark .fl-builder--search:before{color:rgba(162,173,184,.73)}.fl-builder-ui-skin--dark .fl-builder--search input:focus::-webkit-input-placeholder{color:rgba(162,173,184,.73)!important}.fl-builder-ui-skin--dark .fl-builder--search .search-clear{color:rgba(162,173,184,.5);background-color:#e4e4e4;background:linear-gradient(to left,#383f46,#383f46 75%,rgba(56,63,70,0))}.fl-builder-ui-skin--dark .fl-builder--menu hr{background-color:#23282d!important;border:none}.fl-builder-ui-skin--dark .fl-builder--tabs{border-color:#383f46!important}.fl-builder-ui-skin--dark .fl-builder--tabs .is-showing,.fl-builder-ui-skin--dark .fl-builder-settings-tabs a.fl-active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-more.fl-contains-active{color:#fff!important;fill:#fff!important;background:#181b20!important}.fl-builder-ui-skin--dark .fl-builder--tabs :focus{background-color:#101215!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder--tabs .is-showing:focus{color:#00a0d2!important}.fl-builder-ui-skin--dark .fl-builder--menu-item:hover{background:#383f46;color:#a8b3bf}.fl-builder-ui-skin--dark .fl-builder--menu * .fl-builder--menu-item-accessory,.fl-builder-ui-skin--dark .fl-builder-blocks-section-group-name{color:#7d8690}.fl-builder-ui-skin--dark .fl-builder--selector-display{color:#c6cdd6;background:url(../img/svg/select-arrow-down-alt2-light.svg) center right 10px no-repeat #1a1b22!important}.fl-builder-ui-skin--dark .fl-builder--selector-display-label{color:#b5becb}.fl-builder-ui-skin--dark .fl-builder-panel-search-input input{border-color:#5b656f;color:#b8c2ce;background:#171b1f!important}.fl-builder-ui-skin--dark .fl-builder--selector-display-label:focus,.fl-builder-ui-skin--dark .fl-builder-panel-search-input input:focus{border-color:#00a0d2}.fl-builder-ui-skin--dark .fl-builder--group-label{color:#aaafb5!important;background:#24282e}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu{border-color:#101215!important;color:#7c858e;background-color:#101215}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu:before{border-bottom-color:#101215}.fl-builder-ui-skin--dark .fl-builder--menu>a,.fl-builder-ui-skin--dark .fl-builder--menu>button,.fl-builder-ui-skin--dark .fl-builder--menu>span{color:#a1adb9}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu .fl-builder--menu-item:hover{background:#23282d!important;color:#a1adb9}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu .fl-builder--menu-item:focus{background:#23282d!important;color:#00a0d2!important}.fl-builder-ui-skin--dark .fl-builder-panel-drag-handle{fill:#5b656f}.fl-builder-ui-skin--dark .fl-builder--template-collection-section-header,.fl-builder-ui-skin--dark .fl-builder-blocks-section .fl-builder-blocks-section-header,.fl-builder-ui-skin--dark .fl-builder-settings-section-header{background-color:#191b21;border-color:#191b21}.fl-builder-ui-skin--dark .fl-builder--template-collection-section-name,.fl-builder-ui-skin--dark .fl-builder--user-templates-section-name,.fl-builder-ui-skin--dark .fl-builder-blocks-section .fl-builder-blocks-section-title,.fl-builder-ui-skin--dark .fl-builder-settings-fields .fl-builder-settings-title{color:#7d8690!important;fill:#7d8690;background:#24282e}.fl-builder-ui-skin--dark .fl-builder-settings-fields .fl-builder-settings-title:focus{border-color:#7d8690}.fl-builder-ui-skin--dark .fl-builder-blocks-section-content .fl-builder-block,.fl-builder-ui-skin--dark .fl-user-template{color:#b8c2ce}.fl-builder-ui-skin--dark .fl-builder-block:hover .fl-builder-block-content,.fl-builder-ui-skin--dark .fl-user-template:hover{background:#171b1f;color:#fff}.fl-builder-ui-skin--dark .fl-builder-block:hover i,.fl-builder-ui-skin--dark .fl-user-template:hover i{color:#6d7782!important}.fl-builder-ui-skin--dark .fl-builder-block:hover a:hover i,.fl-builder-ui-skin--dark .fl-user-template:hover a:hover i{color:#9eacbb!important}.fl-builder-ui-skin--dark .fl-builder-block .fl-builder-block-icon{fill:#b5becb}.fl-builder-ui-skin--dark .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col,.fl-builder-ui-skin--dark .fl-builder-block:hover .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{background:#7d8690}.fl-builder-ui-skin--dark .fl-user-templates{border-color:#101215}.fl-builder-ui-skin--dark .fl-builder--template-thumbnail{border-color:#393f44}.fl-builder-ui-skin--dark .fl-builder--menu a.fl-template-collection{color:#a8b3bf}.fl-builder-ui-skin--dark .fl-lightbox .fl-lightbox-header h1{color:#fff!important}.fl-builder-ui-skin--dark .fl-form-table th label{color:#a8b3bf!important}.fl-builder-ui-skin--dark .fl-builder-settings-tabs{background-color:#2c333a!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields h3.fl-builder-settings-title{background:#24282e}.fl-builder-ui-skin--dark h3.fl-builder-settings-title .fl-builder-settings-title-text-wrap{color:#a8b3bf;background-color:#1b2025}.fl-builder-ui-skin--dark .fl-lightbox :not(i){color:#a7b1bb!important}.fl-builder-ui-skin--dark .fl-builder-button{color:#c6cdd6!important;fill:#c6cdd6!important}.fl-builder-ui-skin--dark .fl-builder-content-panel--button:hover,.fl-builder-ui-skin--dark .fl-builder-content-panel-button{fill:#00A0D2!important}.fl-builder-ui-skin--dark .fl-lightbox .fl-builder-button.fl-builder-button-primary{color:#fff!important}.fl-builder-ui-skin--dark .fl-color-picker-color.fl-color-picker-empty{background:#1a1b22}.fl-color-picker-color.fl-color-picker-empty .fl-color-picker-icon{fill:#6f7881}.fl-builder-ui-skin--dark .fl-color-picker-clear{background-color:#121a23}.fl-builder-ui-skin--dark .fl-color-picker-clear:hover{background-color:#373f46}.fl-builder-ui-skin--dark span.fl-builder-block-no-node-templates:hover{background:#1d2025}.fl-builder-ui-skin--dark .fl-builder-settings-tab-description{background:#1d2227}.fl-builder-ui-skin--dark .fl-builder-panel-search button svg .filled-shape{fill:#b5becb}.fl-builder-ui-skin--dark .fl-builder-custom-field,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=email],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=file],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=number],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=password],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=search],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=tel],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=text],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=url],.fl-builder-ui-skin--dark .fl-builder-settings-fields select,.fl-builder-ui-skin--dark .fl-builder-settings-fields textarea{background-color:#181b20!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=email]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=file]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=number]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=password]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=search]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=tel]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=text]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=url]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields select:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields textarea:focus{border-color:#00a0d2!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields select{background-image:url(../img/svg/select-arrow-down-alt2-light.svg)!important}.fl-builder-ui-skin--dark .fl-builder-custom-field select,.fl-builder-ui-skin--dark .fl-photo-field select{border-color:#7d8690!important}.fl-builder-ui-skin--dark .fl-field i.fl-field-responsive-toggle{color:#6b747d}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel-view-title,.fl-builder-ui-skin--dark .fl-field i.fl-field-responsive-toggle:hover{color:#a8b3bf}.fl-builder-ui-skin--dark .fl-builder--saving-indicator{color:#858f99}.fl-builder-ui-skin--dark .fl-icons-list i:hover{background-color:#16191d;color:#fff}.fl-builder-ui-skin--dark .fl-color-picker-clear .fl-color-picker-icon-remove:after,.fl-builder-ui-skin--dark .fl-color-picker-clear .fl-color-picker-icon-remove:before{background:#6f7881}.fl-builder-ui-skin--dark .fl-builder--user-templates-section-content{border-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select.fl-builder-button{background:0 0;border-right-color:#101215!important}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select.fl-builder-button:hover{background:#181b1f}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{color:#c6cdd6}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu{background:#131a22;border-color:#353c43 #131a22 #131a22}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu:before{border-bottom-color:#353c43}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:focus,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:hover{background:#383f46}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a.fl-active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:hover.fl-active{color:#fff!important;background:#383f46}.fl-builder-ui-skin--dark ul.as-selections{background-color:#121a23}.fl-builder-ui-skin--dark .fl-custom-query .fl-builder-settings-section{border-top:2px solid #1b2026!important}.fl-builder-ui-skin--dark div.fl-field-unit-select{background-color:#181b20!important}.fl-builder-ui-skin--dark .fl-dimension-field-units>*{border-right:1px solid #383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider,.fl-builder-ui-skin--dark .fl-field-popup-slider-input .ui-slider-handle{background:#383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider-arrow:after{border-bottom-color:#383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider-input{background-color:#121a23}.fl-builder-ui-skin--dark .fl-unit-field-input{border-right:1px solid #383f46!important}.fl-builder-ui-skin--dark .fl-button-group-field-option[data-selected="1"]{background-color:#383f46;color:#fff}.fl-builder-ui-skin--dark .fl-button-group-field-option[data-selected="1"] i{color:#fff!important}.fl-builder-ui-skin--dark .fl-button-group-field-options{background:#181b20}.fl-builder-ui-skin--dark .fl-compound-field-section-toggle{background-color:#181b20}.fl-builder-ui-skin--dark .fl-compound-field-section-toggle:hover{background-color:#383f46}.fl-builder-ui-skin--dark .fl-compound-field-section-visible .fl-compound-field-section-toggle{border-top-color:#121a23!important;background-color:transparent}.fl-builder-ui-skin--dark .fl-field-connections-toggle i{color:#7c8590}.fl-builder-ui-skin--dark .fl-lightbox .fl-field-connection-content{background-color:#191b20!important}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider{background-color:#181b20}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane:hover>.fl-nanoscroller-slider{background-color:#5a646f}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane.active>.fl-nanoscroller-slider{background-color:#00A0D2}.fl-builder-ui-skin--dark .fl-lightbox div.mce-panel{background:#383f46}.fl-builder-ui-skin--dark .fl-lightbox .mce-toolbar .mce-ico{color:#a7b1bb}.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary{background:#383f46;border:none;box-shadow:none}.fl-builder-ui-skin--dark .fl-lightbox .fl-builder-settings .wp-switch-editor{background:#23282d}.fl-builder-ui-skin--dark .fl-lightbox .html-active .switch-html,.fl-builder-ui-skin--dark .fl-lightbox .quicktags-toolbar,.fl-builder-ui-skin--dark .fl-lightbox .tmce-active .switch-tmce{background:#383f46}.fl-builder-ui-skin--dark .fl-lightbox textarea.wp-editor-area{background:0 0!important}.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary:focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary:hover,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button.focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button.hover,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button:focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button:hover{background:#191b20}
extensions/fl-builder-cache-helper/includes/admin-settings-cache-plugins.php CHANGED
@@ -11,7 +11,8 @@ $plugins = \FLCacheClear\Plugin::get_plugins();
11
  <p><?php _e( 'This tool applies to caches created by the following:', 'fl-builder' ); ?></p>
12
  <?php echo $plugins; ?>
13
  <p>
14
- <?php _e( 'Enable the following setting to clear the caches created by any of these caching plugins. If enabled, cache clearing occurs when layouts and templates are saved and when WordPress finishes updating plugins and themes. This setting also defines the DONOTCACHEPAGE constant, which is respected by most cache plugins, to keep the page from being cached when the Beaver Builder editor is active.', 'fl-builder' ); ?>
 
15
  </p>
16
  <p>
17
  <label>
11
  <p><?php _e( 'This tool applies to caches created by the following:', 'fl-builder' ); ?></p>
12
  <?php echo $plugins; ?>
13
  <p>
14
+ <?php /* translators: %s: branded builder name */ ?>
15
+ <?php printf( __( 'Enable the following setting to clear the caches created by any of these caching plugins. If enabled, cache clearing occurs when layouts and templates are saved and when WordPress finishes updating plugins and themes. This setting also defines the DONOTCACHEPAGE constant, which is respected by most cache plugins, to keep the page from being cached when the %s editor is active.', 'fl-builder' ), FLBuilderModel::get_branding() ); ?>
16
  </p>
17
  <p>
18
  <label>
extensions/fl-builder-cache-helper/plugins/acf.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace FLCacheClear;
3
+ class ACF {
4
+
5
+ var $name = 'Advanced Custom Fields';
6
+ var $url = 'https://wordpress.org/plugins/advanced-custom-fields/';
7
+
8
+ var $filters = array( 'admin_init' );
9
+
10
+ function run() {
11
+ // nothing here
12
+ }
13
+
14
+ function filters() {
15
+ add_filter( 'acf/save_post', function( $post_id ) {
16
+ \FLBuilderModel::delete_all_asset_cache( $post_id );
17
+ });
18
+ }
19
+ }
extensions/fl-builder-cache-helper/plugins/hummingbird.php CHANGED
@@ -6,7 +6,7 @@ class Hummingbird {
6
  var $url = 'https://wordpress.org/plugins/hummingbird-performance/';
7
 
8
  static function run() {
9
- if ( class_exists( '\WP_Hummingbird_Utils' ) ) {
10
  if ( \WP_Hummingbird_Utils::get_module( 'page_cache' )->is_active() ) {
11
  \WP_Hummingbird_Utils::get_module( 'page_cache' )->clear_cache();
12
  \WP_Hummingbird_Module_Page_Cache::log_msg( 'Cache cleared by Beaver Builder.' );
6
  var $url = 'https://wordpress.org/plugins/hummingbird-performance/';
7
 
8
  static function run() {
9
+ if ( class_exists( '\WP_Hummingbird_Utils' ) && class_exists( '\WP_Hummingbird' ) ) {
10
  if ( \WP_Hummingbird_Utils::get_module( 'page_cache' )->is_active() ) {
11
  \WP_Hummingbird_Utils::get_module( 'page_cache' )->clear_cache();
12
  \WP_Hummingbird_Module_Page_Cache::log_msg( 'Cache cleared by Beaver Builder.' );
extensions/fl-builder-cache-helper/plugins/pantheon.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace FLCacheClear;
3
+ class Pantheon {
4
+
5
+ var $name = 'Pantheon Hosting';
6
+ var $url = 'https://pantheon.io/';
7
+
8
+ static function run() {
9
+ if ( function_exists( 'pantheon_wp_clear_edge_all' ) ) {
10
+ $ret = pantheon_wp_clear_edge_all();
11
+ }
12
+ }
13
+ }
extensions/fl-builder-cache-helper/plugins/supercache.php CHANGED
@@ -7,7 +7,11 @@ class Supercache {
7
 
8
  static function run() {
9
  if ( function_exists( '\wp_cache_clear_cache' ) ) {
10
- \wp_cache_clear_cache();
 
 
 
 
11
  }
12
  }
13
  }
7
 
8
  static function run() {
9
  if ( function_exists( '\wp_cache_clear_cache' ) ) {
10
+ if ( is_multisite() ) {
11
+ \wp_cache_clear_cache( get_current_blog_id() );
12
+ } else {
13
+ \wp_cache_clear_cache();
14
+ }
15
  }
16
  }
17
  }
extensions/fl-builder-multisite/classes/class-fl-builder-multisite.php CHANGED
@@ -125,11 +125,7 @@ final class FLBuilderMultisite {
125
  static public function blog_exists( $blog_id ) {
126
  global $wpdb;
127
 
128
- if ( method_exists( $wpdb, 'esc_like' ) ) {
129
- $like = esc_sql( $wpdb->esc_like( $blog_id ) );
130
- } else {
131
- $like = like_escape( esc_sql( $blog_id ) );
132
- }
133
 
134
  return $wpdb->get_row( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE blog_id = '%s'", $like ) ); // @codingStandardsIgnoreLine
135
  }
125
  static public function blog_exists( $blog_id ) {
126
  global $wpdb;
127
 
128
+ $like = esc_sql( $wpdb->esc_like( $blog_id ) );
 
 
 
 
129
 
130
  return $wpdb->get_row( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE blog_id = '%s'", $like ) ); // @codingStandardsIgnoreLine
131
  }
extensions/fl-builder-seo-plugins/classes/class-fl-builder-seo-plugins.php ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Add support for SEO plugins
5
+ * @since 2.2.4
6
+ */
7
+ class FLBuilderSeoPlugins {
8
+
9
+ function __construct() {
10
+
11
+ add_action( 'admin_init', array( $this, 'init' ) );
12
+ add_action( 'admin_head', array( $this, 'remove_yoast_meta_box_on_edit' ), 999 );
13
+
14
+ add_filter( 'wpseo_sitemap_exclude_post_type', array( $this, 'sitemap_exclude_post_type' ), 10, 2 );
15
+ add_filter( 'wpseo_sitemap_exclude_taxonomy', array( $this, 'sitemap_exclude_taxonomy' ), 10, 2 );
16
+ add_filter( 'manage_edit-fl-builder-template_columns', array( $this, 'remove_columns' ) );
17
+
18
+ add_filter( 'the_seo_framework_post_type_disabled', array( $this, 'sf_type' ), 10, 2 );
19
+ add_filter( 'the_seo_framework_sitemap_exclude_cpt', array( $this, 'sf_sitemap' ) );
20
+
21
+ add_filter( 'rank_math/sitemap/excluded_post_types', array( $this, 'rankmath_types' ) );
22
+ }
23
+
24
+ function init() {
25
+ global $pagenow;
26
+ if ( FLBuilderAJAX::doing_ajax() || 'post.php' !== $pagenow ) {
27
+ return;
28
+ }
29
+ if ( defined( 'WPSEO_VERSION' ) ) {
30
+ $this->enqueue_script( 'yoast' );
31
+ } elseif ( class_exists( 'RankMath' ) ) {
32
+ $this->enqueue_script( 'rankmath' );
33
+ }
34
+ }
35
+
36
+ function rankmath_types( $post_types ) {
37
+ unset( $post_types['fl-builder-template'] );
38
+ return $post_types;
39
+ }
40
+
41
+ function remove_columns( $columns ) {
42
+
43
+ // remove the Yoast SEO columns
44
+ unset( $columns['wpseo-score'] );
45
+ unset( $columns['wpseo-title'] );
46
+ unset( $columns['wpseo-links'] );
47
+ unset( $columns['wpseo-metadesc'] );
48
+ unset( $columns['wpseo-focuskw'] );
49
+ unset( $columns['wpseo-score-readability'] );
50
+ // RankMath columns
51
+ unset( $columns['rank_math_seo_details'] );
52
+ unset( $columns['rank_math_title'] );
53
+ unset( $columns['rank_math_description'] );
54
+ return $columns;
55
+ }
56
+
57
+ function remove_yoast_meta_box_on_edit() {
58
+ if ( function_exists( 'remove_meta_box' ) ) {
59
+ remove_meta_box( 'wpseo_meta', 'fl-builder-template', 'normal' );
60
+ }
61
+ }
62
+
63
+ function sitemap_exclude_post_type( $value, $post_type ) {
64
+ if ( 'fl-builder-template' === $post_type ) {
65
+ return true;
66
+ }
67
+ return $value;
68
+ }
69
+
70
+ function sitemap_exclude_taxonomy( $value, $taxonomy ) {
71
+ if ( 'fl-builder-template-category' === $taxonomy ) {
72
+ return true;
73
+ }
74
+ return $value;
75
+ }
76
+
77
+ function enqueue_script( $plugin ) {
78
+
79
+ global $post;
80
+ $orig = $post;
81
+
82
+ if ( ! isset( $_GET['post'] ) ) {
83
+ return false;
84
+ }
85
+
86
+ $post_id = $_GET['post'];
87
+
88
+ $post_type = get_post_type( $post_id );
89
+
90
+ if ( in_array( $post_type, array( 'fl-theme-layout', 'fl-builder-template' ) ) ) {
91
+ return false;
92
+ }
93
+
94
+ add_action( 'admin_enqueue_scripts', array( $this, 'dequeue_layout_scripts' ), 10000 );
95
+
96
+ if ( 'yoast' === $plugin ) {
97
+ $deps = array( 'yoast-seo-post-scraper' );
98
+ } else {
99
+ $deps = array( 'rank-math-post-metabox' );
100
+ }
101
+
102
+ $data = $this->content_data();
103
+ $post = $orig;
104
+
105
+ if ( $data ) {
106
+ wp_enqueue_script( 'bb-seo-scripts', FL_BUILDER_SEO_PLUGINS_URL . "js/plugin-$plugin.js", $deps, false, true );
107
+ wp_localize_script( 'bb-seo-scripts', 'bb_seo_data', array( 'content' => $data ) );
108
+ }
109
+ }
110
+
111
+ function dequeue_layout_scripts() {
112
+ global $wp_scripts;
113
+ foreach ( $wp_scripts->queue as $item ) {
114
+ if ( false !== strpos( $item, 'fl-builder-layout' ) ) {
115
+ wp_dequeue_script( $item );
116
+ }
117
+ }
118
+ }
119
+
120
+ function content_data() {
121
+
122
+ if ( ! isset( $_GET['post'] ) ) {
123
+ return false;
124
+ }
125
+
126
+ $id = $_GET['post'];
127
+
128
+ if ( ! get_post_meta( $id, '_fl_builder_enabled', true ) ) {
129
+ return false;
130
+ }
131
+ ob_start();
132
+ echo do_shortcode( "[fl_builder_insert_layout id=$id]" );
133
+ $data = ob_get_clean();
134
+ return str_replace( PHP_EOL, '', $data );
135
+ }
136
+
137
+ public function sf_type( $value, $post_type ) {
138
+ if ( 'fl-builder-template' === $post_type ) {
139
+ return true;
140
+ }
141
+ return $value;
142
+ }
143
+
144
+ public function sf_sitemap( $types ) {
145
+ $types[] = 'fl-builder-template';
146
+ return $types;
147
+ }
148
+
149
+ }
150
+
151
+ new FLBuilderSeoPlugins();
extensions/fl-builder-seo-plugins/fl-builder-seo-plugins.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Defines
4
+ define( 'FL_BUILDER_SEO_PLUGINS_DIR', FL_BUILDER_DIR . 'extensions/fl-builder-seo-plugins/' );
5
+ define( 'FL_BUILDER_SEO_PLUGINS_URL', FL_BUILDER_URL . 'extensions/fl-builder-seo-plugins/' );
6
+
7
+ // Classes
8
+ require_once FL_BUILDER_SEO_PLUGINS_DIR . 'classes/class-fl-builder-seo-plugins.php';
extensions/fl-builder-seo-plugins/js/plugin-rankmath.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($){
2
+ var RankMathIntegration = function() {
3
+ this.hooks()
4
+ }
5
+
6
+ RankMathIntegration.prototype.hooks = function() {
7
+ RankMathApp.registerPlugin( 'bb-seo' )
8
+ wp.hooks.addFilter( 'rank_math_content', 'bb-seo', function(content) {
9
+ return window.bb_seo_data.content;
10
+ } )
11
+ }
12
+
13
+ RankMathIntegration.prototype.getContent = function( content ) {
14
+ return window.bb_seo_data.content;
15
+ }
16
+
17
+ $( document ).ready( function () {
18
+ new RankMathIntegration()
19
+ })
20
+ })(jQuery);
extensions/fl-builder-seo-plugins/js/plugin-yoast.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($){
2
+ $(document).ready(function(){
3
+
4
+ BeaverPlugin = function() {
5
+ window.YoastSEO.app.registerPlugin( 'beaverPlugin', {status: 'ready'} );
6
+ window.YoastSEO.app.registerModification( 'content', this.myContentModification, 'beaverPlugin', 5 );
7
+ }
8
+ BeaverPlugin.prototype.myContentModification = function(data) {
9
+ return window.bb_seo_data.content;
10
+ };
11
+ new BeaverPlugin();
12
+ });
13
+ })(jQuery);
fl-builder.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Beaver Builder Plugin (Lite Version)
4
  * Plugin URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-uri
5
  * Description: A drag and drop frontend WordPress page builder plugin that works with almost any theme!
6
- * Version: 2.2.2.5
7
  * Author: The Beaver Builder Team
8
  * Author URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-author
9
  * Copyright: (c) 2014 Beaver Builder
3
  * Plugin Name: Beaver Builder Plugin (Lite Version)
4
  * Plugin URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-uri
5
  * Description: A drag and drop frontend WordPress page builder plugin that works with almost any theme!
6
+ * Version: 2.2.4.3
7
  * Author: The Beaver Builder Team
8
  * Author URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-author
9
  * Copyright: (c) 2014 Beaver Builder
fonts/fontawesome/css/all.min.css CHANGED
@@ -1,5 +1,5 @@
1
  /*!
2
- * Font Awesome Free 5.8.1 by @fontawesome - https://fontawesome.com
3
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
  */
5
- .fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900}
1
  /*!
2
+ * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com
3
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
  */
5
+ .fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900}
fonts/fontawesome/css/v4-shims.min.css CHANGED
@@ -1,5 +1,5 @@
1
  /*!
2
- * Font Awesome Free 5.8.1 by @fontawesome - https://fontawesome.com
3
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
  */
5
  .fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f15e"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f161"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f163"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-spotify,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400}
1
  /*!
2
+ * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com
3
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4
  */
5
  .fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f15e"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f161"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f163"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-spotify,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400}
fonts/fontawesome/webfonts/fa-brands-400.eot CHANGED
Binary file
fonts/fontawesome/webfonts/fa-brands-400.svg CHANGED
@@ -1,12 +1,12 @@
1
  <?xml version="1.0" standalone="no"?>
2
  <!--
3
- Font Awesome Free 5.8.1 by @fontawesome - https://fontawesome.com
4
  License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
5
  -->
6
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
7
  <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
8
  <metadata>
9
- Created by FontForge 20190112 at Thu Mar 21 16:19:01 2019
10
  By Robert Madole
11
  Copyright (c) Font Awesome
12
  </metadata>
@@ -23,7 +23,7 @@ Copyright (c) Font Awesome
23
  bbox="-0.200195 -66.9505 641.5 448.3"
24
  underline-thickness="25"
25
  underline-position="-51"
26
- unicode-range="U+0020-F840"
27
  />
28
  <missing-glyph />
29
  <glyph glyph-name="twitter-square" unicode="&#xf081;"
@@ -33,8 +33,8 @@ c-5.7002 -9.7002 -8.89941 -20.9004 -8.89941 -33.0996v-0.107422c0 -19.3584 13.081
33
  c-10.4004 -2.7002 -19.5 -2.7002 -29.5996 -1.2002c8.2998 -26 32.5 -44.9004 61.2998 -45.5c-22.5 -17.6006 -50.7002 -28 -81.4004 -28c-5.39941 0 -10.5 0.200195 -15.7998 0.799805c29 -18.5996 63.5 -29.4004 100.7 -29.4004c120.6 0 186.6 99.9004 186.6 186.601
34
  c0 2.7998 0 5.7002 -0.200195 8.5z" />
35
  <glyph glyph-name="facebook-square" unicode="&#xf082;"
36
- d="M448 368v-352c0 -26.5 -21.5 -48 -48 -48h-85.2998v177.2h60.5996l8.7002 67.5996h-69.2998v43.2002c0 19.5996 5.39941 32.9004 33.5 32.9004h35.7998v60.3994c-6.2002 0.799805 -27.4004 2.7002 -52.2002 2.7002c-51.5996 0 -87 -31.5 -87 -89.4004v-49.8994h-60.7998
37
- v-67.6006h60.9004v-177.1h-196.9c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48z" />
38
  <glyph glyph-name="linkedin" unicode="&#xf08c;"
39
  d="M416 416c17.5996 0 32 -14.5 32 -32.2998v-383.4c0 -17.7998 -14.4004 -32.2998 -32 -32.2998h-384.1c-17.6006 0 -31.9004 14.5 -31.9004 32.2998v383.4c0 17.7998 14.2998 32.2998 31.9004 32.2998h384.1zM135.4 32h0.0996094v213.8h-66.5v-213.8h66.4004zM102.2 275
40
  c21.2998 0 38.5 17.2002 38.5 38.5c0 21.2002 -17.2998 38.5 -38.5 38.5c-21.2998 0 -38.5 -17.2998 -38.5 -38.5s17.2002 -38.5 38.5 -38.5zM384.3 32v117.2c0 57.5996 -12.5 101.899 -79.7002 101.899c-32.2998 0 -54 -17.6992 -62.8994 -34.5h-0.900391v29.2002h-63.7002
@@ -57,9 +57,9 @@ c49.0547 0 94.2129 16.5684 130.274 44.832c-46.1318 0.975586 -84.792 31.1885 -98.
57
  c13.9688 -7.79688 30.2139 -12.6699 47.4307 -13.3184c-28.2637 18.8428 -46.7803 51.0049 -46.7803 87.3906c0 19.4922 5.19629 37.3604 14.2939 52.9541c51.6543 -63.6748 129.3 -105.258 216.364 -109.807c-1.62402 7.79688 -2.59863 15.918 -2.59863 24.04
58
  c0 57.8271 46.7822 104.934 104.934 104.934c30.2139 0 57.502 -12.6699 76.6709 -33.1367c23.7148 4.54785 46.4551 13.3193 66.5986 25.3398c-7.79785 -24.3662 -24.3662 -44.833 -46.1318 -57.8271c21.1172 2.27344 41.584 8.12207 60.4258 16.2432
59
  c-14.292 -20.791 -32.1611 -39.3086 -52.6279 -54.2529z" />
60
- <glyph glyph-name="facebook" unicode="&#xf09a;"
61
- d="M448 391.3v-398.5c0 -13.7002 -11.0996 -24.7002 -24.7002 -24.7002h-114.2v173.4h58.2002l8.7002 67.5996h-67v43.2002c0 19.6006 5.40039 32.9004 33.5 32.9004h35.7998v60.5c-6.2002 0.799805 -27.3994 2.7002 -52.2002 2.7002c-51.5996 0 -87 -31.5 -87 -89.4004
62
- v-49.9004h-58.3994v-67.5996h58.3994v-173.5h-214.399c-13.6006 0 -24.7002 11.0996 -24.7002 24.7002v398.6c0 13.6006 11.0996 24.7002 24.7002 24.7002h398.5c13.7002 0 24.7998 -11.0996 24.7998 -24.7002z" />
63
  <glyph glyph-name="github" unicode="&#xf09b;" horiz-adv-x="496"
64
  d="M165.9 50.5996c0 -2 -2.30078 -3.59961 -5.2002 -3.59961c-3.2998 -0.299805 -5.60059 1.2998 -5.60059 3.59961c0 2 2.30078 3.60059 5.2002 3.60059c3 0.299805 5.60059 -1.2998 5.60059 -3.60059zM134.8 55.0996c0.700195 2 3.60059 3 6.2002 2.30078
65
  c3 -0.900391 4.90039 -3.2002 4.2998 -5.2002c-0.599609 -2 -3.59961 -3 -6.2002 -2c-3 0.599609 -5 2.89941 -4.2998 4.89941zM179 56.7998c2.90039 0.299805 5.59961 -1 5.90039 -2.89941c0.299805 -2 -1.7002 -3.90039 -4.60059 -4.60059
@@ -432,21 +432,21 @@ c6.09961 17.5 15.5 33.2002 27.3994 46.8008l51.2002 -44.8008c10.2998 11.9004 24.4
432
  c16.2998 -3.30078 30.5 -11.9004 40.7002 -23.8008l51.2002 44.8008c11.8994 -13.6006 21.2998 -29.4004 27.3994 -46.8008l-64.5 -22.0996c2.5 -7.40039 3.90039 -15.2002 3.90039 -23.5s-1.40039 -16 -3.90039 -23.5l64.2002 -22.0996
433
  c-5.7998 -17.5 -15.2002 -33.2002 -27.0996 -46.8008l-51.2002 44.8008c-10.2998 -11.9004 -24.4004 -20.2002 -40.7002 -23.5z" />
434
  <glyph glyph-name="git-square" unicode="&#xf1d2;"
435
- d="M140.1 99.5c12.1006 0 29.5 -2.09961 29.5 -17.9004c0 -15.5 -13.8994 -18.7998 -27 -18.7998c-12.2998 0 -30.8994 2 -30.8994 18s15.7002 18.7002 28.3994 18.7002zM115.4 216.1c0 35.2002 43.5996 34.8008 43.5 0.400391c0 -14.5 -5.7002 -24.5 -21.2002 -24.5
436
- c-15.7002 0 -22.2998 9.2998 -22.2998 24.0996zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM207 274.3c-12.2998 -4.7998 -25.5 -8.39941 -38.9004 -8.39941
437
- c-38.5 22.0996 -90.6992 -0.900391 -90.6992 -49.5c0 -18 11.5996 -42.9004 29.5996 -48.9004v-0.700195c-13.4004 -5.89941 -17.0996 -36.0996 0.700195 -47v-0.700195c-19.5 -6.39941 -32.2998 -18.7998 -32.2998 -40.1992c0 -36.8008 34.7998 -47 65.3994 -47
438
- c37.1006 0 64.7998 13.3994 64.7998 54.2998c0 50.3994 -72.0996 31.7998 -72.0996 59.0996c0 9.60059 5.2002 13.4004 14.0996 15.2002c29.6006 5.5 48.2002 28.5996 48.2002 58.7002c0 5.2002 -1.09961 10.2002 -2.89941 15c4.7998 1.09961 9.5 2.2998 14.0996 3.89941
439
- v36.2002zM263.8 272.5h-39.5996c1.2998 -10.5996 1.09961 -142.6 0 -155.5h39.5996c-1.09961 12.7998 -1.2002 145.1 0 155.5zM268.3 325.8c0 13.4004 -10 26.2002 -24.0996 26.2002c-14.2998 0 -24.6006 -12.5 -24.6006 -26.2002
440
- c0 -13.5996 10.5 -25.8994 24.6006 -25.8994c13.7002 0 24.0996 12.5 24.0996 25.8994zM372.6 272.5h-36.3994c0 9.7998 -0.400391 19.5996 1.09961 29.5h-40.5c1.2998 -7.2998 1.10059 -13.5996 1.10059 -29.5h-17.1006v-33.9004
441
- c11.9004 1.90039 12.1006 0.700195 17.1006 0.700195v-0.700195h-0.400391v-62.6992c0 -31.1006 4.5 -61.2002 42.7002 -61.2002c10.7002 0 23 1.7998 32.5 7v35c-5.7002 -3.90039 -13.9004 -5.90039 -20.9004 -5.90039c-13.2002 0 -15.5 12.9004 -15.5 23.4004v65.2002
442
- c22.7002 0 36.4004 -0.700195 36.4004 -0.700195v33.7998h-0.100586z" />
443
- <glyph glyph-name="git" unicode="&#xf1d3;"
444
- d="M18.7998 226.3c0 67.9004 73 100.2 126.8 69.2002c18.8008 0 37.3008 5 54.5 11.7998v-50.5c-6.5 -2.2002 -13 -4 -19.6992 -5.5c2.5 -6.7998 4 -13.7002 4 -21c0 -42.2002 -26 -74.5 -67.5 -82.2002c-12.5 -2.59961 -19.7002 -7.7998 -19.7002 -21.2998
445
- c0 -38.2998 101 -12.2998 101 -82.7998c0 -57.2998 -38.7002 -76 -90.7002 -76c-42.7002 0 -91.5 14.2998 -91.5 65.7998c0 29.9004 18 47.2002 45.2998 56.2002v1c-25 15.2002 -19.7998 57.5 -1 65.7998v1c-25.2998 8.5 -41.5 43.2002 -41.5 68.5zM106.5 62.5
446
- c-17.7002 0 -39.7002 -3.7998 -39.7998 -26.0996c0 -22.5 26 -25.2002 43.2998 -25.2002c18.2002 0 37.7002 4.5 37.7002 26.2998c0 22 -24.2002 25 -41.2002 25zM103.3 192c21.7002 0 29.7002 14 29.7002 34.2998c0 48.2998 -61 48.7998 -61 -0.5
447
- c0 -20.7998 9.2998 -33.7998 31.2998 -33.7998zM432 142.5v-49c-13.2998 -7.2998 -30.5 -9.7998 -45.5 -9.7998c-53.5 0 -59.7998 42.2002 -59.7998 85.7002v87.6992h0.5v1c-7 0 -7.2998 1.60059 -24 -1v47.5h24c0 22.3008 0.299805 31 -1.5 41.2002h56.7002
448
- c-2 -13.7998 -1.5 -27.5 -1.5 -41.2002h51v-47.5s-19.3008 1 -51 1v-91.0996c0 -14.7998 3.2998 -32.7998 21.7998 -32.7998c9.7998 0 21.2998 2.7998 29.2998 8.2998zM286 379.3c0 -18.7002 -14.5 -36.2002 -33.7998 -36.2002c-19.7998 0 -34.5 17.2002 -34.5 36.2002
449
- c0 19.2998 14.5 36.7002 34.5 36.7002c19.7998 0 33.7998 -18 33.7998 -36.7002zM279.8 304.8c-1.7998 -14.5996 -1.59961 -199.8 0 -217.8h-55.5c1.60059 18.0996 1.7998 203 0 217.8h55.5z" />
450
  <glyph glyph-name="hacker-news" unicode="&#xf1d4;"
451
  d="M0 416h448v-448h-448v448zM21.2002 218.8h-0.200195c0.0996094 0.100586 0.200195 0.299805 0.299805 0.400391c0 -0.100586 0 -0.299805 -0.0996094 -0.400391zM239.2 164.9l80.7998 155.1h-34.7998c-54.7998 -101.2 -48.2998 -98.5996 -60.6006 -125.6
452
  c-10.0996 24.3994 -6.7998 27.2998 -59.2998 125.6h-37.2998l79.7998 -153.3v-102.7h31.4004v100.9z" />
@@ -1433,10 +1433,13 @@ c15.7998 7.59961 36.5 78.8994 24.2998 101.3z" />
1433
  d="M87.2002 394.5c-41.5 -50.2002 -65.6006 -116.2 -65.5 -192.9c-0.100586 -86.7998 29 -159.5 78.7002 -212.1h-100.4v405h87.2002zM325.4 384.8c46.1992 -0.0996094 79.5996 -33.5 80.6992 -83.2002h-169.899c4.09961 49.7002 43.2998 83.1006 89.2002 83.2002z
1434
  M556.1 394.4h0.300781l-0.100586 0.0996094zM556.4 394.4h83.5996v-405h-80.7998c21.3994 23 40.5 49.8994 57.8994 80.7998l-96.3994 48.2002c-33.9004 -55.1006 -83.4004 -105.801 -151.9 -106.101c-99.7002 0.400391 -138.8 85.6006 -138.6 195.3h372.399
1435
  c0.5 12.4004 0.5 18.1006 0 24.1006c2.5 65.2002 -14.7998 120 -46.1992 162.7z" />
1436
- <glyph glyph-name="facebook-f" unicode="&#xf39e;" horiz-adv-x="264"
1437
- d="M215.8 363c-37.7998 0 -45.0996 -18 -45.0996 -44.2998v-62.7002h85.2998l-11.7002 -91h-73.5996v-229h-94v229h-76.7002v91h76.7002v71.7002c0 77.8994 47.5996 120.3 117.1 120.3c33.2998 0 61.9004 -2.5 70.2002 -3.59961v-81.4004h-48.2002z" />
1438
- <glyph glyph-name="facebook-messenger" unicode="&#xf39f;"
1439
- d="M224 416c122.5 0 221.8 -92.7998 221.7 -207.3c0 -138.8 -143.2 -238.5 -285.4 -198.7l-75.7002 -42v79.4004c-162.1 122.6 -68.6992 368.6 139.4 368.6zM247.4 137.9l121.1 128.5l-110.4 -61.1006l-57.3994 59.6006l-121.101 -128.5l110.4 61.0996z" />
 
 
 
1440
  <glyph glyph-name="firstdraft" unicode="&#xf3a1;" horiz-adv-x="384"
1441
  d="M384 256h-64v-128h-128v-128h-192v25.5996h166.4v128h128v128h89.5996v-25.5996zM358.4 217.6h25.5996v-153.6h-128v-128h-192v25.5996h166.4v128h128v128zM384 25.5996v-25.5996h-64v-64h-25.5996v89.5996h89.5996zM0 448h384v-128h-128v-128h-128v-128h-128v384z" />
1442
  <glyph glyph-name="fonticons-fi" unicode="&#xf3a2;" horiz-adv-x="384"
@@ -2095,15 +2098,6 @@ c2.2998 2.09961 2.7002 2.69922 5.59961 3.59961c3.40039 0 3.90039 -0.299805 6.700
2095
  l-3.2998 0.0996094c-1.7002 0.599609 -4.5 3.5 -6.2002 5.09961c-58.7998 57.8008 -148.7 151.601 -155.8 233.801c-1.5 71.3994 29.2998 113.399 82.9004 141.3c9.89941 4.09961 37 17.2998 81.0996 17.2998c22 0.200195 51.0996 -4.5 76.5996 -15.2002
2096
  c24.7002 -11.5 47 -26.3994 63.3008 -52.0996zM186.8 96.0996v325.7c-57.8994 -5.5 -72.7002 -89.2002 -69.2998 -136.7c4.09961 -58.2998 41.2998 -137.899 69.2998 -189zM328.7 268c15.7998 54.9004 -10.9004 134.7 -99.7002 153
2097
  c38.2002 -25.5996 49.5996 -85.5 48 -131.4c-2 -58.5996 -39.4004 -140 -67.2002 -191.899c41.6006 42.2998 102.5 113.5 118.9 170.3z" />
2098
- <glyph glyph-name="nintendo-switch" unicode="&#xf418;"
2099
- d="M95.9004 414.5c5.7998 1 19.0996 1.2998 63.2998 1.40039c54.3994 0.0996094 56 0 56.8994 -1.7002c0.600586 -1.2998 0.900391 -72.1006 0.900391 -222.601c0 -202.899 -0.0996094 -220.8 -1.5 -222.199c-1.40039 -1.40039 -6.7998 -1.5 -58.7002 -1.10059
2100
- c-50.2002 0.200195 -58 0.5 -64.0996 1.90039c-47 10.8994 -80 44 -90.2998 90.5c-1.90039 8.7002 -2 11.2998 -2.2002 122.899c-0.5 121.601 -0.200195 130.801 3.89941 146.5c11.3008 43.4004 47.2002 76.4004 91.8008 84.4004zM179.8 191.9h-0.200195v188
2101
- l-35.8994 -0.100586c-39.7002 -0.0996094 -45.4004 -0.700195 -57.6006 -5.59961c-24.2998 -9.7002 -42.3994 -31.2998 -48 -57.4004c-1.89941 -9.2002 -1.89941 -239.899 0.100586 -249.3c6.2998 -30 28.3994 -53 58.2998 -60.7002
2102
- c7 -1.7002 10.7002 -1.89941 45.5 -2.2998l37.7998 -0.5v187.9zM103.9 323.1c23.2998 4.7002 46 -11.2998 49.8994 -35c3.5 -20.0996 -8.7002 -39.5996 -28.7998 -46.3994c-4.90039 -1.7002 -7.5 -2 -14.7998 -1.7002c-8.10059 0.299805 -9.7002 0.599609 -15.9004 3.7002
2103
- c-9 4.39941 -15.5 11 -19.8994 20c-3 5.89941 -3.40039 7.89941 -3.80078 15.2002c-0.799805 14.0996 4.10059 26.0996 13.8008 34.5c4.7998 4.09961 13.6992 8.59961 19.5 9.69922zM262.1 415.4c0.300781 0.299805 18.8008 0.599609 41.2002 0.5
2104
- c32.2998 0 42.2998 -0.300781 48.7998 -1.40039c48.4004 -8.2998 85.3008 -44.7998 94.5 -93.0996c1.30078 -6.7002 1.5 -22.6006 1.5 -129c0 -133.301 0.100586 -128.7 -5.69922 -146.101c-1.60059 -4.5 -4.7002 -11.7998 -7 -16.2002
2105
- c-18 -34 -51.3008 -56.8994 -89 -61.1992c-8.90039 -1 -80.9004 -1.30078 -83.4004 -0.400391c-1.40039 0.599609 -1.5 21.0996 -1.5 223.4c0 122.699 0.200195 223.199 0.599609 223.5zM361.2 213.3c-23.2002 6.10059 -47.2998 -7.2998 -54.2002 -30
2106
- c-2.2998 -7.2998 -2.40039 -19.2002 -0.400391 -26.2002c6.7002 -23 31.4004 -37 54.6006 -31c14.2998 3.80078 25.3994 14.1006 31.0996 28.8008c3.10059 8 3.2002 20.7998 0.100586 29.5c-4.90039 14.0996 -16.7002 25.0996 -31.2002 28.8994z" />
2107
  <glyph glyph-name="node" unicode="&#xf419;" horiz-adv-x="640"
2108
  d="M316.3 -4c-2.09961 0 -4.2002 0.599609 -6.09961 1.59961l-19.2002 11.4004c-2.90039 1.59961 -1.5 2.2002 -0.5 2.5c3.7998 1.2998 4.59961 1.59961 8.7002 4c0.399414 0.200195 1 0.0996094 1.39941 -0.0996094l14.8008 -8.80078
2109
  c0.5 -0.299805 1.2998 -0.299805 1.7998 0l57.7998 33.4004c0.5 0.299805 0.900391 0.900391 0.900391 1.59961v66.7002c0 0.700195 -0.300781 1.2998 -0.900391 1.60059l-57.7998 33.2998c-0.5 0.299805 -1.2002 0.299805 -1.7998 0l-57.8008 -33.2998
@@ -2745,43 +2739,32 @@ c20.9434 0 37.9404 -16.9971 37.9404 -37.9404c0 -13.2236 -9.69043 -28.5703 -21.63
2745
  s-16.9922 -37.9297 -37.9297 -37.9297c-13.1963 0 -28.5273 9.66211 -34.2197 21.5684c-1.76367 3.66602 -3.39453 9.93848 -3.63965 14c-111.98 -80.3398 -191.9 51 -191.9 51c43.0703 -5.87988 91.1904 -8.21973 91.1904 -8.21973
2746
  c41.3301 -67.1709 63.9199 0.540039 72.7695 39.4893c50.418 18.7646 91.3604 77.6543 91.3906 131.45c0 2.08008 -0.220703 4.08984 -0.300781 6.15039l19.5205 0.139648c1.28027 -89.9697 -23.71 -147.2 -45.1406 -179.66z" />
2747
  <glyph glyph-name="mailchimp" unicode="&#xf59e;"
2748
- d="M232.7 374.9c-2.2002 -1.40039 -4.40039 -2.80078 -6.40039 -4.2002l-3.59961 12.5996zM110.9 133.7c3.5 -2.7002 12.7998 -4.7002 14.6992 -14.2002c1.90039 -10.7998 -6 -20.5 -15.5 -20.7002c-6.69922 -0.200195 -10.3994 4 -9.69922 4.90039
2749
- c0.299805 0.399414 1.2998 0.200195 2.89941 0c8.5 -1.2998 13.7002 3.89941 14.9004 9.2998c0.136719 0.683594 0.270508 1.80371 0.299805 2.5c-0.0107422 0.720703 -0.100586 1.88574 -0.200195 2.59961c-1 5.7002 -7.39941 6.7002 -11.5996 11.2002
2750
- c-1.45703 1.41211 -2.63867 4.2041 -2.63867 6.23242c0 1.69922 0.868164 4.14844 1.93848 5.46777c2.7998 2.7998 6.7998 1.7998 6.7998 0.799805c0 -0.5 -1 -0.899414 -2.2002 -1.7002c-1.59961 -1.09961 -1.7998 -2.19922 -1.39941 -4
2751
- c0.228516 -0.832031 0.990234 -1.90723 1.7002 -2.39941zM115.4 144.1c-3.2002 4.5 -10.4004 8.80078 -20.2002 6.60059c-0.728516 -0.154297 -1.89258 -0.46875 -2.60059 -0.700195c-0.230469 -0.015625 -0.588867 -0.105469 -0.799805 -0.200195
2752
- c-0.462891 -0.142578 -1.17969 -0.456055 -1.59961 -0.700195c-2.22168 -1.14941 -5.35742 -3.61426 -7 -5.5c-4 -5 -5.40039 -11.5 -5.2002 -17.6992c0.0527344 -2.94727 1.08301 -7.5166 2.2998 -10.2002c1.40039 -3 -1.89941 -3.60059 -4.7998 -0.400391
2753
- c-2.40039 2.5 -3.90039 6.2998 -4.59961 9.7002c-3 14 3.19922 28 17.5996 33.5996c0.679688 0.232422 1.79883 0.545898 2.5 0.700195c2.11328 0.554688 5.60156 1.00488 7.78613 1.00488c1.19629 0 3.12891 -0.136719 4.31348 -0.304688
2754
- c4.7041 -0.71875 11.1113 -4.16797 14.3008 -7.7002c2.5 -2.7998 4.39941 -6.89941 4.09961 -10.5c-0.0996094 -1.5 -0.799805 -3.59961 -2.09961 -4.2002c-0.147461 -0.0976562 -0.411133 -0.177734 -0.588867 -0.177734c-0.272461 0 -0.635742 0.168945 -0.811523 0.37793
2755
- c-1 1 -0.200195 2.90039 -2.59961 6.2998zM211.7 379.5l-6.10059 2l-1.69922 6.90039l2.89941 8.7998zM222.4 367.9c-2.7002 -1.80078 -5 -3.60059 -7 -5.10059l-13.6006 11.4004zM313.8 182.6c-3.5 1.90039 -5.2998 5.60059 -3.89941 8.2002
2756
- c1.39941 2.60059 5.39941 3.10059 9 1.2002c3.59961 -1.90039 5.2998 -5.59961 3.89941 -8.2002c-1.39941 -2.59961 -5.5 -3.2002 -9 -1.2002zM276.1 184.3c-1.01562 0.103516 -2.66895 0.186523 -3.69043 0.186523c-4.23828 0 -10.8281 -1.38281 -14.709 -3.08594
2757
- c-2.2998 -1 -3.7002 -1.7002 -4.40039 -1.2002s-0.0996094 2.39941 2.10059 4.5c1.47949 1.37598 4.21191 3.07812 6.09961 3.7998c0.285156 0.161133 0.77832 0.339844 1.09961 0.400391c0.871094 0.269531 2.30469 0.62793 3.2002 0.799805
2758
- c9.10059 1.5 15.7998 -3.5 14.9004 -5c-0.400391 -0.700195 -2.10059 -0.600586 -4.60059 -0.400391zM436.6 124.4c5.30078 -12.9004 -5.19922 -28.4004 -5.19922 -28.4004c-0.400391 -1.2002 -33.3008 -127.9 -162.9 -127.9c-112 0 -164.16 97.457 -165.1 97.4004
2759
- c-0.94043 -0.0566406 -2.46777 -0.102539 -3.41016 -0.102539c-5.66992 0 -14.5811 1.61426 -19.8906 3.60254c-32.8994 12.0996 -48.5996 49.7002 -37.2998 81.2002l-18.0996 13.7998c-69.9004 53.2998 128.3 297.2 198.5 242
2760
- c0.299805 -0.299805 16.7002 -13.5 16.7002 -13.5c25.0996 15.2002 50 23.5 70.2998 23.5c14.3994 0 26.3994 -4.09961 34.5 -12.9004c18.2002 -19.6992 11.5996 -57.2998 -13.2002 -95.3994c5.2998 -5.10059 9.7002 -12 12.9004 -18.7998
2761
- c7.89941 -6 13.0996 -15.3008 15.5996 -28.1006c2.7998 -14.2002 3.40039 -34.5 5.2002 -43.2002c6.7002 -3 3.89941 -1.59961 11 -5.19922c7.39941 -3.7002 16.5 -8.30078 26.5 -17.9004c17.7998 -4.40039 24.5996 -23.4004 14.2002 -36.2998
2762
- c-0.200195 -0.299805 -1.5 -1.7998 -2.80078 -3.2998c2.38965 -4.61914 5.16699 -12.5039 6.2002 -17.6006c6.22754 -1.37598 13.5293 -7.15527 16.2998 -12.8994zM30.0996 180.2c2.40039 -4.10059 19.3008 -16.5 19.4004 -16.5c6.59961 9.09961 14.0996 15.7998 21.7002 20
2763
- h-0.700195c15.2998 53.2998 56.2998 108 98.0996 143.7c10.4004 8.89941 31.4004 23 31.4004 23l-23.9004 20.7998l-1.69922 12.0996l32.5996 -26.8994c-1.40039 -1.2002 -2.90039 -2.40039 -4.40039 -3.7002c-3.2998 -2.7002 -6.5 -5.60059 -9.69922 -8.60059
2764
- c-4.60059 -4.2998 -9.30078 -8.89941 -13.9004 -13.6992c-9.90039 -10.2002 -19.5996 -21.4004 -28.7002 -32.8008c-16 -20.1992 -22.7002 -29.6992 -32.8994 -48.8994c-0.100586 -0.100586 55.5996 66.5996 69.3994 80.2998c25.4004 25.2002 67 53.2998 67.4004 53.5
2765
- c17.7998 10.7998 32.7998 17.2002 45.0996 20c-20.2002 -2 -41.7998 -12.4004 -58.7998 -22.5996c0 0.0996094 -24.7002 20.8994 -24.7002 20.8994l-9 -3.5c-32.7998 7.7002 -105.1 -46.7998 -148.6 -115.899c-17.6006 -28 -42.2998 -77.2002 -28.1006 -101.2z
2766
- M99.2002 80.0996c28.2002 0 49.5996 26.8008 44.3994 56.2002c0 0 -2.7998 -6.7002 -5.5 -10.2998c0.0673828 1.23242 0.12207 3.23438 0.12207 4.46973c0 7.46289 -1.93652 19.2588 -4.32129 26.3301c-0.935547 -3.6875 -2.81641 -9.55566 -4.2002 -13.0996
2767
- c-2.7002 22.8994 -7.5752 25.5918 -12.2998 27.7998c-4.72559 2.20801 -12.793 4 -18.0078 4h-0.192383c-25 0 -45.2998 -21.4004 -45.2998 -47.7002s20.2998 -47.7002 45.2998 -47.7002zM155 248.6c12.7002 16.5 29 32.3008 51.4004 46.9004
2768
- c48.7998 31.5996 97.5 35.2002 114.199 22.4004c-0.0878906 0.28418 -0.267578 0.732422 -0.399414 1c-4.2998 9 -14.2002 15.2998 -23 17.7998c1.52441 -1.56934 3.62988 -4.3916 4.7002 -6.2998c-6.24414 4.24707 -17.3096 8.9502 -24.7002 10.5
2769
- c0 0 1.09961 -0.800781 1.2998 -1c1.7998 -1.7002 4.2998 -4.40039 5.2998 -6.7002c-8.7998 3.59961 -20 5.5 -29.5 3.7002l-1.2002 -0.300781s1.2002 -0.299805 1.5 -0.399414c3.2002 -0.900391 7.7002 -2.90039 9.7002 -5.5
2770
- c-15.8994 2.7998 -33.2998 -0.299805 -42.7002 -5.5h2.2002c3.40039 -0.100586 10.4004 -0.5 13.2998 -2.40039c-10 -2 -24.3994 -6.5 -32.1992 -13.2002c1.39941 0.100586 9.19922 1.10059 12.3994 0.600586c-42.7998 -24.5 -62.2998 -61.6006 -62.2998 -61.6006z
2771
- M418.4 102.3c8.59961 10.2998 6.19922 20.5 -5.10059 20.5c-0.03125 0 -0.0820312 0.000976562 -0.114258 0.000976562c-1.77832 0 -4.59473 -0.448242 -6.28516 -1.00098c0 0 0 15.1006 -7 26.9004c-5.40039 -6.10059 -20.4004 -18.1006 -40 -27.4004
2772
- c-19.2852 -9.0293 -52.2139 -16.8252 -73.5 -17.3994c-8.60059 -0.300781 -13.8008 1.09961 -16.8008 -8.90039c-0.225586 -0.785156 -0.449219 -2.08496 -0.5 -2.90039c33.4004 -10.5 86.3008 10 91.4004 11.2002c0.120117 0.0556641 0.325195 0.100586 0.458008 0.100586
2773
- h0.0419922c3.2998 -0.200195 -28.2998 -20.2002 -72.2998 -20.2002c-0.183594 -0.000976562 -0.481445 -0.00195312 -0.664062 -0.00195312c-5.07715 0 -13.2471 0.761719 -18.2363 1.70215c2.5 -8.2002 8.7002 -11.9004 17 -13.8008
2774
- c3.51758 -0.786133 9.29688 -1.50293 12.9004 -1.59961c60.8994 -1.7002 111 45.5 113.1 47.9004c0 0 -0.5 -1.2002 -0.599609 -1.40039c-9 -20 -60.6006 -56.4004 -112.101 -55.4004l-0.199219 -0.0996094c-12 0.0996094 -26.5 3.09961 -34 12.5
2775
- c-11.9004 14.7998 -5.7002 39.4004 13.2998 40c0 0 4.39941 0.0996094 6.2998 0.0996094c47 1.40039 89.2998 18.7002 119.5 54.8008c4.09961 5.19922 -0.5 12.2998 -9.5 12.5h-0.0996094l-0.100586 0.0996094c-10.7002 11.4004 -20 15.5 -28.3994 19.7002
2776
- c-17.5 8.89941 -15.8008 1.2002 -19.9004 44.5c-1.09961 11.7002 -3.40039 27.5996 -13.5996 33.7002c-2.20605 1.26953 -6.06152 2.2998 -8.60645 2.2998c-1.46777 0 -3.79492 -0.358398 -5.19434 -0.799805c-5.59961 -1.2002 -8.7998 -4.40039 -12.7998 -8.10059
2777
- c-18.8994 -17.3994 -34.0996 -12.7002 -56.5996 -12.5c-21.1006 0.100586 -39.7998 -14.5996 -43.4004 -37.2998c-1.7998 -11.9004 -0.700195 -24 1.2002 -29.4004c0 0 -5.7998 3.80078 -8.5 7.2002c3.2998 -20.7998 23.6484 -34.042 22.2002 -34.2998
2778
- c-1.44922 -0.257812 -3.81934 -0.466797 -5.29102 -0.466797c-0.554688 0 -1.45508 0.0302734 -2.00879 0.0664062c0 0 10.6992 -8.5 20.0996 -11.5c-2.40039 -1.5 -14.7002 -13.6992 -21.0996 -30.3994c-5.90039 -15.7002 -3.5 -34.5 -3.5 -34.5l5.19922 7.7002
2779
- s-3.2998 -17.2002 3.2002 -33.8008c2.2002 5 6.90039 13.8008 6.90039 13.8008s-0.799805 -18.4004 8.09961 -33.5c0.299805 3.39941 1.60059 12.2998 1.60059 12.2998s5.09961 -15.7002 16.8994 -26.7002c22 -19.5 80.2998 -23.0996 124.7 11.7998
2780
- c35.2002 27.6006 41.2998 60.7998 41.9004 62zM269.7 85c0 0.0996094 -0.100586 0.0996094 -0.100586 0.200195c0 -0.100586 0 -0.100586 0.100586 -0.200195c0 0.0996094 -0.100586 0.200195 -0.100586 0.400391c0 -0.200195 0 -0.300781 0.100586 -0.400391zM332.6 195.4
2781
- c0.600586 3.5 3.10059 6.09961 5.7002 5.69922c2.60059 -0.399414 4.2998 -3.5 3.7002 -7.09961s-3.09961 -6.09961 -5.7002 -5.7002c-2.59961 0.400391 -4.2002 3.60059 -3.7002 7.10059zM274.6 196.6c-10.3994 3.80078 -18 4.40039 -31.5 -0.699219
2782
- c-3.39941 -1.30078 -5.7998 -2.30078 -7 -2.10059c-1.89941 0.299805 0 3.7002 4.10059 7.10059c4.65918 3.77734 13.3096 6.84277 19.3076 6.84277c2.89551 0 7.46191 -0.780273 10.1924 -1.74316c4.2998 -1.59961 9.09961 -4.7002 11.5996 -8.40039
2783
- c0.900391 -1.39941 1.2002 -2.5 0.799805 -2.89941c-0.699219 -0.900391 -3.5 0.299805 -7.5 1.89941zM321.3 225.8c-0.0996094 3.40039 0.5 8.90039 3.7002 10c5.40039 1.90039 12.5996 -12 12.9004 -24.2998c-3.09863 1.50684 -8.41016 2.72949 -11.8555 2.72949
2784
- c-0.731445 0 -1.91699 -0.0576172 -2.64453 -0.129883c-1.03027 3.14844 -1.97168 8.39062 -2.10059 11.7002z" />
2785
  <glyph glyph-name="megaport" unicode="&#xf5a3;" horiz-adv-x="496"
2786
  d="M214.5 238.4l33.4004 33.3994l33.3994 -33.3994v-66.4004l-33.2998 -33.2998l-33.5 33.5v66.2002zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM393.1 25.5996h0.100586v87.1006l-59.7002 59.7002v87.5996l-59.5 59.5
2787
  v75.5996l-26.0996 19.2002l-26.1006 -19.2002v-75.5996l-59.5 -59.5v-87.9004l-59.5 -59.5v-87l26.1006 -19.1992l26.0996 19.1992v65.5l33.5 33.4004l33.4004 -33.4004v-65.5l26.0996 -19.1992l26.2002 19.1992v65.5l33.3994 33.4004l33.4004 -33.4004v-65.5l26 -19.1992z
@@ -3269,21 +3252,10 @@ c-0.400391 -8.59961 28.3994 -33.5 57.7998 -32.2998zM263.9 76.9004v0.599609c-0.20
3269
  c32.6006 0.199219 59 24.2998 58.8008 54zM346.1 34.2002c18.4004 23.2002 12.2002 62 1.7002 72.2998c-15.5996 11.9004 -38 -3.2998 -58.8994 -26.5996c-18.3008 -21.1006 -28.4004 -59.6006 -15.1006 -72c12.7002 -9.60059 47 -8.30078 72.2998 26.2998zM369 107.4
3270
  c23.7002 18.6992 31.2998 73.5996 -12.5996 98.2998c-26.4004 7 -8.90039 -107.7 12.5996 -98.2998z" />
3271
  <glyph glyph-name="redhat" unicode="&#xf7bc;" horiz-adv-x="512"
3272
- d="M312.4 46.7998c1.2998 -1.2998 3.59961 -5.59961 0.799805 -11.0996c-1.60059 -2.90039 -3.2002 -4.90039 -6.2002 -7.2998c-3.59961 -2.90039 -10.5996 -6.2002 -20.2998 -0.100586c-5.2002 3.2998 -5.5 4.40039 -12.7002 3.40039
3273
- c-5.09961 -0.700195 -7.09961 4.5 -5.2998 8.7998c1.89941 4.2998 9.39941 7.7002 18.7998 2.2002c4.2002 -2.5 10.7998 -7.7002 16.5996 -3.10059c2.40039 1.90039 3.80078 3.2002 7.2002 7c0.299805 0.5 0.799805 0.5 1.10059 0.200195zM256 418.3
3274
- c141.4 0 256 -114.6 256.3 -255.899c0 -51.3008 -15.0996 -99 -41.0996 -139.101c-34.4004 7.90039 -63.2998 1.5 -77.7002 -4.5c-1.40039 -0.700195 -2.2998 -2.09961 -2.2998 -3.7002c0 -1.89941 1.09961 -2.09961 0.599609 -4.7998
3275
- c-0.700195 -3.09961 -4.2002 -6.09961 -13 -8.09961c-17.3994 -3.7998 -28.3994 -21.9004 -34.7002 -27.7998c-6.5 -6.10059 -23.2998 -10.2002 -25.2998 -8.30078c-0.299805 0.300781 -0.299805 0.700195 0.100586 1.2002c2.5 3.2998 11.8994 13.5 17.5996 24.5
3276
- c5.2002 9.90039 9.7002 12.7002 16 22.1006c1.90039 2.69922 9 12.5 11.0996 20.0996c2.30078 7.59961 1.5 16.9004 2.40039 20.7998c1.2002 5.60059 6.5 17.7002 6.90039 24.5c0.199219 3.90039 -16.1006 -5.5 -23.9004 -5.5s-15.4004 4.7002 -22.2998 5
3277
- c-8.60059 0.400391 -14.1006 -6.59961 -21.9004 -5.39941c-4.39941 0.699219 -8.2002 4.59961 -15.8994 4.89941c-11.1006 0.400391 -24.6006 -6.09961 -49.9004 -5.2998c-24.9004 0.799805 -48 31.5 -51.0996 36.4004c-3.7002 5.69922 -8.2002 5.69922 -13.1006 1.19922
3278
- c-4.89941 -4.39941 -11 -0.899414 -12.7002 2.10059c-2.39941 4.2998 -8 14.7998 -16.2998 21.2002c-8.7002 6.7998 -17.5 6.09961 -21.5 5c-10.5 -2.80078 -15.5996 -13.6006 -14.7002 -22.7002c0.900391 -9.2998 5.60059 -13.5 9.5 -17.7998
3279
- c6.30078 -7.2002 6.10059 -14.1006 15.8008 -18.2002c5 -2.10059 6.69922 -5.10059 5.2998 -9.10059c-1.2998 -3.5 -6.40039 -4.2998 -9.7998 -4.5c-8.30078 -0.399414 -15.1006 3.5 -15.8008 3.90039c-12 7.59961 -11.1992 22.9004 -30.2998 22.9004
3280
- c-3.7998 0 -7.2998 -1 -10.3994 -2.60059c-12.4004 -6.39941 -27 -10.2002 -42.8008 -10.2002h-17.7998c-8.59961 25.7002 -13.2998 53.2002 -13.2998 81.8008c0 141.3 114.6 255.899 256 255.899zM464.2 167.5c5.5 30.5996 -20.2002 53.2002 -63.9004 63.0996
3281
- c-2.5 -8.5 -6.09961 -19.3994 -22.0996 -27.5996c-2.40039 -1.2002 -3.2998 0.799805 -2.2002 2.59961c6.09961 10.3008 7.09961 12.9004 8.90039 16.9004c2.5 6 3.7998 14.4004 -1.10059 32c-9.59961 34.5996 -29.7002 80.9004 -44.2998 95.9004
3282
- c-14.0996 14.5 -39.5996 18.5996 -62.7002 12.6992c-8.39941 -2.19922 -25.0996 -10.7998 -55.8994 -3.89941c-53.3008 12 -61.2002 -14.7002 -64.3008 -26.2998c-3 -11.6006 -10.3994 -44.7002 -10.3994 -44.7002c-2.40039 -13.5 -5.7002 -36.9004 77.2002 -52.7002
3283
- c62.6992 -12 30.8994 -31.7998 55.6992 -48.4004c5.5 -3.59961 0 -6.69922 -6.09961 -7.2998c-16.4004 -1.7002 -77.0996 15.7002 -113.1 36.1006c-29.4004 17.8994 -29.9004 34.0996 -23.2002 47.7998c-44.4004 4.7998 -77.7998 -4.2002 -83.7998 -25.2002
3284
- c-10.3008 -36.0996 79.3994 -97.7002 181.6 -128.6c107.2 -32.4004 217.4 -9.80078 229.7 57.5996zM229.6 313c19.9004 0 34.4004 -14.5 6.5 -16.5996c-29.5996 -2.10059 -32.6992 -5.30078 -38.1992 -11.2002c-7.80078 -8.2998 -18.1006 10.7998 -18.1006 10.7998
3285
- c-6.2002 1.2998 -13.5996 11.2002 -9.59961 20.5c4 9.2002 11.2998 6.5 13.5996 3.59961c11.4004 -14.0996 19.5 -7.09961 45.7998 -7.09961zM290.7 353.2c27 2.7998 39.5996 -7.7002 39.3994 -14.1006c-0.199219 -7.59961 -13.6992 -13.5 -30.0996 -13.1992
3286
- c-5.2998 0.0996094 -10.2998 0.899414 -14.5996 2.09961c-1.2002 0.299805 -1.2002 1.90039 0 2.2002c30.5996 7 15.8994 20.5 -18.3008 15.0996c-1.19922 0 -1.19922 1.2002 -0.5 1.5c5.80078 3 14.3008 5.40039 24.1006 6.40039z" />
3287
  <glyph glyph-name="sketch" unicode="&#xf7c6;" horiz-adv-x="512"
3288
  d="M27.5 285.8l78.9004 105.8l-6.90039 -130.699h-90.5zM396.3 402.3l7.10059 -133.5l-135.7 147.2zM112.2 229.7l122.6 -239.7l-224.899 261.7h91.0996zM114.2 260.9l142.1 154.1l60.4004 -65.5996l81.5 -88.5h-284zM411.5 251.8v-0.0996094h90.9004l-224.801 -261.7z
3289
  M415.4 379l87.8994 -118.1h-90.2998l-6.09961 113.399l-0.900391 17.2998zM113.5 354.5l2.59961 47.7998l128.601 13.7002l-135.8 -147.1zM401.2 251.8l-144.9 -283.8l-102.7 200.9l-42.3994 82.8994h290z" />
@@ -3455,5 +3427,16 @@ c0 -10.7881 -8.63965 -20.9561 -19.2861 -22.6982c-54.9102 0.0195312 -131.93 6.009
3455
  c0 13.7334 11.1455 24.8799 24.8799 24.8799c8.72949 0 18.8213 -6.41504 22.5264 -14.3184l81 -205.06h1.20996l77 203.529c3.22559 8.26074 13.041 14.9648 21.9092 14.9648c12.9834 0 23.5205 -10.5371 23.5205 -23.5195
3456
  c0 -1.89258 -0.438477 -4.90137 -0.979492 -6.71484l-109.6 -273.391c-18.5498 -47.2197 -37.1201 -79.5596 -93.29 -79.5596c-0.151367 -0.000976562 -0.395508 -0.000976562 -0.545898 -0.000976562c-6.4668 0 -16.8887 0.874023 -23.2646 1.95117
3457
  c-8.52051 2.44238 -15.4365 11.6201 -15.4365 20.4844c0 11.7637 9.54688 21.3105 21.3096 21.3105c0.28418 0 0.744141 -0.0117188 1.02734 -0.0253906c0.660156 -0.0595703 10.9102 -0.660156 13.8604 -0.660156c30.4697 0 43.7393 18.9404 58.0693 59.4102z" />
 
 
 
 
 
 
 
 
 
 
 
3458
  </font>
3459
  </defs></svg>
1
  <?xml version="1.0" standalone="no"?>
2
  <!--
3
+ Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com
4
  License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
5
  -->
6
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
7
  <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
8
  <metadata>
9
+ Created by FontForge 20190112 at Tue Jun 4 15:16:44 2019
10
  By Robert Madole
11
  Copyright (c) Font Awesome
12
  </metadata>
23
  bbox="-0.200195 -66.9505 641.5 448.3"
24
  underline-thickness="25"
25
  underline-position="-51"
26
+ unicode-range="U+0020-F842"
27
  />
28
  <missing-glyph />
29
  <glyph glyph-name="twitter-square" unicode="&#xf081;"
33
  c-10.4004 -2.7002 -19.5 -2.7002 -29.5996 -1.2002c8.2998 -26 32.5 -44.9004 61.2998 -45.5c-22.5 -17.6006 -50.7002 -28 -81.4004 -28c-5.39941 0 -10.5 0.200195 -15.7998 0.799805c29 -18.5996 63.5 -29.4004 100.7 -29.4004c120.6 0 186.6 99.9004 186.6 186.601
34
  c0 2.7998 0 5.7002 -0.200195 8.5z" />
35
  <glyph glyph-name="facebook-square" unicode="&#xf082;"
36
+ d="M400 416c26.4961 0 48 -21.5039 48 -48v-352c0 -26.4961 -21.5039 -48 -48 -48h-137.25v152.31h57.7803l11 71.6904h-68.7803v46.5498c0 19.6104 9.61035 38.7305 40.4199 38.7305h31.2705v61s-28.3809 4.83984 -55.5205 4.83984
37
+ c-56.6699 0 -93.6699 -34.3301 -93.6699 -96.4805v-54.6396h-63v-71.6904h63v-152.31h-137.25c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352z" />
38
  <glyph glyph-name="linkedin" unicode="&#xf08c;"
39
  d="M416 416c17.5996 0 32 -14.5 32 -32.2998v-383.4c0 -17.7998 -14.4004 -32.2998 -32 -32.2998h-384.1c-17.6006 0 -31.9004 14.5 -31.9004 32.2998v383.4c0 17.7998 14.2998 32.2998 31.9004 32.2998h384.1zM135.4 32h0.0996094v213.8h-66.5v-213.8h66.4004zM102.2 275
40
  c21.2998 0 38.5 17.2002 38.5 38.5c0 21.2002 -17.2998 38.5 -38.5 38.5c-21.2998 0 -38.5 -17.2998 -38.5 -38.5s17.2002 -38.5 38.5 -38.5zM384.3 32v117.2c0 57.5996 -12.5 101.899 -79.7002 101.899c-32.2998 0 -54 -17.6992 -62.8994 -34.5h-0.900391v29.2002h-63.7002
57
  c13.9688 -7.79688 30.2139 -12.6699 47.4307 -13.3184c-28.2637 18.8428 -46.7803 51.0049 -46.7803 87.3906c0 19.4922 5.19629 37.3604 14.2939 52.9541c51.6543 -63.6748 129.3 -105.258 216.364 -109.807c-1.62402 7.79688 -2.59863 15.918 -2.59863 24.04
58
  c0 57.8271 46.7822 104.934 104.934 104.934c30.2139 0 57.502 -12.6699 76.6709 -33.1367c23.7148 4.54785 46.4551 13.3193 66.5986 25.3398c-7.79785 -24.3662 -24.3662 -44.833 -46.1318 -57.8271c21.1172 2.27344 41.584 8.12207 60.4258 16.2432
59
  c-14.292 -20.791 -32.1611 -39.3086 -52.6279 -54.2529z" />
60
+ <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="512"
61
+ d="M504 192c0 -123.78 -90.6904 -226.38 -209.25 -245v173.31h57.7803l11 71.6904h-68.7803v46.5498c0 19.6104 9.61035 38.7305 40.4102 38.7305h31.2803v61s-28.3809 4.83984 -55.5205 4.83984c-56.6699 0 -93.6699 -34.3301 -93.6699 -96.4805v-54.6396h-63v-71.6904h63
62
+ v-173.31c-118.56 18.6201 -209.25 121.22 -209.25 245c0 137 111 248 248 248s248 -111 248 -248z" />
63
  <glyph glyph-name="github" unicode="&#xf09b;" horiz-adv-x="496"
64
  d="M165.9 50.5996c0 -2 -2.30078 -3.59961 -5.2002 -3.59961c-3.2998 -0.299805 -5.60059 1.2998 -5.60059 3.59961c0 2 2.30078 3.60059 5.2002 3.60059c3 0.299805 5.60059 -1.2998 5.60059 -3.60059zM134.8 55.0996c0.700195 2 3.60059 3 6.2002 2.30078
65
  c3 -0.900391 4.90039 -3.2002 4.2998 -5.2002c-0.599609 -2 -3.59961 -3 -6.2002 -2c-3 0.599609 -5 2.89941 -4.2998 4.89941zM179 56.7998c2.90039 0.299805 5.59961 -1 5.90039 -2.89941c0.299805 -2 -1.7002 -3.90039 -4.60059 -4.60059
432
  c16.2998 -3.30078 30.5 -11.9004 40.7002 -23.8008l51.2002 44.8008c11.8994 -13.6006 21.2998 -29.4004 27.3994 -46.8008l-64.5 -22.0996c2.5 -7.40039 3.90039 -15.2002 3.90039 -23.5s-1.40039 -16 -3.90039 -23.5l64.2002 -22.0996
433
  c-5.7998 -17.5 -15.2002 -33.2002 -27.0996 -46.8008l-51.2002 44.8008c-10.2998 -11.9004 -24.4004 -20.2002 -40.7002 -23.5z" />
434
  <glyph glyph-name="git-square" unicode="&#xf1d2;"
435
+ d="M100.59 113.76c48.5703 -3.30957 58.9502 -2.10938 58.9502 -11.9395c0 -20 -65.5498 -20.0605 -65.5498 -1.52051c0.00976562 5.08984 3.29004 9.40039 6.59961 13.46zM128.54 230.4c30.96 0 31.7598 -44.4707 -0.75 -44.4707c-33 0 -31.54 44.4707 0.75 44.4707z
436
+ M448 368v-352c0 -26.4961 -21.5039 -48 -48 -48h-352c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352c26.4961 0 48 -21.5039 48 -48zM221 298.69c0 -14.4902 8.37988 -22.8809 22.8604 -22.8809c14.7393 0 23.1299 8.39062 23.1299 22.8809
437
+ c0 14.4893 -8.37012 22.3096 -23.1104 22.3096c-14.4795 0 -22.8799 -7.83984 -22.8799 -22.3096zM199.18 253h-49.5498c-25 6.5498 -81.5596 4.84961 -81.5596 -46.75c0 -18.7998 9.39941 -32 21.8496 -38.1104c-15.6895 -14.3701 -23.1201 -21.1396 -23.1201 -30.7393
438
+ c0 -6.87012 2.79004 -13.2207 11.1807 -16.7607c-8.90039 -8.39941 -14 -14.4795 -14 -25.9199c0.0195312 -20.0693 17.5498 -31.7197 63.5391 -31.7197c44.2207 0 69.8701 16.5098 69.8701 45.7305c0 36.6699 -28.2295 35.3193 -94.7695 39.3799l8.37988 13.4297
439
+ c17 -4.74023 74.1904 -6.23047 74.1904 42.4297c0 11.6904 -4.83008 19.8203 -9.40039 25.6699l23.3799 1.78027zM283.52 143.16l-13 1.78027c-3.81934 0.509766 -4.06934 1 -4.06934 5.08984v105.45h-52.6006l-2.79004 -20.5703c15.75 -5.5498 17 -4.86035 17 -10.1699
440
+ v-74.7402c0 -5.62012 -0.30957 -4.58008 -17 -6.87012v-20.0596h72.4209zM384 133l-6.87012 22.3701c-40.9297 -15.3701 -37.8496 12.4102 -37.8496 16.7295v60.7207h37.8496v25.4102h-35.8203c-2.86914 0 -2 -2.52051 -2 38.6299h-24.1797
441
+ c-2.79004 -27.7002 -11.6797 -38.8799 -34 -41.4199v-22.6201c20.4697 0 19.8203 0.849609 19.8203 -2.54004v-66.5703c0 -28.7197 11.4297 -40.9102 41.6699 -40.9102c14.4502 0 30.4502 4.83008 41.3799 10.2002z" />
442
+ <glyph glyph-name="git" unicode="&#xf1d3;" horiz-adv-x="512"
443
+ d="M216.29 289.61l0.0400391 -34.5508l-37.4102 -2.83984c7.27051 -9.35938 15 -22.3701 15 -41.0693c0 -77.8906 -91.4297 -75.4707 -118.7 -67.8906l-13.4297 -21.5498c106.47 -6.5 151.63 -4.33984 151.63 -63c0 -46.7598 -41.04 -73.1797 -111.79 -73.1797
444
+ c-73.5801 0 -101.63 18.71 -101.63 50.8193c0 18.3008 8.12988 28.04 22.4004 41.4502c-13.4199 5.66992 -17.8906 15.8105 -17.8906 26.8105c0 15.3594 11.9004 26.21 37 49.21c-20 9.76953 -35 30.9102 -35 61c0 82.5498 90.4902 85.2793 130.49 74.79h79.29z
445
+ M152.87 47.71c0 15.7402 -16.6104 13.8096 -94.3203 19.1104c-5.2998 -6.54004 -10.5693 -13.4004 -10.5693 -21.54c0 -29.6699 104.89 -29.6299 104.89 2.42969zM102.06 182.29c52.0205 0 50.7402 71.1602 1.2002 71.1602c-51.6602 0 -54 -71.1602 -1.2002 -71.1602z
446
+ M235.36 81.7803v32.0996c26.75 3.66016 27.2393 2 27.2393 11v119.51c0 8.5 -2.0498 7.37988 -27.2393 16.2607l4.46973 32.9199h84.1699v-168.71c0 -6.51074 0.400391 -7.32031 6.50977 -8.14062l20.7305 -2.83984v-32.0996h-115.88zM287.81 326.09
447
+ c-23.1699 0 -36.5898 13.4297 -36.5898 36.6104c0 23.1797 13.4199 35.7695 36.5898 35.7695c23.5801 0 37 -12.6201 37 -35.7695c0 -23.1504 -13.4199 -36.6104 -37 -36.6104zM512 97.54c-17.4902 -8.53027 -43.0996 -16.2598 -66.2803 -16.2598
448
+ c-48.3799 0 -66.6699 19.5 -66.6699 65.46v106.51c0 5.41992 1.0498 4.05957 -31.71 4.05957v36.1904c35.7803 4.07031 50 22 54.4697 66.2695h38.6309c0 -65.8291 -1.34082 -61.8096 3.25977 -61.8096h57.2998v-40.6504h-60.5596v-97.1494
449
+ c0 -6.91992 -4.9209 -51.4102 60.5693 -26.8398z" />
450
  <glyph glyph-name="hacker-news" unicode="&#xf1d4;"
451
  d="M0 416h448v-448h-448v448zM21.2002 218.8h-0.200195c0.0996094 0.100586 0.200195 0.299805 0.299805 0.400391c0 -0.100586 0 -0.299805 -0.0996094 -0.400391zM239.2 164.9l80.7998 155.1h-34.7998c-54.7998 -101.2 -48.2998 -98.5996 -60.6006 -125.6
452
  c-10.0996 24.3994 -6.7998 27.2998 -59.2998 125.6h-37.2998l79.7998 -153.3v-102.7h31.4004v100.9z" />
1433
  d="M87.2002 394.5c-41.5 -50.2002 -65.6006 -116.2 -65.5 -192.9c-0.100586 -86.7998 29 -159.5 78.7002 -212.1h-100.4v405h87.2002zM325.4 384.8c46.1992 -0.0996094 79.5996 -33.5 80.6992 -83.2002h-169.899c4.09961 49.7002 43.2998 83.1006 89.2002 83.2002z
1434
  M556.1 394.4h0.300781l-0.100586 0.0996094zM556.4 394.4h83.5996v-405h-80.7998c21.3994 23 40.5 49.8994 57.8994 80.7998l-96.3994 48.2002c-33.9004 -55.1006 -83.4004 -105.801 -151.9 -106.101c-99.7002 0.400391 -138.8 85.6006 -138.6 195.3h372.399
1435
  c0.5 12.4004 0.5 18.1006 0 24.1006c2.5 65.2002 -14.7998 120 -46.1992 162.7z" />
1436
+ <glyph glyph-name="facebook-f" unicode="&#xf39e;" horiz-adv-x="320"
1437
+ d="M279.14 160h-74.6895v-224h-100.17v224h-81.3906v92.6602h81.3906v70.6201c0 80.3398 47.8594 124.72 121.08 124.72c35.0693 0 71.75 -6.25977 71.75 -6.25977v-78.8906h-40.4199c-39.8203 0 -52.2402 -24.71 -52.2402 -50.0596v-60.1299h88.9102z" />
1438
+ <glyph glyph-name="facebook-messenger" unicode="&#xf39f;" horiz-adv-x="512"
1439
+ d="M256.55 440c140.04 0 247.45 -102.34 247.45 -240.57c0 -175.13 -166.15 -273.229 -319.44 -231.04c-8.96973 2.44043 -9.64941 0.600586 -62.5596 -22.6992c-2.10449 -0.918945 -5.67578 -1.66504 -7.97168 -1.66504c-10.624 0 -19.543 8.61719 -19.9082 19.2344
1440
+ c-1.41992 46.3701 0.299805 50.7207 -8.0498 58.2305c-48.3604 43.1602 -78.0703 105.64 -78.0703 177.939c0 138.23 108.52 240.57 248.55 240.57zM405.79 254.87c7.0498 11.0801 -6.65039 23.5996 -17.0898 15.6201l-78.4102 -59.3799
1441
+ c-2.20801 -1.65625 -6.24023 -3 -9 -3s-6.79199 1.34375 -9 3l-58.0596 43.46c-5.48926 4.09961 -15.5049 7.42676 -22.3564 7.42676c-11.3438 0 -25.4805 -7.77637 -31.5537 -17.3574l-73 -115.569c-7.05078 -11.0703 6.64941 -23.6006 17.1094 -15.6699l78.3701 59.4395
1442
+ c2.20801 1.65625 6.24023 3 9 3s6.79199 -1.34375 9 -3l58.0801 -43.4697c5.48926 -4.09766 15.5039 -7.42285 22.3535 -7.42285c11.3428 0 25.4805 7.77441 31.5566 17.3525z" />
1443
  <glyph glyph-name="firstdraft" unicode="&#xf3a1;" horiz-adv-x="384"
1444
  d="M384 256h-64v-128h-128v-128h-192v25.5996h166.4v128h128v128h89.5996v-25.5996zM358.4 217.6h25.5996v-153.6h-128v-128h-192v25.5996h166.4v128h128v128zM384 25.5996v-25.5996h-64v-64h-25.5996v89.5996h89.5996zM0 448h384v-128h-128v-128h-128v-128h-128v384z" />
1445
  <glyph glyph-name="fonticons-fi" unicode="&#xf3a2;" horiz-adv-x="384"
2098
  l-3.2998 0.0996094c-1.7002 0.599609 -4.5 3.5 -6.2002 5.09961c-58.7998 57.8008 -148.7 151.601 -155.8 233.801c-1.5 71.3994 29.2998 113.399 82.9004 141.3c9.89941 4.09961 37 17.2998 81.0996 17.2998c22 0.200195 51.0996 -4.5 76.5996 -15.2002
2099
  c24.7002 -11.5 47 -26.3994 63.3008 -52.0996zM186.8 96.0996v325.7c-57.8994 -5.5 -72.7002 -89.2002 -69.2998 -136.7c4.09961 -58.2998 41.2998 -137.899 69.2998 -189zM328.7 268c15.7998 54.9004 -10.9004 134.7 -99.7002 153
2100
  c38.2002 -25.5996 49.5996 -85.5 48 -131.4c-2 -58.5996 -39.4004 -140 -67.2002 -191.899c41.6006 42.2998 102.5 113.5 118.9 170.3z" />
 
 
 
 
 
 
 
 
 
2101
  <glyph glyph-name="node" unicode="&#xf419;" horiz-adv-x="640"
2102
  d="M316.3 -4c-2.09961 0 -4.2002 0.599609 -6.09961 1.59961l-19.2002 11.4004c-2.90039 1.59961 -1.5 2.2002 -0.5 2.5c3.7998 1.2998 4.59961 1.59961 8.7002 4c0.399414 0.200195 1 0.0996094 1.39941 -0.0996094l14.8008 -8.80078
2103
  c0.5 -0.299805 1.2998 -0.299805 1.7998 0l57.7998 33.4004c0.5 0.299805 0.900391 0.900391 0.900391 1.59961v66.7002c0 0.700195 -0.300781 1.2998 -0.900391 1.60059l-57.7998 33.2998c-0.5 0.299805 -1.2002 0.299805 -1.7998 0l-57.8008 -33.2998
2739
  s-16.9922 -37.9297 -37.9297 -37.9297c-13.1963 0 -28.5273 9.66211 -34.2197 21.5684c-1.76367 3.66602 -3.39453 9.93848 -3.63965 14c-111.98 -80.3398 -191.9 51 -191.9 51c43.0703 -5.87988 91.1904 -8.21973 91.1904 -8.21973
2740
  c41.3301 -67.1709 63.9199 0.540039 72.7695 39.4893c50.418 18.7646 91.3604 77.6543 91.3906 131.45c0 2.08008 -0.220703 4.08984 -0.300781 6.15039l19.5205 0.139648c1.28027 -89.9697 -23.71 -147.2 -45.1406 -179.66z" />
2741
  <glyph glyph-name="mailchimp" unicode="&#xf59e;"
2742
+ d="M330.61 204.48c-2.50977 3.17969 -4.70996 8.31934 -5.9707 14.3193c-2.22949 10.6807 -1.98926 18.4102 4.24023 19.4199c6.23047 1.01074 9.25 -5.45996 11.4805 -16.1299c1.5 -7.17969 1.20996 -13.7803 -0.450195 -17.6094
2743
+ c-1.27832 0.165039 -3.36133 0.299805 -4.65039 0.299805c-1.28809 0 -3.37207 -0.134766 -4.64941 -0.299805zM277.05 196c-4.45996 1.95996 -10.2598 4.13965 -17.2598 3.7002c-12.5996 -0.770508 -21.75 -7.21973 -22.5996 -3.48047
2744
+ c-0.400391 1.83984 2.40918 4.87988 5.40918 7.06055c4.5791 3.35254 12.9014 6.07422 18.5762 6.07422c3.45312 0 8.84473 -1.07324 12.0342 -2.39453c8.63965 -3.7002 14.0098 -11.1504 12.1201 -13.0898c-1.08008 -1.12988 -3.81055 0.129883 -8.28027 2.12988z
2745
+ M268.05 190.87c9.68066 1.14941 16.8604 -4.62988 15.4004 -6.85059c-0.629883 -1.00977 -2.02051 -0.829102 -4.94043 -0.489258c-1.55078 0.239258 -4.08301 0.433594 -5.65234 0.433594c-3.72656 0 -9.58105 -1.06738 -13.0674 -2.38379
2746
+ c-4.04004 -1.62012 -4.30957 -1.15039 -5.20996 -0.810547c-1.53027 3.57031 4.40039 8.68066 13.4697 10.1006zM322.22 173.77c-3.40039 -6.91016 -17.7002 0.0703125 -14.2998 7c3.40039 6.93066 17.6797 -0.129883 14.2998 -7zM337.88 194.24
2747
+ c7.69922 -0.149414 7.42969 -16.0605 -0.259766 -15.9307c-7.69043 0.130859 -7.40039 16.0605 0.259766 15.9307zM119.09 115.34c4.0293 0.910156 3.40039 -1.25 3.37012 -0.359375c0.256836 -0.317383 0.46582 -0.904297 0.46582 -1.3125
2748
+ c0 -0.299805 -0.119141 -0.755859 -0.265625 -1.01758c-3.16016 -7.37012 -20.1904 -7.68066 -21.5801 9c-0.910156 10.8594 9.30957 21.0293 -2.28027 28.6191c-1.77734 1.17773 -4.95117 2.13281 -7.08301 2.13281c-3.84961 0 -8.67285 -2.62207 -10.7666 -5.85254
2749
+ c-3.2998 -5.16016 -3.11035 -12.2002 -7.37988 -11.6299c-3.7207 0.540039 -3.70996 14.4805 5 24.0801c7.22949 8 25.9492 11.9297 35.0498 -5.54004c8.11035 -15.3896 -8.2002 -27.7695 -3 -35.7695c2.46973 -3.80078 7.14941 -2.66016 8.46973 -2.35059zM418.81 132.41
2750
+ c6.44043 0 16.5605 -7.5 16.5605 -25.2705c0 -17.7695 -7.37012 -37.9092 -9.11035 -42.3799c-54.3896 -130.279 -264.56 -130.06 -322.29 3c-31.5293 -0.0400391 -64.1699 26.9805 -67.5293 60.3799c-0.256836 2.25195 -0.463867 5.91992 -0.463867 8.18652
2751
+ c0 7.21289 2.04395 18.5537 4.56348 25.3135l-14.7598 12.5107c-67.5498 57.04 143.72 291.85 211.27 232.93c0.339844 -0.299805 22.9902 -22.5205 23.0498 -22.5703l12.5508 5.33008c59.2695 24.5303 107.359 12.6904 107.42 -26.4697
2752
+ c0.0292969 -20.3604 -12.9404 -44.1006 -33.7305 -65.6504c26.1699 -24.2998 20.0205 -71.6094 21.5205 -83c7.19922 -2 30.6992 -7.62012 41.0996 -18.54c18.3604 -19.25 5.52051 -39.5801 3.07031 -43.25c4.20996 -11.2998 3.42969 -8.79004 6.7793 -20.5195z
2753
+ M102.81 84.25c29.4502 -0.680664 38.6309 28.2002 34.0908 57.8398c-9.74023 62.9404 -90.1699 48.9805 -84 -12.3301c2.44922 -24.3594 27.0898 -44.8994 49.9092 -45.5098zM84.2998 198.45c19.3105 51.8096 51.54 99.5498 94.2002 132.399
2754
+ c31.6504 26.4102 65.7998 45.3506 65.7998 45.3506s-18.3896 21.3193 -23.9395 22.8896c-34.1699 9.23047 -107.94 -41.6494 -155.051 -108.88c-19.0596 -27.21 -46.3096 -75.3604 -33.2998 -100.21c1.58984 -3 10.71 -10.9297 15.5898 -15
2755
+ c8.18066 11.9102 21.54 20.5 36.7002 23.4502zM323.18 97.2998c2.58984 0.259766 0.560547 -2.53027 0.560547 -2.53027s-27.4004 -12.75 -71 0.740234c1.20996 -10.2295 11.1699 -14.8193 15.9395 -16.6699c31.4004 -12.21 86.6904 -2.58008 128.46 26
2756
+ c0.850586 0.589844 1.41992 0 0.730469 -1c-28.9697 -41.3496 -128.73 -54.7598 -151.37 -21.3496c-12.0801 17.8301 -0.599609 43.8594 19.5498 41.1494c6.7998 -0.769531 53.7705 -8 100.48 13.6807c27.4893 12.7598 37.8701 26.79 36.3096 38.1602
2757
+ c-0.447266 3.00293 -2.57031 7.16504 -4.74023 9.28906c-5 4.83008 -12.79 8.60059 -26 12.3105c-4.35938 1.22949 -7.31934 2.00977 -10.5098 3.05957c-5.67969 1.83008 -8.47949 3.33008 -9.10938 14c-0.280273 4.62988 -1.09082 20.9102 -1.38086 27.6299
2758
+ c-0.519531 11.7607 -1.91992 27.8506 -11.9199 34.4902c-2.37305 1.51953 -6.58691 2.75195 -9.40527 2.75195c-1.1748 0 -3.05371 -0.229492 -4.19434 -0.511719c-5.69043 -0.969727 -9.06055 -4.00977 -13.2598 -7.50977
2759
+ c-12.4404 -10.3701 -22.9502 -12.0605 -34.6406 -11.5605c-6.98926 0.290039 -14.3994 1.37988 -22.8799 1.87988l-5 0.290039c-19.5801 1 -40.5693 -15.9092 -44.0693 -39.9092c-4.86035 -33.4307 19.3291 -50.7002 26.3291 -60.8301
2760
+ c0.912109 -1.0918 1.77246 -3.12598 1.9209 -4.54004c0 -1.94043 -1.25 -3.48047 -2.48047 -4.79004c-19.9805 -20.54 -26.3701 -53.1699 -18.8398 -80.3701c0.768555 -2.76562 2.35938 -7.12891 3.5498 -9.74023c17.7002 -41.2598 72.4902 -60.4795 126 -43
2761
+ c5.81152 1.89844 14.9238 5.74219 20.3398 8.58008c9.78906 4.8418 23.7441 15.2852 31.1504 23.3096c14.2002 14.8408 22.6396 30.9707 25.9297 50.8408c2.81055 18.6191 -7.78027 18.7598 -11.4395 18.0996c-1.13477 6.94531 -4.32422 17.8223 -7.12012 24.2803
2762
+ c-15.6299 -12.3506 -35.71 -20.9707 -51 -25.3506c-69.4004 -19.9102 -90.1904 6.35059 -96.4004 -13.8096c33.7705 -12.3701 69.5098 -7.07031 69.5098 -7.07031zM171.31 290.5l0.0605469 0.00976562c-0.0947266 -0.115234 -0.171875 -0.331055 -0.171875 -0.481445
2763
+ c0 -0.418945 0.34082 -0.759766 0.759766 -0.759766c0.124023 0 0.308594 0.0546875 0.412109 0.121094c11.4199 8.30078 64.9502 42.7705 134.5 26.8301c0.860352 -0.189453 1.39941 1.29004 0.639648 1.7207c-11.3398 6.33984 -28.6895 10.6494 -41 10.7393
2764
+ c-0.404297 0.00976562 -0.732422 0.345703 -0.732422 0.75c0 0.134766 0.0634766 0.332031 0.142578 0.44043c1.84668 2.41602 5.30078 5.88379 7.70996 7.74023c0.166992 0.126953 0.302734 0.401367 0.302734 0.611328c0 0.424805 -0.344727 0.770508 -0.770508 0.770508
2765
+ c-0.0146484 0 -0.0380859 -0.000976562 -0.0517578 -0.00195312c-17.5205 -1.08008 -37.5107 -9.4707 -49 -17.2998c-0.107422 -0.0751953 -0.300781 -0.136719 -0.431641 -0.136719c-0.414062 0 -0.75 0.335938 -0.75 0.75
2766
+ c0 0.0498047 0.00976562 0.12793 0.0214844 0.176758c0.899414 4.30957 3.72949 9.98926 5.18945 12.6494c0.0566406 0.0947266 0.102539 0.261719 0.102539 0.37207c0 0.402344 -0.327148 0.729492 -0.730469 0.729492
2767
+ c-0.110352 0 -0.276367 -0.0449219 -0.37207 -0.101562c-18.4697 -9.4502 -39.0898 -26.2803 -55.8301 -45.6299z" />
 
 
 
 
 
 
 
 
 
 
 
2768
  <glyph glyph-name="megaport" unicode="&#xf5a3;" horiz-adv-x="496"
2769
  d="M214.5 238.4l33.4004 33.3994l33.3994 -33.3994v-66.4004l-33.2998 -33.2998l-33.5 33.5v66.2002zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM393.1 25.5996h0.100586v87.1006l-59.7002 59.7002v87.5996l-59.5 59.5
2770
  v75.5996l-26.0996 19.2002l-26.1006 -19.2002v-75.5996l-59.5 -59.5v-87.9004l-59.5 -59.5v-87l26.1006 -19.1992l26.0996 19.1992v65.5l33.5 33.4004l33.4004 -33.4004v-65.5l26.0996 -19.1992l26.2002 19.1992v65.5l33.3994 33.4004l33.4004 -33.4004v-65.5l26 -19.1992z
3252
  c32.6006 0.199219 59 24.2998 58.8008 54zM346.1 34.2002c18.4004 23.2002 12.2002 62 1.7002 72.2998c-15.5996 11.9004 -38 -3.2998 -58.8994 -26.5996c-18.3008 -21.1006 -28.4004 -59.6006 -15.1006 -72c12.7002 -9.60059 47 -8.30078 72.2998 26.2998zM369 107.4
3253
  c23.7002 18.6992 31.2998 73.5996 -12.5996 98.2998c-26.4004 7 -8.90039 -107.7 12.5996 -98.2998z" />
3254
  <glyph glyph-name="redhat" unicode="&#xf7bc;" horiz-adv-x="512"
3255
+ d="M341.52 162.59v-0.149414c33.6504 0 82.3408 6.93945 82.3408 47c0.219727 6.73926 0.859375 1.81934 -20.8799 96.2393c-4.62012 19.1504 -8.68066 27.8398 -42.3105 44.6504c-26.0898 13.3398 -82.9199 35.3701 -99.7295 35.3701
3256
+ c-15.6602 0 -20.2002 -20.1699 -38.8701 -20.1699c-18 0 -31.3105 15.0596 -48.1201 15.0596c-16.1406 0 -26.6602 -11 -34.7803 -33.6201c-27.5 -77.5498 -26.2803 -74.2695 -26.1201 -78.2695c0 -24.7998 97.6406 -106.11 228.47 -106.11zM429.07 193.19
3257
+ l-0.0703125 -0.0302734c4.65039 -22 4.65039 -24.3506 4.65039 -27.25c0 -37.6602 -42.3301 -58.5605 -98 -58.5605c-125.74 -0.0800781 -235.91 73.6504 -235.91 122.33v0.0771484c0 5.65332 1.81836 14.4531 4.05957 19.6436
3258
+ c-45.2402 -2.26074 -103.8 -10.3301 -103.8 -62.0303c0 -84.6699 200.63 -189 359.49 -189c121.79 0 152.51 55.0801 152.51 98.5801c0 34.21 -29.5898 73.0498 -82.9297 96.2402z" />
 
 
 
 
 
 
 
 
 
 
 
3259
  <glyph glyph-name="sketch" unicode="&#xf7c6;" horiz-adv-x="512"
3260
  d="M27.5 285.8l78.9004 105.8l-6.90039 -130.699h-90.5zM396.3 402.3l7.10059 -133.5l-135.7 147.2zM112.2 229.7l122.6 -239.7l-224.899 261.7h91.0996zM114.2 260.9l142.1 154.1l60.4004 -65.5996l81.5 -88.5h-284zM411.5 251.8v-0.0996094h90.9004l-224.801 -261.7z
3261
  M415.4 379l87.8994 -118.1h-90.2998l-6.09961 113.399l-0.900391 17.2998zM113.5 354.5l2.59961 47.7998l128.601 13.7002l-135.8 -147.1zM401.2 251.8l-144.9 -283.8l-102.7 200.9l-42.3994 82.8994h290z" />
3427
  c0 13.7334 11.1455 24.8799 24.8799 24.8799c8.72949 0 18.8213 -6.41504 22.5264 -14.3184l81 -205.06h1.20996l77 203.529c3.22559 8.26074 13.041 14.9648 21.9092 14.9648c12.9834 0 23.5205 -10.5371 23.5205 -23.5195
3428
  c0 -1.89258 -0.438477 -4.90137 -0.979492 -6.71484l-109.6 -273.391c-18.5498 -47.2197 -37.1201 -79.5596 -93.29 -79.5596c-0.151367 -0.000976562 -0.395508 -0.000976562 -0.545898 -0.000976562c-6.4668 0 -16.8887 0.874023 -23.2646 1.95117
3429
  c-8.52051 2.44238 -15.4365 11.6201 -15.4365 20.4844c0 11.7637 9.54688 21.3105 21.3096 21.3105c0.28418 0 0.744141 -0.0117188 1.02734 -0.0253906c0.660156 -0.0595703 10.9102 -0.660156 13.8604 -0.660156c30.4697 0 43.7393 18.9404 58.0693 59.4102z" />
3430
+ <glyph glyph-name="git-alt" unicode="&#xf841;"
3431
+ d="M439.55 211.95c4.66504 -4.66602 8.45117 -13.8076 8.45117 -20.4053s-3.78613 -15.7393 -8.45117 -20.4053l-194.689 -194.689c-4.66602 -4.66211 -13.8047 -8.44629 -20.4004 -8.44629s-15.7344 3.78418 -20.4004 8.44629l-195.609 195.6
3432
+ c-4.66504 4.66602 -8.45117 13.8076 -8.45117 20.4053s3.78613 15.7393 8.45117 20.4053l134.12 134.14l50.79 -50.8496c-5.95996 -14.2607 -2.16016 -36.4902 18.6396 -45v-123c-22.3203 -9.09082 -28.8203 -38.4004 -11.25 -56
3433
+ c5.55176 -5.54883 16.4268 -10.0518 24.2754 -10.0518c7.84766 0 18.7236 4.50293 24.2744 10.0518c13.1807 13.1494 16.2197 42.46 -9.08008 55v121.85l46.3506 -46.29c-14.21 -34.4697 29.5098 -63.8301 56 -37.3398c25.71 25.6895 -1.24023 68.4902 -35.4707 56.6895
3434
+ l-49.6592 49.6602c9.29004 26.9102 -16.3301 52.8203 -43.3906 43.6807l-51.5195 51.5195l40.6602 40.6299c4.66602 4.66309 13.8076 8.44727 20.4043 8.44727s15.7383 -3.78418 20.4053 -8.44727z" />
3435
+ <glyph glyph-name="stackpath" unicode="&#xf842;"
3436
+ d="M244.6 215.6c0 -8.5 -4.25977 -20.4893 -21.3398 -20.4893h-19.6094v41.4697h19.6094c17.1299 0 21.3398 -12.3604 21.3398 -20.9805zM448 416v-448h-448v448h448zM151.3 160.16c0 21.2402 -12.1201 34.54 -46.7197 44.8496c-20.5703 7.41016 -26 10.9102 -26 18.6299
3437
+ c0 7.7207 7 14.6104 20.4102 14.6104c14.0898 0 20.79 -8.4502 20.79 -18.3496h30.7002l0.189453 0.569336c0.5 19.5703 -15.0596 41.6504 -51.1201 41.6504c-23.3701 0 -52.5498 -10.75 -52.5498 -38.29c0 -19.4004 9.25 -31.29 50.7402 -44.3701
3438
+ c17.2598 -6.15039 21.9102 -10.4004 21.9102 -19.4795c0 -15.2002 -19.1309 -14.2305 -19.4707 -14.2305c-20.3994 0 -25.6494 9.09961 -25.6494 21.9004h-30.7998l-0.180664 -0.560547c-0.679688 -31.3203 28.3799 -45.2197 56.6299 -45.2197
3439
+ c29.9805 0 51.1201 13.5498 51.1201 38.29zM276.68 215.79c0 25.2998 -18.4297 45.46 -53.4199 45.46h-51.7793v-138.18h32.1699v47.3594h19.6094c30.25 0 53.4199 15.9502 53.4199 45.3604zM297.94 123l49.0596 138.22h-31.0898l-47.9102 -138.22h29.9404zM404.46 261.22
3440
+ h-31.0898l-47.9102 -138.22h29.9404z" />
3441
  </font>
3442
  </defs></svg>
fonts/fontawesome/webfonts/fa-brands-400.ttf CHANGED
Binary file
fonts/fontawesome/webfonts/fa-brands-400.woff CHANGED
Binary file
fonts/fontawesome/webfonts/fa-brands-400.woff2 CHANGED
Binary file
fonts/fontawesome/webfonts/fa-regular-400.eot CHANGED
Binary file
fonts/fontawesome/webfonts/fa-regular-400.svg CHANGED
@@ -1,12 +1,12 @@
1
  <?xml version="1.0" standalone="no"?>
2
  <!--
3
- Font Awesome Free 5.8.1 by @fontawesome - https://fontawesome.com
4
  License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
5
  -->
6
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
7
  <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
8
  <metadata>
9
- Created by FontForge 20190112 at Thu Mar 21 16:19:01 2019
10
  By Robert Madole
11
  Copyright (c) Font Awesome
12
  </metadata>
1
  <?xml version="1.0" standalone="no"?>
2
  <!--
3
+ Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com
4
  License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
5
  -->
6
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
7
  <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
8
  <metadata>
9
+ Created by FontForge 20190112 at Tue Jun 4 15:16:44 2019
10
  By Robert Madole
11
  Copyright (c) Font Awesome
12
  </metadata>
fonts/fontawesome/webfonts/fa-regular-400.ttf CHANGED
Binary file
fonts/fontawesome/webfonts/fa-regular-400.woff CHANGED
Binary file
fonts/fontawesome/webfonts/fa-regular-400.woff2 CHANGED
Binary file
fonts/fontawesome/webfonts/fa-solid-900.eot CHANGED
Binary file
fonts/fontawesome/webfonts/fa-solid-900.svg CHANGED
@@ -1,12 +1,12 @@
1
  <?xml version="1.0" standalone="no"?>
2
  <!--
3
- Font Awesome Free 5.8.1 by @fontawesome - https://fontawesome.com
4
  License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
5
  -->
6
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
7
  <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
8
  <metadata>
9
- Created by FontForge 20190112 at Thu Mar 21 16:19:01 2019
10
  By Robert Madole
11
  Copyright (c) Font Awesome
12
  </metadata>
@@ -23,7 +23,7 @@ Copyright (c) Font Awesome
23
  bbox="-0.983398 -64.9834 640.104 448.427"
24
  underline-thickness="25"
25
  underline-position="-51"
26
- unicode-range="U+0020-F83E"
27
  />
28
  <missing-glyph />
29
  <glyph glyph-name="glass-martini" unicode="&#xf000;"
@@ -192,57 +192,62 @@ c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z" />
192
  d="M512 304v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h88l12.2998 32.9004c7 18.6992 24.9004 31.0996 44.9004 31.0996h125.5c20 0 37.8994 -12.4004 44.8994 -31.0996l12.4004 -32.9004h88c26.5 0 48 -21.5 48 -48zM376 160
193
  c0 66.2002 -53.7998 120 -120 120s-120 -53.7998 -120 -120s53.7998 -120 120 -120s120 53.7998 120 120zM344 160c0 -48.5 -39.5 -88 -88 -88s-88 39.5 -88 88s39.5 88 88 88s88 -39.5 88 -88z" />
194
  <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="448"
195
- d="M432 32c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-136c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h23.4004l-26.6006 80.7998h-138.2l-26.5996 -80.7998h24c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-136
196
- c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h26.7002l129.8 373.3c2.2002 6.40039 8.2998 10.7002 15.0996 10.7002h72.8008c6.7998 0 12.8994 -4.2998 15.0996 -10.7002l129.8 -373.3h26.7002zM174.4 179.7h98.5996l-41.2998 124
197
- c-4.7998 15.2002 -6.90039 28.2002 -7.7002 34.7002c-1 -6.40039 -3.2998 -19.4004 -7.59961 -34.6006z" />
198
  <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="384"
199
- d="M304.793 204.109c44.6338 -14.4395 71.207 -53.9551 71.207 -106.123c0 -60.6338 -38.4805 -107.18 -89.4443 -122.402c-22.0312 -6.29492 -42.6631 -7.58398 -66.8652 -7.58398h-195.69c-8.83691 0 -16 7.16309 -16 16v32.4209c0 8.83691 7.16309 16 16 16h33.1133
200
- v318.53h-33.1133c-8.83691 0 -16 7.16309 -16 16v33.0488c0 8.83691 7.16309 16 16 16h185.661c31.1875 0 55.4766 -2.00977 80.1631 -12.0186c42.376 -16.5537 68.626 -55.9434 68.626 -104.18c0 -41.5332 -20.0186 -77.1553 -53.6572 -95.6924zM142.217 347.191v-112.953
201
- h76.8467c32.709 0 53.0283 21.7607 53.0283 56.79c0 22.9434 -9.07812 40.9668 -24.9062 49.4453c-9.98828 4.69824 -21.2305 6.71777 -37.5244 6.71777h-67.4443zM254.859 41.7158c21.1221 8.80078 34.7822 32.8594 34.7812 61.2842
202
- c0 37.6768 -23.4121 63.0566 -63.0566 63.0566h-84.3672v-129.248h81.2334c8.73145 0 21.2686 0.851562 31.4092 4.90723z" />
203
  <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="320"
204
- d="M204.758 32c10.0664 0 17.6309 -9.18457 15.7041 -19.0654l-6.24512 -32c-1.39355 -7.13965 -8.42871 -12.9346 -15.7031 -12.9346h-0.000976562h-158.479c-10.0674 0 -17.6318 9.18457 -15.7051 19.0654l6.24512 32c1.39355 7.13965 8.42871 12.9346 15.7031 12.9346
205
- h0.000976562h39.4707l62.0898 320h-33.8457c-10.0664 0 -17.6309 9.18359 -15.7041 19.0635l6.24219 32c1.39258 7.14062 8.42773 12.9365 15.7041 12.9365h159.732c10.0664 0 17.6309 -9.18359 15.7041 -19.0635l-6.24219 -32
206
- c-1.39258 -7.14062 -8.42773 -12.9365 -15.7041 -12.9365h-40.7246l-62.0918 -320h33.8486z" />
207
  <glyph glyph-name="text-height" unicode="&#xf034;" horiz-adv-x="576"
208
- d="M16 416h288c8.83691 0 16 -7.16309 16 -16v-96c0 -8.83691 -7.16309 -16 -16 -16h-35.4961c-8.83691 0 -16 7.16309 -16 16v48h-54.7607v-320h34.2568c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-144c-8.83691 0 -16 7.16309 -16 16v32
209
- c0 8.83691 7.16309 16 16 16h34.2568v320h-54.7607v-48c0 -8.83691 -7.16309 -16 -16 -16h-35.4961c-8.83691 0 -16 7.16309 -16 16v96c0 8.83691 7.16309 16 16 16zM491.308 411.315l79.9951 -80.001c10.0059 -10.0078 2.99414 -27.3145 -11.3125 -27.3145h-47.9902v-224
210
- h48c15.6387 0 20.6348 -17.9912 11.3135 -27.3145l-79.9951 -80.001c-6.24707 -6.24609 -16.3818 -6.24414 -22.626 0l-79.9951 80.001c-10.0059 10.0078 -2.99414 27.3145 11.3125 27.3145h47.9902v224h-48c-15.6387 0 -20.6348 17.9912 -11.3135 27.3145l79.9951 80.001
211
- c6.24707 6.24805 16.3818 6.24414 22.626 0z" />
212
  <glyph glyph-name="text-width" unicode="&#xf035;" horiz-adv-x="448"
213
- d="M16 416h416c8.83691 0 16 -7.16309 16 -16v-96c0 -8.83691 -7.16309 -16 -16 -16h-35.4961c-8.83691 0 -16 7.16309 -16 16v48h-118.761v-128h34.2568c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-144c-8.83691 0 -16 7.16309 -16 16v32
214
- c0 8.83691 7.16309 16 16 16h34.2568v128h-118.761v-48c0 -8.83691 -7.16309 -16 -16 -16h-35.4961c-8.83691 0 -16 7.16309 -16 16v96c0 8.83691 7.16309 16 16 16zM443.315 75.3184c6.24805 -6.24707 6.24414 -16.3818 0 -22.626l-80.001 -79.9951
215
- c-10.0078 -10.0059 -27.3145 -2.99414 -27.3145 11.3125v47.9902h-224v-48c0 -15.6377 -17.9912 -20.6348 -27.3145 -11.3135l-80.001 79.9951c-6.24609 6.24707 -6.24414 16.3818 0 22.626l80.001 79.9951c10.0078 10.0059 27.3145 2.99414 27.3145 -11.3125v-47.9902h224
216
- v48c0 15.6377 17.9912 20.6348 27.3145 11.3135z" />
217
  <glyph glyph-name="align-left" unicode="&#xf036;" horiz-adv-x="448"
218
- d="M288 404v-40c0 -8.83691 -7.16309 -16 -16 -16h-256c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h256c8.83691 0 16 -7.16309 16 -16zM0 276c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416
219
- c-8.83691 0 -16 7.16309 -16 16v40zM16 -36c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM272 164c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-256
220
- c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h256z" />
 
221
  <glyph glyph-name="align-center" unicode="&#xf037;" horiz-adv-x="448"
222
- d="M352 404v-40c0 -8.83691 -7.16309 -16 -16 -16h-224c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h224c8.83691 0 16 -7.16309 16 -16zM16 220c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40
223
- c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 -36c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM336 164c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16
224
- h-224c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h224z" />
 
225
  <glyph glyph-name="align-right" unicode="&#xf038;" horiz-adv-x="448"
226
- d="M160 364v40c0 8.83691 7.16309 16 16 16h256c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-256c-8.83691 0 -16 7.16309 -16 16zM16 220c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40
227
- c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 -36c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM176 92c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h256
228
- c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-256z" />
 
229
  <glyph glyph-name="align-justify" unicode="&#xf039;" horiz-adv-x="448"
230
- d="M0 364v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416c-8.83691 0 -16 7.16309 -16 16zM16 220c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40
231
- c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 -36c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 92c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416
232
- c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416z" />
233
  <glyph glyph-name="list" unicode="&#xf03a;"
234
- d="M128 332v40c0 8.83691 7.16309 16 16 16h352c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-352c-8.83691 0 -16 7.16309 -16 16zM144 156c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h352c8.83691 0 16 -7.16309 16 -16v-40
235
- c0 -8.83691 -7.16309 -16 -16 -16h-352zM144 -4c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h352c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-352zM16 304c-8.83691 0 -16 7.16309 -16 16v64c0 8.83691 7.16309 16 16 16h64
236
- c8.83691 0 16 -7.16309 16 -16v-64c0 -8.83691 -7.16309 -16 -16 -16h-64zM16 144c-8.83691 0 -16 7.16309 -16 16v64c0 8.83691 7.16309 16 16 16h64c8.83691 0 16 -7.16309 16 -16v-64c0 -8.83691 -7.16309 -16 -16 -16h-64zM16 -16c-8.83691 0 -16 7.16309 -16 16v64
237
- c0 8.83691 7.16309 16 16 16h64c8.83691 0 16 -7.16309 16 -16v-64c0 -8.83691 -7.16309 -16 -16 -16h-64z" />
238
  <glyph glyph-name="outdent" unicode="&#xf03b;" horiz-adv-x="448"
239
- d="M0 364v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416c-8.83691 0 -16 7.16309 -16 16zM208 220c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h224c8.83691 0 16 -7.16309 16 -16v-40
240
- c0 -8.83691 -7.16309 -16 -16 -16h-224zM16 -36c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM208 92c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h224
241
- c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-224zM4.68652 180.687c-6.24805 6.24805 -6.24805 16.3789 0 22.627l96 95.9912c9.98828 9.99121 27.3135 3.0166 27.3135 -11.3125v-191.977c0 -14.2393 -17.2656 -21.3633 -27.3135 -11.3125z" />
 
 
242
  <glyph glyph-name="indent" unicode="&#xf03c;" horiz-adv-x="448"
243
- d="M0 364v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416c-8.83691 0 -16 7.16309 -16 16zM176 220c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h256c8.83691 0 16 -7.16309 16 -16v-40
244
- c0 -8.83691 -7.16309 -16 -16 -16h-256zM16 -36c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM176 92c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h256
245
- c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-256zM123.313 203.313c6.24805 -6.24805 6.24805 -16.3789 0 -22.625l-96 -95.9922c-9.98828 -9.99121 -27.3135 -3.0166 -27.3135 11.3125v191.976c0 14.2393 17.2656 21.3633 27.3135 11.3125z" />
 
 
246
  <glyph glyph-name="video" unicode="&#xf03d;" horiz-adv-x="576"
247
  d="M336.2 384c26.3994 0 47.7998 -21.4004 47.7998 -47.7998v-288.4c0 -26.3994 -21.4004 -47.7998 -47.7998 -47.7998h-288.4c-26.3994 0 -47.7998 21.4004 -47.7998 47.7998v288.4c0 26.3994 21.4004 47.7998 47.7998 47.7998h288.4zM525.6 346.3
248
  c21.3008 14.6006 50.4004 -0.399414 50.4004 -25.7998v-256.9c0 -25.5 -29.2002 -40.3994 -50.4004 -25.7998l-109.6 75.5v157.4z" />
@@ -567,11 +572,13 @@ d="M507.73 338.9c11.7891 -47.4102 -0.84082 -99.6602 -37.9102 -136.73c-39.9004 -3
567
  c-16.5 50.1006 -5.58984 107.561 34.0498 147.2c37.0303 37.0195 89.2002 49.6699 136.58 37.9297c9.08984 -2.25977 12.2803 -13.54 5.66016 -20.1602l-74.3604 -74.3594l11.3105 -67.8799l67.8799 -11.3105l74.3604 74.3604
568
  c6.58008 6.58008 17.8799 3.51953 20.1201 -5.50977zM64 -24c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z" />
569
  <glyph glyph-name="tasks" unicode="&#xf0ae;"
570
- d="M208 316c-8.7998 0 -16 7.2002 -16 16v40c0 8.7998 7.2002 16 16 16h288c8.7998 0 16 -7.2002 16 -16v-40c0 -8.7998 -7.2002 -16 -16 -16h-288zM208 156c-8.7998 0 -16 7.2002 -16 16v40c0 8.7998 7.2002 16 16 16h288c8.7998 0 16 -7.2002 16 -16v-40
571
- c0 -8.7998 -7.2002 -16 -16 -16h-288zM208 -4c-8.7998 0 -16 7.2002 -16 16v40c0 8.7998 7.2002 16 16 16h288c8.7998 0 16 -7.2002 16 -16v-40c0 -8.7998 -7.2002 -16 -16 -16h-288zM64 80c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48.5996 21.5 -48.5996 48
572
- s22.0996 48 48.5996 48zM156.5 379l-72.2002 -72.2002l-15.5996 -15.5996c-4.7002 -4.7002 -12.9004 -4.7002 -17.6006 0l-47.5996 47.3994c-4.7002 4.7002 -4.7002 12.3008 0 17l15.7002 15.7002c4.7002 4.7002 12.2998 4.7002 17 0l22.7002 -22.0996l63.6992 63.2998
573
- c4.7002 4.7002 12.3008 4.7002 17 0l17 -16.5c4.60059 -4.7002 4.60059 -12.2998 -0.0996094 -17zM156.5 219.4l-72.2002 -72.2002l-15.7002 -15.7002c-4.69922 -4.7002 -12.8994 -4.7002 -17.5996 0l-47.5 47.5c-4.7002 4.7002 -4.7002 12.2998 0 17l15.7002 15.7002
574
- c4.7002 4.7002 12.2998 4.7002 17 0l22.7002 -22.1006l63.6992 63.7002c4.7002 4.7002 12.3008 4.7002 17 0l17 -17c4.60059 -4.59961 4.60059 -12.2002 -0.0996094 -16.8994z" />
 
 
575
  <glyph glyph-name="filter" unicode="&#xf0b0;"
576
  d="M487.976 448c21.3623 0 32.0459 -25.8965 16.9717 -40.9707l-184.947 -184.971v-262.039c0 -19.5127 -21.9805 -30.71 -37.7627 -19.6611l-80 55.9795c-6.41602 4.49219 -10.2373 11.8311 -10.2373 19.6621v206.059l-184.942 184.971
577
  c-15.1045 15.1045 -4.34766 40.9707 16.9707 40.9707h463.947z" />
@@ -627,30 +634,30 @@ d="M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -
627
  d="M16 316c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 156c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40
628
  c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 -4c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416z" />
629
  <glyph glyph-name="list-ul" unicode="&#xf0ca;"
630
- d="M96 352c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48s48 -21.4902 48 -48zM48 240c26.5098 0 48 -21.4902 48 -48s-21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48zM48 80c26.5098 0 48 -21.4902 48 -48s-21.4902 -48 -48 -48
631
- s-48 21.4902 -48 48s21.4902 48 48 48zM144 316c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h352c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-352zM144 156c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h352
632
- c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-352zM144 -4c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h352c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-352z" />
633
  <glyph glyph-name="list-ol" unicode="&#xf0cb;"
634
- d="M3.2627 308.473c0 7.47754 3.91699 11.5723 11.5732 11.5723h15.1309v39.877c0 5.16309 0.53418 10.5029 0.53418 10.5029h-0.356445s-1.77832 -2.66992 -2.84766 -3.73828c-4.45117 -4.27246 -10.5039 -4.4502 -15.666 1.06836l-5.51758 6.23145
635
- c-5.3418 5.34082 -4.98438 11.2158 0.53418 16.3789l21.7197 19.9375c4.44824 4.0957 8.36523 5.69727 14.418 5.69727h12.1045c7.65625 0 11.749 -3.91602 11.749 -11.5723v-84.3838h15.4883c7.65527 0 11.5723 -4.09375 11.5723 -11.5723v-8.90039
636
- c0 -7.47754 -3.91699 -11.5723 -11.5723 -11.5723h-67.291c-7.65625 0 -11.5732 4.09473 -11.5732 11.5723v8.90137zM2.21094 143.409c0 47.2773 50.9551 56.3828 50.9551 69.165c0 7.17969 -5.9541 8.75488 -9.28027 8.75488
637
- c-3.15234 0 -6.47852 -1.05078 -9.45508 -3.85254c-5.0791 -4.90234 -10.5068 -7.00391 -16.1104 -2.4502l-8.5791 6.8291c-5.7793 4.55273 -7.18066 9.80469 -2.80273 15.4082c6.65332 8.75488 19.0869 18.7363 40.4482 18.7363
638
- c19.4375 0 44.4766 -10.5059 44.4766 -39.5732c0 -38.3467 -46.7529 -46.4014 -48.6797 -56.9092h39.0498c7.52832 0 11.5566 -4.02637 11.5566 -11.3818v-8.75488c0 -7.35352 -4.02832 -11.3818 -11.5566 -11.3818h-67.9404c-7.00488 0 -12.083 4.02832 -12.083 11.3818
639
- v4.02832h0.000976562zM5.6543 -6.61035l5.60254 9.28027c3.85352 6.6543 9.10547 7.00391 15.584 3.15234c4.90332 -2.10156 9.62988 -3.15234 14.3594 -3.15234c10.1553 0 14.3574 3.50195 14.3574 8.23047c0 6.65332 -5.60352 9.10547 -15.9336 9.10547h-4.72754
640
- c-5.9541 0 -9.28027 2.10156 -12.2588 7.87988l-1.0498 1.92578c-2.45117 4.72852 -1.22559 9.80664 2.80078 14.8848l5.60449 7.00391c6.8291 8.40527 12.2568 13.4824 12.2568 13.4824v0.350586s-4.20312 -1.05078 -12.6084 -1.05078h-12.957
641
- c-7.5293 0 -11.3828 4.02734 -11.3828 11.3818v8.75488c0 7.53027 3.85352 11.3818 11.3828 11.3818h58.4844c7.5293 0 11.3818 -4.02734 11.3818 -11.3818v-3.32715c0 -5.77832 -1.40039 -9.80566 -5.0791 -14.1826l-17.5088 -20.1377
642
- c19.6113 -5.07812 28.7158 -20.4863 28.7158 -34.8447c0 -21.3633 -14.3574 -44.126 -48.5029 -44.126c-16.6357 0 -28.1914 4.72754 -35.8955 9.45508c-5.7793 4.20215 -6.30469 9.80469 -2.62598 15.9336zM144 316c-8.83691 0 -16 7.16309 -16 16v40
643
- c0 8.83691 7.16309 16 16 16h352c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-352zM144 156c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h352c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-352zM144 -4
644
- c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h352c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-352z" />
645
  <glyph glyph-name="strikethrough" unicode="&#xf0cc;"
646
- d="M496 160h-480c-8.83691 0 -16 7.16309 -16 16v32c0 8.83691 7.16309 16 16 16h480c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16zM281.334 144h122.773c6.52441 -14.1826 10.1426 -30.7852 10.1426 -50.5996
647
- c0 -88.9863 -73.4346 -134.425 -162.013 -134.425c-76.7705 0 -154.487 34.9756 -154.487 101.82v19.2041c0 8.83691 7.16406 16 16 16h45.6133c8.83594 0 16 -7.16309 16 -16v-1.64844c0 -32.1904 44.5488 -44.2705 76.874 -44.2705
648
- c46.6436 0 75.6211 20.5684 75.6211 53.6758c0 27.5605 -19.2666 43.3066 -46.5244 56.2432zM250.382 240h-129.823c-8.11133 15.3711 -12.7764 33.8369 -12.7764 56.5469c0 84.6738 65.5225 125.646 150.726 125.646c70.8506 0 142.575 -27.4375 142.575 -79.875v-30.3184
649
- c0 -8.83691 -7.16406 -16 -16 -16h-45.6133c-8.83594 0 -16 7.16309 -16 16v2.10352c0 16.3926 -22.3145 32.9854 -64.9619 32.9854c-34.0605 0 -64.9619 -13.4863 -64.9619 -47.4062c0 -30.7363 24.4141 -46.1777 56.8359 -59.6826z" />
 
 
650
  <glyph glyph-name="underline" unicode="&#xf0cd;" horiz-adv-x="448"
651
- d="M224.264 59.7598c-91.6689 0 -156.603 51.165 -156.603 151.393v172.848h-28.291c-8.83691 0 -16 7.16309 -16 16v32c0 8.83691 7.16309 16 16 16h137.39c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-28.8125v-172.848
652
- c0 -53.6992 28.3135 -79.4443 76.3164 -79.4443c46.9668 0 75.7959 25.4336 75.7959 79.9648v172.327h-28.291c-8.83691 0 -16 7.16309 -16 16v32c0 8.83691 7.16309 16 16 16h136.868c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-28.291v-172.848
653
- c0 -99.4053 -64.8809 -151.393 -156.082 -151.393zM16 0h416c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-416c-8.83691 0 -16 7.16309 -16 16v32c0 8.83691 7.16309 16 16 16z" />
654
  <glyph glyph-name="table" unicode="&#xf0ce;"
655
  d="M464 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416zM224 32v96h-160v-96h160zM224 192v96h-160v-96h160zM448 32v96h-160v-96h160zM448 192v96h-160v-96h160z" />
656
  <glyph glyph-name="magic" unicode="&#xf0d0;"
@@ -889,19 +896,15 @@ c0 11.0459 8.9541 20 20 20zM96 448c39.7637 0 72 -32.2354 72 -72s-32.2354 -72 -72
889
  d="M176 16c0 -44.1123 -35.8877 -80 -80 -80s-80 35.8877 -80 80s35.8877 80 80 80s80 -35.8877 80 -80zM25.2598 422.801c-0.68457 13.709 10.2441 25.1992 23.9707 25.1992h93.5391c13.7266 0 24.6553 -11.4902 23.9707 -25.1992l-13.6006 -272
890
  c-0.638672 -12.7725 -11.1807 -22.8008 -23.9697 -22.8008h-66.3398c-12.7891 0 -23.3311 10.0283 -23.9697 22.8008z" />
891
  <glyph glyph-name="superscript" unicode="&#xf12b;"
892
- d="M272 256c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-28l-52.5996 -75.7002l58.5996 -84.2998h22c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-62.4004c-5.5 0 -10.5996 2.7998 -13.5 7.5l-45.6992 72.5996
893
- c-2.30078 3.30078 -4.40039 7 -6.2002 10.2002c-1.7002 -3.2998 -3.7002 -7 -5.90039 -10.5996l-44.7002 -72.1006c-2.89941 -4.69922 -8.09961 -7.59961 -13.5996 -7.59961h-64c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h26.2998l56.6006 82.7002
894
- l-52.8008 77.2998h-30.0996c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h68.9004c5.5 0 10.6992 -2.90039 13.5996 -7.59961l39.9004 -65.1006c2 -3.59961 4 -7.2002 5.69922 -10.3994c1.7002 3.19922 3.90039 6.89941 6.2002 10.5l40.2998 65
895
- c2.90039 4.69922 8.10059 7.59961 13.6006 7.59961h67.7998zM496 192c8.7998 0 16 -7.2002 16 -15.9004v-32c0 -8.7998 -7.2002 -16 -16 -16h-168.1c-8.10059 0 -14.8008 5.90039 -15.9004 13.9004c-0.799805 6.2998 -1.40039 12.5996 -1.40039 19.2998
896
- c0 103 119.4 123.8 119.4 160c0 11 -6.90039 23.9004 -26.2998 23.9004c-12.9004 0 -23.7002 -7.7998 -31.7002 -18.2002c-5.09961 -6.7002 -14.5996 -8.2998 -21.5996 -3.59961l-30.3008 20.2998c-7.19922 4.89941 -9.2998 14.5996 -4.59961 21.8994
897
- c18 28.4004 51.9004 50.4004 94.4004 50.4004c47.0996 0 97.7998 -27.5 97.7998 -88.0996c0 -24.4004 -8.40039 -45.5 -25.9004 -64.6006c-14.7998 -16.2998 -33.7002 -28.2998 -50.2998 -38.8994c-17.5 -11.1006 -32.7998 -21.9004 -36.2998 -32.4004h100.8z" />
898
  <glyph glyph-name="subscript" unicode="&#xf12c;"
899
- d="M272 416c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-28l-52.5996 -75.7002l58.5996 -84.2998h22c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-62.4004c-5.5 0 -10.5996 2.7998 -13.5 7.5l-45.6992 72.5996
900
- c-2.30078 3.30078 -4.40039 7 -6.2002 10.2002c-1.7002 -3.2998 -3.7002 -7 -5.90039 -10.5996l-44.7002 -72.1006c-2.89941 -4.69922 -8.09961 -7.59961 -13.5996 -7.59961h-64c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h26.2998l56.6006 82.7002
901
- l-52.8008 77.2998h-30.0996c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h68.9004c5.5 0 10.6992 -2.90039 13.5996 -7.59961l39.9004 -65.1006c2 -3.59961 4 -7.2002 5.69922 -10.3994c1.7002 3.19922 3.90039 6.89941 6.2002 10.5l40.2998 65
902
- c2.90039 4.69922 8.10059 7.59961 13.6006 7.59961h67.7998zM496 32c8.7998 0 16 -7.2002 16 -15.9004v-32c0 -8.7998 -7.2002 -16 -16 -16h-168.1c-8.10059 0 -14.8008 5.90039 -15.9004 13.9004c-0.799805 6.2998 -1.40039 12.5996 -1.40039 19.2998
903
- c0 103 119.4 123.8 119.4 160c0 11 -6.90039 23.9004 -26.2998 23.9004c-12.9004 0 -23.7002 -7.7998 -31.7002 -18.2002c-5.09961 -6.7002 -14.5996 -8.2998 -21.5996 -3.59961l-30.3008 20.2998c-7.19922 4.89941 -9.2998 14.5996 -4.59961 21.8994
904
- c18 28.4004 51.9004 50.4004 94.4004 50.4004c47.0996 0 97.7998 -27.5 97.7998 -88.0996c0 -24.4004 -8.40039 -45.5 -25.9004 -64.6006c-14.7998 -16.2998 -33.7002 -28.2998 -50.2998 -38.8994c-17.5 -11.1006 -32.7998 -21.9004 -36.2998 -32.4004h100.8z" />
905
  <glyph glyph-name="eraser" unicode="&#xf12d;"
906
  d="M497.941 174.059l-142.059 -142.059h144.117c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-356c-10.9756 0 -26.1816 6.29883 -33.9424 14.0586l-96 96c-18.7441 18.7451 -18.7441 49.1377 0 67.8828l256 256
907
  c18.7471 18.7451 49.1387 18.7441 67.8838 0l160 -160c18.7441 -18.7451 18.7441 -49.1377 0 -67.8828zM195.314 236.686l-124.687 -124.686l80 -80h114.745l67.3135 67.3135z" />
@@ -1042,41 +1045,41 @@ d="M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -
1042
  c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 140v8c0 6.59961 -5.40039 12 -12 12h-168c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 212c0 6.59961 -5.40039 12 -12 12h-168
1043
  c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12v8zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z" />
1044
  <glyph glyph-name="sort-alpha-down" unicode="&#xf15d;" horiz-adv-x="448"
1045
- d="M400.7 20.9004c6.59961 0 12 -5.30078 12 -12v-28.9004c0 -6.59961 -5.40039 -12 -12 -12h-129.4c-6.59961 0 -12 5.40039 -12 12v21.9004c0 2.5 0.799805 4.89941 2.2002 6.89941l67.2002 95.2002c0.799805 1.09961 1.59961 2.09961 2.2998 3.09961h-56.5
1046
- c-6.59961 0 -12 5.40039 -12 12v28.9004c0 6.59961 5.40039 12 12 12h125.1c6.60059 0 12 -5.40039 12 -12v-21.4004c0 -2.5 -0.799805 -4.89941 -2.19922 -6.89941l-67.5 -95.7002c-0.800781 -1.09961 -1.60059 -2.09961 -2.30078 -3.09961h61.1006zM176 80
1047
- c14.2002 0 21.2998 -17.2998 11.2998 -27.2998l-80 -80c-6.2002 -6.2002 -16.3994 -6.2002 -22.5996 0l-80 80c-10.1006 10.0996 -2.90039 27.2998 11.2998 27.2998h48v320c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-320h48zM424.2 239.9
1048
- c2.7002 -7.80078 -3.10059 -15.9004 -11.5 -15.9004h-35.7002c-4.94629 0.00292969 -10.0986 3.85645 -11.5 8.59961l-8.2998 28.3008h-42.9004l-8.09961 -28.2002c-1.40039 -5.2002 -6.10059 -8.7002 -11.5 -8.7002h-35.7002c-8.2998 0 -14 8.09961 -11.4004 15.9004
1049
- l57.1006 168c1.7002 4.7998 6.2998 8.09961 11.3994 8.09961h39.6006c5.2002 0 9.7002 -3.2002 11.3994 -8.09961zM329.2 311.4h13.3994l-6.59961 22.8994z" />
 
1050
  <glyph glyph-name="sort-alpha-up" unicode="&#xf15e;" horiz-adv-x="448"
1051
- d="M107.3 411.3l80 -80c10.1006 -10.0996 2.90039 -27.2998 -11.2998 -27.2998h-48v-320c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v320h-48c-14.2002 0 -21.2998 17.2998 -11.2998 27.2998l80 80c6.2002 6.2002 16.3994 6.2002 22.5996 0z
1052
- M400.7 20.9004c6.59961 0 12 -5.30078 12 -12v-28.9004c0 -6.59961 -5.40039 -12 -12 -12h-129.4c-6.59961 0 -12 5.40039 -12 12v21.9004c0 2.5 0.799805 4.89941 2.2002 6.89941l67.2002 95.2002c0.799805 1.09961 1.59961 2.09961 2.2998 3.09961h-56.5
1053
- c-6.59961 0 -12 5.40039 -12 12v28.9004c0 6.59961 5.40039 12 12 12h125.1c6.60059 0 12 -5.40039 12 -12v-21.4004c0 -2.5 -0.799805 -4.89941 -2.19922 -6.89941l-67.5 -95.7002c-0.800781 -1.09961 -1.60059 -2.09961 -2.30078 -3.09961h61.1006zM424.2 239.9
1054
- c2.7002 -7.80078 -3.10059 -15.9004 -11.5 -15.9004h-35.7002c-4.94629 0.00292969 -10.0986 3.85645 -11.5 8.59961l-8.2998 28.3008h-42.9004l-8.09961 -28.2002c-1.40039 -5.2002 -6.10059 -8.7002 -11.5 -8.7002h-35.7002c-8.2998 0 -14 8.09961 -11.4004 15.9004
1055
- l57.1006 168c1.7002 4.7998 6.2998 8.09961 11.3994 8.09961h39.6006c5.2002 0 9.7002 -3.2002 11.3994 -8.09961zM329.2 311.4h13.3994l-6.59961 22.8994z" />
 
1056
  <glyph glyph-name="sort-amount-down" unicode="&#xf160;"
1057
- d="M187.298 52.6855l-79.9834 -80.002c-6.24805 -6.24707 -16.3838 -6.24414 -22.6279 0l-79.9814 80.002c-10.0703 10.0703 -2.89844 27.3145 11.3135 27.3145h47.9814v320c0 8.83691 7.16309 16 16 16h32c8.83691 0 16 -7.16309 16 -16v-320h47.9844
1058
- c14.2402 0 21.3623 -17.2637 11.3135 -27.3145zM240 352c-8.83691 0 -16 7.16309 -16 16v32c0 8.83691 7.16309 16 16 16h256c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-256zM224 240v32c0 8.83691 7.16309 16 16 16h192
1059
- c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-192c-8.83691 0 -16 7.16309 -16 16zM224 -16v32c0 8.83691 7.16309 16 16 16h64c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-64c-8.83691 0 -16 7.16309 -16 16zM224 112v32
1060
- c0 8.83691 7.16309 16 16 16h128c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-128c-8.83691 0 -16 7.16309 -16 16z" />
1061
  <glyph glyph-name="sort-amount-up" unicode="&#xf161;"
1062
- d="M4.70215 331.314l79.9834 80.002c6.24805 6.24707 16.3838 6.24414 22.6279 0l79.9805 -80.002c10.0703 -10.0703 2.89941 -27.3145 -11.3135 -27.3145h-47.9805v-320c0 -8.83691 -7.16309 -16 -16 -16h-32c-8.83691 0 -16 7.16309 -16 16v320h-47.9844
1063
- c-14.2402 0 -21.3623 17.2637 -11.3135 27.3145zM240 352c-8.83691 0 -16 7.16309 -16 16v32c0 8.83691 7.16309 16 16 16h256c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-256zM224 240v32c0 8.83691 7.16309 16 16 16h192
1064
- c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-192c-8.83691 0 -16 7.16309 -16 16zM224 -16v32c0 8.83691 7.16309 16 16 16h64c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-64c-8.83691 0 -16 7.16309 -16 16zM224 112v32
1065
- c0 8.83691 7.16309 16 16 16h128c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-128c-8.83691 0 -16 7.16309 -16 16z" />
1066
  <glyph glyph-name="sort-numeric-down" unicode="&#xf162;" horiz-adv-x="448"
1067
- d="M308.811 334.213l-19.4473 20.7949c-4.52246 4.83594 -4.27441 12.4209 0.555664 16.9502l43.4434 40.7412c1.91113 1.79199 5.58789 3.24707 8.20801 3.24707h0.000976562h31.5908c6.62695 0 12 -5.37305 12 -12v-127.07h25.6602c6.62695 0 12 -5.37305 12 -12v-28.9297
1068
- c0 -6.62695 -5.37305 -12 -12 -12h-109.173c-6.62695 0 -12 5.37305 -12 12v28.9297c0 6.62695 5.37305 12 12 12h25.4141v57.9385c-7.25488 -6.58008 -14.2119 -4.92188 -18.2529 -0.601562zM278.241 95.6436c0 32.6533 23.8652 67.3564 68.0938 67.3564
1069
- c38.2529 0 79.4238 -28.8613 79.4238 -92.2275c0 -51.2764 -32.2363 -105.772 -91.9824 -105.772c-17.8359 0 -30.5459 3.55664 -38.5488 6.78125c-5.78906 2.33301 -8.78809 8.74609 -6.92188 14.7031l9.2373 29.4795c2.03516 6.49609 9.04883 9.9834 15.4668 7.71582
1070
- c13.0293 -4.60156 27.8779 -5.27441 38.1035 4.13867c-38.7422 -5.07227 -72.8721 25.3594 -72.8721 67.8252zM370.514 76.3057c0 22.2852 -15.3018 36.5049 -25.835 36.5049c-8.6416 0 -13.1641 -7.96484 -13.1641 -15.832c0 -5.66895 1.81543 -24.168 25.168 -24.168
1071
- c9.97363 0 13.377 2.1543 13.7441 2.73145c0.0214844 0.0458984 0.0869141 0.291016 0.0869141 0.763672zM175.984 80c14.2402 0 21.3623 -17.2637 11.3125 -27.3145l-79.9834 -80.002c-6.24707 -6.24707 -16.3828 -6.24414 -22.6279 0l-79.9805 80.002
1072
- c-10.0703 10.0703 -2.89844 27.3145 11.3135 27.3145h47.9814v320c0 8.83691 7.16309 16 16 16h32c8.83691 0 16 -7.16309 16 -16v-320h47.9844z" />
1073
  <glyph glyph-name="sort-numeric-up" unicode="&#xf163;" horiz-adv-x="448"
1074
- d="M308.811 334.213l-19.4473 20.7949c-4.52246 4.83594 -4.27441 12.4209 0.555664 16.9502l43.4434 40.7412c1.91113 1.79199 5.58789 3.24707 8.20801 3.24707h0.000976562h31.5908c6.62695 0 12 -5.37305 12 -12v-127.07h25.6602c6.62695 0 12 -5.37305 12 -12v-28.9297
1075
- c0 -6.62695 -5.37305 -12 -12 -12h-109.173c-6.62695 0 -12 5.37305 -12 12v28.9297c0 6.62695 5.37305 12 12 12h25.4141v57.9385c-7.25488 -6.58008 -14.2119 -4.92188 -18.2529 -0.601562zM278.241 95.6436c0 32.6533 23.8652 67.3564 68.0938 67.3564
1076
- c38.2529 0 79.4238 -28.8613 79.4238 -92.2275c0 -51.2764 -32.2363 -105.772 -91.9824 -105.772c-17.8359 0 -30.5459 3.55664 -38.5488 6.78125c-5.78906 2.33301 -8.78809 8.74609 -6.92188 14.7031l9.2373 29.4795c2.03516 6.49609 9.04883 9.9834 15.4668 7.71582
1077
- c13.0293 -4.60156 27.8779 -5.27441 38.1035 4.13867c-38.7422 -5.07227 -72.8721 25.3594 -72.8721 67.8252zM370.514 76.3057c0 22.2852 -15.3018 36.5049 -25.835 36.5049c-8.6416 0 -13.1641 -7.96484 -13.1641 -15.832c0 -5.66895 1.81543 -24.168 25.168 -24.168
1078
- c9.97363 0 13.377 2.1543 13.7441 2.73145c0.0214844 0.0458984 0.0869141 0.291016 0.0869141 0.763672zM16.0156 304c-14.2402 0 -21.3623 17.2637 -11.3135 27.3145l79.9844 80.002c6.24707 6.24707 16.3828 6.24414 22.6279 0l79.9805 -80.002
1079
- c10.0703 -10.0703 2.89844 -27.3145 -11.3135 -27.3145h-47.9814v-320c0 -8.83691 -7.16309 -16 -16 -16h-32c-8.83691 0 -16 7.16309 -16 16v320h-47.9844z" />
1080
  <glyph glyph-name="thumbs-up" unicode="&#xf164;"
1081
  d="M104 224c13.2549 0 24 -10.7451 24 -24v-240c0 -13.2549 -10.7451 -24 -24 -24h-80c-13.2549 0 -24 10.7451 -24 24v240c0 13.2549 10.7451 24 24 24h80zM64 -24c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24zM384 366.548
1082
  c0 -42.416 -25.9697 -66.208 -33.2773 -94.5479h101.724c33.3965 0 59.3965 -27.7461 59.5527 -58.0977c0.0839844 -17.9385 -7.5459 -37.249 -19.4395 -49.1973l-0.109375 -0.110352c9.83594 -23.3369 8.23633 -56.0371 -9.30859 -79.4688
@@ -1279,12 +1282,12 @@ c31.3848 -24.9043 71.1045 -39.7695 114.323 -39.7695c101.705 0 184 82.3105 184 18
1279
  c-8.83691 0 -16 7.16309 -16 16v145.373c0 14.2539 17.2344 21.3926 27.3145 11.3135l49.3711 -49.3711c44.5234 42.5488 104.866 68.6846 171.314 68.6846c136.81 0 247.747 -110.78 248 -247.531zM323.088 113.685c-8.1377 -10.4629 -23.2158 -12.3467 -33.6787 -4.20996
1280
  l-65.4092 50.874v135.651c0 13.2549 10.7451 24 24 24h16c13.2549 0 24 -10.7451 24 -24v-104.349l40.7012 -31.6572c10.4629 -8.13672 12.3477 -23.2158 4.20996 -33.6787z" />
1281
  <glyph glyph-name="heading" unicode="&#xf1dc;"
1282
- d="M496 368c0 -8.83691 -7.16309 -16 -16 -16h-37.2754v-320h37.2754c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-160c-8.83691 0 -16 7.16309 -16 16v32c0 8.83691 7.16309 16 16 16h37.6201v128h-203.241v-128h37.6211
1283
- c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-160c-8.83691 0 -16 7.16309 -16 16v32c0 8.83691 7.16309 16 16 16h37.2754v320h-37.2754c-8.83691 0 -16 7.16309 -16 16v32c0 8.83691 7.16309 16 16 16h160c8.83691 0 16 -7.16309 16 -16v-32
1284
- c0 -8.83691 -7.16309 -16 -16 -16h-37.6211v-128h203.242v128h-37.6211c-8.83691 0 -16 7.16309 -16 16v32c0 8.83691 7.16309 16 16 16h160c8.83691 0 16 -7.16309 16 -16v-32z" />
1285
  <glyph glyph-name="paragraph" unicode="&#xf1dd;" horiz-adv-x="448"
1286
- d="M408 416c13.2549 0 24 -10.7451 24 -24v-32c0 -13.2549 -10.7451 -24 -24 -24h-40v-344c0 -13.2549 -10.7451 -24 -24 -24h-32c-13.2549 0 -24 10.7451 -24 24v344h-32v-344c0 -13.2549 -10.7451 -24 -24 -24h-32c-13.2549 0 -24 10.7451 -24 24v104
1287
- c-88.3926 0 -160.044 71.6787 -160 160.082c0.0449219 88.583 72.9482 159.918 161.531 159.918h230.469z" />
1288
  <glyph glyph-name="sliders-h" unicode="&#xf1de;"
1289
  d="M496 64c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-336v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-80c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h80v16c0 8.7998 7.2002 16 16 16h32
1290
  c8.7998 0 16 -7.2002 16 -16v-16h336zM496 224c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-80v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-336c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h336v16
@@ -2079,46 +2082,47 @@ l46.2998 -46.2998l-157.9 -157.9c-35 42.4004 -53.5 93.6006 -56.0996 145.5c63.9004
2079
  d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM120 256c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM184 352c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32
2080
  s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM232 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z" />
2081
  <glyph glyph-name="chess" unicode="&#xf439;"
2082
- d="M76.0996 237.8l-34.5996 95.1006c-2.7998 7.7998 3 16.0996 11.2998 16.0996h51.2002v30.2002h-21.5996c-3.30078 0 -6 2.7002 -6 6v22.3994c0 3.30078 2.69922 6 6 6h28.3994v28.4004c0 3.2998 2.7002 6 6 6h22.4004c3.2998 0 6 -2.7002 6 -6v-28.4004h28.3994
2083
- c3.30078 0 6 -2.69922 6 -6v-22.3994c0 -3.2998 -2.69922 -6 -6 -6h-21.5996v-30.2002h51.0996c8.30078 0 14.1006 -8.2998 11.3008 -16.0996l-34.6006 -95.1006h-103.7zM313.3 147.1c-1.09961 0.700195 -1.7002 1.90039 -1.89941 3.10059v69.8994
2084
- c0 2.2002 1.7998 3.90039 3.89941 3.90039h27.7002c2.2002 0 3.90039 -1.7998 3.90039 -3.90039v-31.5h22.6992v31.5c0 2.2002 1.80078 3.90039 3.90039 3.90039h52.9004c2.19922 0 3.89941 -1.7998 3.89941 -3.90039v-31.5h22.7002v31.5
2085
- c0 2.2002 1.7998 3.90039 3.90039 3.90039h27.6992c2.2002 0 3.90039 -1.7998 3.90039 -3.90039v-69.8994c0 -1.2998 -0.599609 -2.5 -1.7002 -3.2002l-24.8994 -16.9004c-0.100586 -18.1992 0.199219 -64 11.8994 -114.5h-147.5c11.7002 50.6006 12 96.4004 11.9004 114.5z
2086
- M384.8 95.0996h0.100586v-30.2998h30.2998v30.2998c0 8.40039 -6.7998 15.2002 -15.2002 15.2002s-15.2002 -6.7998 -15.2002 -15.2002zM504.6 -22.0996c1 -0.700195 1.5 -1.80078 1.5 -2.90039v-35c0 -2.2002 -1.7998 -3.90039 -3.89941 -3.90039h-204.5
2087
- c-2.2002 0 -3.90039 1.80078 -3.90039 3.90039v35c0 1.09961 0.600586 2.2998 1.5 3l13.7002 10.5996v15.6006c0 2.2002 1.7998 3.89941 3.90039 3.89941h174.199c2.2002 0 3.90039 -1.7998 3.90039 -3.89941v-15.6006zM244.8 -11.2998
2088
- c1.7998 -1.10059 2.7998 -3 2.7998 -5.10059v-41.5996c0 -3.2998 -2.69922 -6 -6 -6h-227.199c-3.30078 0 -6 2.7002 -6 6v41.5996c0 2.10059 1.09961 4 2.7998 5.10059l22.0996 14.2002v28.0996c0 3.2998 2.7002 6 6 6h177.4c3.2998 0 6 -2.7002 6 -6v-28.0996z
2089
- M199.8 197.6h-25.7998c0 -31.6992 -2.2002 -96.1992 17.4004 -153.199h-126.801c19.9004 58.0996 17.4004 124.399 17.4004 153.199h-25.7998c-3.2998 0 -6 2.7002 -6 6v20.8008c0 3.2998 2.7002 6 6 6h143.6c3.2998 0 6 -2.7002 6 -6v-20.8008c0 -3.2998 -2.7002 -6 -6 -6z
2090
- " />
2091
  <glyph glyph-name="chess-bishop" unicode="&#xf43a;" horiz-adv-x="320"
2092
- d="M123.158 370.119c-15.7891 5.35059 -27.1582 20.2842 -27.1582 37.8809c0 22.0908 17.9092 40 40 40h47.7959c22.0908 0 40 -17.9092 40 -40c0 -17.541 -11.2949 -32.4336 -27.0049 -37.8291c23.9932 -16.6572 48.5771 -46.8389 68.7031 -82.0498l-120.565 -120.564
2093
- c-0.969727 -0.969727 -1.75684 -2.87012 -1.75684 -4.24219s0.787109 -3.27246 1.75684 -4.24219l14.1426 -14.1426c0.969727 -0.969727 2.87012 -1.75684 4.24219 -1.75684s3.27246 0.787109 4.24219 1.75684l113.345 113.345
2094
- c17.7578 -38.2979 29.3711 -79.4434 29.3711 -114.273c0 -53.7861 -22.8975 -75.7881 -58.4463 -86.0332v-57.9678h-183.651v57.9697c-35.543 10.2461 -58.4346 32.249 -58.4346 86.0303c0 78.0293 58.2803 187.766 113.419 226.119zM320 -52
2095
- c0 -6.62695 -5.37305 -12 -12 -12h-296c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h296c6.62695 0 12 -5.37305 12 -12v-24z" />
2096
  <glyph glyph-name="chess-board" unicode="&#xf43c;"
2097
- d="M192 192h64v-64h-64v64zM512 128h-64v64h64v-64zM0 256h64v-64h-64v64zM512 256h-64v64h64v-64zM512 0h-64v64h64v-64zM256 192v64h64v-64h-64zM0 -64v64h64v-64h-64zM128 -64v64h64v-64h-64zM384 448v-64h-64v64h64zM128 448v-64h-64v64h64zM256 -64v64h64v-64h-64z
2098
- M0 384h64v-64h-64v64zM0 128h64v-64h-64v64zM256 448v-64h-64v64h64zM384 -64v64h64v-64h-64zM64 64h64v-64h-64v64zM320 64h64v-64h-64v64zM256 256h-64v64h64v-64zM384 64v64h64v-64h-64zM128 192v-64h-64v64h64zM384 192v64h64v-64h-64zM512 448v-64h-64v64h64zM128 320
2099
- v-64h-64v64h64zM384 384h64v-64h-64v64zM192 64h64v-64h-64v64zM128 128h64v-64h-64v64zM256 128h64v-64h-64v64zM192 256v-64h-64v64h64zM320 320h-64v64h64v-64zM192 320h-64v64h64v-64zM320 256v64h64v-64h-64zM320 128v64h64v-64h-64z" />
 
2100
  <glyph glyph-name="chess-king" unicode="&#xf43f;" horiz-adv-x="448"
2101
- d="M416 -28v-24c0 -6.62695 -5.37305 -12 -12 -12h-360c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h360c6.62695 0 12 -5.37305 12 -12zM407.967 296c27.5742 0 46.8789 -27.2441 37.7383 -53.2588l-85.2871 -242.741h-272.836l-85.2871 242.741
2102
- c-9.14062 26.0146 10.1641 53.2588 37.7383 53.2588h159.967v48h-50c-3.31152 0 -6 2.68848 -6 6v36c0 3.31152 2.68848 6 6 6h50v50c0 3.31152 2.68848 6 6 6h36c3.31152 0 6 -2.68848 6 -6v-50h50c3.31152 0 6 -2.68848 6 -6v-36c0 -3.31152 -2.68848 -6 -6 -6h-50v-48
2103
- h159.967z" />
2104
  <glyph glyph-name="chess-knight" unicode="&#xf441;" horiz-adv-x="384"
2105
- d="M352 224v-224h-320v46.5566c0 30.3027 17.1201 58.0029 44.2227 71.5547l57.2432 28.6221c14.6465 7.32324 26.5342 26.5566 26.5342 42.9326v0v50.334l-22.127 -11.0635c-5.4502 -2.72461 -11.0723 -9.7334 -12.5498 -15.6445l-11.835 -47.3379
2106
- c-0.822266 -3.28613 -4.04102 -6.97363 -7.18555 -8.23145l-29.6006 -11.8398c-1.18457 -0.473633 -3.18066 -0.858398 -4.45703 -0.858398c-1.40527 0 -3.58887 0.463867 -4.87305 1.03418l-60.2461 26.7744c-3.93359 1.74805 -7.12598 6.66113 -7.12598 10.9658v0v158.26
2107
- c0 6.36523 2.5293 12.4707 7.03027 16.9717l8.96973 8.96973l-14.2109 28.4219c-0.987305 1.97461 -1.78906 5.36914 -1.78906 7.57617v0.00195312c0 6.62695 5.37305 12 12 12h148c106.039 0 192 -85.9609 192 -192zM372 -16c6.62695 0 12 -5.37305 12 -12v-24
2108
- c0 -6.62695 -5.37305 -12 -12 -12h-360c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h360zM52 320c-11.0459 0 -20 -8.9541 -20 -20s8.9541 -20 20 -20s20 8.9541 20 20s-8.9541 20 -20 20z" />
2109
  <glyph glyph-name="chess-pawn" unicode="&#xf443;" horiz-adv-x="320"
2110
- d="M264 0h-208s60 42.7432 60 176h-32c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h40.209c-28.4883 13.4404 -48.209 42.4121 -48.209 76c0 46.3916 37.6084 84 84 84s84 -37.6084 84 -84c0 -33.5879 -19.7207 -62.5596 -48.209 -76h40.209
2111
- c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-32c0 -133.257 60 -176 60 -176zM292 -16c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-264c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h264z" />
 
2112
  <glyph glyph-name="chess-queen" unicode="&#xf445;"
2113
- d="M436 -64h-360c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h360c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12zM255.579 448c30.9277 0 56 -25.0723 56 -56s-25.0723 -56 -56 -56s-56 25.0723 -56 56s25.0723 56 56 56z
2114
- M460.147 293.366l39.3564 -20.7734c3.53223 -1.86426 6.39941 -6.61816 6.39941 -10.6123c0 -1.29883 -0.398438 -3.33008 -0.889648 -4.53223l-105.014 -257.448h-288l-105.014 257.449c-0.491211 1.20215 -0.889648 3.2334 -0.889648 4.53223
2115
- c0 3.99414 2.86719 8.74805 6.39941 10.6123l39.1787 20.6797c5.6416 2.97754 12.6328 1.02637 15.8994 -4.45312c10.6074 -17.8018 23.7334 -38.0254 44.4248 -38.0254c28.7539 0 30.6357 19.8975 31.6875 57.5391c0.182617 6.49316 5.5 11.667 11.9951 11.667h41.0049
2116
- c5.17578 0 9.75488 -3.32812 11.3887 -8.23828c8.89062 -26.709 26.0732 -40.9912 47.9248 -40.9912s39.0352 14.2822 47.9248 40.9912c1.63379 4.91016 6.21289 8.23828 11.3887 8.23828h41.0059c6.49414 0 11.8115 -5.17188 11.9951 -11.6641
2117
- c1.06055 -37.7383 2.97168 -57.542 31.6855 -57.542c21.3184 0 35.4492 22.2852 44.0654 37.8008c3.16602 5.70215 10.3135 7.81543 16.082 4.77051z" />
2118
  <glyph glyph-name="chess-rook" unicode="&#xf447;" horiz-adv-x="384"
2119
- d="M81.2412 232.973l-45.4209 42.3154c-2.43652 2.26953 -3.82031 5.4502 -3.82031 8.78027v119.932c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-44h47.999v44c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-44h48v44
2120
- c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-119.933v-0.000976562c0 -2.88184 -1.71094 -6.81543 -3.82031 -8.7793l-45.418 -42.3125c0.285156 -44.0625 3.82129 -133.371 33.2217 -232.975h-287.982c29.4111 99.9238 32.957 189.08 33.2412 232.973z
2121
- M160 192v-64.0039h64v64.0039c0 17.6729 -14.3271 32 -32 32s-32 -14.3271 -32 -32zM384 -28v-24c0 -6.62695 -5.37305 -12 -12 -12h-360c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h360c6.62695 0 12 -5.37305 12 -12z" />
2122
  <glyph glyph-name="dumbbell" unicode="&#xf44b;" horiz-adv-x="640"
2123
  d="M104 352c13.2998 0 24 -10.7002 24 -24v-272c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v104h-24c-4.40039 0 -8 3.59961 -8 8v48c0 4.40039 3.59961 8 8 8h24v104c0 13.2998 10.7002 24 24 24h48zM632 224c4.40039 0 8 -3.59961 8 -8v-48
2124
  c0 -4.40039 -3.59961 -8 -8 -8h-24v-104c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v272c0 13.2998 10.7002 24 24 24h48c13.2998 0 24 -10.7002 24 -24v-104h24zM456 416c13.2998 0 24 -10.7002 24 -24v-400c0 -13.2998 -10.7002 -24 -24 -24h-48
@@ -2465,9 +2469,10 @@ l190.601 45.9004c13 3.09961 26.7002 3.09961 39.7002 0l190.399 -46c18.2002 -4.400
2465
  l-66 15.9004v-52.6006c7 -4.2002 12 -11.5 12 -20.2998c0 -8.40039 -4.59961 -15.4004 -11.0996 -19.7002l15.5996 -62.2998c1.7002 -6.90039 -2.09961 -14 -7.59961 -14h-41.8008c-5.5 0 -9.2998 7.09961 -7.59961 14l15.5996 62.2998
2466
  c-6.5 4.2998 -11.0996 11.2998 -11.0996 19.7002c0 8.7998 5 16.0996 12 20.2998v58.4004z" />
2467
  <glyph glyph-name="user-lock" unicode="&#xf502;" horiz-adv-x="640"
2468
- d="M320 128v-160c0 -11.7002 3.40039 -22.5 8.90039 -32h-280.9c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992c5 0 9.7002 -1 14.5 -1.5
2469
- c-5 -9.09961 -8.09961 -19.4004 -8.09961 -30.5zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM608 160c17.7002 0 32 -14.2998 32 -32v-160c0 -17.7002 -14.2998 -32 -32 -32h-224
2470
- c-17.7002 0 -32 14.2998 -32 32v160c0 17.7002 14.2998 32 32 32h32v48c0 44.2002 35.7998 80 80 80s80 -35.7998 80 -80v-48h32zM528 160v48c0 17.5996 -14.4004 32 -32 32s-32 -14.4004 -32 -32v-48h64z" />
 
2471
  <glyph glyph-name="user-minus" unicode="&#xf503;" horiz-adv-x="640"
2472
  d="M624 240c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-192c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h192zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128z
2473
  M313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z" />
@@ -2503,6 +2508,18 @@ c-15.8008 -17.0996 -28 -37.5 -36.3008 -59.2002c-1.89941 -0.0996094 -3.69922 -0.5
2503
  c20.9004 -10 43.9004 -16 68.5 -16c3.30078 0 6.5 0.400391 9.80078 0.599609c2.7998 -3.09961 6 -5.89941 9.7998 -8.09961l7.89941 -4.59961c-0.0996094 -2.60059 -0.0996094 -5.2002 0 -7.80078c-0.899414 -0.599609 -36.5 -15.7998 -25.7998 -50.2998
2504
  c7.90039 -25.7002 21.9004 -49.7998 40.2002 -69.5996c7.5 -8 18 -12.6006 28.9004 -12.6006c12.1992 0 19.2998 5 27.5 9.80078c2.19922 -1.30078 4.5 -2.7002 6.7998 -3.90039zM173.1 173.4c-40.2998 -22.1006 -68.8994 -62 -75.1992 -109.4h-65.9004
2505
  c-17.7002 0 -32 14.2998 -32 32v32c0 35.2998 28.7002 64 64 64h64c17.5996 0 33.5 -7.09961 45.0996 -18.5996z" />
 
 
 
 
 
 
 
 
 
 
 
 
2506
  <glyph glyph-name="blender" unicode="&#xf517;"
2507
  d="M416 64c35.3496 0 64 -28.6504 64 -64v-32c0 -17.6699 -14.3301 -32 -32 -32h-320c-17.6699 0 -32 14.3301 -32 32v32c0 35.3496 28.6504 64 64 64h256zM288 -32c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM328 384
2508
  c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h157.82l-17.46 -64h-140.36c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h131.64l-17.46 -64h-114.18c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h105.46l-17.46 -64
@@ -2853,9 +2870,9 @@ c3.03027 3.04004 7.12012 4.7002 11.3203 4.7002c1.14941 0 2.2998 -0.129883 3.4394
2853
  c2.93945 4.58984 8.01953 7.37012 13.4697 7.37012h0.00195312c4.82812 0 10.8574 -3.30176 13.458 -7.37012c2.5498 -3.97949 62.5303 -98.9102 62.5303 -217.7c0 -1.46973 0 -2.93945 -0.00976562 -4.39941c74.0391 60.1699 156.699 78.9102 160.579 79.7598
2854
  c1.15039 0.259766 2.30078 0.379883 3.44043 0.379883c4.2002 0 8.29004 -1.66016 11.3203 -4.7002c3.85938 -3.87012 5.47949 -9.43945 4.2998 -14.7695c-0.879883 -3.96973 -20.6797 -90.5205 -84.9297 -165.641c44.3896 -8.91992 75.2197 -24.9893 76.7793 -25.8096z" />
2855
  <glyph glyph-name="check-double" unicode="&#xf560;"
2856
- d="M504.5 276.05c10 -10.0596 10 -26.3594 0 -36.4199l-294.4 -296.09c-9.98926 -10.0596 -26.1992 -10.0596 -36.1992 0l-166.4 167.36c-10 10.0498 -10 26.3594 0 36.4092l36.2002 36.4102c9.99023 10.0605 26.2002 10.0605 36.2002 0l112.1 -112.739l240.1 241.479
2857
- c9.99023 10.0498 26.2002 10.0498 36.2002 0zM166.57 165.29l-122.601 123.5c-6.83984 7.01953 -6.83984 18.3604 0.180664 25.2002l42.1299 41.7695c7.01953 6.83984 18.3594 6.83984 25.2002 -0.179688l68.2295 -68.7705l157.16 156.08
2858
- c7.03027 6.84082 18.3701 6.84082 25.21 -0.179688l41.9502 -42.1201c6.83984 -7.03027 6.83984 -18.3701 -0.180664 -25.21l-212.069 -210.27c-7.03027 -6.84082 -18.3701 -6.84082 -25.21 0.179688z" />
2859
  <glyph glyph-name="cocktail" unicode="&#xf561;" horiz-adv-x="576"
2860
  d="M296 -16c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-240c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h56v125.22l-168.74 168.73c-15.5195 15.5195 -4.5293 42.0498 17.4199 42.0498h366.641c21.9492 0 32.9395 -26.5303 17.4199 -42.0498
2861
  l-168.74 -168.73v-125.22h56zM432 448c79.5303 0 144 -64.4697 144 -144s-64.4697 -144 -144 -144c-27.4102 0 -52.7695 8.08008 -74.5801 21.3799l35.2598 35.2598c12.0303 -5.43945 25.2803 -8.63965 39.3203 -8.63965c52.9297 0 96 43.0596 96 96s-43.0703 96 -96 96
@@ -3409,13 +3426,11 @@ c-61.0498 30.75 -149.38 39.1396 -193.04 41.4297c-14.9004 0.770508 -26.4902 12.72
3409
  c16.25 0.919922 29.7998 -11.46 29.8096 -27.0898v-222.82c0 -14.3301 -11.5898 -26.2803 -26.4902 -27.0596c-43.6494 -2.29004 -131.93 -10.6807 -192.97 -41.4004c-9.39941 -4.73047 -20.54 1.70996 -20.54 11.9004v245.789c0 4.6709 2.31055 9.12012 6.41016 11.6309
3410
  c59.3203 36.3193 155.43 46.3096 203.78 49.0498z" />
3411
  <glyph glyph-name="brain" unicode="&#xf5dc;" horiz-adv-x="576"
3412
- d="M208 448c35.3398 0 64 -28.6504 64 -64v-74.0703c0 -26.0898 -18 -47.8799 -42.2002 -54.04c-3.4502 -0.879883 -5.7998 -4.08984 -5.7998 -7.65918v-16.1807c0 -5.06934 4.66992 -8.91016 9.63965 -7.88965c14.3799 2.93945 27.4502 9.41016 38.3604 18.3896v-234.55
3413
- c0 -39.7598 -32.2305 -72 -72 -72c-31.75 0 -58.3896 20.6904 -67.9697 49.21c-3.93066 -0.660156 -7.91016 -1.20996 -12.0303 -1.20996c-39.7695 0 -72 32.2402 -72 72c0 4.83008 0.519531 9.54004 1.41992 14.1104c-29 12.0098 -49.4199 40.5498 -49.4199 73.8896
3414
- c0 29.6699 16.3398 55.2803 40.3398 69.0898c-5.17969 10.5898 -8.33984 22.3301 -8.33984 34.9102c0 33.4297 20.54 62 49.6602 73.96c-1.02051 4.53027 -1.66016 9.2002 -1.66016 14.04c0 35.3496 28.6602 64 64 64c0.75 0 1.4502 -0.200195 2.2002 -0.219727
3415
- c7.05957 27.6699 31.9297 48.2197 61.7998 48.2197zM576 144c0 -33.3398 -20.4199 -61.8799 -49.4199 -73.8896c0.900391 -4.57031 1.41992 -9.28027 1.41992 -14.1104c0 -39.7598 -32.2305 -72 -72 -72c-4.12012 0 -8.09961 0.540039 -12.0303 1.20996
3416
- c-9.58008 -28.5195 -36.2197 -49.21 -67.9697 -49.21c-39.7695 0 -72 32.2402 -72 72v234.55c10.9199 -8.97949 23.9805 -15.4502 38.3604 -18.3896c4.95996 -1.02051 9.63965 2.82031 9.63965 7.88965v16.1807c0 3.56934 -2.33984 6.7793 -5.7998 7.65918
3417
- c-24.21 6.16016 -42.2002 27.9502 -42.2002 54.04v74.0703c0 35.3496 28.6602 64 64 64c29.8701 0 54.7402 -20.5498 61.7998 -48.2197c0.75 0.0195312 1.4502 0.219727 2.2002 0.219727c35.3398 0 64 -28.6504 64 -64c0 -4.83984 -0.639648 -9.50977 -1.66016 -14.04
3418
- c29.1201 -11.96 49.6602 -40.5303 49.6602 -73.96c0 -12.5801 -3.16992 -24.3203 -8.33984 -34.9102c24 -13.8096 40.3398 -39.4199 40.3398 -69.0898z" />
3419
  <glyph glyph-name="car-alt" unicode="&#xf5de;" horiz-adv-x="480"
3420
  d="M438.66 235.67c24.1201 -9.16992 41.3398 -32.3301 41.3398 -59.6699v-48c0 -16.1299 -6.16016 -30.6797 -16 -41.9297v-54.0703c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-256v-32c0 -17.6699 -14.3301 -32 -32 -32h-32
3421
  c-17.6699 0 -32 14.3301 -32 32v54.0703c-9.83984 11.2598 -16 25.8096 -16 41.9297v48c0 27.3398 17.2197 50.5 41.3398 59.6699l11.2402 28.0996l19.9297 49.8301c17.1104 42.7705 57.9307 70.4004 103.99 70.4004h127c46.0703 0 86.8799 -27.6299 103.99 -70.4004
@@ -3802,15 +3817,13 @@ c0 8.49023 5.38086 19.6865 12.0098 24.9902l128 102.4c11.6904 9.34961 28.29 9.349
3802
  l-25.1201 -40h-38.9395c-3.70996 0 -5.98047 -4.08984 -4 -7.24023l19.1992 -30.5596l-19.1992 -30.5605c-1.98047 -3.14941 0.279297 -7.23926 4 -7.23926h38.9395l25.1201 -39.9805c1.84961 -2.9502 6.15039 -2.9502 8 0l25.1201 39.9902h38.9395
3803
  c3.70996 0 5.98047 4.08984 4 7.24023z" />
3804
  <glyph glyph-name="torah" unicode="&#xf6a0;" horiz-adv-x="640"
3805
- d="M48 448c26.4688 -0.0273438 47.9727 -21.5312 48 -48v-80h-80c-8.83203 0 -16 7.16797 -16 16v64c0.0273438 26.4688 21.5312 47.9727 48 48zM395.14 219.44l17.4404 29.1699l17.4697 -29.1699h-34.9102zM336.05 167.37l-16.7998 28.0703h33.5801zM242 219.44
3806
- l17.4199 29.1895l17.4805 -29.1895h-34.9004zM430 324.56l-17.4199 -29.1895l-17.4805 29.1895h34.9004zM256 35.4297c0 -31.8896 -21.7803 -61.4297 -53.25 -66.5498c-2.94531 -0.501953 -7.76172 -0.90918 -10.75 -0.90918c-35.3281 0 -64 28.6719 -64 64v0.0292969v368
3807
- c-0.0527344 14.7783 -7.40527 36.2822 -16.4102 48h336.41c52.9365 -0.0546875 95.9453 -43.0635 96 -96v-256h-288v-60.5703zM217.41 338.43c-1.44824 -2.50977 -2.62402 -6.91797 -2.62402 -9.81543c0 -3.03125 1.27832 -7.59375 2.85352 -10.1846l27.79 -46.4297
3808
- l-27.6602 -46.2695c-1.57324 -2.62305 -2.84961 -7.23242 -2.84961 -10.29c0 -11.0352 8.95508 -19.9951 19.9902 -20h56.3896l27.7002 -46.2803c3.14844 -5.34375 10.7363 -9.68066 16.9385 -9.68066c0.0175781 0 0.0449219 0 0.0615234 0.000976562
3809
- c6.29199 0.00390625 13.9971 4.40332 17.2002 9.81934l27.5898 46.1201h56.2998h0.0302734c6.44922 0 14.2754 4.54688 17.4697 10.1504c1.45117 2.51172 2.62988 6.9043 2.62988 9.80566c0 3.03516 -1.28125 7.60156 -2.85938 10.1943l-27.79 46.4297l27.6797 46.2695
3810
- c1.57324 2.62305 2.85059 7.23242 2.85059 10.29c0 11.0352 -8.95605 19.9951 -19.9902 20h-56.3604l-27.7002 46.2803c-3.14844 5.34375 -10.7363 9.68066 -16.9385 9.68066c-0.0166016 0 -0.0439453 0 -0.0615234 -0.000976562
3811
- c-0.00976562 0 -0.0244141 0.000976562 -0.0341797 0.000976562c-6.29785 0 -14.0098 -4.39941 -17.2158 -9.82031l-27.5898 -46.1201h-56.2998h-0.0302734c-6.44922 0 -14.2754 -4.54688 -17.4697 -10.1504zM624 64c8.83203 0 16 -7.16797 16 -16
3812
- c0 -61.8242 -50.1758 -112 -112 -112h-336c52.9316 0.0605469 95.9395 43.0684 96 96v32h336zM276.86 324.56l-17.3906 -29.1699l-17.4697 29.1699h34.8604zM336 376.62l16.75 -28.0605h-33.5801zM304.88 219.44l-31.4697 52.5596l31.4102 52.5801h62.2998l31.4697 -52.5801
3813
- l-31.4102 -52.5596h-62.2998z" />
3814
  <glyph glyph-name="torii-gate" unicode="&#xf6a1;"
3815
  d="M376.45 416c39.4961 0.00195312 100.223 14.3389 135.55 32v-96c0 -17.6699 -14.3301 -32 -32 -32h-32v-64h48c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-48v-240c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v240
3816
  h-256v-240c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v240h-48c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h48v64h-32c-17.6699 0 -32 14.3301 -32 32v96c35.3271 -17.6611 96.0537 -31.998 135.55 -32h240.9zM128 320v-64h96
@@ -4322,16 +4335,16 @@ c20.2002 -20.5 32.7998 -46.5 36.6006 -74.7002c1.2998 -9.5 -6.5 -18 -16.3008 -18h
4322
  c-1.19922 9.5 6.5 18 16.3008 18h16.3994c8.2002 0 15 -5.90039 16.1006 -13.7998c2.7998 -20.2002 12 -38.7998 26.3994 -53.5c20.2002 -20.5 32.7998 -46.5 36.6006 -74.7002c1.2998 -9.5 -6.5 -18 -16.3008 -18h-16.5c-8 0 -14.6992 5.7998 -16 13.5zM400 256
4323
  c61.7998 0 112 -50.2002 112 -112s-50.2002 -112 -112 -112h-16c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 17.7002 14.2998 32 32 32h368zM400 96c26.5 0 48 21.5 48 48s-21.5 48 -48 48h-16v-96h16z" />
4324
  <glyph glyph-name="radiation" unicode="&#xf7b9;" horiz-adv-x="496"
4325
- d="M167.8 191.8c0 -28.5996 15.2002 -53.5 37.7998 -67.7998l-80.3994 -128.4c-4.7998 -7.69922 -15.2998 -10.0996 -22.7002 -4.7998c-58.0996 42 -97.4004 108.4 -102.5 184.2c-0.599609 9.09961 7.09961 16.7998 16.2002 16.7998h151.6zM205.6 259.5l-80.3994 128.5
4326
- c-4.7998 7.59961 -2.40039 18.0996 5.59961 22.4004c34.9004 18.7998 74.7998 29.5996 117.2 29.5996s82.2998 -10.7998 117.2 -29.5996c8 -4.30078 10.3994 -14.7002 5.59961 -22.4004l-80.3994 -128.5c-12.4004 7.7002 -26.8008 12.4004 -42.4004 12.4004
4327
- s-30.0996 -4.7002 -42.4004 -12.4004zM248 239.8c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48s21.5 48 48 48zM479.8 191.8c9.10059 0 16.7998 -7.7002 16.2002 -16.7002c-5.09961 -75.7998 -44.4004 -142.199 -102.5 -184.199
4328
- c-7.40039 -5.40039 -17.9004 -2.90039 -22.7002 4.7998l-80.3994 128.399c22.5996 14.2002 37.7998 39.1006 37.7998 67.7002h151.6z" />
4329
  <glyph glyph-name="radiation-alt" unicode="&#xf7ba;" horiz-adv-x="496"
4330
- d="M184 192c0 -22.7998 12.0996 -42.7998 30.0996 -54l-41.6992 -66.7998c-5.2002 -8.2998 -16.4004 -9.90039 -24 -3.7998c-32.5 26 -54.9004 64.1992 -59.5 107.8c-0.900391 9.09961 6.7998 16.7998 16 16.7998h79.0996zM281.8 246.1
4331
- c-9.7998 6.2002 -21.5 9.90039 -33.8994 9.90039c-12.4004 0 -24 -3.7002 -33.8008 -9.90039l-41.7998 66.9004c-4.7998 7.7998 -2.39941 18.4004 5.7998 22.5c21.2002 10.4004 44.8008 16.5 69.9004 16.5s48.7002 -6.09961 69.7998 -16.5
4332
- c8.2002 -4.09961 10.7002 -14.7002 5.7998 -22.5zM391.1 192c9.2002 0 17 -7.7002 15.9004 -16.9004c-4.59961 -43.5996 -26.9004 -81.7998 -59.5 -107.8c-7.59961 -6.09961 -18.7998 -4.5 -24 3.7998l-41.7002 66.8008c18.1006 11.2998 30.2002 31.2998 30.2002 54.0996
4333
- h79.0996zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 8c101.5 0 184 82.5 184 184s-82.5 184 -184 184s-184 -82.5 -184 -184s82.5 -184 184 -184zM248 224c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32
4334
- s-32 14.2998 -32 32s14.2998 32 32 32z" />
4335
  <glyph glyph-name="restroom" unicode="&#xf7bd;" horiz-adv-x="640"
4336
  d="M128 320c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM512 320c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM639.3 93.5c3.7002 -15.0996 -8.2998 -29.5 -24.5 -29.5
4337
  h-54.7998v-104c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v104h-54.7998c-16.2002 0 -28.2002 14.4004 -24.7002 29.5l45.5996 185.8c3.30078 13.5 15.5 23 29.8008 24.2002c15 -9.7002 32.7998 -15.5 52 -15.5c19.1992 0 37 5.7998 52 15.5
@@ -4352,8 +4365,8 @@ c0.699219 -9.2998 -6.80078 -17.2998 -16.1006 -17.2998h-32.2002c-8.2998 0 -15.099
4352
  <glyph glyph-name="sd-card" unicode="&#xf7c2;" horiz-adv-x="384"
4353
  d="M320 448c35.2998 0 64 -28.7002 64 -64v-384c0 -35.2998 -28.7002 -64 -64 -64h-256c-35.2998 0 -64 28.7002 -64 64v320l128 128h192zM160 288v96h-48v-96h48zM240 288v96h-48v-96h48zM320 288v96h-48v-96h48z" />
4354
  <glyph glyph-name="sim-card" unicode="&#xf7c4;" horiz-adv-x="384"
4355
- d="M320 448c35.2998 0 64 -28.7002 64 -64v-384c0 -35.2998 -28.7002 -64 -64 -64h-256c-35.2998 0 -64 28.7002 -64 64v320l128 128h192zM160 256v-64h64v64h-64zM64 224v-32h64v64h-32c-17.7002 0 -32 -14.2998 -32 -32zM128 0v64h-64v-32c0 -17.7002 14.2998 -32 32 -32
4356
- h32zM224 0v64h-64v-64h64zM320 32v32h-64v-64h32c17.7002 0 32 14.2998 32 32zM320 96v64h-256v-64h256zM320 192v32c0 17.7002 -14.2998 32 -32 32h-32v-64h64z" />
4357
  <glyph glyph-name="skating" unicode="&#xf7c5;" horiz-adv-x="448"
4358
  d="M400 448c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48s21.5 48 48 48zM400 0c8.7998 0 16 -7.2002 16 -16c0 -26.5 -21.5 -48 -48 -48h-96c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16h96c8.7998 0 16 7.2002 16 16s7.2002 16 16 16zM117.8 -8.59961
4359
  c6.2998 6.2998 16.5 6.19922 22.7002 0c6.2002 -6.2002 6.2002 -16.4004 0 -22.6006c-9.2998 -9.2998 -21.5996 -14 -33.9004 -14c-12.2998 0 -24.5996 4.60059 -34 14l-67.8994 67.9004c-6.2002 6.2002 -6.2002 16.3994 0 22.5996s16.3994 6.2002 22.5996 0
@@ -4523,5 +4536,114 @@ c0 -32.1318 -26.0781 -58.21 -58.21 -58.21v0h-331.58c-32.1318 0 -58.21 26.0781 -5
4523
  <glyph glyph-name="wave-square" unicode="&#xf83e;" horiz-adv-x="640"
4524
  d="M476 -32h-152c-19.8721 0 -36 16.1279 -36 36v348h-96v-156c0 -19.8721 -16.1279 -36 -36 -36h-140c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h112v156c0 19.8721 16.1279 36 36 36h152c19.8721 0 36 -16.1279 36 -36v-348h96v156
4525
  c0 19.8721 16.1279 36 36 36h140c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-112v-156c0 -19.8721 -16.1279 -36 -36 -36z" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4526
  </font>
4527
  </defs></svg>
1
  <?xml version="1.0" standalone="no"?>
2
  <!--
3
+ Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com
4
  License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
5
  -->
6
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
7
  <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
8
  <metadata>
9
+ Created by FontForge 20190112 at Tue Jun 4 15:16:44 2019
10
  By Robert Madole
11
  Copyright (c) Font Awesome
12
  </metadata>
23
  bbox="-0.983398 -64.9834 640.104 448.427"
24
  underline-thickness="25"
25
  underline-position="-51"
26
+ unicode-range="U+0020-F897"
27
  />
28
  <missing-glyph />
29
  <glyph glyph-name="glass-martini" unicode="&#xf000;"
192
  d="M512 304v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h88l12.2998 32.9004c7 18.6992 24.9004 31.0996 44.9004 31.0996h125.5c20 0 37.8994 -12.4004 44.8994 -31.0996l12.4004 -32.9004h88c26.5 0 48 -21.5 48 -48zM376 160
193
  c0 66.2002 -53.7998 120 -120 120s-120 -53.7998 -120 -120s53.7998 -120 120 -120s120 53.7998 120 120zM344 160c0 -48.5 -39.5 -88 -88 -88s-88 39.5 -88 88s39.5 88 88 88s88 -39.5 88 -88z" />
194
  <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="448"
195
+ d="M432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h19.5801l-23.2998 64h-152.561l-23.2998 -64h19.5801c8.83203 0 16 -7.16797 16 -16v-32
196
+ c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h23.4102l130.71 362.31c4.07422 11.9736 17.6465 21.6904 30.2939 21.6904h0.00585938h47.1602h0.00585938c12.6475 0 26.2197 -9.7168 30.2939 -21.6904
197
+ l130.71 -362.31h23.4102zM176.85 176h94.3008l-47.1504 129.49z" />
198
  <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="384"
199
+ d="M333.49 210c34.4395 -27.54 55.5693 -71.1504 50.8301 -119.6c-6.86035 -70.6504 -70.2002 -122.4 -141 -122.4h-209.32c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h31.8701v288h-31.8701c-8.83203 0 -16 7.16797 -16 16v48
200
+ c0 8.83203 7.16797 16 16 16h199.42c74.5801 0 134.45 -64.4902 127.07 -140.79c-2.01367 -20.25 -14.1094 -49.4639 -27 -65.21zM145.66 336v-96h87.7598c26.4961 0 48 21.5039 48 48s-21.5039 48 -48 48h-87.7598zM233.42 48c30.9121 0 56 25.0879 56 56
201
+ s-25.0879 56 -56 56h-87.7598v-112h87.7598z" />
 
202
  <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="320"
203
+ d="M320 400v-32c0 -8.83203 -7.16797 -16 -16 -16h-62.7598l-80 -320h46.7598c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h62.7598l80 320h-46.7598
204
+ c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192c8.83203 0 16 -7.16797 16 -16z" />
 
205
  <glyph glyph-name="text-height" unicode="&#xf034;" horiz-adv-x="576"
206
+ d="M304 416c8.83203 0 16 -7.16797 16 -16v-96c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32h-56v-304h40c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160c-8.83203 0 -16 7.16797 -16 16v32
207
+ c0 8.83203 7.16797 16 16 16h40v304h-56v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v96c0 8.83203 7.16797 16 16 16h288zM560 80c15.6396 0 20.6396 -18 11.3096 -27.3096l-80 -80c-2.58594 -2.58496 -7.65332 -4.68262 -11.3096 -4.68262
208
+ s-8.72363 2.09766 -11.3096 4.68262l-80 80c-10.0107 10 -3 27.3096 11.3096 27.3096h48v224h-48c-15.6396 0 -20.6396 18 -11.3096 27.3096l80 80c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -80
209
+ c10.0205 -10 3 -27.3096 -11.3096 -27.3096h-48v-224h48z" />
210
  <glyph glyph-name="text-width" unicode="&#xf035;" horiz-adv-x="448"
211
+ d="M432 416c8.83203 0 16 -7.16797 16 -16v-80c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v16h-120v-112h24c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32
212
+ c0 8.83203 7.16797 16 16 16h24v112h-120v-16c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v80c0 8.83203 7.16797 16 16 16h416zM363.31 155.31l80 -80c2.58496 -2.58594 4.68262 -7.65332 4.68262 -11.3096s-2.09766 -8.72363 -4.68262 -11.3096
213
+ l-80 -80c-10 -10.0205 -27.3096 -3 -27.3096 11.3096v48h-224v-48c0 -15.6396 -18 -20.6396 -27.3096 -11.3096l-80 80c-2.58496 2.58594 -4.68262 7.65332 -4.68262 11.3096s2.09766 8.72363 4.68262 11.3096l80 80c10 10.0107 27.3096 3 27.3096 -11.3096v-48h224v48
214
+ c0 15.6396 18 20.6396 27.3096 11.3096z" />
215
  <glyph glyph-name="align-left" unicode="&#xf036;" horiz-adv-x="448"
216
+ d="M12.8301 96c-7.07715 0 -12.8301 5.74316 -12.8301 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34h0.00976562c7.07715 0 12.8203 -5.74316 12.8203 -12.8203v-0.00976562v-38.3398v-0.00976562
217
+ c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34zM12.8301 352c-7.07715 0 -12.8301 5.74316 -12.8301 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34h0.00976562
218
+ c7.07715 0 12.8203 -5.74316 12.8203 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16
219
+ v32c0 8.83203 7.16797 16 16 16h416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" />
220
  <glyph glyph-name="align-center" unicode="&#xf037;" horiz-adv-x="448"
221
+ d="M432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16
222
+ v32c0 8.83203 7.16797 16 16 16h416zM108.1 352c-6.67871 0 -12.0996 5.4209 -12.0996 12.0996v39.8105c0 6.67383 5.41602 12.0898 12.0898 12.0898h0.00976562h231.811c6.67383 0 12.0898 -5.41602 12.0898 -12.0898v-39.8105v-0.00976562
223
+ c0 -6.67383 -5.41602 -12.0898 -12.0898 -12.0898v0h-231.811zM339.91 96h-231.811c-6.67871 0 -12.0996 5.4209 -12.0996 12.0996v39.8105c0 6.67383 5.41602 12.0898 12.0898 12.0898h0.00976562h231.811c6.67383 0 12.0898 -5.41602 12.0898 -12.0898v-39.8105
224
+ v-0.00976562c0 -6.67383 -5.41602 -12.0898 -12.0898 -12.0898v0z" />
225
  <glyph glyph-name="align-right" unicode="&#xf038;" horiz-adv-x="448"
226
+ d="M16 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16
227
+ v32c0 8.83203 7.16797 16 16 16h416zM435.17 416c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203
228
+ v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34
229
+ h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34z" />
230
  <glyph glyph-name="align-justify" unicode="&#xf039;" horiz-adv-x="448"
231
+ d="M432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16
232
+ v32c0 8.83203 7.16797 16 16 16h416zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16
233
+ h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" />
234
  <glyph glyph-name="list" unicode="&#xf03a;"
235
+ d="M80 80c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64c0 8.83203 7.16797 16 16 16h64zM80 400c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64
236
+ c0 8.83203 7.16797 16 16 16h64zM80 240c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64c0 8.83203 7.16797 16 16 16h64zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320
237
+ c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 224c8.83203 0 16 -7.16797 16 -16v-32
238
+ c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320z" />
239
  <glyph glyph-name="outdent" unicode="&#xf03b;" horiz-adv-x="448"
240
+ d="M100.69 84.71l-96 95.9805c-2.58496 2.58594 -4.68262 7.65332 -4.68262 11.3096s2.09766 8.72363 4.68262 11.3096l96 96c9.97949 10 27.3096 3.01074 27.3096 -11.3096v-191.98c0 -14.2393 -17.3096 -21.3096 -27.3096 -11.3096zM432 32c8.83203 0 16 -7.16797 16 -16
241
+ v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562
242
+ h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM435.17 288c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562
243
+ c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM432 416c8.83203 0 16 -7.16797 16 -16
244
+ v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" />
245
  <glyph glyph-name="indent" unicode="&#xf03c;" horiz-adv-x="448"
246
+ d="M27.3096 84.7002c-9.97949 -10 -27.3096 -3.00977 -27.3096 11.2998v192c0 14.2197 17.2695 21.3398 27.3096 11.3203l96 -96c2.58496 -2.58691 4.68262 -7.65332 4.68262 -11.3105c0 -3.65625 -2.09766 -8.72363 -4.68262 -11.3096zM432 32
247
+ c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562
248
+ c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM435.17 288
249
+ c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562
250
+ c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" />
251
  <glyph glyph-name="video" unicode="&#xf03d;" horiz-adv-x="576"
252
  d="M336.2 384c26.3994 0 47.7998 -21.4004 47.7998 -47.7998v-288.4c0 -26.3994 -21.4004 -47.7998 -47.7998 -47.7998h-288.4c-26.3994 0 -47.7998 21.4004 -47.7998 47.7998v288.4c0 26.3994 21.4004 47.7998 47.7998 47.7998h288.4zM525.6 346.3
253
  c21.3008 14.6006 50.4004 -0.399414 50.4004 -25.7998v-256.9c0 -25.5 -29.2002 -40.3994 -50.4004 -25.7998l-109.6 75.5v157.4z" />
572
  c-16.5 50.1006 -5.58984 107.561 34.0498 147.2c37.0303 37.0195 89.2002 49.6699 136.58 37.9297c9.08984 -2.25977 12.2803 -13.54 5.66016 -20.1602l-74.3604 -74.3594l11.3105 -67.8799l67.8799 -11.3105l74.3604 74.3604
573
  c6.58008 6.58008 17.8799 3.51953 20.1201 -5.50977zM64 -24c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z" />
574
  <glyph glyph-name="tasks" unicode="&#xf0ae;"
575
+ d="M139.61 412.5l17 -16.5c1.90234 -1.94531 3.44727 -5.7334 3.44727 -8.4541c0 -2.7627 -1.58496 -6.5918 -3.53809 -8.5459l-72.1992 -72.1904l-15.5898 -15.6191c-2.04297 -1.94238 -5.9873 -3.51758 -8.80566 -3.51758c-2.81738 0 -6.7627 1.5752 -8.80469 3.51758
576
+ l-47.5898 47.3994c-1.94824 1.94141 -3.5293 5.75 -3.5293 8.5c0 2.75098 1.58105 6.55859 3.5293 8.5l15.7002 15.7197c1.94141 1.94824 5.74902 3.53027 8.5 3.53027c2.75 0 6.55762 -1.58203 8.5 -3.53027l22.6992 -22.1191l63.6807 63.3096
577
+ c1.94141 1.94824 5.74902 3.5293 8.5 3.5293c2.75 0 6.55859 -1.58105 8.5 -3.5293zM139.61 253.31l16.9795 -17c1.89648 -1.93164 3.43457 -5.69727 3.43457 -8.4043c0 -2.74805 -1.5791 -6.55371 -3.52441 -8.49512l-72.2002 -72.2197l-15.7002 -15.6904
578
+ c-2.04102 -1.94141 -5.9834 -3.5166 -8.7998 -3.5166s-6.75879 1.5752 -8.7998 3.5166l-47.4697 47.5c-1.94824 1.94141 -3.5293 5.74902 -3.5293 8.5s1.58105 6.55859 3.5293 8.5l15.7002 15.6904c1.94141 1.94824 5.74902 3.5293 8.5 3.5293
579
+ c2.75 0 6.55762 -1.58105 8.5 -3.5293l22.6992 -22.1006l63.6807 63.7197c1.94141 1.94824 5.74902 3.53027 8.5 3.53027c2.75 0 6.55859 -1.58203 8.5 -3.53027zM64 80c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48c-26.4697 0 -48.5898 21.5 -48.5898 48
580
+ s22.0996 48 48.5898 48zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288
581
+ c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z" />
582
  <glyph glyph-name="filter" unicode="&#xf0b0;"
583
  d="M487.976 448c21.3623 0 32.0459 -25.8965 16.9717 -40.9707l-184.947 -184.971v-262.039c0 -19.5127 -21.9805 -30.71 -37.7627 -19.6611l-80 55.9795c-6.41602 4.49219 -10.2373 11.8311 -10.2373 19.6621v206.059l-184.942 184.971
584
  c-15.1045 15.1045 -4.34766 40.9707 16.9707 40.9707h463.947z" />
634
  d="M16 316c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 156c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40
635
  c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 -4c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416z" />
636
  <glyph glyph-name="list-ul" unicode="&#xf0ca;"
637
+ d="M48 400c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48s-48 21.5039 -48 48s21.5039 48 48 48zM48 240c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48s-48 21.5039 -48 48s21.5039 48 48 48zM48 80c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48
638
+ s-48 21.5039 -48 48s21.5039 48 48 48zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16
639
+ h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320z" />
640
  <glyph glyph-name="list-ol" unicode="&#xf0cb;"
641
+ d="M61.7695 47c19.6104 -5.12012 28.7002 -20.5 28.7305 -34.8799c0 -21.3701 -14.3398 -44.1201 -48.5 -44.1201c-16.6201 0 -29.29 4.75 -37 9.44043c-5.82031 4.21973 -6.34961 9.80957 -2.62988 15.9395l5.58984 9.31055c3.86035 6.61914 9.11035 7 15.5996 3.11914
642
+ c4.10352 -1.68652 11.0342 -3.08496 15.4707 -3.11914c10.1602 0 14.3594 3.5 14.3594 8.21973c0 6.64941 -5.60938 9.08984 -15.9395 9.08984h-4.73047c-5.95996 0 -9.25 2.12012 -12.25 7.87988l-1.0498 1.92969c-2.4502 4.75 -1.2002 9.81055 2.7998 14.8809l5.61035 7
643
+ c2.85742 3.55664 7.78516 9.07129 11 12.3096h-22.8301c-4.41602 0 -8 3.58398 -8 8v16c0 4.41602 3.58398 8 8 8h57c7.5 0 11.3398 -4 11.3398 -11.3496v-3.31055c0.0107422 -0.245117 0.0205078 -0.644531 0.0205078 -0.890625
644
+ c0 -4.20801 -2.28027 -10.166 -5.09082 -13.2988zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32
645
+ c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM16 288
646
+ c-4.41602 0 -8 3.58398 -8 8v16c0 4.41602 3.58398 8 8 8h16v64h-8c-4.4082 0.0078125 -7.98535 3.5918 -7.98535 8c0 1.04297 0.378906 2.64746 0.845703 3.58008l8 16c1.21777 2.43457 4.41699 4.41504 7.13965 4.41992h24c4.41602 0 8 -3.58398 8 -8v-88h16
647
+ c4.41602 0 8 -3.58398 8 -8v-16c0 -4.41602 -3.58398 -8 -8 -8h-64zM12.0898 128c-7.00977 0 -12.0898 4 -12.0898 11.4102v4c0 47.2803 51 56.3994 50.9697 69.1201c0 7.18945 -5.9502 8.75 -9.2793 8.75h-0.0546875c-3.02832 0 -7.24219 -1.7207 -9.40527 -3.83984
648
+ c-5.12012 -4.91016 -10.5107 -7 -16.1201 -2.44043l-8.58008 6.87988c-5.7998 4.53027 -7.16992 9.78027 -2.7998 15.3701c6.65918 8.75 19.0996 18.75 40.46 18.75c19.4697 0 44.4697 -10.5 44.4697 -39.5596c0 -37.7607 -45.0498 -46.1504 -48.3398 -56.4404h38.6797
649
+ c4.41602 0 8 -3.58398 8 -8v-16c0 -4.41602 -3.58398 -8 -8 -8h-67.9102z" />
 
 
650
  <glyph glyph-name="strikethrough" unicode="&#xf0cc;"
651
+ d="M496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-480c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h102.29c-11.6797 16.5303 -19.7803 35.4697 -21.7803 56.3604c-0.319336 3.29297 -0.579102 8.65137 -0.579102 11.96
652
+ c0 68.2158 55.3633 123.624 123.579 123.68h68h0.0117188c43.6865 0 94.9863 -31.7188 114.509 -70.7998l0.529297 -1c0.930664 -1.86328 1.68652 -5.06641 1.68652 -7.14844c0 -5.45898 -3.96289 -11.8711 -8.8457 -14.3115l-42.9404 -21.4707
653
+ c-1.86426 -0.931641 -5.06836 -1.6875 -7.15234 -1.6875c-5.45605 0 -11.8652 3.95996 -14.3076 8.83789c-7.61133 15.2246 -27.6025 27.5801 -44.624 27.5801h-0.0361328h-66.79c-24.0391 -0.000976562 -43.5488 -19.5107 -43.5488 -43.5498
654
+ c0 -17.749 13.7666 -36.3945 30.7295 -41.6201l87.1699 -26.8301h202.1zM315.76 128h94.3906c2.21191 -6.56152 4.60352 -17.4746 5.33984 -24.3604c0.319336 -3.29297 0.579102 -8.65137 0.579102 -11.96c0 -68.2158 -55.3633 -123.624 -123.579 -123.68h-68h-0.0117188
655
+ c-43.6865 0 -94.9863 31.7188 -114.509 70.7998l-0.529297 1c-0.930664 1.86328 -1.68652 5.06641 -1.68652 7.14844c0 5.45898 3.96289 11.8711 8.8457 14.3115l42.9404 21.4707c1.86426 0.931641 5.06836 1.6875 7.15234 1.6875
656
+ c5.45605 0 11.8652 -3.95996 14.3076 -8.83789c7.61133 -15.2246 27.6025 -27.5801 44.624 -27.5801h0.0361328h66.79c24.0176 0.0224609 43.5273 19.5322 43.5498 43.5498c-0.00976562 13.1572 -9.07715 29.4863 -20.2402 36.4502z" />
657
  <glyph glyph-name="underline" unicode="&#xf0cd;" horiz-adv-x="448"
658
+ d="M32 384c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h144c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-160c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80v160h-32c-8.83203 0 -16 7.16797 -16 16v32
659
+ c0 8.83203 7.16797 16 16 16h144c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-160c0 -88.2197 -71.7803 -160 -160 -160s-160 71.7803 -160 160v160h-32zM432 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416
660
+ c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z" />
661
  <glyph glyph-name="table" unicode="&#xf0ce;"
662
  d="M464 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416zM224 32v96h-160v-96h160zM224 192v96h-160v-96h160zM448 32v96h-160v-96h160zM448 192v96h-160v-96h160z" />
663
  <glyph glyph-name="magic" unicode="&#xf0d0;"
896
  d="M176 16c0 -44.1123 -35.8877 -80 -80 -80s-80 35.8877 -80 80s35.8877 80 80 80s80 -35.8877 80 -80zM25.2598 422.801c-0.68457 13.709 10.2441 25.1992 23.9707 25.1992h93.5391c13.7266 0 24.6553 -11.4902 23.9707 -25.1992l-13.6006 -272
897
  c-0.638672 -12.7725 -11.1807 -22.8008 -23.9697 -22.8008h-66.3398c-12.7891 0 -23.3311 10.0283 -23.9697 22.8008z" />
898
  <glyph glyph-name="superscript" unicode="&#xf12b;"
899
+ d="M496 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v96h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32
900
+ c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-144h16zM336 384c8.83203 0 16 -7.16797 16 -16v-48c0 -8.83203 -7.16797 -16 -16 -16h-33.4805l-77.8096 -112l77.8096 -112h33.4805c8.83203 0 16 -7.16797 16 -16v-48
901
+ c0 -8.83203 -7.16797 -16 -16 -16h-67c-4.58984 0.0224609 -10.4404 3.10059 -13.0596 6.87012l-79.9004 115l-79.9004 -115c-2.63477 -3.79199 -8.52148 -6.87012 -13.1387 -6.87012h-0.000976562h-67c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16
902
+ h33.4805l77.8096 112l-77.8096 112h-33.4805c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h67c4.58984 -0.0224609 10.4404 -3.10059 13.0596 -6.87012l79.9004 -115l79.9004 115c2.63477 3.79199 8.52148 6.87012 13.1387 6.87012h0.000976562h67z" />
 
 
903
  <glyph glyph-name="subscript" unicode="&#xf12c;"
904
+ d="M496 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v96h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32
905
+ c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-144h16zM336 384c8.83203 0 16 -7.16797 16 -16v-48c0 -8.83203 -7.16797 -16 -16 -16h-33.4805l-77.8096 -112l77.8096 -112h33.4805c8.83203 0 16 -7.16797 16 -16v-48
906
+ c0 -8.83203 -7.16797 -16 -16 -16h-67c-4.58984 0.0224609 -10.4404 3.10059 -13.0596 6.87012l-79.9004 115l-79.9004 -115c-2.63477 -3.79199 -8.52148 -6.87012 -13.1387 -6.87012h-0.000976562h-67c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16
907
+ h33.4805l77.8096 112l-77.8096 112h-33.4805c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h67c4.58984 -0.0224609 10.4404 -3.10059 13.0596 -6.87012l79.9004 -115l79.9004 115c2.63477 3.79199 8.52148 6.87012 13.1387 6.87012h0.000976562h67z" />
 
 
908
  <glyph glyph-name="eraser" unicode="&#xf12d;"
909
  d="M497.941 174.059l-142.059 -142.059h144.117c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-356c-10.9756 0 -26.1816 6.29883 -33.9424 14.0586l-96 96c-18.7441 18.7451 -18.7441 49.1377 0 67.8828l256 256
910
  c18.7471 18.7451 49.1387 18.7441 67.8838 0l160 -160c18.7441 -18.7451 18.7441 -49.1377 0 -67.8828zM195.314 236.686l-124.687 -124.686l80 -80h114.745l67.3135 67.3135z" />
1045
  c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 140v8c0 6.59961 -5.40039 12 -12 12h-168c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 212c0 6.59961 -5.40039 12 -12 12h-168
1046
  c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12v8zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z" />
1047
  <glyph glyph-name="sort-alpha-down" unicode="&#xf15d;" horiz-adv-x="448"
1048
+ d="M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32
1049
+ c8.83203 0 16 -7.16797 16 -16v-304h48zM416 160c8.83203 0 16 -7.16797 16 -16v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128
1050
+ c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128zM447.06 245.38c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988
1051
+ c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301
1052
+ c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 304h32.7793
1053
+ l-16.3896 48z" />
1054
  <glyph glyph-name="sort-alpha-up" unicode="&#xf15e;" horiz-adv-x="448"
1055
+ d="M16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32
1056
+ c-8.83203 0 -16 7.16797 -16 16v304h-48zM416 160c8.83203 0 16 -7.16797 16 -16v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128
1057
+ c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128zM447.06 245.38c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988
1058
+ c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301
1059
+ c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 304h32.7793
1060
+ l-16.3896 48z" />
1061
  <glyph glyph-name="sort-amount-down" unicode="&#xf160;"
1062
+ d="M304 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96
1063
+ c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0801 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48zM432 288
1064
+ c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192zM368 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32
1065
+ c0 8.83203 7.16797 16 16 16h128zM496 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256z" />
1066
  <glyph glyph-name="sort-amount-up" unicode="&#xf161;"
1067
+ d="M304 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64zM16 288c-14.2305 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262
1068
+ s8.72363 -2.09766 11.3096 -4.68262l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16
1069
+ h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192zM368 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128zM496 416c8.83203 0 16 -7.16797 16 -16v-32
1070
+ c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256z" />
1071
  <glyph glyph-name="sort-numeric-down" unicode="&#xf162;" horiz-adv-x="448"
1072
+ d="M304 352c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16c8.83203 0 16 -7.16797 16 -16v-32
1073
+ c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16zM330.15 189.09c53.4502 14.25 101.85 -25.8799 101.869 -77.0898v-10.7695c0 -70.3906 -28.25 -107.24 -86.25 -132
1074
+ c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8496 102.53c6.80762 23.4512 31.4473 47.7197 55 54.1699z
1075
+ M352 92c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262
1076
+ l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48z" />
 
1077
  <glyph glyph-name="sort-numeric-up" unicode="&#xf163;" horiz-adv-x="448"
1078
+ d="M330.17 189.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695c0 -70.3906 -28.25 -107.24 -86.25 -132c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408
1079
+ c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53c6.80762 23.4512 31.4482 47.7197 55 54.1699zM352 92c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20zM304 352
1080
+ c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96
1081
+ c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16zM107.31 411.31l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48
1082
+ c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262z" />
 
1083
  <glyph glyph-name="thumbs-up" unicode="&#xf164;"
1084
  d="M104 224c13.2549 0 24 -10.7451 24 -24v-240c0 -13.2549 -10.7451 -24 -24 -24h-80c-13.2549 0 -24 10.7451 -24 24v240c0 13.2549 10.7451 24 24 24h80zM64 -24c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24zM384 366.548
1085
  c0 -42.416 -25.9697 -66.208 -33.2773 -94.5479h101.724c33.3965 0 59.3965 -27.7461 59.5527 -58.0977c0.0839844 -17.9385 -7.5459 -37.249 -19.4395 -49.1973l-0.109375 -0.110352c9.83594 -23.3369 8.23633 -56.0371 -9.30859 -79.4688
1282
  c-8.83691 0 -16 7.16309 -16 16v145.373c0 14.2539 17.2344 21.3926 27.3145 11.3135l49.3711 -49.3711c44.5234 42.5488 104.866 68.6846 171.314 68.6846c136.81 0 247.747 -110.78 248 -247.531zM323.088 113.685c-8.1377 -10.4629 -23.2158 -12.3467 -33.6787 -4.20996
1283
  l-65.4092 50.874v135.651c0 13.2549 10.7451 24 24 24h16c13.2549 0 24 -10.7451 24 -24v-104.349l40.7012 -31.6572c10.4629 -8.13672 12.3477 -23.2158 4.20996 -33.6787z" />
1284
  <glyph glyph-name="heading" unicode="&#xf1dc;"
1285
+ d="M448 352v-320h32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32v128h-192v-128h32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160
1286
+ c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32v320h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-128h192v128h-32c-8.83203 0 -16 7.16797 -16 16v32
1287
+ c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32z" />
1288
  <glyph glyph-name="paragraph" unicode="&#xf1dd;" horiz-adv-x="448"
1289
+ d="M448 400v-32c0 -8.83203 -7.16797 -16 -16 -16h-48v-368c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v368h-32v-368c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v112h-32c-88.3203 0 -160 71.6797 -160 160
1290
+ s71.6797 160 160 160h240c8.83203 0 16 -7.16797 16 -16z" />
1291
  <glyph glyph-name="sliders-h" unicode="&#xf1de;"
1292
  d="M496 64c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-336v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-80c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h80v16c0 8.7998 7.2002 16 16 16h32
1293
  c8.7998 0 16 -7.2002 16 -16v-16h336zM496 224c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-80v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-336c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h336v16
2082
  d="M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM120 256c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM184 352c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32
2083
  s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM232 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z" />
2084
  <glyph glyph-name="chess" unicode="&#xf439;"
2085
+ d="M74 240l-33.9102 90.3799c-0.5625 1.5 -1.01953 4.01758 -1.01953 5.62012c0 8.83203 7.16797 16 16 16h0.0195312h56.9102v32h-24c-4.41602 0 -8 3.58398 -8 8v16c0 4.41602 3.58398 8 8 8h24v24c0 4.41602 3.58398 8 8 8h16c4.41602 0 8 -3.58398 8 -8v-24h24
2086
+ c4.41602 0 8 -3.58398 8 -8v-16c0 -4.41602 -3.58398 -8 -8 -8h-24v-32h56.8896h0.0195312c8.83203 0 16 -7.16797 16 -16c0 -1.60254 -0.456055 -4.12012 -1.01953 -5.62012l-33.8896 -90.3799h10c8.83203 0 16 -7.16797 16 -16v-16c0 -8.83203 -7.16797 -16 -16 -16
2087
+ h-15.9404c0.116211 -35.8613 7.25684 -93.2051 15.9404 -128h-128c8.68359 34.7949 15.8242 92.1387 15.9404 128h-15.9404c-8.83203 0 -16 7.16797 -16 16v16c0 8.83203 7.16797 16 16 16h10zM247.16 -11.5801c4.87988 -2.44141 8.83984 -8.85156 8.83984 -14.3086
2088
+ v-0.000976562v-22.1104c0 -8.83203 -7.16797 -16 -16 -16h-224c-8.83203 0 -16 7.16797 -16 16v22.1104c0.000976562 5.45898 3.96582 11.8701 8.84961 14.3096l23.1504 11.5801v16c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-16zM339.93 146.2
2089
+ l-24.5693 20.7998c-6.25684 5.28125 -11.3467 16.2119 -11.3604 24.4004v58.5996c0 3.31152 2.68848 6 6 6h26.3896c3.3125 0 6 -2.68848 6 -6v-26h24.71v26c0 3.31152 2.68848 6 6 6h53.8105c3.31152 0 6 -2.68848 6 -6v-26h24.71v26c0 3.31152 2.6875 6 6 6h26.3799
2090
+ c3.31152 0 6 -2.68848 6 -6v-58.54v-0.03125c0 -8.19238 -5.07617 -19.1367 -11.3301 -24.4287l-24.5996 -20.79l3.29004 -82.21h-126.721zM384 144v-32h32v32c0 8.83203 -7.16797 16 -16 16s-16 -7.16797 -16 -16zM503.16 -11.5801
2091
+ c4.87988 -2.44141 8.83984 -8.85156 8.83984 -14.3086v-0.000976562v-22.1104c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v22.1104c0.000976562 5.45898 3.96582 11.8701 8.84961 14.3096l23.1504 11.5801v16c0 8.83203 7.16797 16 16 16h128
2092
+ c8.83203 0 16 -7.16797 16 -16v-16z" />
 
2093
  <glyph glyph-name="chess-bishop" unicode="&#xf43a;" horiz-adv-x="320"
2094
+ d="M8 160.12c0 73.3799 59.8096 181.08 112.6 225.37c-14 3.41992 -24.5996 15.5098 -24.5996 30.5098c0 17.6641 14.3359 32 32 32h64c17.6641 0 32 -14.3359 32 -32c0 -15.0498 -10.5996 -27.0898 -24.5996 -30.5098c24.3994 -20.4902 50.0693 -54.6807 70.8691 -92.5898
2095
+ l-107.89 -107.931c-1.29199 -1.29297 -2.34082 -3.82617 -2.34082 -5.6543c0 -1.8291 1.04883 -4.3623 2.34082 -5.65527l11.3105 -11.3105c1.29297 -1.29199 3.82617 -2.34082 5.6543 -2.34082s4.3623 1.04883 5.65527 2.34082l100.31 100.33
2096
+ c15.96 -35.46 26.6904 -71.9492 26.6904 -102.56c0 -51.6006 -22.1396 -73.8301 -56 -84.6006v-43.5195h-192v43.5195c-33.8604 10.7705 -56 32.9609 -56 84.6006zM304 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288
2097
+ c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z" />
2098
  <glyph glyph-name="chess-board" unicode="&#xf43c;"
2099
+ d="M255.9 447.8v-64h-64v64h64zM0 383.83h64v-64h-64v64zM128 447.8v-64h-64v64h64zM192 191.9h64v-64h-64v64zM0 255.88h64v-64h-64v64zM383.85 447.8v-64h-64v64h64zM511.85 447.8v-64h-64v64h64zM128 191.9v-64h-64v64h64zM511.8 0h-64v64h64v-64zM511.8 128h-64v64h64
2100
+ v-64zM383.85 -64v64h64v-64h-64zM511.85 255.88h-64v64h64v-64zM128 -64v64h64v-64h-64zM0 -64v64h64v-64h-64zM255.9 -64v64h64v-64h-64zM0 127.93h64v-64h-64v64zM319.88 319.85h-64v64h64v-64zM255.88 191.85v64h64v-64h-64zM191.88 63.8496h64v-64h-64v64z
2101
+ M319.88 127.85v64h64v-64h-64zM319.88 255.8v64h64v-64h-64zM319.88 63.8701h64v-64h-64v64zM64 63.9502h64v-64h-64v64zM192 319.85h-64v64h64v-64zM383.92 63.9502v64h64v-64h-64zM255.92 255.88h-64v64h64v-64zM383.92 383.83h64v-64h-64v64zM255.92 127.93h64v-64h-64
2102
+ v64zM191.92 255.88l0.0800781 -64h-64v64h63.9199zM383.84 191.88v64h64v-64h-64zM128 319.85v-64h-64v64h64zM128 127.93h64v-64h-64v64z" />
2103
  <glyph glyph-name="chess-king" unicode="&#xf43f;" horiz-adv-x="448"
2104
+ d="M400 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352zM416 288c17.6504 -0.0136719 31.9756 -14.3496 31.9756 -32c0 -2.69434 -0.652344 -6.96777 -1.45605 -9.54004
2105
+ l-73.0791 -214.46h-298.881l-73.0791 214.46c-0.803711 2.57227 -1.45605 6.8457 -1.45605 9.54004c0 17.6504 14.3252 31.9863 31.9756 32h160v48h-40c-4.41602 0 -8 3.58398 -8 8v48c0 4.41602 3.58398 8 8 8h40v40c0 4.41602 3.58398 8 8 8h48c4.41602 0 8 -3.58398 8 -8
2106
+ v-40h40c4.41602 0 8 -3.58398 8 -8v-48c0 -4.41602 -3.58398 -8 -8 -8h-40v-48h160z" />
2107
  <glyph glyph-name="chess-knight" unicode="&#xf441;" horiz-adv-x="384"
2108
+ d="M19 175.53c-10.4883 4.66211 -19 17.7627 -19 29.2402v0.0195312v137.21v0.0585938c0 5.47461 3.13574 13.0635 7 16.9414l9 9l-14.21 28.4199c-0.988281 1.97266 -1.79004 5.36328 -1.79004 7.56934v0.0107422c0 6.62402 5.37598 12 12 12h147.94
2109
+ c106 0 191.92 -86 191.92 -192v-192h-319.86v14.5195v0.0224609c0 27.2783 19.7969 59.3271 44.1904 71.5381l57.2197 28.6504c14.6445 7.32324 26.5303 26.5566 26.5303 42.9297v0.00976562v50.3301l-22.1201 -11.0801
2110
+ c-5.45117 -2.72559 -11.0732 -9.7373 -12.5508 -15.6504l-9.21973 -30.6494c-2.4502 -8.15332 -10.8545 -17.3379 -18.7598 -20.5l-12.7803 -5.12012c-3.1582 -1.2627 -8.48145 -2.28809 -11.8828 -2.28809c-3.74902 0 -9.57129 1.23535 -12.9971 2.75781zM52 320
2111
+ c-11.04 0 -20 -8.95996 -20 -20s8.95996 -20 20 -20s20 8.95996 20 20s-8.95996 20 -20 20zM368 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352z" />
2112
  <glyph glyph-name="chess-pawn" unicode="&#xf443;" horiz-adv-x="320"
2113
+ d="M105.1 224c-29.3896 18.3799 -49.0996 50.7803 -49.0996 88c0 57.4082 46.5918 104 104 104s104 -46.5918 104 -104c0 -37.2197 -19.71 -69.6201 -49.0996 -88h25.0996c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-16v-5.49023
2114
+ c0 -44 4.11035 -86.5996 24 -122.51h-176c19.8604 35.9102 24 78.5098 24 122.51v5.49023h-16c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h25.0996zM304 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288
2115
+ c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z" />
2116
  <glyph glyph-name="chess-queen" unicode="&#xf445;"
2117
+ d="M256 336c-30.9121 0 -56 25.0879 -56 56s25.0879 56 56 56s56 -25.0879 56 -56s-25.0879 -56 -56 -56zM432 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352zM504.87 263.84
2118
+ c3.93457 -2.62109 7.12891 -8.58691 7.12891 -13.3154c0 -2.08496 -0.756836 -5.29004 -1.68945 -7.1543l-102.55 -211.37h-303.52l-102.55 211.33c-0.932617 1.86426 -1.68945 5.06934 -1.68945 7.1543c0 4.72852 3.19434 10.6943 7.12891 13.3154l28.5703 16
2119
+ c7.35938 4.91016 16.8096 2.5498 22.0898 -4.54004c7.86035 -10.6357 24.9736 -19.2676 38.1992 -19.2676c0.922852 0 2.41992 0.0527344 3.34082 0.118164c25.6699 1.73926 44.6699 24.7998 44.6699 50.4893c0 7.39746 6.00293 13.4004 13.4004 13.4004v0h38.7695
2120
+ c6.04004 0 11.6104 -3.99023 12.8604 -9.91016c4.42969 -21.0361 25.4717 -38.1094 46.9697 -38.1094s42.54 17.0732 46.9697 38.1094c1.25 5.91016 6.86035 9.91016 12.8604 9.91016h38.7695c7.39746 0 13.4004 -6.00293 13.4004 -13.4004
2121
+ c0 -23.5293 15.7002 -45.46 38.8398 -49.75c2.48926 -0.484375 6.56738 -0.878906 9.10352 -0.878906c13.166 0 30.2471 8.56152 38.127 19.1094c5.37988 7.13965 14.8496 9.67969 22.29 4.67969z" />
2122
  <glyph glyph-name="chess-rook" unicode="&#xf447;" horiz-adv-x="384"
2123
+ d="M368 416c8.83203 0 16 -7.16797 16 -16v-176l-64 -32c0 -47.7197 1.54004 -95 13.21 -160h-282.42c11.6699 65 13.21 111.67 13.21 160l-64 32v176c0 8.83203 7.16797 16 16 16h56.0996c8.83203 0 16 -7.16797 16 -16v-48h47.9004v48c0 8.83203 7.16797 16 16 16h80
2124
+ c8.83203 0 16 -7.16797 16 -16v-48h48v48c0 8.83203 7.16797 16 16 16h56zM224 128v64c0 17.6641 -14.3359 32 -32 32s-32 -14.3359 -32 -32v-64h64zM368 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32
2125
+ c0 8.83203 7.16797 16 16 16h352z" />
2126
  <glyph glyph-name="dumbbell" unicode="&#xf44b;" horiz-adv-x="640"
2127
  d="M104 352c13.2998 0 24 -10.7002 24 -24v-272c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v104h-24c-4.40039 0 -8 3.59961 -8 8v48c0 4.40039 3.59961 8 8 8h24v104c0 13.2998 10.7002 24 24 24h48zM632 224c4.40039 0 8 -3.59961 8 -8v-48
2128
  c0 -4.40039 -3.59961 -8 -8 -8h-24v-104c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v272c0 13.2998 10.7002 24 24 24h48c13.2998 0 24 -10.7002 24 -24v-104h24zM456 416c13.2998 0 24 -10.7002 24 -24v-400c0 -13.2998 -10.7002 -24 -24 -24h-48
2469
  l-66 15.9004v-52.6006c7 -4.2002 12 -11.5 12 -20.2998c0 -8.40039 -4.59961 -15.4004 -11.0996 -19.7002l15.5996 -62.2998c1.7002 -6.90039 -2.09961 -14 -7.59961 -14h-41.8008c-5.5 0 -9.2998 7.09961 -7.59961 14l15.5996 62.2998
2470
  c-6.5 4.2998 -11.0996 11.2998 -11.0996 19.7002c0 8.7998 5 16.0996 12 20.2998v58.4004z" />
2471
  <glyph glyph-name="user-lock" unicode="&#xf502;" horiz-adv-x="640"
2472
+ d="M224 192c-70.6562 0 -128 57.3438 -128 128s57.3438 128 128 128s128 -57.3438 128 -128s-57.3438 -128 -128 -128zM320 128v-160c0.0644531 -9.49707 4.05176 -23.833 8.90039 -32h-280.9c-26.4961 0 -48 21.5039 -48 48v41.5996
2473
+ c0.0166016 74.1729 60.2275 134.384 134.4 134.4h16.6992c19.1514 -8.83203 51.8105 -16 72.9004 -16s53.749 7.16797 72.9004 16h16.6992c5 0 9.7002 -1 14.5 -1.5c-4.41016 -7.84082 -8.03906 -21.5049 -8.09961 -30.5zM608 160c17.6641 0 32 -14.3359 32 -32v-160
2474
+ c0 -17.6641 -14.3359 -32 -32 -32h-224c-17.6641 0 -32 14.3359 -32 32v160c0 17.6641 14.3359 32 32 32h32v80c0 44.1602 35.8398 80 80 80s80 -35.8398 80 -80v-80h32zM496 16c17.6641 0 32 14.3359 32 32s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32z
2475
+ M528 160v80c0 17.6641 -14.3359 32 -32 32s-32 -14.3359 -32 -32v-80h64z" />
2476
  <glyph glyph-name="user-minus" unicode="&#xf503;" horiz-adv-x="640"
2477
  d="M624 240c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-192c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h192zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128z
2478
  M313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z" />
2508
  c20.9004 -10 43.9004 -16 68.5 -16c3.30078 0 6.5 0.400391 9.80078 0.599609c2.7998 -3.09961 6 -5.89941 9.7998 -8.09961l7.89941 -4.59961c-0.0996094 -2.60059 -0.0996094 -5.2002 0 -7.80078c-0.899414 -0.599609 -36.5 -15.7998 -25.7998 -50.2998
2509
  c7.90039 -25.7002 21.9004 -49.7998 40.2002 -69.5996c7.5 -8 18 -12.6006 28.9004 -12.6006c12.1992 0 19.2998 5 27.5 9.80078c2.19922 -1.30078 4.5 -2.7002 6.7998 -3.90039zM173.1 173.4c-40.2998 -22.1006 -68.8994 -62 -75.1992 -109.4h-65.9004
2510
  c-17.7002 0 -32 14.2998 -32 32v32c0 35.2998 28.7002 64 64 64h64c17.5996 0 33.5 -7.09961 45.0996 -18.5996z" />
2511
+ <glyph glyph-name="balance-scale-left" unicode="&#xf515;" horiz-adv-x="640"
2512
+ d="M528 0c8.83984 0 16 -7.16016 16.0098 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-224c-8.83984 0 -16 7.16016 -16 16v342.75c-4.55957 2 -8.91992 4.34961 -12.9902 7.12012l-142.05 -47.6299c-8.37988 -2.81055 -17.4502 1.7002 -20.2598 10.0801l-10.1699 30.3398
2513
+ c-2.80957 8.37988 1.7002 17.4502 10.0801 20.2598l128.39 43.0498c-0.419922 3.32031 -1.00977 6.60059 -1.00977 10.0303c0 44.1797 35.8203 80 80 80c29.6904 0 55.2998 -16.3604 69.1104 -40.3701l117.92 39.5303c8.37988 2.80957 17.4502 -1.7002 20.2598 -10.0801
2514
+ l10.1699 -30.3398c2.80957 -8.37988 -1.7002 -17.4502 -10.0801 -20.2598l-132 -44.2607c-7.28027 -21.25 -22.96 -38.5293 -43.3799 -47.4697v-294.75h176zM639.98 144c0 -44.1797 -57.29 -80 -127.98 -80s-128 35.8203 -128 80h0.0195312
2515
+ c0 15.6699 -2.0791 7.25 85.04 181.51c17.6807 35.3604 68.2207 35.29 85.8701 0c86.3906 -172.779 85.0508 -165.33 85.0508 -181.51zM440 160h144l-72 144zM170.93 197.51c86.3906 -172.779 85.0508 -165.33 85.0508 -181.51h0.0195312c0 -44.1797 -57.3096 -80 -128 -80
2516
+ s-128 35.8203 -128 80h0.0195312c0 15.6699 -2.0791 7.25 85.04 181.51c17.6807 35.3604 68.2207 35.29 85.8701 0zM56 32h144l-72 144z" />
2517
+ <glyph glyph-name="balance-scale-right" unicode="&#xf516;" horiz-adv-x="640"
2518
+ d="M96 -16c0 8.83984 7.16016 16 16 16h175.99v294.76c-20.4199 8.93066 -36.1006 26.2207 -43.3799 47.4707l-132 44.2598c-8.37012 2.80957 -12.8906 11.8799 -10.0801 20.2598l10.1699 30.3398c2.80957 8.37012 11.8799 12.8906 20.2598 10.0801l117.93 -39.54
2519
+ c13.8105 24.0098 39.4199 40.3701 69.1104 40.3701c44.1797 0 80 -35.8203 80 -80c0 -3.42969 -0.589844 -6.70996 -1.00977 -10.0303l128.399 -43.0498c8.37012 -2.80957 12.8906 -11.8799 10.0801 -20.2598l-10.1699 -30.3398
2520
+ c-2.80957 -8.37012 -11.8799 -12.8906 -20.2598 -10.0801l-142.05 47.6299c-4.07031 -2.77051 -8.43066 -5.12012 -12.9902 -7.12012v-342.75c0 -8.83984 -7.16016 -16 -16 -16h-224c-8.83984 0 -16 7.16016 -16 16v32zM0 144c0 16.1797 -1.32031 8.73047 85.0596 181.51
2521
+ c17.6504 35.29 68.1904 35.3604 85.8701 0c87.1299 -174.26 85.0508 -165.84 85.0508 -181.51h0.0195312c0 -44.1797 -57.3096 -80 -128 -80s-128 35.8203 -128 80zM56 160h144l-72 144zM384.02 16c0 16.1797 -1.33984 8.73047 85.04 181.51
2522
+ c17.6504 35.29 68.1904 35.3604 85.8701 0c87.1299 -174.26 85.0508 -165.84 85.0508 -181.51h0.0195312c0 -44.1797 -57.3096 -80 -128 -80s-128 35.8203 -128 80h0.0195312zM440 32h144l-72 144z" />
2523
  <glyph glyph-name="blender" unicode="&#xf517;"
2524
  d="M416 64c35.3496 0 64 -28.6504 64 -64v-32c0 -17.6699 -14.3301 -32 -32 -32h-320c-17.6699 0 -32 14.3301 -32 32v32c0 35.3496 28.6504 64 64 64h256zM288 -32c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM328 384
2525
  c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h157.82l-17.46 -64h-140.36c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h131.64l-17.46 -64h-114.18c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h105.46l-17.46 -64
2870
  c2.93945 4.58984 8.01953 7.37012 13.4697 7.37012h0.00195312c4.82812 0 10.8574 -3.30176 13.458 -7.37012c2.5498 -3.97949 62.5303 -98.9102 62.5303 -217.7c0 -1.46973 0 -2.93945 -0.00976562 -4.39941c74.0391 60.1699 156.699 78.9102 160.579 79.7598
2871
  c1.15039 0.259766 2.30078 0.379883 3.44043 0.379883c4.2002 0 8.29004 -1.66016 11.3203 -4.7002c3.85938 -3.87012 5.47949 -9.43945 4.2998 -14.7695c-0.879883 -3.96973 -20.6797 -90.5205 -84.9297 -165.641c44.3896 -8.91992 75.2197 -24.9893 76.7793 -25.8096z" />
2872
  <glyph glyph-name="check-double" unicode="&#xf560;"
2873
+ d="M505 273.2c9.2998 -9.2998 9.2998 -24.5 -0.0996094 -34l-296 -296.2c-9.30078 -9.40039 -24.5 -9.40039 -33.9004 0l-168 168.1c-9.40039 9.40039 -9.40039 24.6006 0 34l39.7002 39.7002c9.2998 9.40039 24.5 9.40039 33.8994 0l111.4 -111.5l239.5 239.5
2874
+ c9.2998 9.40039 24.5 9.40039 33.9004 0zM180.7 167.2l-112 112.2c-6.2002 6.19922 -6.2002 16.2998 0 22.5996l45.2998 45.2998c6.2002 6.2998 16.4004 6.2998 22.5996 0l55.4004 -55.5l151.5 151.5c6.2002 6.2998 16.4004 6.2998 22.5996 0l45.2002 -45.2998
2875
+ c6.2002 -6.2002 6.2002 -16.2998 0 -22.5996l-208 -208.2c-6.2002 -6.2998 -16.3994 -6.2998 -22.5996 0z" />
2876
  <glyph glyph-name="cocktail" unicode="&#xf561;" horiz-adv-x="576"
2877
  d="M296 -16c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-240c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h56v125.22l-168.74 168.73c-15.5195 15.5195 -4.5293 42.0498 17.4199 42.0498h366.641c21.9492 0 32.9395 -26.5303 17.4199 -42.0498
2878
  l-168.74 -168.73v-125.22h56zM432 448c79.5303 0 144 -64.4697 144 -144s-64.4697 -144 -144 -144c-27.4102 0 -52.7695 8.08008 -74.5801 21.3799l35.2598 35.2598c12.0303 -5.43945 25.2803 -8.63965 39.3203 -8.63965c52.9297 0 96 43.0596 96 96s-43.0703 96 -96 96
3426
  c16.25 0.919922 29.7998 -11.46 29.8096 -27.0898v-222.82c0 -14.3301 -11.5898 -26.2803 -26.4902 -27.0596c-43.6494 -2.29004 -131.93 -10.6807 -192.97 -41.4004c-9.39941 -4.73047 -20.54 1.70996 -20.54 11.9004v245.789c0 4.6709 2.31055 9.12012 6.41016 11.6309
3427
  c59.3203 36.3193 155.43 46.3096 203.78 49.0498z" />
3428
  <glyph glyph-name="brain" unicode="&#xf5dc;" horiz-adv-x="576"
3429
+ d="M208 448c35.2998 0 64 -28.7002 64 -64v-376c0 -39.7998 -32.2002 -72 -72 -72c-31.7998 0 -58.4004 20.7002 -68 49.2002c-3.90039 -0.700195 -7.90039 -1.2002 -12 -1.2002c-39.7998 0 -72 32.2002 -72 72c0 4.7998 0.5 9.5 1.40039 14.0996
3430
+ c-29 12 -49.4004 40.6006 -49.4004 73.9004c0 29.7002 16.2998 55.2998 40.2998 69.0996c-5.09961 10.6006 -8.2998 22.3008 -8.2998 34.9004c0 33.4004 20.5 62 49.7002 74c-1.10059 4.5 -1.7002 9.2002 -1.7002 14c0 35.2998 28.7002 64 64 64
3431
+ c0.799805 0 1.40039 -0.200195 2.2002 -0.200195c7.09961 27.7002 31.8994 48.2002 61.7998 48.2002zM576 144c0 -33.2998 -20.4004 -61.9004 -49.4004 -73.9004c0.900391 -4.59961 1.40039 -9.2998 1.40039 -14.0996c0 -39.7998 -32.2002 -72 -72 -72
3432
+ c-4.09961 0 -8.09961 0.5 -12 1.2002c-9.59961 -28.5 -36.2002 -49.2002 -68 -49.2002c-39.7998 0 -72 32.2002 -72 72v376c0 35.4004 28.7002 64 64 64c29.9004 0 54.7002 -20.5 61.7998 -48.2002c0.700195 0 1.40039 0.200195 2.2002 0.200195
3433
+ c35.2998 0 64 -28.7002 64 -64c0 -4.7998 -0.700195 -9.5 -1.7002 -14c29.2002 -12 49.7002 -40.5996 49.7002 -74c0 -12.5996 -3.09961 -24.2998 -8.2998 -34.9004c24 -13.7998 40.2998 -39.3994 40.2998 -69.0996z" />
 
 
3434
  <glyph glyph-name="car-alt" unicode="&#xf5de;" horiz-adv-x="480"
3435
  d="M438.66 235.67c24.1201 -9.16992 41.3398 -32.3301 41.3398 -59.6699v-48c0 -16.1299 -6.16016 -30.6797 -16 -41.9297v-54.0703c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-256v-32c0 -17.6699 -14.3301 -32 -32 -32h-32
3436
  c-17.6699 0 -32 14.3301 -32 32v54.0703c-9.83984 11.2598 -16 25.8096 -16 41.9297v48c0 27.3398 17.2197 50.5 41.3398 59.6699l11.2402 28.0996l19.9297 49.8301c17.1104 42.7705 57.9307 70.4004 103.99 70.4004h127c46.0703 0 86.8799 -27.6299 103.99 -70.4004
3817
  l-25.1201 -40h-38.9395c-3.70996 0 -5.98047 -4.08984 -4 -7.24023l19.1992 -30.5596l-19.1992 -30.5605c-1.98047 -3.14941 0.279297 -7.23926 4 -7.23926h38.9395l25.1201 -39.9805c1.84961 -2.9502 6.15039 -2.9502 8 0l25.1201 39.9902h38.9395
3818
  c3.70996 0 5.98047 4.08984 4 7.24023z" />
3819
  <glyph glyph-name="torah" unicode="&#xf6a0;" horiz-adv-x="640"
3820
+ d="M320.05 81.5195l-17.7402 29.6406h35.46zM419.26 247.52l-18.3994 -30.8193l-18.46 30.8193h36.8594zM48 448c26.5098 0 48 -14.3301 48 -32v-448c0 -17.6699 -21.4902 -32 -48 -32s-48 14.3301 -48 32v448c0 17.6699 21.4902 32 48 32zM220.74 136.5l18.3896 30.8203
3821
+ l18.46 -30.8203h-36.8496zM382.45 136.5l18.4102 30.7998l18.4492 -30.7998h-36.8594zM128 -16v416h384v-416h-384zM194.77 262.13c-1.53711 -2.65625 -2.78516 -7.30176 -2.78516 -10.3711c0 -3.20312 1.35059 -8.02246 3.01562 -10.7588l29.3604 -49l-29.21 -48.8398
3822
+ c-1.6709 -2.77344 -3.02637 -7.65234 -3.02637 -10.8906c0 -11.6523 9.45703 -21.1094 21.1104 -21.1094h0.015625h59.5l29.25 -48.8799c3.33105 -5.6416 11.3516 -10.2207 17.9023 -10.2207h0.0976562c6.64844 0.0136719 14.7842 4.67285 18.1602 10.4004l29.1299 48.7002
3823
+ h59.4697h0.0224609c6.8125 0 15.082 4.80273 18.458 10.7197c1.53418 2.65332 2.7793 7.29297 2.7793 10.3584c0 3.2041 -1.35254 8.02539 -3.01953 10.7617l-29.3701 49l29.2402 48.8496c1.66602 2.77246 3.01758 7.64648 3.01758 10.8809
3824
+ c0 11.6562 -9.46094 21.1182 -21.1182 21.1191h-59.5195l-29.25 48.8604c-3.3252 5.63574 -11.3359 10.21 -17.8799 10.21h-0.0703125h-0.0341797c-6.65137 0 -14.7988 -4.64551 -18.1855 -10.3701l-29.1299 -48.71h-59.4502h-0.0458984
3825
+ c-6.80469 0 -15.0635 -4.79785 -18.4346 -10.71zM592 448c26.5098 0 48 -14.3301 48 -32v-448c0 -17.6699 -21.4902 -32 -48 -32s-48 14.3301 -48 32v448c0 17.6699 21.4902 32 48 32zM320 302.47l17.6797 -29.6201h-35.46zM257.55 247.47l-18.3701 -30.7998
3826
+ l-18.4395 30.7998h36.8096zM287.13 136.47l-33.2295 55.5303l33.1699 55.5195h65.79l33.2295 -55.5195l-33.1699 -55.5303h-65.79z" />
 
 
3827
  <glyph glyph-name="torii-gate" unicode="&#xf6a1;"
3828
  d="M376.45 416c39.4961 0.00195312 100.223 14.3389 135.55 32v-96c0 -17.6699 -14.3301 -32 -32 -32h-32v-64h48c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-48v-240c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v240
3829
  h-256v-240c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v240h-48c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h48v64h-32c-17.6699 0 -32 14.3301 -32 32v96c35.3271 -17.6611 96.0537 -31.998 135.55 -32h240.9zM128 320v-64h96
4335
  c-1.19922 9.5 6.5 18 16.3008 18h16.3994c8.2002 0 15 -5.90039 16.1006 -13.7998c2.7998 -20.2002 12 -38.7998 26.3994 -53.5c20.2002 -20.5 32.7998 -46.5 36.6006 -74.7002c1.2998 -9.5 -6.5 -18 -16.3008 -18h-16.5c-8 0 -14.6992 5.7998 -16 13.5zM400 256
4336
  c61.7998 0 112 -50.2002 112 -112s-50.2002 -112 -112 -112h-16c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 17.7002 14.2998 32 32 32h368zM400 96c26.5 0 48 21.5 48 48s-21.5 48 -48 48h-16v-96h16z" />
4337
  <glyph glyph-name="radiation" unicode="&#xf7b9;" horiz-adv-x="496"
4338
+ d="M328.2 192.2c0 28.5996 -15.2002 53.5 -37.7998 67.7998l80.3994 128.4c4.7998 7.69922 15.2998 10.0996 22.7002 4.7998c58.0996 -42 97.4004 -108.4 102.5 -184.2c0.599609 -9.09961 -7.09961 -16.7998 -16.2002 -16.7998h-151.6zM290.4 124.5l80.3994 -128.5
4339
+ c4.7998 -7.59961 2.40039 -18.0996 -5.59961 -22.4004c-34.9004 -18.7998 -74.7998 -29.5996 -117.2 -29.5996s-82.2998 10.7998 -117.2 29.5996c-8 4.30078 -10.3994 14.7002 -5.59961 22.4004l80.3994 128.5c12.4004 -7.7002 26.8008 -12.4004 42.4004 -12.4004
4340
+ s30.0996 4.7002 42.4004 12.4004zM248 144.2c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM16.2002 192.2c-9.10059 0 -16.7998 7.7002 -16.2002 16.7002c5.09961 75.7998 44.4004 142.199 102.5 184.199
4341
+ c7.40039 5.40039 17.9004 2.90039 22.7002 -4.7998l80.3994 -128.399c-22.5996 -14.2002 -37.7998 -39.1006 -37.7998 -67.7002h-151.6z" />
4342
  <glyph glyph-name="radiation-alt" unicode="&#xf7ba;" horiz-adv-x="496"
4343
+ d="M312 192c0 22.7998 -12.0996 42.7998 -30.0996 54l41.6992 66.7998c5.2002 8.2998 16.4004 9.90039 24 3.7998c32.5 -26 54.9004 -64.1992 59.5 -107.8c0.900391 -9.09961 -6.7998 -16.7998 -16 -16.7998h-79.0996zM214.2 137.9
4344
+ c9.7998 -6.2002 21.5 -9.90039 33.8994 -9.90039c12.4004 0 24 3.7002 33.8008 9.90039l41.7998 -66.9004c4.7998 -7.7998 2.39941 -18.4004 -5.7998 -22.5c-21.2002 -10.4004 -44.8008 -16.5 -69.9004 -16.5s-48.7002 6.09961 -69.7998 16.5
4345
+ c-8.2002 4.09961 -10.7002 14.7002 -5.7998 22.5zM104.9 192c-9.2002 0 -17 7.7002 -15.9004 16.9004c4.59961 43.5996 26.9004 81.7998 59.5 107.8c7.59961 6.09961 18.7998 4.5 24 -3.7998l41.7002 -66.8008c-18.1006 -11.2998 -30.2002 -31.2998 -30.2002 -54.0996
4346
+ h-79.0996zM248 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM248 376c-101.5 0 -184 -82.5 -184 -184s82.5 -184 184 -184s184 82.5 184 184s-82.5 184 -184 184zM248 160c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32
4347
+ s32 -14.2998 32 -32s-14.2998 -32 -32 -32z" />
4348
  <glyph glyph-name="restroom" unicode="&#xf7bd;" horiz-adv-x="640"
4349
  d="M128 320c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM512 320c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM639.3 93.5c3.7002 -15.0996 -8.2998 -29.5 -24.5 -29.5
4350
  h-54.7998v-104c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v104h-54.7998c-16.2002 0 -28.2002 14.4004 -24.7002 29.5l45.5996 185.8c3.30078 13.5 15.5 23 29.8008 24.2002c15 -9.7002 32.7998 -15.5 52 -15.5c19.1992 0 37 5.7998 52 15.5
4365
  <glyph glyph-name="sd-card" unicode="&#xf7c2;" horiz-adv-x="384"
4366
  d="M320 448c35.2998 0 64 -28.7002 64 -64v-384c0 -35.2998 -28.7002 -64 -64 -64h-256c-35.2998 0 -64 28.7002 -64 64v320l128 128h192zM160 288v96h-48v-96h48zM240 288v96h-48v-96h48zM320 288v96h-48v-96h48z" />
4367
  <glyph glyph-name="sim-card" unicode="&#xf7c4;" horiz-adv-x="384"
4368
+ d="M0 384c0 35.2998 28.7002 64 64 64h192l128 -128v-320c0 -35.2998 -28.7002 -64 -64 -64h-256c-35.2998 0 -64 28.7002 -64 64v384zM224 192v64h-64v-64h64zM320 192v32c0 17.7002 -14.2998 32 -32 32h-32v-64h64zM256 64v-64h32c17.7002 0 32 14.2998 32 32v32h-64z
4369
+ M160 64v-64h64v64h-64zM64 64v-32c0 -17.7002 14.2998 -32 32 -32h32v64h-64zM64 160v-64h256v64h-256zM64 224v-32h64v64h-32c-17.7002 0 -32 -14.2998 -32 -32z" />
4370
  <glyph glyph-name="skating" unicode="&#xf7c5;" horiz-adv-x="448"
4371
  d="M400 448c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48s21.5 48 48 48zM400 0c8.7998 0 16 -7.2002 16 -16c0 -26.5 -21.5 -48 -48 -48h-96c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16h96c8.7998 0 16 7.2002 16 16s7.2002 16 16 16zM117.8 -8.59961
4372
  c6.2998 6.2998 16.5 6.19922 22.7002 0c6.2002 -6.2002 6.2002 -16.4004 0 -22.6006c-9.2998 -9.2998 -21.5996 -14 -33.9004 -14c-12.2998 0 -24.5996 4.60059 -34 14l-67.8994 67.9004c-6.2002 6.2002 -6.2002 16.3994 0 22.5996s16.3994 6.2002 22.5996 0
4536
  <glyph glyph-name="wave-square" unicode="&#xf83e;" horiz-adv-x="640"
4537
  d="M476 -32h-152c-19.8721 0 -36 16.1279 -36 36v348h-96v-156c0 -19.8721 -16.1279 -36 -36 -36h-140c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h112v156c0 19.8721 16.1279 36 36 36h152c19.8721 0 36 -16.1279 36 -36v-348h96v156
4538
  c0 19.8721 16.1279 36 36 36h140c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-112v-156c0 -19.8721 -16.1279 -36 -36 -36z" />
4539
+ <glyph glyph-name="biking" unicode="&#xf84a;" horiz-adv-x="640"
4540
+ d="M400 352c-26.4961 0 -48 21.5039 -48 48s21.5039 48 48 48s48 -21.5039 48 -48s-21.5039 -48 -48 -48zM396 231l-41.3604 33.1104l-58.25 -49.9199l41.3604 -27.5703c7.86426 -5.24316 14.248 -17.1689 14.25 -26.6201v-128c0 -17.6641 -14.3359 -32 -32 -32
4541
+ s-32 14.3359 -32 32v110.88l-81.7305 54.5205c-7.86621 5.24316 -14.251 17.1719 -14.251 26.626c0 8.12305 5.00488 19.0068 11.1719 24.2939l112 96c4.95508 4.25781 14.2803 7.71289 20.8135 7.71289c6.20215 0 15.1602 -3.15039 19.9961 -7.0332l71.2197 -57h52.7803
4542
+ c17.6641 0 32 -14.3359 32 -32s-14.3359 -32 -32 -32h-64h-0.0595703c-6.18262 0 -15.1152 3.13574 -19.9404 7zM512 192c70.6562 0 128 -57.3438 128 -128s-57.3438 -128 -128 -128s-128 57.3438 -128 128s57.3438 128 128 128zM512 0c35.3281 0 64 28.6719 64 64
4543
+ s-28.6719 64 -64 64s-64 -28.6719 -64 -64s28.6719 -64 64 -64zM128 192c70.6562 0 128 -57.3438 128 -128s-57.3438 -128 -128 -128s-128 57.3438 -128 128s57.3438 128 128 128zM128 0c35.3281 0 64 28.6719 64 64s-28.6719 64 -64 64s-64 -28.6719 -64 -64
4544
+ s28.6719 -64 64 -64z" />
4545
+ <glyph glyph-name="border-all" unicode="&#xf84c;" horiz-adv-x="448"
4546
+ d="M416 416c17.6641 0 32 -14.3359 32 -32v-384c0 -17.6641 -14.3359 -32 -32 -32h-384c-17.6641 0 -32 14.3359 -32 32v384c0 17.6641 14.3359 32 32 32h384zM384 352h-128v-128h128v128zM192 352h-128v-128h128v128zM64 32h128v128h-128v-128zM256 32h128v128h-128v-128z
4547
+ " />
4548
+ <glyph glyph-name="border-none" unicode="&#xf850;" horiz-adv-x="448"
4549
+ d="M240 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM336 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32
4550
+ c0 8.83203 7.16797 16 16 16h32zM432 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32
4551
+ c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM240 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM336 32c8.83203 0 16 -7.16797 16 -16v-32
4552
+ c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 128
4553
+ c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32
4554
+ c0 8.83203 7.16797 16 16 16h32zM240 128c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM240 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32
4555
+ c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM240 416c8.83203 0 16 -7.16797 16 -16v-32
4556
+ c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM336 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 416
4557
+ c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32
4558
+ c0 8.83203 7.16797 16 16 16h32zM48 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 128c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32
4559
+ c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 416c8.83203 0 16 -7.16797 16 -16v-32
4560
+ c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32z" />
4561
+ <glyph glyph-name="border-style" unicode="&#xf853;" horiz-adv-x="448"
4562
+ d="M240 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32
4563
+ c0 8.83203 7.16797 16 16 16h32zM336 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32
4564
+ c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 128c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 32c8.83203 0 16 -7.16797 16 -16v-32
4565
+ c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 416
4566
+ c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-368v-368c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v400c0 17.6641 14.3359 32 32 32h400z" />
4567
+ <glyph glyph-name="fan" unicode="&#xf863;"
4568
+ d="M352.57 320c81.79 0 149.3 -61.6299 159.3 -141.33c1.30957 -10.4795 -7.17969 -19.6396 -17.6201 -18.5898l-123.11 12.4102c8.34082 -22.9707 12.8604 -48.9707 12.8604 -77.0605c0 -81.79 -61.6299 -149.3 -141.33 -159.3
4569
+ c-10.4795 -1.30957 -19.6396 7.19043 -18.5898 17.6201l12.4102 123.11c-22.9707 -8.34082 -48.9707 -12.8604 -77.0605 -12.8604c-81.79 0 -149.3 61.6299 -159.3 141.33c-1.30957 10.4795 7.17969 19.6699 17.6201 18.5898l123.11 -12.4102
4570
+ c-8.34082 22.9707 -12.8604 48.9707 -12.8604 77.0605c0 81.79 61.6299 149.3 141.33 159.3c10.4795 1.30957 19.6699 -7.17969 18.5898 -17.6201l-12.4102 -123.11c22.9707 8.34082 48.9707 12.8604 77.0605 12.8604zM256 160c17.6641 0 32 14.3359 32 32
4571
+ s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32z" />
4572
+ <glyph glyph-name="icons" unicode="&#xf86d;"
4573
+ d="M116.65 228.65l-96.79 99.8301c-28 29.0293 -26.4102 77.0996 5 103.88c27.3896 23.3398 68.1895 19.1396 93.29 -6.80078l9.84961 -10.1396l9.86035 10.1396c25.1396 25.9404 65.8896 30.1406 93.2793 6.80078c31.4102 -26.7803 33.0605 -74.8799 4.91016 -103.88
4574
+ l-96.75 -99.8301c-2.55566 -2.66992 -7.62891 -4.83594 -11.3252 -4.83594c-3.69531 0 -8.76855 2.16602 -11.3242 4.83594zM260.57 128.16c15.1406 -0.0107422 27.4297 -12.3086 27.4297 -27.4502v-0.00976562v-137.25v0c0 -15.1416 -12.2891 -27.4395 -27.4297 -27.4502
4575
+ h-233.141c-15.1406 0.00585938 -27.4297 12.2988 -27.4297 27.4404v0.00976562v137.25v0.00976562c0 15.1523 12.2979 27.4502 27.4502 27.4502h0.00976562h48l7 14.2402c3.67773 9.81445 15.168 17.7793 25.6484 17.7793h0.0117188h71.71h0.0107422
4576
+ c10.4814 0 21.9717 -7.96484 25.6494 -17.7793l7.08008 -14.2402h48zM144 -20c28.7041 0 52 23.2959 52 52s-23.2959 52 -52 52s-52 -23.2959 -52 -52s23.2959 -52 52 -52zM499.4 95.9004c9.70996 0 15.75 -8.79004 10.8691 -15.7002l-92.3994 -138.91
4577
+ c-2.19629 -2.90039 -6.93262 -5.25488 -10.5713 -5.25488c-0.0957031 0 -0.25293 0.00195312 -0.348633 0.00488281c-8.03027 0 -14.1201 6.25 -12.2305 12.9004l24.2002 83h-62.3096c-7.62012 0 -13.5 5.58984 -12.5 11.8896l16.7998 106.93
4578
+ c0.839844 5.2002 6.2002 9.10059 12.5 9.10059h75.5898c8.25 0 14.2803 -6.56055 12.1797 -13.21l-22.3594 -50.75h60.5801zM478.08 447.67c17.9199 2.75 33.9199 -12.1895 33.9199 -31.6699v-144.26c-0.269531 -26.3398 -28.7998 -47.6602 -64 -47.6602
4579
+ c-35.3496 0 -64 21.4795 -64 48c0 26.5195 28.6504 48 64 48c4.46191 -0.0400391 11.6299 -0.801758 16 -1.7002v47.1797l-112 -17.2197v-108.58c-0.269531 -26.3398 -28.7998 -47.6602 -64 -47.6602c-35.3496 0 -64 21.4805 -64 48c0 26.5205 28.6504 48 64 48
4580
+ c4.46191 -0.0400391 11.6299 -0.801758 16 -1.69922v106.77c0 15.9102 10.8701 29.4102 25.5098 31.6602z" />
4581
+ <glyph glyph-name="phone-alt" unicode="&#xf879;"
4582
+ d="M497.39 86.2002c8.06055 -3.50586 14.6016 -13.4844 14.6016 -22.2744c0 -1.48828 -0.264648 -3.87402 -0.59082 -5.32617l-24 -104c-2.37109 -10.2666 -12.8477 -18.5996 -23.3848 -18.5996h-0.015625c-256.1 0 -464 207.5 -464 464v0.00585938
4583
+ c0 10.5371 8.33301 21.0137 18.5996 23.3838l104 24c1.45996 0.332031 3.8584 0.601562 5.35547 0.601562c8.73242 0 18.6533 -6.49707 22.1445 -14.501l48 -112c1.06836 -2.49219 1.93457 -6.71582 1.93457 -9.42773c0 -6.28613 -3.95801 -14.6064 -8.83398 -18.5723
4584
+ l-60.6006 -49.6006c31.3398 -66.4688 110.721 -145.85 177.19 -177.189l49.5996 60.5996c3.97559 4.86914 12.3047 8.82129 18.5908 8.82129c2.70508 0 6.9209 -0.860352 9.40918 -1.9209z" />
4585
+ <glyph glyph-name="phone-square-alt" unicode="&#xf87b;" horiz-adv-x="448"
4586
+ d="M400 416c26.4961 0 48 -21.5039 48 -48v-352c0 -26.4961 -21.5039 -48 -48 -48h-352c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352zM383.61 108.63c0.198242 0.919922 0.373047 2.42969 0.389648 3.37012
4587
+ c-0.262695 5.28613 -4.33496 11.4648 -9.08984 13.79l-70 30c-1.57422 0.613281 -4.22168 1.15527 -5.91016 1.20996c-3.82422 -0.209961 -9.02539 -2.67383 -11.6104 -5.5l-31 -37.8896c-41.5469 19.6025 -91.1768 69.2324 -110.779 110.779l37.8896 31
4588
+ c2.82617 2.58496 5.29004 7.78613 5.5 11.6104c-0.0546875 1.68848 -0.597656 4.33594 -1.20996 5.91016l-30 70c-2.32812 4.75098 -8.50586 8.82324 -13.79 9.08984c-0.94043 -0.0205078 -2.4502 -0.195312 -3.37012 -0.389648l-65 -15
4589
+ c-6.19238 -1.6582 -11.4033 -8.20312 -11.6299 -14.6104c0 -160.29 130 -290 290 -290c6.58496 0.00292969 13.1309 5.21289 14.6104 11.6299z" />
4590
+ <glyph glyph-name="photo-video" unicode="&#xf87c;" horiz-adv-x="640"
4591
+ d="M608 448c17.6641 0 32 -14.3359 32 -32v-320c0 -17.6641 -14.3359 -32 -32 -32h-128v320h-192v-64h-160v96c0 17.6641 14.3359 32 32 32h448zM232 345v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30c0 -4.96777 4.03223 -9 9 -9h30
4592
+ c4.96777 0 9 4.03223 9 9zM584 137v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30c0 -4.96777 4.03223 -9 9 -9h30c4.96777 0 9 4.03223 9 9zM584 241v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30
4593
+ c0 -4.96777 4.03223 -9 9 -9h30c4.96777 0 9 4.03223 9 9zM584 345v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30c0 -4.96777 4.03223 -9 9 -9h30c4.96777 0 9 4.03223 9 9zM416 288c17.6641 0 32 -14.3359 32 -32v-288
4594
+ c0 -17.6641 -14.3359 -32 -32 -32h-384c-17.6641 0 -32 14.3359 -32 32v288c0 17.6641 14.3359 32 32 32h384zM96 224c-17.6641 0 -32 -14.3359 -32 -32s14.3359 -32 32 -32s32 14.3359 32 32s-14.3359 32 -32 32zM384 0v96l-96 96l-128 -128l-32 32l-64 -64v-32h320z" />
4595
+ <glyph glyph-name="remove-format" unicode="&#xf87d;" horiz-adv-x="640"
4596
+ d="M336 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32.4902l26.5098 79.5996l67.0898 -51.8301l-9.25977 -27.7695h11.1699zM633.82 -10.0996
4597
+ c3.41309 -2.65234 6.18359 -8.3125 6.18359 -12.6357c0 -3.02734 -1.50684 -7.42383 -3.36426 -9.81445l-19.6396 -25.2705c-2.65234 -3.41211 -8.31152 -6.18262 -12.6338 -6.18262c-3.03125 0 -7.43359 1.51172 -9.82617 3.37305l-588.36 454.72
4598
+ c-3.41016 2.65234 -6.17773 8.31055 -6.17773 12.6309c0 3.02832 1.50879 7.42773 3.36816 9.81934l19.6299 25.2695c2.65234 3.41309 8.31152 6.18262 12.6338 6.18262c3.03125 0 7.43359 -1.51074 9.82617 -3.37207l114.54 -88.5205v43.9004c0 8.83203 7.16797 16 16 16
4599
+ h416c8.83203 0 16 -7.16797 16 -16v-96c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32h-117.83l-49.1699 -147.59zM309.91 240.24l31.9199 95.7598h-117.83v-29.3604z" />
4600
+ <glyph glyph-name="sort-alpha-down-alt" unicode="&#xf881;" horiz-adv-x="448"
4601
+ d="M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32
4602
+ c8.83203 0 16 -7.16797 16 -16v-304h48zM288 224c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16
4603
+ v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128zM447.06 -10.6201c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988
4604
+ c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301
4605
+ c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 48h32.7793
4606
+ l-16.3896 48z" />
4607
+ <glyph glyph-name="sort-alpha-up-alt" unicode="&#xf882;" horiz-adv-x="448"
4608
+ d="M16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32
4609
+ c-8.83203 0 -16 7.16797 -16 16v304h-48zM288 224c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16
4610
+ v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128zM447.06 -10.6201c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988
4611
+ c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301
4612
+ c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 48h32.7793
4613
+ l-16.3896 48z" />
4614
+ <glyph glyph-name="sort-amount-down-alt" unicode="&#xf884;"
4615
+ d="M240 352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64zM240 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16v-32
4616
+ c0 -8.83203 -7.16797 -16 -16 -16h-128zM496 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256zM240 96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192
4617
+ c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96
4618
+ c-10.0801 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48z" />
4619
+ <glyph glyph-name="sort-amount-up-alt" unicode="&#xf885;"
4620
+ d="M240 352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64zM240 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16v-32
4621
+ c0 -8.83203 -7.16797 -16 -16 -16h-128zM496 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256zM240 96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192
4622
+ c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192zM16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -96
4623
+ c10.0801 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48z" />
4624
+ <glyph glyph-name="sort-numeric-down-alt" unicode="&#xf886;" horiz-adv-x="448"
4625
+ d="M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32
4626
+ c8.83203 0 16 -7.16797 16 -16v-304h48zM400 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16
4627
+ c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16zM330.17 413.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695c0 -70.3906 -28.25 -107.23 -86.25 -132
4628
+ c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53c6.80762 23.4512 31.4482 47.7197 55 54.1699z
4629
+ M352 316c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20z" />
4630
+ <glyph glyph-name="sort-numeric-up-alt" unicode="&#xf887;" horiz-adv-x="448"
4631
+ d="M107.31 411.31l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96
4632
+ c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262zM400 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16
4633
+ c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16zM330.17 413.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695
4634
+ c0 -70.3906 -28.25 -107.23 -86.25 -132c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53
4635
+ c6.80762 23.4512 31.4482 47.7197 55 54.1699zM352 316c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20z" />
4636
+ <glyph glyph-name="spell-check" unicode="&#xf891;" horiz-adv-x="576"
4637
+ d="M272 192c-8.83203 0 -16 7.16797 -16 16v224c0 8.83203 7.16797 16 16 16h75c42.2998 0 80.9004 -30.5703 84.6699 -72.6797c0.186523 -2.02051 0.337891 -5.30762 0.337891 -7.33691c0 -11.0186 -4.20996 -27.8516 -9.39746 -37.5732
4638
+ c14.0186 -13.0674 25.3965 -39.2256 25.3965 -58.3906c0 -1.29199 -0.0615234 -3.38867 -0.136719 -4.67969c-2.50977 -43.1396 -41.3105 -75.3398 -84.5098 -75.3398h-91.3604zM312 392v-48h40c13.248 0 24 10.752 24 24s-10.752 24 -24 24h-40zM312 296v-48h56
4639
+ c13.248 0 24 10.752 24 24s-10.752 24 -24 24h-56zM155.12 425.75l68.2998 -213.48c0.320312 -1.15625 0.580078 -3.06934 0.580078 -4.26953c0 -8.83203 -7.16797 -16 -16 -16v0h-24.9297h-0.000976562c-6.71875 0 -13.626 5.25488 -15.4189 11.7305l-11.9404 36.2695
4640
+ h-87.4199l-11.9404 -36.2695c-1.79297 -6.47559 -8.7002 -11.7305 -15.4189 -11.7305h-0.000976562h-24.9297c-8.82617 0.00488281 -15.9902 7.17383 -15.9902 16c0 1.2002 0.259766 3.11328 0.580078 4.26953l68.29 213.48c3.92871 12.2822 17.583 22.25 30.4785 22.25
4641
+ h0.00195312h25.2793h0.00195312c12.8955 0 26.5498 -9.96777 30.4785 -22.25zM89.3701 304h45.2598l-22.6299 68.7002zM571.37 171.52c2.58203 -2.58594 4.65723 -7.65039 4.65723 -11.3047c0 -3.64551 -2.08594 -8.70117 -4.65723 -11.2852l-208 -208.21
4642
+ c-2.5752 -2.60449 -7.6377 -4.71777 -11.2998 -4.71777c-3.66309 0 -8.72559 2.11328 -11.3008 4.71777l-112 112.21c-2.57617 2.58496 -4.66699 7.64551 -4.66699 11.2949c0 3.65039 2.09082 8.70996 4.66699 11.2949l45.3008 45.3008
4643
+ c2.57324 2.60352 7.63379 4.71777 11.2949 4.71777s8.72168 -2.11426 11.2949 -4.71777l55.4102 -55.5l151.5 151.5c2.57324 2.60352 7.63379 4.71777 11.2949 4.71777s8.72168 -2.11426 11.2949 -4.71777z" />
4644
+ <glyph glyph-name="voicemail" unicode="&#xf897;" horiz-adv-x="640"
4645
+ d="M496 320c79.4883 0 144 -64.5117 144 -144s-64.5117 -144 -144 -144h-352c-79.4844 0.00390625 -143.993 64.5156 -143.993 144c0 79.4883 64.5117 144 144 144s144 -64.5117 144 -144c0 -24.1113 -10.8711 -59.9512 -24.2666 -80h112.52
4646
+ c-13.3955 20.0488 -24.2666 55.8887 -24.2666 80c0 79.4883 64.5117 144 144 144h0.00683594zM64 176c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80s-35.8398 80 -80 80s-80 -35.8398 -80 -80zM496 96c44.1602 0 80 35.8398 80 80s-35.8398 80 -80 80
4647
+ s-80 -35.8398 -80 -80s35.8398 -80 80 -80z" />
4648
  </font>
4649
  </defs></svg>
fonts/fontawesome/webfonts/fa-solid-900.ttf CHANGED
Binary file
fonts/fontawesome/webfonts/fa-solid-900.woff CHANGED
Binary file
fonts/fontawesome/webfonts/fa-solid-900.woff2 CHANGED
Binary file
includes/admin-settings-tools.php CHANGED
@@ -24,7 +24,13 @@
24
  include FL_BUILDER_CACHE_HELPER_DIR . 'includes/admin-settings-cache-plugins.php';
25
  }
26
 
27
- $debug = get_option( 'fl_debug_mode', false );
 
 
 
 
 
 
28
  ?>
29
  <?php $header = ( $debug ) ? __( 'Debug Mode Enabled', 'fl-builder' ) : __( 'Debug Mode Disabled', 'fl-builder' ); ?>
30
  <h3 class="fl-settings-form-header"><?php echo $header; ?></h3>
@@ -43,7 +49,7 @@
43
  ), site_url() );
44
  ?>
45
  <p><?php printf( '<code>%s</code>', $url ); ?></p>
46
-
47
  <?php endif; ?>
48
  </div>
49
  <p class="submit">
24
  include FL_BUILDER_CACHE_HELPER_DIR . 'includes/admin-settings-cache-plugins.php';
25
  }
26
 
27
+ $debug = get_transient( 'fl_debug_mode' );
28
+ if ( $debug ) {
29
+ $expire_opt = get_option( '_transient_timeout_fl_debug_mode' );
30
+ $datetime1 = new DateTime( 'now' );
31
+ $datetime2 = new DateTime( date( 'Y-m-d H:i:s', $expire_opt ) );
32
+ $interval = $datetime1->diff( $datetime2 );
33
+ }
34
  ?>
35
  <?php $header = ( $debug ) ? __( 'Debug Mode Enabled', 'fl-builder' ) : __( 'Debug Mode Disabled', 'fl-builder' ); ?>
36
  <h3 class="fl-settings-form-header"><?php echo $header; ?></h3>
49
  ), site_url() );
50
  ?>
51
  <p><?php printf( '<code>%s</code>', $url ); ?></p>
52
+ <p><?php printf( 'Link will expire in <strong>%s</strong>', $interval->format( '%d days %h hours %i minutes' ) ); ?></p>
53
  <?php endif; ?>
54
  </div>
55
  <p class="submit">
includes/column-settings.php CHANGED
@@ -469,6 +469,10 @@ FLBuilder::register_settings_form('col', array(
469
  'type' => 'select',
470
  'label' => __( 'Container Element', 'fl-builder' ),
471
  'default' => 'div',
 
 
 
 
472
  'options' => apply_filters( 'fl_builder_node_container_element_options', array(
473
  'div' => '&lt;div&gt;',
474
  'section' => '&lt;section&gt;',
469
  'type' => 'select',
470
  'label' => __( 'Container Element', 'fl-builder' ),
471
  'default' => 'div',
472
+ /**
473
+ * Filter to add/remove container types.
474
+ * @see fl_builder_node_container_element_options
475
+ */
476
  'options' => apply_filters( 'fl_builder_node_container_element_options', array(
477
  'div' => '&lt;div&gt;',
478
  'section' => '&lt;section&gt;',
includes/compatibility.php CHANGED
@@ -643,3 +643,204 @@ function fl_fix_sumo( $option ) {
643
  }
644
  return $option;
645
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
643
  }
644
  return $option;
645
  }
646
+
647
+ /**
648
+ * Fix icon issues with Frontend Dashboard version 1.3.4+
649
+ * @since 2.2.3
650
+ */
651
+ add_action( 'template_redirect', 'fix_frontend_dashboard_plugin', 1000 );
652
+ function fix_frontend_dashboard_plugin() {
653
+ if ( FLBuilderModel::is_builder_active() ) {
654
+ remove_action( 'wp_enqueue_scripts', 'fed_script_front_end', 99 );
655
+ }
656
+ }
657
+
658
+ /**
659
+ * Add data-no-lazy to photo modules in themer header area.
660
+ * Fixes wp-rocket lazy load issue with shrink header.
661
+ * @since 2.2.3
662
+ */
663
+ add_action( 'fl_theme_builder_before_render_header', 'fix_lazyload_header_start' );
664
+ function fix_lazyload_header_start() {
665
+ add_filter( 'fl_builder_photo_attributes', 'fix_lazyload_header_attributes' );
666
+ }
667
+ function fix_lazyload_header_attributes( $attrs ) {
668
+ return $attrs . ' data-no-lazy="1"';
669
+ }
670
+ add_action( 'fl_theme_builder_after_render_header', 'fix_lazyload_header_end' );
671
+ function fix_lazyload_header_end() {
672
+ remove_filter( 'fl_builder_photo_attributes', 'fix_lazyload_header_attributes' );
673
+ }
674
+
675
+ /**
676
+ * Fix JS error caused by UM-Switcher plugin
677
+ * @since 2.2.3
678
+ */
679
+ add_action( 'template_redirect', 'fl_fix_um_switcher' );
680
+ function fl_fix_um_switcher() {
681
+ if ( isset( $_GET['fl_builder'] ) ) {
682
+ remove_action( 'wp_footer', 'umswitcher_profile_subscription_expiration_footer' );
683
+ }
684
+ }
685
+
686
+ /**
687
+ * Fix pipedrive chat popup
688
+ * @since 2.2.4
689
+ */
690
+ add_action( 'template_redirect', 'fl_fix_pipedrive' );
691
+ function fl_fix_pipedrive() {
692
+ if ( isset( $_GET['fl_builder'] ) ) {
693
+ remove_action( 'wp_head', 'pipedrive_add_embed_code' );
694
+ }
695
+ }
696
+
697
+ /**
698
+ * Fix post type switcher
699
+ * @since 2.2.4
700
+ */
701
+ add_action( 'admin_init', 'fl_fix_posttypeswitcher' );
702
+ function fl_fix_posttypeswitcher() {
703
+ global $pagenow;
704
+ $disable = false;
705
+ if ( 'edit.php' === $pagenow && isset( $_GET['post_type'] ) && 'fl-theme-layout' === $_GET['post_type'] ) {
706
+ $disable = true;
707
+ }
708
+ if ( 'post.php' === $pagenow && isset( $_GET['post'] ) && ( 'fl-theme-layout' === get_post_type( $_GET['post'] ) || 'fl-builder-template' === get_post_type( $_GET['post'] ) ) ) {
709
+ $disable = true;
710
+ }
711
+ if ( $disable ) {
712
+ add_filter( 'pts_allowed_pages', '__return_empty_array' );
713
+ }
714
+ }
715
+
716
+ /**
717
+ * Fixes for Google Reviews Business Plugin widget
718
+ * @since 2.2.4
719
+ */
720
+ add_action( 'widgets_init', 'fix_google_reviews_business_widget', 11 );
721
+ function fix_google_reviews_business_widget() {
722
+ if ( isset( $_GET['fl_builder'] ) ) {
723
+ unregister_widget( 'Goog_Reviews_Pro' );
724
+ }
725
+ }
726
+ /**
727
+ * Fixes for Google Reviews Business Plugin shortcode
728
+ * @since 2.2.4
729
+ */
730
+ add_action( 'init', 'fix_google_reviews_business_shortcode' );
731
+ function fix_google_reviews_business_shortcode() {
732
+ if ( isset( $_GET['fl_builder'] ) ) {
733
+ remove_shortcode( 'google-reviews-pro' );
734
+ }
735
+ }
736
+
737
+ /**
738
+ * Fix pagination on category archive layout.
739
+ * @since 2.2.4
740
+ */
741
+ function fl_theme_builder_cat_archive_post_grid( $query ) {
742
+ if ( ! $query ) {
743
+ return;
744
+ }
745
+
746
+ if ( ! class_exists( 'FLThemeBuilder' ) ) {
747
+ return;
748
+ }
749
+
750
+ if ( is_admin() || ! $query->is_main_query() ) {
751
+ return;
752
+ }
753
+
754
+ if ( ! $query->is_archive || ! $query->is_category ) {
755
+ return;
756
+ }
757
+
758
+ $args = array(
759
+ 'post_type' => 'fl-theme-layout',
760
+ 'post_status' => 'publish',
761
+ 'fields' => 'ids',
762
+ 'meta_query' => array(
763
+ 'relation' => 'OR',
764
+ array(
765
+ 'key' => '_fl_theme_builder_locations',
766
+ 'value' => 'general:site',
767
+ 'compare' => 'LIKE',
768
+ ),
769
+ array(
770
+ 'key' => '_fl_theme_builder_locations',
771
+ 'value' => 'taxonomy:category',
772
+ 'compare' => 'LIKE',
773
+ ),
774
+ array(
775
+ 'key' => '_fl_theme_builder_locations',
776
+ 'value' => 'general:archive',
777
+ 'compare' => 'LIKE',
778
+ ),
779
+ ),
780
+ );
781
+ $post_grid = null;
782
+ $object = null;
783
+ $exclusions = array();
784
+
785
+ if ( $query->get( 'cat' ) ) {
786
+ $term = get_term( $query->get( 'cat' ), 'category' );
787
+ } elseif ( $query->get( 'category_name' ) ) {
788
+ $term = get_term_by( 'slug', $query->get( 'category_name' ), 'category' );
789
+ }
790
+
791
+ if ( ! empty( $term ) && ! is_wp_error( $term ) ) {
792
+ $term_id = (int) $term->term_id;
793
+ $object = 'taxonomy:category:' . $term_id;
794
+ $args['meta_query'][] = array(
795
+ 'key' => '_fl_theme_builder_locations',
796
+ 'value' => $object,
797
+ 'compare' => 'LIKE',
798
+ );
799
+ }
800
+
801
+ $layout_query = new WP_Query( $args );
802
+ if ( $layout_query->post_count > 0 ) {
803
+
804
+ foreach ( $layout_query->posts as $i => $post_id ) {
805
+ $exclusions = FLThemeBuilderRulesLocation::get_saved_exclusions( $post_id );
806
+ $exclude = false;
807
+
808
+ if ( $object && in_array( $object, $exclusions ) ) {
809
+ $exclude = true;
810
+ } elseif ( in_array( 'taxonomy:category', $exclusions ) ) {
811
+ $exclude = true;
812
+ } elseif ( in_array( 'general:archive', $exclusions ) ) {
813
+ $exclude = true;
814
+ }
815
+
816
+ if ( ! $exclude ) {
817
+ $data = FLBuilderModel::get_layout_data( 'published', $post_id );
818
+ if ( ! empty( $data ) ) {
819
+
820
+ foreach ( $data as $node_id => $node ) {
821
+
822
+ if ( 'module' != $node->type ) {
823
+ continue;
824
+ }
825
+
826
+ if ( ! isset( $node->settings->type ) || 'post-grid' != $node->settings->type ) {
827
+ continue;
828
+ }
829
+
830
+ // Check for `post-grid` with custom query source.
831
+ if ( 'custom_query' == $node->settings->data_source ) {
832
+ $post_grid = FLBuilderLoop::custom_query( $node->settings );
833
+ break;
834
+ }
835
+ }
836
+ }
837
+ }
838
+
839
+ if ( $post_grid ) {
840
+ break;
841
+ }
842
+ }
843
+ }
844
+
845
+ return $post_grid;
846
+ }
includes/global-settings.php CHANGED
@@ -227,7 +227,7 @@ FLBuilder::register_settings_form('global', array(
227
  'size' => '5',
228
  'description' => 'px',
229
  'sanitize' => 'absint',
230
- 'help' => __( 'When typography unit is set to vh/vm this unit will be used to calculate the font size.', 'fl-builder' ),
231
  ),
232
  ),
233
  ),
227
  'size' => '5',
228
  'description' => 'px',
229
  'sanitize' => 'absint',
230
+ 'help' => __( 'When typography unit is set to vh/vw this unit will be used to calculate the font size.', 'fl-builder' ),
231
  ),
232
  ),
233
  ),
includes/module-settings.php CHANGED
@@ -103,6 +103,10 @@ FLBuilder::register_settings_form('module_advanced', array(
103
  'type' => 'select',
104
  'label' => __( 'Container Element', 'fl-builder' ),
105
  'default' => 'div',
 
 
 
 
106
  'options' => apply_filters( 'fl_builder_node_container_element_options', array(
107
  'div' => '&lt;div&gt;',
108
  'section' => '&lt;section&gt;',
103
  'type' => 'select',
104
  'label' => __( 'Container Element', 'fl-builder' ),
105
  'default' => 'div',
106
+ /**
107
+ * Filter to add/remove container types.
108
+ * @see fl_builder_node_container_element_options
109
+ */
110
  'options' => apply_filters( 'fl_builder_node_container_element_options', array(
111
  'div' => '&lt;div&gt;',
112
  'section' => '&lt;section&gt;',
includes/row-settings.php CHANGED
@@ -73,7 +73,7 @@ $row_settings = array(
73
  'full' => __( 'Full Height', 'fl-builder' ),
74
  'custom' => __( 'Minimum Height', 'fl-builder' ),
75
  ),
76
- 'help' => __( 'Full height rows fill the height of the browser window. Minimum height rows are no taller than the value entered.', 'fl-builder' ),
77
  'toggle' => array(
78
  'full' => array(
79
  'fields' => array( 'content_alignment' ),
@@ -746,6 +746,10 @@ $row_settings = array(
746
  'type' => 'select',
747
  'label' => __( 'Container Element', 'fl-builder' ),
748
  'default' => apply_filters( 'fl_builder_row_container_element_default', 'div' ),
 
 
 
 
749
  'options' => apply_filters( 'fl_builder_node_container_element_options', array(
750
  'div' => '&lt;div&gt;',
751
  'section' => '&lt;section&gt;',
73
  'full' => __( 'Full Height', 'fl-builder' ),
74
  'custom' => __( 'Minimum Height', 'fl-builder' ),
75
  ),
76
+ 'help' => __( 'Full height rows fill the height of the browser window. Minimum height rows are at least as tall as the value entered.', 'fl-builder' ),
77
  'toggle' => array(
78
  'full' => array(
79
  'fields' => array( 'content_alignment' ),
746
  'type' => 'select',
747
  'label' => __( 'Container Element', 'fl-builder' ),
748
  'default' => apply_filters( 'fl_builder_row_container_element_default', 'div' ),
749
+ /**
750
+ * Filter to add/remove container types.
751
+ * @see fl_builder_node_container_element_options
752
+ */
753
  'options' => apply_filters( 'fl_builder_node_container_element_options', array(
754
  'div' => '&lt;div&gt;',
755
  'section' => '&lt;section&gt;',
includes/ui-bar.php CHANGED
@@ -1,3 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <div class="fl-builder-bar">
2
  <div class="fl-builder-bar-content">
3
  <?php FLBuilder::render_ui_bar_title(); ?>
@@ -6,15 +20,15 @@
6
  <div class="fl-builder-publish-actions-click-away-mask"></div>
7
  <div class="fl-builder-publish-actions is-hidden">
8
  <span class="fl-builder-button-group">
9
- <span class="fl-builder-button fl-builder-button-primary" data-action="discard" title="<?php _e( 'Discard changes and exit', 'fl-builder' ); ?>"><?php _e( 'Discard', 'fl-builder' ); ?></span>
10
- <span class="fl-builder-button fl-builder-button-primary" data-action="draft" title="<?php _e( 'Keep changes drafted and exit', 'fl-builder' ); ?>"><?php _e( 'Save Draft', 'fl-builder' ); ?></span>
11
  <# if( 'publish' !== FLBuilderConfig.postStatus && ! FLBuilderConfig.userCanPublish ) { #>
12
- <span class="fl-builder-button fl-builder-button-primary" data-action="publish" title="<?php _e( 'Submit changes for review and exit', 'fl-builder' ); ?>"><?php _e( 'Submit for Review', 'fl-builder' ); ?></span>
13
  <# } else { #>
14
- <span class="fl-builder-button fl-builder-button-primary" data-action="publish" title="<?php _e( 'Publish changes and exit', 'fl-builder' ); ?>"><?php _e( 'Publish', 'fl-builder' ); ?></span>
15
  <# } #>
16
  </span>
17
- <span class="fl-builder-button" data-action="dismiss"><?php _e( 'Cancel', 'fl-builder' ); ?></span>
18
  </div>
19
  </div>
20
  </div>
1
+ <?php
2
+ /**
3
+ * Button texts
4
+ */
5
+ $discard = apply_filters( 'fl_builder_ui_bar_discard', __( 'Discard', 'fl-builder' ) );
6
+ $discard_alt = apply_filters( 'fl_builder_ui_bar_discard_alt', __( 'Discard changes and exit', 'fl-builder' ) );
7
+ $draft = apply_filters( 'fl_builder_ui_bar_draft', __( 'Save Draft', 'fl-builder' ) );
8
+ $draft_alt = apply_filters( 'fl_builder_ui_bar_draft_alt', __( 'Keep changes drafted and exit', 'fl-builder' ) );
9
+ $review = apply_filters( 'fl_builder_ui_bar_review', __( 'Submit for Review', 'fl-builder' ) );
10
+ $review_alt = apply_filters( 'fl_builder_ui_bar_review_alt', __( 'Submit changes for review and exit', 'fl-builder' ) );
11
+ $publish = apply_filters( 'fl_builder_ui_bar_publish', __( 'Publish', 'fl-builder' ) );
12
+ $publish_alt = apply_filters( 'fl_builder_ui_bar_publish_alt', __( 'Publish changes and exit', 'fl-builder' ) );
13
+ $cancel = apply_filters( 'fl_builder_ui_bar_cancel', __( 'Cancel', 'fl-builder' ) );
14
+ ?>
15
  <div class="fl-builder-bar">
16
  <div class="fl-builder-bar-content">
17
  <?php FLBuilder::render_ui_bar_title(); ?>
20
  <div class="fl-builder-publish-actions-click-away-mask"></div>
21
  <div class="fl-builder-publish-actions is-hidden">
22
  <span class="fl-builder-button-group">
23
+ <span class="fl-builder-button fl-builder-button-primary" data-action="discard" title="<?php echo esc_attr( $discard_alt ); ?>"><?php echo esc_attr( $discard ); ?></span>
24
+ <span class="fl-builder-button fl-builder-button-primary" data-action="draft" title="<?php echo esc_attr( $draft_alt ); ?>"><?php echo esc_attr( $draft ); ?></span>
25
  <# if( 'publish' !== FLBuilderConfig.postStatus && ! FLBuilderConfig.userCanPublish ) { #>
26
+ <span class="fl-builder-button fl-builder-button-primary" data-action="publish" title="<?php echo esc_attr( $review_alt ); ?>"><?php echo esc_attr( $review ); ?></span>
27
  <# } else { #>
28
+ <span class="fl-builder-button fl-builder-button-primary" data-action="publish" title="<?php echo esc_attr( $publish_alt ); ?>"><?php echo esc_attr( $publish ); ?></span>
29
  <# } #>
30
  </span>
31
+ <span class="fl-builder-button" data-action="dismiss"><?php echo esc_attr( $cancel ); ?></span>
32
  </div>
33
  </div>
34
  </div>
includes/ui-js-config.php CHANGED
@@ -4,7 +4,7 @@
4
  * Filter main UI JS config.
5
  * @see fl_builder_ui_js_config
6
  */
7
- echo 'FLBuilderConfig = ' . json_encode( apply_filters('fl_builder_ui_js_config', array(
8
  'adminUrl' => admin_url(),
9
  'ajaxNonce' => wp_create_nonce( 'fl_ajax_update' ),
10
  'builderEnabled' => get_post_meta( $post_id, '_fl_builder_enabled', true ) ? true : false,
@@ -20,6 +20,7 @@ echo 'FLBuilderConfig = ' . json_encode( apply_filters('fl_builder_
20
  'isUserTemplate' => false,
21
  'lite' => true === FL_BUILDER_LITE,
22
  'modSecFix' => ( defined( 'FL_BUILDER_MODSEC_FIX' ) && FL_BUILDER_MODSEC_FIX ),
 
23
  'moduleGroups' => FLBuilderModel::get_module_groups(),
24
  'nestedColumns' => ( ! defined( 'FL_BUILDER_NESTED_COLUMNS' ) || FL_BUILDER_NESTED_COLUMNS ),
25
  'newUser' => FLBuilderModel::is_new_user(),
@@ -68,7 +69,7 @@ echo 'FLBuilderConfig = ' . json_encode( apply_filters('fl_builder_
68
  * Filter UI JS Strings.
69
  * @see fl_builder_ui_js_strings
70
  */
71
- echo 'FLBuilderStrings = ' . json_encode( apply_filters('fl_builder_ui_js_strings', array(
72
  'actionsLightboxTitle' => esc_attr__( 'What would you like to do?', 'fl-builder' ),
73
  /* translators: %s: field name */
74
  'addField' => esc_attr_x( 'Add %s', 'Field name to add.', 'fl-builder' ),
4
  * Filter main UI JS config.
5
  * @see fl_builder_ui_js_config
6
  */
7
+ echo 'FLBuilderConfig = ' . FLBuilderUtils::json_encode( apply_filters('fl_builder_ui_js_config', array(
8
  'adminUrl' => admin_url(),
9
  'ajaxNonce' => wp_create_nonce( 'fl_ajax_update' ),
10
  'builderEnabled' => get_post_meta( $post_id, '_fl_builder_enabled', true ) ? true : false,
20
  'isUserTemplate' => false,
21
  'lite' => true === FL_BUILDER_LITE,
22
  'modSecFix' => ( defined( 'FL_BUILDER_MODSEC_FIX' ) && FL_BUILDER_MODSEC_FIX ),
23
+ 'MaxInputVars' => FL_Debug::safe_ini_get( 'max_input_vars' ),
24
  'moduleGroups' => FLBuilderModel::get_module_groups(),
25
  'nestedColumns' => ( ! defined( 'FL_BUILDER_NESTED_COLUMNS' ) || FL_BUILDER_NESTED_COLUMNS ),
26
  'newUser' => FLBuilderModel::is_new_user(),
69
  * Filter UI JS Strings.
70
  * @see fl_builder_ui_js_strings
71
  */
72
+ echo 'FLBuilderStrings = ' . FLBuilderUtils::json_encode( apply_filters('fl_builder_ui_js_strings', array(
73
  'actionsLightboxTitle' => esc_attr__( 'What would you like to do?', 'fl-builder' ),
74
  /* translators: %s: field name */
75
  'addField' => esc_attr_x( 'Add %s', 'Field name to add.', 'fl-builder' ),
includes/ui-js-templates.php CHANGED
@@ -51,8 +51,10 @@
51
  <i class="fl-block-copy fl-block-col-copy far fa-clone fl-tip" title="<?php _e( 'Duplicate', 'fl-builder' ); ?>"></i>
52
  <# } #>
53
  <# } #>
 
54
  <span class="fl-builder-has-submenu">
55
  <i class="fl-block-settings fas fa-columns fl-tip" title="<?php _e( 'Edit Column', 'fl-builder' ); ?>"></i>
 
56
  <# if ( ! data.global || ( data.global && FLBuilderConfig.userTemplateType ) ) { #>
57
  <ul class="fl-builder-submenu fl-block-col-submenu">
58
  <li><a class="fl-block-col-edit" href="javascript:void(0);"><?php _e( 'Column Settings', 'fl-builder' ); ?></a></li>
@@ -71,7 +73,9 @@
71
  <# } #>
72
  </ul>
73
  <# } #>
 
74
  </span>
 
75
  <# if ( ! data.isRootCol ) { #>
76
  <i class="fl-block-remove fas fa-times fl-tip" title="<?php _e( 'Remove', 'fl-builder' ); ?>"></i>
77
  <# } #>
@@ -808,7 +812,7 @@
808
  <# if (FLBuilderConfig.lite) { #>
809
  <div class="fl-builder--panel-message">
810
  <p><?php _ex( 'Save and reuse your layouts or kick-start your creativity with dozens of professionally designed templates.', 'Upgrade message that displays in the templates tab in lite installs.', 'fl-builder' ); ?></p>
811
- <a class="fl-builder-upgrade-button fl-builder-button" href="{{FLBuilderConfig.upgradeUrl}}" target="_blank"><?php _ex( 'Learn More', 'Link to learn more about premium page builder', 'fl-builder' ); ?> <i class="fas fa-external-link-alt"></i></a>
812
  </div>
813
  <# } #>
814
  <#
@@ -992,7 +996,7 @@
992
  <script type="text/html" id="tmpl-fl-content-lite-templates-upgrade-view">
993
  <div class="fl-builder--panel-message">
994
  <p><?php _ex( 'Save and reuse your layouts or kick-start your creativity with dozens of professionally designed templates.', 'Upgrade message that displays in the templates tab in lite installs.', 'fl-builder' ); ?></p>
995
- <a class="fl-builder-upgrade-button fl-builder-button" href="{{FLBuilderConfig.upgradeUrl}}" target="_blank"><?php _ex( 'Learn More', 'Link to learn more about premium page builder', 'fl-builder' ); ?> <i class="fas fa-external-link-alt"></i></a>
996
  </div>
997
  </script>
998
  <!-- #tmpl-fl-content-lite-templates-upgrade-view -->
51
  <i class="fl-block-copy fl-block-col-copy far fa-clone fl-tip" title="<?php _e( 'Duplicate', 'fl-builder' ); ?>"></i>
52
  <# } #>
53
  <# } #>
54
+ <?php endif; ?>
55
  <span class="fl-builder-has-submenu">
56
  <i class="fl-block-settings fas fa-columns fl-tip" title="<?php _e( 'Edit Column', 'fl-builder' ); ?>"></i>
57
+ <?php if ( ! $simple_ui ) : ?>
58
  <# if ( ! data.global || ( data.global && FLBuilderConfig.userTemplateType ) ) { #>
59
  <ul class="fl-builder-submenu fl-block-col-submenu">
60
  <li><a class="fl-block-col-edit" href="javascript:void(0);"><?php _e( 'Column Settings', 'fl-builder' ); ?></a></li>
73
  <# } #>
74
  </ul>
75
  <# } #>
76
+ <?php endif; ?>
77
  </span>
78
+ <?php if ( ! $simple_ui ) : ?>
79
  <# if ( ! data.isRootCol ) { #>
80
  <i class="fl-block-remove fas fa-times fl-tip" title="<?php _e( 'Remove', 'fl-builder' ); ?>"></i>
81
  <# } #>
812
  <# if (FLBuilderConfig.lite) { #>
813
  <div class="fl-builder--panel-message">
814
  <p><?php _ex( 'Save and reuse your layouts or kick-start your creativity with dozens of professionally designed templates.', 'Upgrade message that displays in the templates tab in lite installs.', 'fl-builder' ); ?></p>
815
+ <a class="fl-builder-upgrade-button fl-builder-button" href="{{FLBuilderConfig.upgradeUrl}}" target="_blank"><?php _ex( 'Learn More', 'Link to learn more about premium Beaver Builder', 'fl-builder' ); ?> <i class="fas fa-external-link-alt"></i></a>
816
  </div>
817
  <# } #>
818
  <#
996
  <script type="text/html" id="tmpl-fl-content-lite-templates-upgrade-view">
997
  <div class="fl-builder--panel-message">
998
  <p><?php _ex( 'Save and reuse your layouts or kick-start your creativity with dozens of professionally designed templates.', 'Upgrade message that displays in the templates tab in lite installs.', 'fl-builder' ); ?></p>
999
+ <a class="fl-builder-upgrade-button fl-builder-button" href="{{FLBuilderConfig.upgradeUrl}}" target="_blank"><?php _ex( 'Learn More', 'Link to learn more about premium Beaver Builder', 'fl-builder' ); ?> <i class="fas fa-external-link-alt"></i></a>
1000
  </div>
1001
  </script>
1002
  <!-- #tmpl-fl-content-lite-templates-upgrade-view -->
includes/ui-settings-config.php CHANGED
@@ -1,6 +1,6 @@
1
  ( function( $ ) {
2
  FLBuilderSettingsConfig = 'undefined' === typeof FLBuilderSettingsConfig ? {} : FLBuilderSettingsConfig;
3
- $.extend( FLBuilderSettingsConfig, <?php echo json_encode( $settings ); ?> );
4
  if ( 'undefined' !== typeof FLBuilder ) {
5
  FLBuilder.triggerHook( 'settingsConfigLoaded' );
6
  }
1
  ( function( $ ) {
2
  FLBuilderSettingsConfig = 'undefined' === typeof FLBuilderSettingsConfig ? {} : FLBuilderSettingsConfig;
3
+ $.extend( FLBuilderSettingsConfig, <?php echo FLBuilderUtils::json_encode( $settings ); ?> );
4
  if ( 'undefined' !== typeof FLBuilder ) {
5
  FLBuilder.triggerHook( 'settingsConfigLoaded' );
6
  }
includes/updater-config.php CHANGED
@@ -3,7 +3,7 @@
3
  if ( class_exists( 'FLUpdater' ) ) {
4
  FLUpdater::add_product(array(
5
  'name' => 'Beaver Builder Plugin (Lite Version)',
6
- 'version' => '2.2.2.5',
7
  'slug' => 'bb-plugin',
8
  'type' => 'plugin',
9
  ));
3
  if ( class_exists( 'FLUpdater' ) ) {
4
  FLUpdater::add_product(array(
5
  'name' => 'Beaver Builder Plugin (Lite Version)',
6
+ 'version' => '2.2.4.3',
7
  'slug' => 'bb-plugin',
8
  'type' => 'plugin',
9
  ));
includes/updater/includes/form.php CHANGED
@@ -72,7 +72,7 @@
72
  <input type="button" class="button button-primary" value="<?php esc_attr_e( 'Enter License Key', 'fl-builder' ); ?>">
73
  </p>
74
  </div>
75
-
76
  <?php FLUpdater::render_subscriptions( $subscription ); ?>
77
 
78
  </div>
72
  <input type="button" class="button button-primary" value="<?php esc_attr_e( 'Enter License Key', 'fl-builder' ); ?>">
73
  </p>
74
  </div>
75
+ <?php do_action( 'fl_after_license_form'); ?>
76
  <?php FLUpdater::render_subscriptions( $subscription ); ?>
77
 
78
  </div>
includes/vendor/infusionsoft/isdk.php CHANGED
@@ -9,7 +9,7 @@
9
  */
10
 
11
  if (!function_exists('xmlrpc_encode_entitites')) {
12
- include("xmlrpc-3.0/lib/xmlrpc.inc");
13
  }
14
  class iSDKException extends Exception
15
  {
@@ -2629,4 +2629,4 @@ class iSDK
2629
 
2630
  }
2631
 
2632
- ?>
9
  */
10
 
11
  if (!function_exists('xmlrpc_encode_entitites')) {
12
+ include("xmlrpc/lib/xmlrpc.inc");
13
  }
14
  class iSDKException extends Exception
15
  {
2629
 
2630
  }
2631
 
2632
+ ?>
includes/vendor/infusionsoft/xmlrpc-3.0/Changelog DELETED
@@ -1,1573 +0,0 @@
1
- 2009-09-05 - G. Giunta (giunta.gaetano@gmail.com)
2
-
3
- * xmlrpcs.inc, xmlrpcs.inc: remove code that was left for compatibility
4
- with php 4; use __METHOD__ constant for error messages instead of hardcoded
5
- values
6
-
7
- * xmlrpcs.inc: catch exceptions thrown during execution of invoked methods;
8
- check for $_SERVER having been disabled via php.ini and log an error if so
9
-
10
- * server.php, testsuite.php: add a new test and server method for exception
11
- catching in the server
12
-
13
- * xmlrpc.inc: added new method SetUserAgent to client to allow having different
14
- user-agent http headers
15
-
16
- * tagged and released as 3.0.0 beta
17
-
18
- 2009-08-05 - G. Giunta (giunta.gaetano@gmail.com)
19
-
20
- * xmlrpc_wrappers.inc: improve compatibility with php 5.0 when registering
21
- class/object methods
22
-
23
- 2009-08-02 - G. Giunta (giunta.gaetano@gmail.com) thanks Laurens
24
-
25
- * xmlrpcs.inc: add a new member var in server class to allow fine-tuning
26
- of the encoding of returned values when the server is in 'phpvals' mode;
27
- allow servers in 'xmlrpcvals' mode to also register plain php functions by
28
- defining them in the dispatch map with an added option:
29
- 'parameters_type' => 'phpvals' (feature request #2806628)
30
-
31
- * xmlrpc.inc: added new method xmrlpc_client::SetCurlOptions($array) to
32
- allow extra flexibility in tweaking http config, such as explicitly
33
- binding to an ip address (feature request #2787468); fix bad encoding if
34
- same object is encoded twice using php_xmlrpc_encode; removed some by-ref
35
- assignments and declarations
36
-
37
- 2009-07-31 - G. Giunta (giunta.gaetano@gmail.com)
38
-
39
- * xmlrpc.inc: add support for dateTime objects in both in php_xmlrpc_encode
40
- and as parameter for constructor of xmlrpcvals; add support for timestamps
41
- as parameter for constructor of xmlrpcvals; add option 'dates_as_objects' to
42
- php_xmlrpc_decode to return dateTime objects for xmlrpc datetimes
43
-
44
- * benchmark.php, xmlrpc_wrappers.inc: remove usage of split(), deprecated in
45
- php 5.3
46
-
47
- * benchmark.php: fixed url of server page used for testing; improved
48
- verification of correspondence of test results; added more variants for
49
- http options comparison
50
-
51
- * verify_compat.php: check for php version 5 for client side too
52
-
53
- * makefile: remove from build the compat directory
54
-
55
- 2009-07-26 - G. Giunta (giunta.gaetano@gmail.com)
56
-
57
- * server.php: remove usage of ereg*(), deprecated in php 5.3
58
-
59
- 2009-07-16 - G. Giunta (giunta.gaetano@gmail.com) thanks Jean-Jacques Sarton
60
-
61
- * xmlrpc.inc: add support for the <ex:nil/> from the apache library, both
62
- in input and output (feature request #...)
63
-
64
- * xmlrpc.inc, testsuite.php: remove usage of split(), deprecated in php 5.3
65
-
66
- * testsuite.php: flush better results with output_buffering on
67
-
68
- * server: php: avoid one warning about static function calls
69
-
70
- 2009-07-02 - G. Giunta (giunta.gaetano@gmail.com) thanks Heiko Stuebner
71
-
72
- * xmlrpc.inc: fix: when checking the parameters against the signatures xmlrpc
73
- checks for "array" but PHP returns "Array" resulting in a not matches signature
74
-
75
- 2009-05-07 - G. Giunta (giunta.gaetano@gmail.com)
76
-
77
- * replace all usage of '= & new' with '= new', as this is deprecated in php 5
78
- and has been shown to cause problems too
79
-
80
- 2009-05-06 - G. Giunta (giunta.gaetano@gmail.com)
81
-
82
- * create php4 branch, rename trunk to 3.0.0beta - it will be the php5-only version
83
-
84
- * xmlrpc.inc: removed test for php version and inclusion of compat patches for really
85
- really old versions of php 4
86
-
87
- 2009-03-16 - G. Giunta (giunta.gaetano@gmail.com) thanks Tommaso Trani
88
-
89
- * move from CVS to SVN on sf.net; file layout now is the same as in packaged lib
90
-
91
- * xmlrpc.inc: fix php warning when receiving 'false' in a bool value
92
-
93
- * Makefile, doc/Makefile: alter to follow new file layout
94
-
95
- * tagged and released as 2.2.2
96
-
97
- 2009-02-03 - G. Giunta (giunta.gaetano@gmail.com)
98
-
99
- * debugger/action.php: improve code robustness when parsing system.listmethods
100
- and system.describemethods call
101
-
102
- * xmlrpc.inc: format floating point values using the correct decimal separator
103
- even when php locale is set to one that uses comma (bug #2517579);
104
- use feof() to test if socket connections are to be closed instead of the
105
- number of bytes read (bug #2556209)
106
-
107
- 2008-10-29 - G. Giunta (giunta.gaetano@gmail.com)
108
-
109
- * xmlrpcs.inc: allow add_to_map server method to add docs for single params, too
110
-
111
- 2008-09-20 - G. Giunta (giunta.gaetano@gmail.com)
112
-
113
- * xmlrpc_wrappers.inc: added the possibility to wrap for exposure as xmlrpc
114
- methods plain php class methods, object methods and even whole classes
115
-
116
- * testsuite.php, server.php: added test cases for the new code
117
-
118
- 2008-09-07 - G. Giunta (giunta.gaetano@gmail.com) thanks Bruno Zanetti Melotti
119
-
120
- * xmlrpc.inc: be more tolerant in detection of charset in http headers (fix for bug #2058158)
121
-
122
- 2008-04-05 - G. Giunta (giunta.gaetano@gmail.com)
123
-
124
- * xmlrpc.inc: fix encoding of UTF8 chars outside of the BMP
125
-
126
- * xmlrpcs.inc: fix detection of zlib.output_compression (thanks xbert)
127
-
128
- 2008-03-06 - G. Giunta (giunta.gaetano@gmail.com)
129
-
130
- * tagged and released as 2.2.1
131
-
132
- * Makefile: improve usage on windows xp despite cmd's broken mkdir
133
-
134
- 2007-10-26 - G. Giunta (giunta.gaetano@gmail.com) thanks sajo_raftman
135
-
136
- * xmlrpc.inc: remove one warning in xmlrpc_client creator
137
-
138
- 2007-10-26 - G. Giunta (giunta.gaetano@gmail.com)
139
-
140
- * xmlrpc.inc: improve support for windows cp1252 character set (still
141
- commented in the code)
142
-
143
- 2007-09-05 - G. Giunta (giunta.gaetano@gmail.com)
144
-
145
- * xmlrpc.inc, xmlrps.inc: do not try to set invalid charsets as output for
146
- xml parser, even if user set them up for internal_encoding (helps encoding
147
- to exotic charsets, while decoding to UTF8)
148
-
149
- 2007-09-05 - G. Giunta (giunta.gaetano@gmail.com)
150
-
151
- * xmlrpc.inc: fix parsing of '1e+1' as valid float
152
-
153
- 2007-09-01 - G. Giunta (giunta.gaetano@gmail.com), thanks Frederic Lecointre
154
-
155
- * xmlrpcs.inc: allow errorlevel 3 to work when prev. error handler was a static method
156
-
157
- * testsuite.php: fix test on setCookie()
158
-
159
- 2007-08-31 - G. Giunta (giunta.gaetano@gmail.com)
160
-
161
- * xmlrpc.inc: minor fix in cookie parsing
162
-
163
- 2007-07-31 - G. Giunta (giunta.gaetano@gmail.com)
164
-
165
- * xmlrpc.inc: Fix usage of client::setcookie() for multiple cookies in non-ssl mode
166
-
167
- 2007-07-26 - G. Giunta (giunta.gaetano@gmail.com) thanks Mark Olive
168
-
169
- * xmlrpc.inc: Fix for bug # 1756274 (usage of cookies in ssl mode)
170
-
171
- 2007-04-28 - G. Giunta (giunta.gaetano@gmail.com)
172
-
173
- * xmlrpc.inc: give more detailed curl information when DEBUG = 2; fix handling
174
- of case where curl w. keepalive is used and one connection of many fails
175
-
176
- * testsuite improvements: add one testcase; give feedbcak while tests are
177
- running
178
-
179
- 2007-04-01 - G. Giunta (giunta.gaetano@gmail.com)
180
-
181
- * doc/makefile, doc/custom.fo.xsl: improve pdf rendering of php source code
182
-
183
- * makefile: recover version number from source instead of having it hardcoded
184
-
185
- 2007-03-10 - G. Giunta (giunta.gaetano@gmail.com)
186
-
187
- * doc/makefile, doc/convert.php, doc/*.xsl: created customizations xslt to
188
- produce a documentation more in line with the php manual, esp. with regards
189
- to functions synopsis; added jellyfish book cover as local resource and a
190
- screenshot of the debugger too; various updates to the manual source; added
191
- a php script to highlight examples inside html docs
192
-
193
- 2007-03-09 - G. Giunta (giunta.gaetano@gmail.com)
194
-
195
- * debugger/action.php: css tweak for IE
196
-
197
- * added phpunit license file in the phpunit directory
198
-
199
- * added link to license (on sf.net site) to many files
200
-
201
- 2007-03-04 - G. Giunta (giunta.gaetano@gmail.com)
202
-
203
- * Makefile, doc/makefile: assorted improvements
204
-
205
- 2007-03-03 - G. Giunta (giunta.gaetano@gmail.com)
206
-
207
- * xmlrpc.inc: micro-optimization in declaration of global vars xmlrpcerr, xmlrpcstr
208
-
209
- 2007-02-25 Gaetano Giunta <giunta.gaetano@gmail.com>
210
-
211
- * removed a couple of warnings emitted in testsuite.php
212
-
213
- * doc/makefile: added command for invocation of xxe to generate docs
214
-
215
- * better rendering of docs in xml+css format for function prototypes
216
-
217
- * updated documentation
218
-
219
- * tagged and released as 2.2
220
-
221
- 2007-02-22 Gaetano Giunta <giunta.gaetano@gmail.com>
222
-
223
- * debugger: workaround for case of magic_quotes_gpc being set (properly
224
- unescape user input); fix case of user not setting msg id in jsonrpc case
225
- when executing a remote method; allow strings, false, true and null as msg id
226
-
227
- 2007-02-13 Gaetano Giunta <giunta.gaetano@gmail.com>
228
-
229
- * testsuite.php: added one test for automatic encoding/decoding case
230
-
231
- 2007-02-05 Gaetano Giunta <giunta.gaetano@gmail.com>
232
-
233
- * xmlrpc.inc: slightly faster encoding of UTF8 data to ascii
234
-
235
- 2007-01-11 Gaetano Giunta <giunta.gaetano@gmail.com>
236
-
237
- * xmlrpc.inc: when calling client::multicall() with an unspecified http version,
238
- use the client default rather than the fixed 'http 1.0'
239
-
240
- 2006-09-17 Gaetano Giunta <giunta.gaetano@gmail.com>
241
-
242
- * xmlrpc.inc, xmlrpcs.inc, testsuite.php: added support for <NIL/> and
243
- system.getCapabilities, and one more testcase to go with it
244
-
245
- 2006-09-05 Gaetano Giunta <giunta.gaetano@gmail.com>
246
-
247
- * xmlrpc.inc: fix support for https through proxies; client parses debug
248
- messages sent by client even for compressed responses;
249
-
250
- * testsuite.php, parse_args.php: added 3 test cases for proxy connections
251
-
252
- 2006-09-01 Gaetano Giunta <giunta.gaetano@gmail.com>
253
-
254
- xmlrpc_wrappers.inc: add two more options in wrap_xmlrpc_method and fix
255
- typo to allow obj encoding
256
-
257
- 2006-08-28 Gaetano Giunta <giunta.gaetano@gmail.com>
258
-
259
- * xmlrpc_wrappers.inc: more options added to wrap_php_function and
260
- wrap_xmlrpc_method
261
-
262
- * xmlrpc.inc: pave the way to support for <nil/>
263
-
264
- * doc/xmlrpc_php.xml documentation updated
265
-
266
- * tagged and released as 2.1
267
-
268
- 2006-08-25 Gaetano Giunta <giunta.gaetano@gmail.com>
269
-
270
- * xmlrpc.inc: stricter parsing of incoming messages: detect two DATA elements
271
- inside an ARRAY, a STRUCT or SCALAR inside an already filled VALUE
272
-
273
- * testsuite.php: added two testcases to check for the above cases
274
-
275
- 2006-08-24 Gaetano Giunta <giunta.gaetano@gmail.com>
276
-
277
- * xmlrpc.inc: more code optimization in xmlrpcval::serialize() and
278
- php_xmlrpc_encode(); fixed bug where struct elements with non-ascii chars
279
- in their name would not be properly encoded
280
-
281
- * testsuite.php: added a testcase for the new bug
282
-
283
- 2006-08-23 Gaetano Giunta <giunta.gaetano@gmail.com>
284
-
285
- * remove old code left in comments across many files; many more javadoc
286
- comments added
287
-
288
- * xmlrpc.inc: a bit of code optimization: reorder switch() statements of
289
- xml parsing element handlers; inline code for xmlrpcval() - this breaks
290
- new xmlrpcval('true') and changes error msgs on new xmlrpcval($x, 'invalid_type')
291
-
292
- * testsuite.php: change according to above
293
-
294
- * benchmark.php: basic support for xdebug 2 profiling
295
-
296
- 2006-08-22 Gaetano Giunta <giunta.gaetano@gmail.com>
297
-
298
- * xmlrpc.inc: addscalar() and addstruct() where not returning 1 when adding
299
- data to an already formed value
300
-
301
- 2006-08-21 Gaetano Giunta <giunta.gaetano@gmail.com>
302
-
303
- * xmlrpcs.inc, xmlrpc.inc: added support for emulating the xmlrpc-extension
304
- API (the full emulation layer is part of the extras package);
305
- fix support for the HTTP 'deflate' encoding
306
-
307
- * xmlrpc.inc: better support for http compression with and without CURL;
308
- a minor decoding speedup; added a new function: php_xmlrpc_decode_xml(),
309
- that will convert into the appropriate object the xml representation of
310
- either a request, response or a single value; log reception of invalid
311
- datetime values
312
-
313
- * xmlrpcs.inc: add a new parameter and return type to server->service();
314
- let server->add_to_map() accept method definitions without parameter types
315
-
316
- * xmlrpc_wrappers.inc: more logging of errors; wrap_php_functions now takes
317
- more options; better support for jsonrpc; escape quote chars when wrapping
318
- remothe servers / remote methods
319
-
320
- * added cvs Id tag to files that missed it; speling fixes; updated NEWS files
321
-
322
- 2006-08-07 Gaetano Giunta <giunta.gaetano@gmail.com>
323
-
324
- * assorted fixes to make the suite more compatible with php 4.0.5 and 5.x
325
-
326
- 2006-07-02 Gaetano Giunta <giunta.gaetano@gmail.com>
327
-
328
- * xmlrpc_warppers.inc: added new function to wrap entire remote server into
329
- a local php class; changed default calling synopsis of wrap_remote_method,
330
- to ease passing multiple options at a time (but old syntax still works!)
331
-
332
- * updated makefile, debugger/action.php in accord with the above
333
-
334
- 2006-06-30 Gaetano Giunta <giunta.gaetano@gmail.com>
335
-
336
- * added to debugger capability to generate json-rpc code stubs
337
-
338
- * added to debugger capability to load and launch self correctly if
339
- controller.php is called directly from outside processes (single url access)
340
-
341
- 2006-06-26 Gaetano Giunta <giunta.gaetano@gmail.com>
342
-
343
- * moved wrap_php_functions and wrap_xmlrpc_method into a file of their own.
344
- This will let us add further stub functionality without the base lib growing too much.
345
- All of the files that reference this functionality have been modified accordingly.
346
-
347
- * made wrap_xmlrpc_method generate better code (with php type juggling), and
348
- some phpdoc for the generated function, too
349
-
350
- * added to debugger an option to produce for the user the generated php code
351
- for wrapping a call to a remote method into a php function
352
-
353
- 2006-06-22 Gaetano Giunta <giunta.gaetano@gmail.com>
354
-
355
- * xmlrpcs.inc: added description of parameters for system.xxx methods (useful with
356
- html-self-documenting servers);
357
- server->service() now returns response object, in case user has need for it...
358
-
359
- * xmlrpc.inc: save full response payload into xmlrpcresp obj for better debugging
360
-
361
- 2006-06-15 Gaetano Giunta <giunta.gaetano@gmail.com>
362
-
363
- * verify_compat.php: more tests
364
-
365
- 2006-06-09 Gaetano Giunta <giunta.gaetano@gmail.com>
366
-
367
- * xmlrpcs.inc: fixed sending of compressed responses when output compression
368
- is already enabled in php.ini
369
-
370
- * verify_compat.php: split tests between server and client cases
371
-
372
- 2006-05-29 Gaetano Giunta <giunta.gaetano@gmail.com>
373
-
374
- * added new file: verify_compat.php, to help troubleshooting platform
375
- support for the library; added it to makefile, too
376
-
377
- 2006-05-24 Gaetano Giunta <giunta.gaetano@gmail.com>
378
-
379
- * xmlrpc.inc: removed residual usage of regexp in favour of pregexps; fixed
380
- a bug in specifying Host http header with non std ports
381
-
382
- 2006-05-23 Gaetano Giunta <giunta.gaetano@gmail.com>
383
-
384
- * xmlrpc.inc: improvements to wrap_php_function: let it deal correctly
385
- with php functions returning xmlrpcresp objs; make it generate also
386
- docs for single parameters (useful for documenting_xmlrpc_server class)
387
-
388
- 2006-05-22 Gaetano Giunta <giunta.gaetano@gmail.com>
389
-
390
- * xmlrpc.inc, xmlrpcs.inc: minor performance tuning updates: replaced
391
- some explode vs. split, ereg vs. preg, single vs. double quotes
392
-
393
- * xmlrpc.inc: fix wrap_xmlrpc_method to NOT rebuild php objects received
394
- from the server by default, as it might pose a security risk
395
-
396
- 2006-04-24 Gaetano Giunta <giunta.gaetano@gmail.com>
397
-
398
- * minor fixes makefiles. Tagged and released as 2.0 final
399
-
400
- 2006-04-22 Gaetano Giunta <giunta.gaetano@gmail.com>
401
-
402
- * debugger/*: added option to set cainfo; improve web layout
403
-
404
- * xmlrpc.inc: set sslverifypeer to TRUE instaed of 1 by default
405
-
406
- * doc/php_xmlrpc.xml: documentation updates
407
-
408
- 2006-04-21 Gaetano Giunta <giunta.gaetano@gmail.com>
409
-
410
- * xmlrpc.inc: added option to set ca certs dir instead of single cert
411
- (used to validate server in https connetions)
412
-
413
- 2006-04-18 Gaetano Giunta <giunta.gaetano@gmail.com>
414
-
415
- * xmlrpc.inc: fixed bug in xmlrpcval::structmemexists()
416
-
417
- * testsuite.php: added test case for xmlrpcval::structmemexists()
418
-
419
- 2006-04-03 Gaetano Giunta <giunta.gaetano@gmail.com>
420
-
421
- * xmlrpc.inc: add support for Digest and NTLM authentication, both to server
422
- and to proxies (note: must use CURL for this to work)
423
-
424
- * debugger/*: add support for Digest/NTLM auth to remote servers
425
-
426
- 2006-03-19 Gaetano Giunta <giunta.gaetano@gmail.com>
427
-
428
- * xmlrpc.inc: fix a bug parsing of 'true' bool values;
429
- added a new method to the client class: SetCaCertificate;
430
- add column number in xml parsing error messages;
431
- fix serialization of messages to ISO-8859-1 charset with php 5 (by adding
432
- encoding to the xml prologue of generated messages)
433
-
434
- * xmlrpcs.inc: correct detection of charset in http headers;
435
- add column number in xml parsing error messages;
436
- fix serialization of responses to ISO-8859-1 charset with php 5 (by adding
437
- encoding to the xml prologue of generated responses)
438
-
439
- * testsuite.php: added two more tests on charset encoding
440
-
441
- * NEWS: update info for impending release
442
-
443
- 2006-03-23 Gaetano Giunta <giunta.gaetano@gmail.com>
444
-
445
- * added a new demo file: simple_call.php
446
-
447
- 2006-02-20 Gaetano Giunta <giunta.gaetano@gmail.com>
448
-
449
- * xmlrpcs.inc: more error checking and logging with regard to user-coded
450
- method handler functions not being well behaved;
451
- fix a case where error handler would not be reset upon user function
452
- returning not valid xmlrpresp
453
-
454
- * xmlrpc.inc: fix bug in detection of php 4.3.0
455
-
456
- * Makefile: fix uppercase filenames
457
-
458
- 2006-02-15
459
-
460
- * xmlrpc.inc: parse 'true' and 'false' as valid booleans, even though the
461
- spec is quite clear on that; fix small bug w. internal_encoding = utf8; add
462
- definition of $GLOBALS['xmlrpcNull'] for extensibility, e.g. json or
463
- extensions to the xmlrpc spec
464
-
465
- 2006-02-05 Gaetano Giunta <giunta.gaetano@gmail.com>
466
-
467
- * xmlrpc.inc: fix bug in wrap_xmlrpc_method if client passed to function has
468
- return_type=phpvals
469
-
470
- * all demo files: review code, add more comments and information
471
-
472
- * added 2 demo files: proxy.php (implementing an xmlrpc proxy server) and
473
- wrap.php (showing usage of wrap_method_call)
474
-
475
- 2006-02-04 Gaetano Giunta <giunta.gaetano@gmail.com>
476
-
477
- * xmlrpc.inc: fix bug in multicall in case of no fallback and server error
478
-
479
- 2006-01-30 Gaetano Giunta <giunta.gaetano@gmail.com>
480
-
481
- * xmlrpc.inc: fix recursive serialization of xmlrpcvals loosing UTF8 charset;
482
- correctly set type field of xmlrpcvals returned by send() calls
483
-
484
- * xmlrpcs.inc: add to server checks for correct return type of user-coded
485
- method handling function; tolerate xmlrpcval instead of xmlrpcresp
486
-
487
- * minor change in xmlrpcresp internals, to ease subclassing (store payload
488
- in an internal var on serialize(), same as xmlrpcclient does)
489
-
490
- 2006-01-22 Gaetano Giunta <giunta.gaetano@gmail.com>
491
-
492
- * benchmark.php: do not run http 1.1 tests if CURL notfound
493
-
494
- * Released as 2.0 Rc3
495
-
496
- 2006-01-19 Gaetano Giunta <giunta.gaetano@gmail.com>
497
-
498
- * xmlrpc.inc: make xmlrpc_client::setDebug() accept int values instead of
499
- boolean. At level 2, the request payload is printed to screen before being
500
- sent; fix bug with repeated sending of the same msg object and using request
501
- compression w. php 5.1.2 (objects passed by ref by default!!!)
502
-
503
- * xmlrpcs.inc: fix detection of clients accepting compressed responses
504
-
505
- * comment.php: remove warnings due to liberal usage of $HTTP_POST/GET_VARS
506
-
507
- * benchmark.php: add a test using http compression of both requests and
508
- responses
509
-
510
- * testsuite.php: added test for fix in xmlrpc.inc
511
-
512
- 2006-01-17 Gaetano Giunta <giunta.gaetano@gmail.com>
513
-
514
- * xmlrpcs.php: minor fix: do not raise a PHP warning when std server is
515
- called via GET (global HTTP_RAW_POST_DATA undefined). Some might have called
516
- it a security breach (path disclosure)...
517
-
518
- 2006-01-15 Gaetano Giunta <giunta.gaetano@gmail.com>
519
-
520
- * testsuite.php: minor fix to expected date format in http cookie hedaer
521
- to cope with PHP 5.1.2
522
-
523
- 2006-01-05 Gaetano Giunta <giunta.gaetano@gmail.com>
524
-
525
- * xmlrpcs.inc: merge code from the 'extras' subclass that allows server
526
- to register plain php functions in dispatch map instead of functions
527
- accepting a single xmlrpcmgs obj parameter.
528
- One step closer to the kitchen sink!!!
529
-
530
- 2005-12-31 Gaetano Giunta <giunta.gaetano@gmail.com>
531
-
532
- * xmlrpcs.inc: let the server accept 'class::method' syntax in the dispatch
533
- map
534
-
535
- * testsuite.php, server.php: added new tests for the recent charset encoding
536
- capabilities
537
-
538
- 2005-12-24 Gaetano Giunta <giunta.gaetano@gmail.com>
539
-
540
- * xmlrpc.inc: correctly serialize() string xmlrpcvals that have been
541
- created out of non-string php variables, when internal encoding is UTF8;
542
- serialize to '0' int and double values created out of non-string php
543
- variables, eg. 'hello', instead of creating invalid xmlrpc;
544
- extend the php_xmlrpc_encode function to allow serializing string values
545
- to charsets other tha US-ASCII;
546
- minor tweak to xml parsing to allow correct parsing of empty strings when
547
- in 'direct to php values' mode
548
-
549
- * xmlrpcs.inc: advances in system.multicall with plain php values
550
-
551
- 2005-12-17 Gaetano Giunta <giunta.gaetano@gmail.com>
552
-
553
- * xmlrpcs.inc: let the functions implementing the system.* methods work
554
- fine when called with plain php values as parameters instead of xmlrpcmsg
555
- objects (multicall not quite finished yet...);
556
- encode level 3 debug info as base64 data, to avoid charset encoding hell
557
-
558
- * xmlrpc.inc: added a new xmlrpc_2_php_type function, to get the name of
559
- php types corresponding to xmlrpc types;
560
- in debug mode, when detecting base64 server debug info, print it out fine
561
-
562
- * server.php: cosmetic fixes
563
-
564
- 2005-12-09 Gaetano Giunta <giunta.gaetano@gmail.com>
565
-
566
- * xmlrpc.inc: remove one warning emitted when received xml contains an
567
- unknown tag; remove warnings emitted when custom error handler is set
568
- and user calls php_xmlrpc_encode/decode without the 2nd parameter
569
-
570
- * xmlrpcs.inc: added a param to service(), to allow the server to parse
571
- data other than the POST body (useful for subclassing and debugging);
572
- reworked the implementation of server debug messages at debug level 2:
573
- since the debug info generated has no known charset, and putting it back
574
- into the response's xml would most likely break it, send it back to the
575
- client as a base64 encoded comment. Clients can decode it if they need it...
576
- Add some more javadocs
577
-
578
- * testsuite.php: modified the string test, to see if the server can echo
579
- back to the client the received data without breaking the response's xml
580
-
581
- 2005-12-05 Gaetano Giunta <giunta.gaetano@gmail.com>
582
-
583
- * xmlrpc.inc, xmlrpcs.inc: let server and client objects decide if they
584
- want to use some charset encoding other than US-ASCII for serialized data:
585
- add a new var to both objects, and lots of parameters to function calls
586
- that took none up to now;
587
- refactored server method service() and parseRequest(), implementing a
588
- new parserequestHeaders() method to explicitly deal with HTTP
589
-
590
- 2005-12-01 Gaetano Giunta <giunta.gaetano@gmail.com>
591
-
592
- * moved the jsonrpc implementation and the new wsdl stuff to a separate
593
- CVS module; updated the makefile to reflect it
594
-
595
- 2005-11-24 Gaetano Giunta <giunta.gaetano@gmail.com>
596
-
597
- * modified php_xmlrpc_decode() to work on xmlrpcmessages too, besides
598
- xmlrpcvals. To achieve this, added a new method: xmlrpcmsg::kindOf()
599
-
600
- 2005-11-22 Gaetano Giunta <giunta.gaetano@gmail.com>
601
-
602
- * released as 2.0 RC2
603
-
604
- 2005-11-21 Gaetano Giunta <giunta.gaetano@gmail.com>
605
-
606
- * xmlrpc.inc: fix warnings about references for PHP 4.1.X
607
-
608
- * Whitespace cleanup on all the lib
609
-
610
- 2005-11-16 Gaetano Giunta <giunta.gaetano@gmail.com>
611
-
612
- * xmlrpc.inc: rewritten xmlrpc_encode_entitites adding two extra parameters
613
- that specify input and output charset encodings. This corrects the bug that
614
- prevented native UTF-8 strings to be correctly serialized (to have them
615
- encoded the user must set $xmlrpc_internalencoing appropriately).
616
-
617
- * xmlrpc.inc: added new method xmlrpcmsg::parseResponseHeaders(), refactoring
618
- parseResponse(). This makes the code more modular and eases subclassing.
619
-
620
- * xmlrpc.inc: set cookies and http headers to xmlrpcresp objs even when calls
621
- to send() do not complete correctly
622
-
623
- * added new file: jsonrpcs.inc, to accomodate server jsonrpc objects in the future
624
-
625
- * jsonrpc.inc: slow progress...
626
-
627
- 2005-11-10 Gaetano Giunta <giunta.gaetano@gmail.com>
628
-
629
- * xmlrpc.inc: fixed the xmlrpc_client send and sendpayloadhttps methods
630
- to fix errors in calling https servers;
631
- added a new xmlrpc_client->setkey method to allow usage of client-side ssl
632
- certs in recent php builds;
633
- added to xmlrpcresp objects a content_type var, to be used in HTTP headers
634
-
635
- * xmlrpcs.inc: separate generation of content-type http header and xml prologue
636
- from the service() method, to ease subclassing
637
-
638
- 2005-11-03 Gaetano Giunta <giunta.gaetano@gmail.com>
639
-
640
- * xmlrpc.inc: moved the 'text/xml' mimetype string as class var of the xmlrpcmsg
641
- object instead of having it cabled into xmlrpc_client->send(): this allows to
642
- create subclasses of xmlrpcmsg that use a different mimetype
643
-
644
- * jsonrpc.inc: added a new file, with an extremely experimental set of classes,
645
- designed to implement a json-rpc client and server, taking advantage of the
646
- existing xml-rpc infrastructure
647
-
648
- 2005-10-28 Gaetano Giunta <giunta.gaetano@gmail.com>
649
-
650
- * xmlrpc.inc: changed constructor method for xmlrpcresp, making it smarter in
651
- case user does not declare the type of value it is passing to it;
652
- minor changes in serialization of xmlrpcresp with error codes, so that it
653
- utputs LF instead of CRLF on windows boxes after an FTP transfer of the code, too
654
-
655
- 2005-10-26 Gaetano Giunta <giunta.gaetano@gmail.com>
656
-
657
- * xmlrpc.inc: added a new var of class xmlrpc_client, indicating what kind of
658
- object will be stored in the value() of xmlrpcresp's gotten from the send()
659
- method: xmlrpxc objects, plain php variables or raw xml. This allow the coder
660
- to make use of xmlrpc_decode for better performances if he wishes so.
661
- Modified creator of xmlrpcresp class to allow it to distinguish between being
662
- created out of raw xml or a plain php string (in the former case, serialization
663
- is still possible, opening a new world of opportunity for server-side programming:
664
- the php function implementing a web service has to provide the xml for the
665
- return value on its own).
666
- Modified xmlrpc_client::multicall() to suit; also added a new parameter which
667
- allows calls to multicall without automatic fallback to many-calls in case of
668
- error (speeding up the process of doing a failed multicall() call quite a bit)
669
- Fixed two bugs in guess_encoding.
670
- Audited all regexps and fixed some.
671
- xmlrpc_client::send() does not call xmlrpcmsg::parseresponsefile() anymore.
672
- Shuffled parseresponse() a little bit
673
-
674
- * testsuite.php: added a new testcase for the modifications to multicall():
675
- now we test the case where xmlrpc_client returns php values, too
676
-
677
- 2005-10-24 Gaetano Giunta <giunta.gaetano@gmail.com>
678
-
679
- * xmlrpc.inc: fixed guess_encoding() to always return uppercase chars
680
-
681
- * added new file: benchmark.php. It contains a few tests used to evaluate
682
- speed of the lib in common use cases
683
-
684
- * added file parse_args.php, containing common code for benchmark and
685
- testsuite, and modified testsuite.php accordingly
686
-
687
- * modified makefile adding new files
688
-
689
- * testsuite.php: added a couple of new test cases; fixed one warning
690
- emitted in php 5 E_STRICT mode
691
-
692
- 2005-10-20 Gaetano Giunta <giunta.gaetano@gmail.com>
693
-
694
- * xmlrpc.inc: modify 3d param of ParseResponse(), allowing the function to
695
- return the raw xml received as value of the xmlrpcresponse object.
696
- This allows eg. to have epi-xmlrpc decode the xml for faster execution.
697
-
698
- 2005-10-09 Gaetano Giunta <giunta.gaetano@gmail.com>
699
-
700
- * xmlrpc.inc: fixed error that prevented usage of HTTPS (the client
701
- always determined that ssl support was not present)
702
-
703
- 2005-10-03 Gaetano Giunta <giunta.gaetano@gmail.com>
704
-
705
- * xmlrpc.inc, xmlrpcs.inc: revert direction of stack growth during xml
706
- parsing for faster execution time; add support for detecting charset
707
- encoding of received xml; add support for cookies; better parsing of
708
- javadoc when building stub code in wrap_php_function; add a lot of
709
- javadoc comments everywhere; rewrite most error messages
710
-
711
- * testsuite.php: add many tests for newly introduced features
712
-
713
- * server.php: add a couple of new functions to support debugging new
714
- features
715
-
716
- * debugger: add switches to enable all the latest lib features; minor
717
- improvements to layout
718
-
719
- * synch included phpunit with latest PEAR release
720
-
721
- * reorganize files included in the distribution in a new hierarchy of folders
722
-
723
- * bump revision number to 2.0RC1 and release
724
-
725
- 2005-8-14 Miles Lott <milos@groupwhere.org>
726
-
727
- * xmlrpc.inc, xmlrpcs.inc: Remove all use of eval() to avoid potential
728
- security hole.
729
-
730
- * As of this release we are no longer php3-compatible.
731
-
732
- 2005-8-10 Miles Lott <milos@groupwhere.org>
733
-
734
- * xmlrpc.inc, xmlrpcs.inc: Switched to using $GLOBALS instead of calling
735
- global $varname
736
-
737
- 2005-07-22 Miles Lott <milos@groupwhere.org>
738
-
739
- * Removed: bug_* files
740
-
741
- 2005-07-14 Gaetano Giunta <giunta.gaetano@gmail.com>
742
-
743
- * debugger: added a workaround to disable using the debugger for attacking
744
- older versions of the lib
745
-
746
- * testsuite.php: added code to test wrap_xmlrpc_method;
747
- use different wording for failed tests
748
-
749
- * xmlrpcs.inc: change for() with foreach() in system.* methods implementations;
750
- remove a possible cause of php warning;
751
-
752
- * xmlrpc.inc: let wrap_php_function and wrap_xmlrpc_method find suitable
753
- function names if default function names are already in use;
754
- correct wrap_xmlrpc_method to not set http protocol to 1.0 when not asked to;
755
- detect curl compiles without SSL
756
-
757
- 2005-07-14 Gaetano Giunta <giunta.gaetano@gmail.com>
758
-
759
- * xmlrpc.inc: more auto-fix of xmlrpc_client path: '' -> '/';
760
- change to the method used for detecting failed evals (php 4.0.x compatibility);
761
- complete rework of return-by-ref functions to comply with php 4.4.0
762
-
763
- * xmlrpcs.inc: change to the method used for detecting failed evals (php 4.0.x
764
- compatibility)
765
-
766
- * testsuite.php: major rewrite of the multi- tests, to give better feedback on
767
- number of failed tests;
768
- flush html page title to screen before starting tests;
769
-
770
- 2005-07-13 Gaetano Giunta <giunta.gaetano@gmail.com>
771
-
772
- * xmlrpc.inc: let xmlrpcmsg creator be forgiving of target paths that miss the
773
- starting '/' char;
774
- completely reworked assign-by-ref to be compliant with php 4.4.0 stricter
775
- warnings
776
-
777
- * testsuite.php: added ability to be run from cli: (really dumb) separation of
778
- html and plain text outputs + parsing of argv parameters
779
-
780
- 2005-07-12 Gaetano Giunta <giunta.gaetano@gmail.com>
781
-
782
- * xmlrpc.inc: compatibility fixes with PHP versions 4.0.x (and remove some for
783
- PHP 3)
784
-
785
- * xmlrpcs.inc: compatibility fixes for PHP 4.0.x versions
786
-
787
- * testsuite.php: better support for running with php versions 4.0.x;
788
- do not generate runtime errors but finish tests anyway if some calls to
789
- localhost fail;
790
- correctly detect a localhost port different from 80 for running tests against
791
-
792
- 2005-07-11 Gaetano Giunta <giunta.gaetano@gmail.com>
793
-
794
- * xmlrpc.inc: preliminary building of method signature and docs in
795
- wrap_php_function;
796
- fix a bug in extracting function description from javadoc block in
797
- wrap_php_function;
798
- small fix for better compatibility with php < 4.2.0
799
-
800
- * added compat subdir with extra code, taken form PEAR package Compat, to let
801
- the lib run fine with php 4 versions < 4.1
802
-
803
- 2005-07-10 Gaetano Giunta <giunta.gaetano@gmail.com>
804
-
805
- * xmlrpc.inc: some nazi whitespace corrections;
806
- declared global $xmlrpcBoolean too (was the only one missing);
807
- used @eval inside getval() to have less path disclosure security reports filed
808
- in the future;
809
- added new global var: $xmlrpcValue, to be used in server dispatch maps as
810
- placeholder for a param which can be of any kind;
811
- big chunks (but still incomplete) of javadoc parsing in wrap_php_function
812
- + changed type of return val - now it is the complete array to be put in the
813
- dispatch map
814
-
815
- * xmlrpcs.inc: let previous error handler be called by server to handle errors
816
- even if in debug level 3;
817
- default to compress responses if zlib installed;
818
- added a new val useful for only checking number (not type) of params in method
819
- calls;
820
- let user use object methods in dispatch map using the
821
- array($obj, 'fmethodname') format
822
-
823
- * server.php: Added code called by testsuite.php to exercise registration of
824
- object methods as xmlrpc methods and auto-registration of php functions as xmlrpc
825
- methods
826
-
827
- * testsuite.php: added tests to exercice server registering object methods as
828
- xmlrpc methods and automatic registration of php functions as server methods;
829
- added a hint to enable debug if some test goes wrong;
830
- renamed https test for better clarity
831
-
832
- 2005-07-07 Gaetano Giunta <giunta.gaetano@gmail.com>
833
-
834
- * xmlrpc.inc: added function to be used for 'guestimating' charset encoding of
835
- received xml (not activated yet)
836
-
837
- * server.php: Let server compress content by default if user asks so: it allows
838
- testsuite to check for compressed responses
839
-
840
- * testsuite.php: added suite of tests for compressed responses; test CURL
841
- (http1.1) with all possible compression combinations too
842
-
843
- 2005-07-06 Gaetano Giunta <giunta.gaetano@gmail.com>
844
-
845
- * xmlrpc.inc: Enable setting usage of keepalives on/off (for CURL cases);
846
- implement compression of xmlrpc requests; enable new syntax of xmlrpclient
847
- constructor: 1 - allow preferred http method to be set at creation time,
848
- 2 - allow user to insert a single complete URL as only parameter and parse it;
849
- try to detect if curl is present whether it has been compiled w. zlib to enable
850
- automatically the reception of compressed responses
851
-
852
- * xmlrpcs.inc: do not add into logs the content of the request, if it was
853
- received gzipped/deflated, to avoid breaking the xml sent back as response
854
- (NB: might be investigated further: is the problem caused by windows chars in
855
- the range 128-160 ?)
856
-
857
- * testsuite.php: run all localhost tests 2 more times, to stress request
858
- compression;
859
- run all localhost tests in a row using keepalives, to test keepalive
860
- functionality
861
-
862
- 2005-07-05 Gaetano Giunta <giunta.gaetano@gmail.com>
863
-
864
- * xmlrpc.inc: let CURL pass back to caller function the complete PHP headers
865
- as it did before: it enables better logging / debugging of communication;
866
- small change to the way CURL declares its ability to receive compressed
867
- messages (fix for the case where zlib is compiled in PHP but not in curl);
868
- added Keep-alive (ON BY DEFAULT) for http 1.1 and https messages (had to modify
869
- a lot of functions for that);
870
- always make sure a 'Connection: close' header is sent with curl connections if
871
- keep-alive is not wanted
872
-
873
- * phpunit.php: switched to PEAR PHPUnit (rel 1.2.3), since it is maintained a
874
- lot more than the old version we were using
875
-
876
- * added new folder with code of phpunit classes
877
-
878
- * testsuite.php: added a new run of tests to check for compliance of client
879
- when using http 1.1;
880
- switched to PEAR PHPUnit classes;
881
- divided test for client ability to do multicall() into 2 separate tests
882
-
883
- 2005-06-30 Gaetano Giunta <giunta.gaetano@gmail.com>
884
-
885
- tagged and released version 1.1.1, backporting security fixes from HEAD
886
-
887
- 2005-06-28 Gaetano Giunta <giunta.gaetano@gmail.com>
888
-
889
- * xmlrpcs.inc: fix changes introuced yesterday in a rush;
890
- do not list system.* methods for a server that has them explicitly disabled
891
-
892
- * bug_inject.xml: new test case used to check for code injection vulnerability
893
-
894
- * testsuite.php: added a test case for zero parameters method calls;
895
- added two test cases for recently found code injection vulnerabilities
896
-
897
- 2005-06-27 Gaetano Giunta <giunta.gaetano@gmail.com>
898
-
899
- * xmlrpc.inc: (tentative) fix for security problem reported by
900
- security@gulftech.org: we were not properly php-escaping xml received for
901
- BASE64 and NAME tags;
902
- some more patching related to junk received in xml messages/responses: if the
903
- PHP code built from the parsed xml is broken, catch any generated errors
904
- without echoing it to screen but take note of the error and propagate to user
905
- code
906
-
907
- * xmlrpcs.inc: some more patching related to junk received in xml messages/
908
- responses: if the PHP code built from the parsed xml is broken, catch any
909
- generated errors without echoing it to screen but take note of the error and
910
- propagate to user code
911
-
912
- 2005-06-24 Gaetano Giunta <giunta.gaetano@gmail.com>
913
-
914
- * xmlrpc.inc: fixed php_xmlrpc_encode detection of php arrays (again!);
915
- removed from wrap_php_function the part about setting a custom error handler
916
- (it can be activated using the more general $server->setdebug(3) anyway)
917
-
918
- * xmlrpcs.inc: added to server the capability to trap all processing errors
919
- during execution of user functions and add them to debug info inside responses;
920
- return a (new) xmlrpcerr response instead of raising some obscure php execution
921
- error if there is an undefined function in the dispatch map
922
-
923
- * testsuite.php: Added new testcases for recently implemented stuff
924
-
925
- 2005-06-23 Gaetano Giunta <giunta.gaetano@gmail.com>
926
-
927
- * xmlrpc.inc: added new method: xmlrpcval->structmemexists, to check for
928
- presence of a wanted struct member without having to loop through all members;
929
- fix wrap_php_functions: correctly return false for php internal functions,
930
- whose param list is unknown;
931
- let addscalar fail as it should if called on struct vals;
932
- fix addstruct: do not fail when called for adding stuff to initialized structs;
933
- removed a warning generated when calling addscalar with inexistent type;
934
- massive code review for speed: replaced each() loops with foreach(), removed
935
- lots of useless assignments and duplications of data;
936
- added 'http11' as valid method param for xmlrpclient->send: makes use of curl
937
- for sending http 1.1 requests;
938
- changed a couple '=' into '=&' where objects are returned;
939
- fixed wrap_php_function() to better detect php errors while processing wrapped
940
- function
941
-
942
- * xmlrpcs.inc: Fix php warnings generated when clients requested method
943
- signature / description for a method that had none in its dispatch map;
944
- turned server->debug into an integer value that will change the amount of
945
- logging going as comments into xmlrpc responses
946
-
947
- * server.php: set default server debug level to 2
948
-
949
- * testsuite.php: removed calls to deleted functions (xmlrpc_encode,
950
- xmlrpc_decode);
951
- added html page title describing target servers used for tests;
952
- added an assign-by-ref
953
-
954
- * phpunit.php: Do not consider as failures PHP 5 E_STRICT errors (arbitrary
955
- choice, but lib is targeted at PHP 4)
956
-
957
- 2005-06-22 Gaetano Giunta <giunta.gaetano@gmail.com>
958
-
959
- * xmlrpc.inc: removed lottsa old code that had been left in commented
960
-
961
- * xmlrpc.inc: fixed setting of proxy port
962
-
963
- * xmlrpc.inc: removed one warning when trying to decompress junk sent as
964
- deflated response
965
-
966
- * xmlrpc.inc: changed the error messages (but not the code) that will be found
967
- in xmlrpcresponses when there are socket errors, to differentiate from HTTP
968
- errors
969
-
970
- * xmlrpc.inc: refactored xmlrpcclient->sendpayloadHTTPS: now it calls a new
971
- method (sendpayloadCURL) that could be used also for generating HTTP 1.1
972
- requests
973
-
974
- * xmlrpc.inc: added two new methods: wrap_php_function and wrap_xmlrpc_method:
975
- designed to let the lazy programmer automagically convert php functions to
976
- xmlrpc methods and vice versa. Details are in the code
977
-
978
- * debugger/*: added initial revision of a 'universal xmlrpc debugger'
979
-
980
- 2005-06-20 Gaetano Giunta <giunta.gaetano@gmail.com>
981
-
982
- * xmlrpc.inc: replace usage of 'echo' with error_log when errors arise
983
- in manipulation of xmlrpcval objects
984
-
985
- * xmlrpc.inc: replaced <br> with <br /> in dump function
986
-
987
- * xmlrpc.inc: added method structsize to xmlrpcval class (alias for arraysize)
988
-
989
- * xmlrpc.inc: addarray() now will add extra members to an xmlrpcval object
990
- of array type; addstruct() can be used to add members to an xmlrpcval object
991
- of struct type
992
-
993
- * xmlrpcs.inc: Added member allow_system_funcs to server: controls whether the
994
- server accepts or not calls to system.* functions
995
-
996
- 2005-05-10 Gaetano Giunta <giunta.gaetano@gmail.com>
997
-
998
- * xmlrpc.inc: fix regression in php_xmlrpc_encode when encoding php hashes;
999
- fix decompression of gzip/deflated xmlrpc responses;
1000
- set user agent string correctly in SSL mode (was forgetting lib name);
1001
- add allowed encoding http headers in requests;
1002
- do not pass http headers back from curl to parseresponse, to avoid re-decoding
1003
- compressed xml or http 100 headers
1004
-
1005
- * xmlrpcs.inc: added method setDebug;
1006
- renamed compress_output to compress_response;
1007
- do not try to set http headers if they have already been sent, because trying
1008
- to do so will raise a PHP error, and if headers have been sent something has
1009
- gone wrong already (shall we send a meaningful error response instead?)
1010
-
1011
- 2005-05-08 Gaetano Giunta <giunta.gaetano@gmail.com>
1012
-
1013
- * xmlrpcs.inc, xmlrpcs.inc: reverted to usage of '=& new' for better
1014
- performance on (some) php4 installs.
1015
- NB: PHP 3 compatibility is deprecated from now on!
1016
-
1017
- * xmlrpc.inc: decode xmlrpc boolean type to native php boolean
1018
-
1019
- * xmlrpcs.inc, xmlrpcs.inc: switched $_xh[$parser] to $_xh, since indexing
1020
- an array by object will give a warning in php 5 (and we were resetting the
1021
- array of _xh elements on every call anyway)
1022
-
1023
- * xmlrpc.inc: commented unused code used originally for escaping content
1024
-
1025
- * xmlrpc.inc: commented deprecated methods xmlrpc_encode and xmlrpc_decode
1026
-
1027
- * xmlrpc.inc: php_xmlrpc_encode: encode integer-indexed php arrays as xmlrpc
1028
- arrays instead of structs; if object given to encode is an xmlrpcval return it
1029
- instead of reencoding (makes easier calling encode on an array of xmlrpcvals)
1030
-
1031
- * xmlrpcs.inc: added $debug field to server class; if false will prevent
1032
- the server from echoing debug info back to the client as xml comment
1033
-
1034
- * xmlrpcs.inc: let the server add to the debug messages the complete request
1035
- payload received and (if php installed as apache module) http headers, so that
1036
- the client in debug mode can echo a complete fingerprint of the communication
1037
-
1038
- * xmlrpcs.inc: changed API of ParseRequest method: now it cannot be called
1039
- without a 'data' parameter; added 2nd parameter (http encoding); changed the
1040
- call to this method from inside service() method
1041
-
1042
- * xmlrpc.inc, xmlrpcs.inc: enable both server and client to parse compressed xml
1043
- (if php is compiled with zlib); client should also be able to decode chunked
1044
- http encoding
1045
-
1046
- * xmlrpc.inc: add support for proxies (only basic auth supported); default port
1047
- is 8080 (if left unspecified)
1048
-
1049
- * xmlrpc.inc: use lowercase for names of http headers received (makes using
1050
- them much simpler, since servers can use any upper/lowercase combination)
1051
-
1052
- * xmlrpc.inc: bumped version number to '2.0 beta'
1053
-
1054
- 2005-05-08 Gaetano Giunta <giunta.gaetano@gmail.com>
1055
-
1056
- * release of version 1.1
1057
-
1058
- 2005-04-24 Gaetano Giunta <giunta.gaetano@gmail.com>
1059
-
1060
- * xmlrpcs.inc: removed charset declaration from xml prologue of responses,
1061
- since we are now escaping all non-ascii chars in an encoding-independent way
1062
-
1063
- * bug_http.xml: modified to exercise some extra functonality of the lib
1064
- (it should now be failed by the current PEAR implementation of the lib)
1065
-
1066
- * xmlrpc.inc: bumped up rev. number to 1.1
1067
-
1068
- * doc/xmlrpc_php.xml, doc/announce1_1.txt: documentation updates
1069
-
1070
- * Makefile: updated to reflect new xml doc source, modified filelist
1071
-
1072
- 2005-04-17 Gaetano Giunta <giunta.gaetano@gmail.com>
1073
-
1074
- * client.php, agesort.php, introspect.php, introspect_demo.php,
1075
- which.php, test.pl, test.py: use as default target the server.php page hosted
1076
- on phpxmlrpc.sf.net
1077
-
1078
- * server.php: fix for register_globals off; refer to docs on phpxmlrpc.sf.net
1079
-
1080
- 2005-04-15 Miles Lott <milos@groupwhere.org>
1081
-
1082
- code formatting and comments
1083
-
1084
- 2005-04-03 Gaetano Giunta <giunta.gaetano@gmail.com>
1085
-
1086
- * xmlrpc.inc: make use of global var $xmlrpcName in building User_Agent HTTP
1087
- header (in conjunction with $xmlrpcVersion)
1088
-
1089
- * agesort.php, client.php, comment.php, dicuss.php, mail.php, server.php,
1090
- which.php: various janitorial fixes
1091
- + always html escape content received from xmlrpc server or from user input
1092
- + make the scripts run fine with register_globals off an register_long_arrays off
1093
- + always use the functions php_xmlrpc_en(de)code, even if the EPI extension
1094
- is not installed
1095
- + in mail.php, allow user to see script source even if support for .phps files
1096
- is not configured in the local web server
1097
-
1098
- * testsuite.php: better detection of local webserver hostname for running tests
1099
- against (if the user did not supply a webserver name)
1100
-
1101
- 2005-03-21 Gaetano Giunta <giunta.gaetano@gmail.com>
1102
-
1103
- * xmlrpcs.inc: revert to a PHP3 compatible script (change '=& new' to '= new')
1104
-
1105
- * xmlrpc.inc: revert to a PHP3 compatible script (lottsa fixes)
1106
-
1107
- * testsuite.php: default to using local server as test target if no user
1108
- provided values are available instead of heddley.com server
1109
-
1110
- * testsuite.php: play nice to PHP3 in retrieving user-passed values
1111
-
1112
- * testsuite.php: fix constructor method name for a type of tests
1113
-
1114
- * phpunit.php: fix all cases of call-time-pass-by-ref
1115
-
1116
- * phpunit.php: rename Exception class to _Exception if the script is run with
1117
- PHP 5 (exception is a reserverd word)
1118
-
1119
- 2005-03-19 Gaetano Giunta <giunta.gaetano@gmail.com>
1120
-
1121
- * xmlrpc.inc: fixed bug in new http header parsing code in case there is
1122
- no correct separator between response headers and body
1123
-
1124
- * xmlrpc.inc: added recognizing and stripping of HTTP/1.1 100 response headers
1125
-
1126
- * xmlrpc.inc: strip extra whitespace from response body, as well as any junk
1127
- that comes after the last </MethodResponse> tag. It allows the server code to
1128
- be put on public providers that add e.g. javascript advertising to served pages
1129
-
1130
- * xmlrpc.inc: removed unused parts of code, trailing whitespace
1131
-
1132
- * xmlrpc.inc: fix possible bug (?) in xmlrpc_ee for BOOLEAN values: true was
1133
- being handled differently than false
1134
-
1135
- * testsuite.php: added a new file-based test to stress the response parsing
1136
- modifications recently introduced; enabled debugging for file based tests
1137
-
1138
- 2005-03-15 Gaetano Giunta <giunta.gaetano@gmail.com>
1139
-
1140
- * xmlrpc.inc: fixed missing declaration of global vars in xmlrpc_dh,
1141
- sendpayloadhttps and sendpayloadhttp10
1142
-
1143
- * xmlrpc.inc: changed error message for invalid responses: 'enable debugging'
1144
- is more clear that 'enabling debugging' (the user is being encouraged to do it)
1145
-
1146
- * xmlrpc.inc: rewrote HTTP response header parsing. It should be more tolerant
1147
- of invalid headers, give more accurate error messages and be marginally faster,
1148
- too.
1149
-
1150
- * xmlrpc.inc: cosmetic whitespace fixes and remove useless one-liners
1151
-
1152
- * xmlrpc.inc: build a shorter PHP command line to be evaluated for rebuilding
1153
- values from parsed xml: use '$val =& nex xmlrpcval("value")' for string values
1154
- instead of '$val =& nex xmlrpcval("value", $xmlrpcString)'
1155
-
1156
- * xmlrpc.inc: fix change introduced 2005/01/30 moving call to curl_close()
1157
- too early: it did not work on error situations
1158
-
1159
- * testsuite.php: fix name of testAddingTest method, renamed testErrosString
1160
- into testErrorString and removed useless warning for register_globals=off case
1161
-
1162
- 2005-02-27 Gaetano Giunta <giunta.gaetano@gmail.com>
1163
-
1164
- * xmlrpc.inc: do not echo XML parsing error to screen (it is already dumped
1165
- into error log)
1166
-
1167
- * xmlrpc.inc: set hdrs field into response object in case of XML parsing error
1168
- (uniform behaviour with other responses)
1169
-
1170
- 2005-02-26 Gaetano Giunta <giunta.gaetano@gmail.com>
1171
-
1172
- * xmlrpc.inc: use global var $xmlrpcVersion as number for user agent string
1173
-
1174
- * xmlrpcs.inc: eliminate server side PHP warning and give back to caller
1175
- a better error msg in case the called method exists but no signature matches
1176
- the number of parameters
1177
-
1178
- 2005-02-20 Gaetano Giunta <giunta.gaetano@gmail.com>
1179
-
1180
- * xmlrpc.inc: accept a + sign in front of floats / integers, since the spec
1181
- clearly mentions it
1182
-
1183
- * xmlrpc.inc, xmlrpcs.inc: renamed function XmlEntities to xmlrpc_encode_entitites,
1184
- to avoid using the same name as an array already defined
1185
-
1186
- * xmlrpc.inc: fix bug introduced with escaping of UTF8 chars in xmlrpc error
1187
- responses: correct behaviour is to escape chars inside serialize(), not when
1188
- calling the xmlrpcresp creator
1189
-
1190
- * testsuite.php: made test suite more friendly to modern PHP configs, allowing
1191
- register_globals to be off and to set in the URL all testing parameters;
1192
- added tests for newly introduced fixes; renamed existing tests acording to the
1193
- docs inside phpunit.php (e.g. no subclass of TestCase should have a name
1194
- starting with test...)
1195
-
1196
- 2005-02-19 Gaetano Giunta <giunta.gaetano@gmail.com>
1197
-
1198
- * xmlrpc.inc: accept patch 683153 by mah0: if timeout is set, allow all socket
1199
- operations to timeout at the given time, not only the socket connection
1200
-
1201
- 2005-02-13 Gaetano Giunta <giunta.gaetano@gmail.com>
1202
-
1203
- * xmlrpc.inc: be tolerant to double values received in exponential notation:
1204
- even though the spec forbids their usage PHP is fine with them
1205
-
1206
- * xmlrpc.inc: fix bug: new xmlrpcval('-1') was creating an empty value instead
1207
- of a string value!
1208
-
1209
- * xmlrpc.inc, xmlrpcs.inc: fix the payload encoding changes introduced by
1210
- Andres Salomon on 2004-03-17: sending named html entities inside an xml chunk
1211
- makes it invalid, and thus renders the lib absolutely non-interoperable with
1212
- any other xmlrpc implementation; moreover the current implementation only ever
1213
- worked for non-ascii requests, while breaking client-parsing of responses
1214
- containing non-ascii chars.
1215
- The principle of using entities is preserved though, because it allows the
1216
- client to send correct xml regardless of php internal charset encoding vs.
1217
- xml request charset encoding, but using 'character references' instead.
1218
-
1219
- * xmlrpc.inc: encode (non-ascii) chars into charset entities also for error
1220
- strings
1221
-
1222
- * xmlrpcs.inc: encode (non-ascii) chars into charset entities also for debug
1223
- messages
1224
-
1225
- * xmlrpcs.inc: added 'Accept-Charset' header in http request to let the server
1226
- know what kind of charset encoding we do expect to be used for responses
1227
-
1228
- * xmlrpc.inc, xmlrpcs.inc: explicitly tell the xml parser what charset the
1229
- application expects to receive content in (notably strings). A new variable,
1230
- $xmlrpc_internalencoding, (defaulting to ISO-8859-1) defines what charset the
1231
- parser will use for passing back string xmlrpcvals to the PHP application
1232
- (both server-side and client-side).
1233
- This allows transparent usage of e.g. UTF-8 for encoding xml messages between
1234
- server and client and ISO-8859-1 for internal string handling.
1235
- ISO-8859-1 is, AFAIK, PHP internal encoding for all installs except
1236
- mbstring-enabled ones.
1237
-
1238
- 2005-02-12 Gaetano Giunta <giunta.gaetano@gmail.com>
1239
-
1240
- * xmlrpcs.inc: use '$var =& new(' construct to assign objects: on older versions
1241
- of PHP objects are first built then copied over if the ampersand is omitted.
1242
- Using it should make the code a little bit faster...
1243
-
1244
- * doc/xmlrpc.php: update lib version number, release date in preparation for
1245
- next release
1246
-
1247
- * makefile: update lib version number in preparation for next release
1248
-
1249
- * xmlrpc.inc: split up parsing of xmlrpc INT and DOUBLE values. This allows
1250
- finer-grained control over valid values: now the '.' char is not allowed
1251
- any more inside int values.
1252
-
1253
- * xmlrpc.inc: fix for bug #560303: ints and doubles starting with '0' chars are
1254
- no more parsed as octal values
1255
-
1256
- 2005-01-30 Gaetano Giunta <giunta.gaetano@gmail.com>
1257
-
1258
- * xmlrpc.inc: Modifed last change by Miles: the functions php_xmlrpc_encode
1259
- and php_xmlrpc_decode are now always defined, regardless of the existence of
1260
- XMLRPC-EPI. This allows users to start using these functions as the 'default'
1261
- functions, and pave the way for future deprecation of xmlrpc_encode/encode
1262
- while maintaining a stable API.
1263
-
1264
- * xmlrpc.inc: use '$var =& new(' construct to assign objects: on older versions
1265
- of PHP objects are first built then copied over if the ampersand is omitted.
1266
- Using it should make the code a little bit faster...
1267
-
1268
- * xmlrpc.inc: close curl connection as soon as possible for https requests:
1269
- it could save some memory / resources.
1270
-
1271
- * xmlrpc.inc: added some extra info in the PHP error log message generated
1272
- when an invalid xmlrpc integer/float value is encountered and we try to
1273
- deserialize it.
1274
-
1275
- * xmlrpc.inc: added @ char before fsockopen to avoid echoing useless warnings
1276
- when connection to server fails; added the same to avoid echoing warnings when
1277
- deserializing data of an unknown type
1278
-
1279
- * xmlrpc.inc: reset the _xh array on each xmlrpc call: otherwise a new array
1280
- member is created for each consecutive call and never destroyed, thus making it
1281
- impossible to build an xmlrpc-client daemon beacuse of memory leaking.
1282
-
1283
- * xmlrpc.inc: declare global the variables that are used as 'constants',
1284
- so that xmlrpc.inc will work even if it is included from within a function
1285
-
1286
- 2004-12-27 Miles Lott <milos@groupwhere.org>
1287
- * xmlrpc.inc: A new constant, XMLRPC_EPI_ENABLED, is defined depending on
1288
- the existence of the function, xmlrpc_decode. This function will exist in
1289
- PHP if the extension, XMLRPC-EPI (http://xmlrpc-epi.sourceforge.net), is
1290
- loaded. It defines the functions xmlrpc_encode and xmlrpc_decode, which
1291
- will conflict with functions of the same name in xmlrpc.inc. If this
1292
- extension is loaded, we instead use the names php_xmlrpc_encode and
1293
- php_xmlrpc_decode. Please look at server.php, testsuite.php, etc., for
1294
- how this should be handled if using these functions.
1295
-
1296
- 2003-04-17 Andres Salomon <dilinger@voxel.net>
1297
- * xmlrpc.inc: encode strings using htmlentities() instead of
1298
- htmlspecialchars(), and add xmlrpc_html_entity_xlate(). This
1299
- should fix longstanding issues with sending weird chars (from
1300
- non-USASCII codesets like UTF-8, ISO-8859-1, etc) that caused
1301
- the xml parser to choke. Multi-byte chars are now changed to
1302
- entities before sending, so that the xmlrpc server doesn't need
1303
- to know the encoding type of the POST data.
1304
- * xmlrpcs.inc: call xmlrpc_html_entity_xlate before parsing
1305
- request packet. The parser chokes on unknown entities (the
1306
- entities created by htmlentities() are exactly that; html
1307
- entities, not xml entities), so they must be converted from
1308
- name form (&eacute;) to numerical form (&#233;).
1309
-
1310
- 2003-01-12 Andres Salomon <dilinger@voxel.net>
1311
-
1312
- * released 1.0.99.2.
1313
- * Makefile: separate doc/Makefile a bit more from Makefile,
1314
- and add clean rules.
1315
-
1316
- 2003-01-10 Andres Salomon <dilinger@voxel.net>
1317
-
1318
- * xmlrpc.inc: xmlrpcresp and parseResponse cleanups; variable
1319
- name renames ('xv' to 'val', for example), type checking, and
1320
- stricter default values.
1321
- * xmlrpc.inc: fix xmlrpcresp's faultcode; return -1 for FAULT
1322
- responses from the server whose faultcodes don't reflect any
1323
- errors.
1324
-
1325
- 2003-01-08 Andres Salomon <dilinger@voxel.net>
1326
-
1327
- * xmlrpc.inc: rename $_xh[$parser]['ha'] to
1328
- $_xh[$parser]['headers'].
1329
- * xmlrpc.inc: fix bugs related to $_xh[$parser]['headers];
1330
- some places treated this as an array, others as a scalar.
1331
- Treat unconditionally as an array. Also wrap header debugging
1332
- output in PRE tags.
1333
-
1334
- 2002-12-17 Andres Salomon <dilinger@voxel.net>
1335
-
1336
- * released 1.0.99.
1337
- * Makefile: changed the tarball format/dist rule to a more
1338
- conventional form, as well as normal release updates.
1339
- * xmlrpc.inc: added setSSLVerifyPeer and setSSLVerifyHost; as
1340
- of curl 7.10, various certificate checks are done (by default).
1341
- The default for CURLOPT_SSL_VERIFYHOST is to ensure the common
1342
- name on the cert matches the provided hostname. This breaks a
1343
- lot of stuff, so allow users to override it.
1344
- * doc/xmlrpc_php.sgml: updated documentation accordingly.
1345
-
1346
- 2002-09-06 Geoffrey T. Dairiki <dairiki@dairiki.org>
1347
-
1348
- Add support for system.multicall() to both the client
1349
- and the server.
1350
-
1351
- * testsuite.php: Add new tests 'testServerMulticall',
1352
- and 'testClientMulticall'.
1353
-
1354
- * xmlrpc.inc: Added new error messages for system.multicall().
1355
- * xmlrpcs.inc: Added new procedure call system.multicall().
1356
- See http://www.xmlrpc.com/discuss/msgReader$1208 for details.
1357
-
1358
- * xmlrpc.inc: Added system.multicall functionality to
1359
- xmlrpc_client. xmlrpc_client::send can now take an array of
1360
- xmlrpcmsg's as an argument. In that case it will attempt
1361
- to execute the whole array of procure calls in a single
1362
- HTTP request using system.multicall(). (If that attempt fails,
1363
- then the calls will be excuted one at a time.) The return
1364
- value will be an array of xmlrpcresp's (or 0 upon transport
1365
- failure.)
1366
-
1367
- 2001-11-29 Edd Dumbill <edd@usefulinc.com>
1368
-
1369
- * xmlrpc.inc: fixed problem with processing HTTP headers that
1370
- broke any payload with more than one consecutive newline in it.
1371
- also initialise the 'ac' array member to empty string at start.
1372
- * testsuite.php: added unit test to exercise above bug
1373
- * xmlrpcs.inc: fixed uninitialized variable $plist
1374
-
1375
- 2001-09-25 Edd Dumbill <edd@usefulinc.com>
1376
-
1377
- * xmlrpc.inc: applied urgent security fixes as identified by Dan
1378
- Libby
1379
-
1380
- 2001-08-27 Edd Dumbill <edd@usefulinc.com>
1381
-
1382
- * xmlrpc.inc: Merged in HTTPS support from Justin Miller, with a
1383
- few additions for better traceability of failure conditions. Added
1384
- small fix from Giancarlo Pinerolo. Bumped rev to 1.0. Changed
1385
- license to BSD license.
1386
-
1387
- 2001-06-15 Edd Dumbill <edd@usefulinc.com>
1388
-
1389
- * xmlrpcs.inc: Added \r into return MIME headers for server class
1390
-
1391
- 2001-04-25 Edd Dumbill <edd@usefulinc.com>
1392
-
1393
- * server.php: Added interop suite of methods.
1394
-
1395
- 2001-04-24 Edd Dumbill <edd@usefulinc.com>
1396
-
1397
- * testsuite.php: added in test case for string handling bug.
1398
-
1399
- * xmlrpc.inc: merged in minor fixes from G Giunta to fix
1400
- noninitialization. Created new method, getval(), which includes
1401
- experimental support for recreating nested arrays, from Giunta and
1402
- Sofer. Fixed string handling bug where characters after </string>
1403
- but before </value> weren't ignored. Added in support for native
1404
- boolean type into xmlrpc_encode (Giunta).
1405
-
1406
- * xmlrpcs.inc: updated copyright notice
1407
-
1408
- 2001-01-15 Edd Dumbill <edd@usefulinc.com>
1409
-
1410
- * xmlrpc.inc: fixed bug with creation of booleans. Put checks in
1411
- to ensure that numbers were really numeric. Fixed bug with
1412
- non-escaping of dollar signs in strings.
1413
-
1414
- * testsuite.php: created test suite.
1415
-
1416
- 2000-08-26 Edd Dumbill <edd@usefulinc.com>
1417
-
1418
- * xmlrpcs.inc: added xmlrpc_debugmsg() function which outputs
1419
- debug information in comments inside the return payload XML
1420
-
1421
- * xmlrpc.inc: merged in some changes from Dan Libby which fix up
1422
- whitespace handling.
1423
-
1424
- * xmlrpcs.inc: added Content-length header on response (bug from
1425
- Jan Varga <varga@utcru.sk>. This means you can no longer print
1426
- during processing
1427
-
1428
- * xmlrpc.inc: changed ereg_replace to str_replace in several
1429
- places (thanks to Dan Libby <dan@libby.com> for this).
1430
-
1431
- * xmlrpc.inc: added xmlrpc_encode() and xmlrpc_decode() from Dan
1432
- Libby--these helper routines make it easier to work in native PHP
1433
- data structures.
1434
-
1435
- 2000-07-21 Edd Dumbill <edd@usefulinc.com>
1436
-
1437
- * xmlrpc.inc: added xmlrpc_client::setCredentials method to pass
1438
- in authorization information, and modified sendPayload* methods to
1439
- send this OK. Thanks to Grant Rauscher for the impetus to do this.
1440
- Also, made the client send empty <params></params> if there are no
1441
- parameters set by the user.
1442
-
1443
- * doc/xmlrpc_php.sgml: updated documentation to reflect recent
1444
- changes
1445
-
1446
-
1447
- 2000-07-18 Edd Dumbill <edd@usefulinc.com>
1448
-
1449
- * server.php: added examples.invertBooleans method to server as a
1450
- useful test method for boolean values.
1451
-
1452
- * xmlrpc.inc: rearranged the way booleans are handled to fix
1453
- outstanding problems. Fixed calling addScalar() on arrays so it
1454
- works. Finally fixed backslashification issues to remove the
1455
- problem will dollar signs disappearing.
1456
-
1457
- * booltest.php: really fixed booleans this time.
1458
-
1459
- 2000-06-03 Edd Dumbill <edd@usefulinc.com>
1460
-
1461
- * xmlrpcs.inc: made signature verification more useful - now
1462
- returns what it found was wrong
1463
-
1464
- * xmlrpc.inc: fixed bug with decoding dateTimes. Also fixed a bug
1465
- which meant a PHP syntax error happened when attempting to receive
1466
- empty arrays or structs. Also fixed bug with booleans always being
1467
- interpreted as 'true'.
1468
-
1469
- * server.php: Added validator1 suite of tests to test against
1470
- validator.xmlrpc.com
1471
-
1472
-
1473
- 2000-05-06 Edd Dumbill <edd@usefulinc.com>
1474
-
1475
- * released 1.0b6
1476
-
1477
- * added test.pl and test.py, Perl and Python scripts that exercise
1478
- server.php somewhat (but not a lot)
1479
-
1480
- * added extra fault condition for a non 200 OK response from the
1481
- remote server.
1482
-
1483
- * added iso8601_encode() and iso8601_decode() to give some support
1484
- for passing dates around. They translate to and from UNIX
1485
- timestamps. Updated documentation accordingly.
1486
-
1487
- * fixed string backslashification -- was previously a little
1488
- overzealous! new behavior is '\' --> '\\' and '"' -->
1489
- '\"'. Everything else gets left alone.
1490
-
1491
- 2000-04-12 Edd Dumbill <edd@usefulinc.com>
1492
-
1493
- * updated and bugfixed the documentation
1494
-
1495
- * fixed base 64 encoding to only happen at serialize() time,
1496
- rather than when a base64 value is created. This fixes the double
1497
- encoding bug reported by Nicolay Mausz
1498
- <castor@flying-dog.com>. The same approach ought to be taken with
1499
- encoding XML entities in the data - this is a TODO.
1500
-
1501
- * integrated further code from Peter Kocks: used his new code for
1502
- send(), adding a second, optional, parameter which is a timeout
1503
- parameter to fsockopen()
1504
-
1505
- 1999-10-11 Edd Dumbill <edd@usefulinc.com>
1506
-
1507
- * added bug fixes from Peter Kocks <peter.kocks@baygate.com>
1508
-
1509
- 1999-10-10 Edd Dumbill <edd@usefulinc.com>
1510
-
1511
- * updated the documentation
1512
-
1513
- 1999-10-08 Edd Dumbill <edd@usefulinc.com>
1514
-
1515
- * added system.* methods and dispatcher, plus documentation
1516
-
1517
- * fixed bug which meant request::getNumParams was returning an
1518
- incorrect value
1519
-
1520
- * added signatures into the dispatch map. This BREAKS
1521
- COMPATIBILITY with previous releases of this code
1522
-
1523
- 1999-08-18 Edd Dumbill <edd@usefulinc.com>
1524
-
1525
- * made entity encoding and decoding transparent now on string
1526
- passing.
1527
-
1528
- * de-globalised the globals in the parse routines, using an
1529
- associative array to hold all parser state $_xh
1530
-
1531
- * changed default input encoding to be UTF-8 to match expectation
1532
-
1533
- * separated out parseResponse into parseResponse and
1534
- parseResponseFile so that you can call parseResponse on a string
1535
- if you have one handy
1536
-
1537
- 1999-07-20 Edd Dumbill <edd@usefulinc.com>
1538
-
1539
- * Moved documentation into Docbook format
1540
-
1541
- 1999-07-19 Edd Dumbill <edd@usefulinc.com>
1542
-
1543
- * Added an echo server into server.php and echotest.php, a client
1544
- which will exercise the new echo routine.
1545
-
1546
- * Added test for no valid value returned: in this case will now
1547
- throw the error "invalid payload"
1548
-
1549
- * Added serialize() method to xmlrpcresp to return a string with
1550
- the response serialized as XML
1551
-
1552
- * Added automatic encoding and decoding for base64 types
1553
-
1554
- * Added setDebug() method to client to enable HTML output
1555
- debugging in the client
1556
-
1557
- 1999-07-08 Edd Dumbill <edd@usefulinc.com>
1558
-
1559
- * Improved XML parse error reporting on the server side to send it
1560
- back in a faultCode packet. expat errors now begin at 100
1561
-
1562
- 1999-07-07 Edd Dumbill <edd@usefulinc.com>
1563
-
1564
- * Changed the structmem and arraymem methods of xmlrpcval to always
1565
- return xmlrpc vals whether they referred to scalars or complex
1566
- types.
1567
-
1568
- * Added the server class and demonstrations
1569
-
1570
- * Fixed bugs in the XML parsing and reworked it
1571
-
1572
-
1573
- $Id: ChangeLog,v 1.96 2009/03/16 19:39:11 ggiunta Exp $
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/infusionsoft/xmlrpc-3.0/Makefile DELETED
@@ -1,123 +0,0 @@
1
- # Makefile for phpxmlrpc library
2
- # $Id: Makefile,v 1.37 2008/03/06 22:37:19 ggiunta Exp $
3
-
4
- ### USER EDITABLE VARS ###
5
-
6
- # path to PHP executable, preferably CLI version
7
- PHP=/usr/local/bin/php
8
-
9
- # path were xmlrpc lib files will be copied to
10
- PHPINCLUDEDIR=/usr/local/lib/php
11
-
12
- # mkdir is a thorny beast under windows: make sure we can not use the cmd version, running eg. "make MKDIR=mkdir.exe"
13
- MKDIR=mkdir
14
-
15
- #find too
16
- FIND=find
17
-
18
-
19
- #### DO NOT TOUCH FROM HERE ONWARDS ###
20
-
21
- # recover version number from code
22
- # thanks to Firman Pribadi for unix command line help
23
- # on unix shells lasts char should be \\2/g )
24
- export VERSION=$(shell egrep "\$GLOBALS *\[ *'xmlrpcVersion' *\] *= *'" lib/xmlrpc.inc | sed -r s/"(.*= *' *)([0-9a-zA-Z.-]+)(.*)"/\2/g )
25
-
26
- LIBFILES=lib/xmlrpc.inc lib/xmlrpcs.inc lib/xmlrpc_wrappers.inc
27
-
28
- EXTRAFILES=extras/test.pl \
29
- extras/test.py \
30
- extras/rsakey.pem \
31
- extras/workspace.testPhpServer.fttb
32
-
33
- DEMOFILES=demo/vardemo.php \
34
- demo/demo1.txt \
35
- demo/demo2.txt \
36
- demo/demo3.txt
37
-
38
- DEMOSFILES=demo/server/discuss.php \
39
- demo/server/server.php \
40
- demo/server/proxy.php
41
-
42
- DEMOCFILES=demo/client/agesort.php \
43
- demo/client/client.php \
44
- demo/client/comment.php \
45
- demo/client/introspect.php \
46
- demo/client/mail.php \
47
- demo/client/simple_call.php \
48
- demo/client/which.php \
49
- demo/client/wrap.php \
50
- demo/client/zopetest.php
51
-
52
- TESTFILES=test/testsuite.php \
53
- test/benchmark.php \
54
- test/parse_args.php \
55
- test/phpunit.php \
56
- test/verify_compat.php \
57
- test/PHPUnit/*.php
58
-
59
- INFOFILES=Changelog \
60
- Makefile \
61
- NEWS \
62
- README
63
-
64
- DEBUGGERFILES=debugger/index.php \
65
- debugger/action.php \
66
- debugger/common.php \
67
- debugger/controller.php
68
-
69
-
70
- all: install
71
-
72
- install:
73
- cd lib && cp ${LIBFILES} ${PHPINCLUDEDIR}
74
- @echo Lib files have been copied to ${PHPINCLUDEDIR}
75
- cd doc && $(MAKE) install
76
-
77
- test:
78
- cd test && ${PHP} -q testsuite.php
79
-
80
-
81
- ### the following targets are to be used for library development ###
82
-
83
- # make tag target: tag existing working copy as release in cvs.
84
- # todo: convert dots in underscore in $VERSION
85
- tag:
86
- cvs -q tag -p release_${VERSION}
87
-
88
- dist: xmlrpc-${VERSION}.zip xmlrpc-${VERSION}.tar.gz
89
-
90
- xmlrpc-${VERSION}.zip xmlrpc-${VERSION}.tar.gz: ${LIBFILES} ${DEBUGGERFILES} ${INFOFILES} ${TESTFILES} ${EXTRAFILES} ${DEMOFILES} ${DEMOSFILES} ${DEMOCFILES}
91
- @echo ---${VERSION}---
92
- rm -rf xmlrpc-${VERSION}
93
- ${MKDIR} xmlrpc-${VERSION}
94
- ${MKDIR} xmlrpc-${VERSION}/demo
95
- ${MKDIR} xmlrpc-${VERSION}/demo/client
96
- ${MKDIR} xmlrpc-${VERSION}/demo/server
97
- ${MKDIR} xmlrpc-${VERSION}/test
98
- ${MKDIR} xmlrpc-${VERSION}/test/PHPUnit
99
- ${MKDIR} xmlrpc-${VERSION}/extras
100
- ${MKDIR} xmlrpc-${VERSION}/lib
101
- ${MKDIR} xmlrpc-${VERSION}/debugger
102
- cp --parents ${DEMOFILES} xmlrpc-${VERSION}
103
- cp --parents ${DEMOCFILES} xmlrpc-${VERSION}
104
- cp --parents ${DEMOSFILES} xmlrpc-${VERSION}
105
- cp --parents ${TESTFILES} xmlrpc-${VERSION}
106
- cp --parents ${EXTRAFILES} xmlrpc-${VERSION}
107
- cp --parents ${LIBFILES} xmlrpc-${VERSION}
108
- cp --parents ${DEBUGGERFILES} xmlrpc-${VERSION}
109
- cp ${INFOFILES} xmlrpc-${VERSION}
110
- cd doc && $(MAKE) dist
111
- # on unix shells last char should be \;
112
- ${FIND} xmlrpc-${VERSION} -type f ! -name "*.fttb" ! -name "*.pdf" ! -name "*.gif" -exec dos2unix {} ;
113
- -rm xmlrpc-${VERSION}.zip xmlrpc-${VERSION}.tar.gz
114
- tar -cvf xmlrpc-${VERSION}.tar xmlrpc-${VERSION}
115
- gzip xmlrpc-${VERSION}.tar
116
- zip -r xmlrpc-${VERSION}.zip xmlrpc-${VERSION}
117
-
118
- doc:
119
- cd doc && $(MAKE) doc
120
-
121
- clean:
122
- rm -rf xmlrpc-${VERSION} xmlrpc-${VERSION}.zip xmlrpc-${VERSION}.tar.gz
123
- cd doc && $(MAKE) clean
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/infusionsoft/xmlrpc-3.0/NEWS DELETED
@@ -1,333 +0,0 @@
1
- XML-RPC for PHP version 3.0.0 beta - 2009/09/05
2
-
3
- This is the first release of the library to only support PHP 5.
4
- Some legacy code has been removed, and support for features such as exceptions
5
- and dateTime objects introduced.
6
-
7
- The "beta" tag is meant to indicate the fact that the refactoring has been more widespread
8
- than in precedent releases and that more changes are likely to be introduced with time -
9
- the library is still considered to be production quality.
10
-
11
- * improved: removed all usage of php functions deprecated in php 5.3, usage of assign-by-ref when creating new objects etc...
12
- * improved: add support for the <ex:nil/> tag used by the apache library, both in input and output
13
- * improved: add support for dateTime objects in both in php_xmlrpc_encode and as parameter for constructor of xmlrpcval
14
- * improved: add support for timestamps as parameter for constructor of xmlrpcval
15
- * improved: add option 'dates_as_objects' to php_xmlrpc_decode to return dateTime objects for xmlrpc datetimes
16
- * improved: add new method SetCurlOptions to xmrlpc_client to allow extra flexibility in tweaking http config, such as explicitly binding to an ip address
17
- * improved: add new method SetUserAgent to xmrlpc_client to to allow having different user-agent http headers
18
- * improved: add a new member variable in server class to allow fine-tuning of the encoding of returned values when the server is in 'phpvals' mode
19
- * improved: allow servers in 'xmlrpcvals' mode to also register plain php functions by defining them in the dispatch map with an added option
20
- * improved: catch exceptions thrown during execution of php functions exposed as methods by the server
21
- * fixed: bad encoding if same object is encoded twice using php_xmlrpc_encode
22
-
23
-
24
- XML-RPC for PHP version 2.2.2 - 2009/03/16
25
-
26
- This release corrects all bugs that have been reported and sucesfully reproduced since
27
- version 2.2.1.
28
- Regardless of the intimidating message about dropping PHP 4 support, it still does
29
- support that ancient, broken and insecure platform.
30
-
31
- * fixed: php warning when receiving 'false' in a bool value
32
- * fixed: improve robustness of the debugger when parsing weird results from non-compliant servers
33
- * fixed: format floating point values using the correct decimal separator even when php locale is set to one that uses comma
34
- * fixed: use feof() to test if socket connections are to be closed instead of the number of bytes read (rare bug when communicating with some servers)
35
- * fixed: be more tolerant in detection of charset in http headers
36
- * fixed: fix encoding of UTF8 chars outside of the BMP plane
37
- * fixed: fix detection of zlib.output_compression
38
- * improved: allow the add_to_map server method to add docs for single params too
39
- * improved: added the possibility to wrap for exposure as xmlrpc methods plain php class methods, object methods and even whole classes
40
-
41
-
42
- XML-RPC for PHP version 2.2.1 - 2008/03/06
43
-
44
- This release corrects all bugs that have been reported and sucesfully reproduced.
45
- It is the last release of the library that will support PHP 4.
46
-
47
- * fixed: work aroung bug in php 5.2.2 which broke support of HTTP_RAW_POST_DATA
48
- * fixed: is_dir parameter of setCaCertificate() method is reversed
49
- * fixed: a php warning in xmlrpc_client creator method
50
- * fixed: parsing of '1e+1' as valid float
51
- * fixed: allow errorlevel 3 to work when prev. error handler was a static method
52
- * fixed: usage of client::setcookie() for multiple cookies in non-ssl mode
53
- * improved: support for CP1252 charset is not part or the library but almost possible
54
- * improved: more info when curl is enabled and debug mode is on
55
-
56
-
57
- XML-RPC for PHP version 2.2 - 2007/02/25
58
-
59
- This release corrects a couple of bugs and adds a few minor features.
60
-
61
- * fixed: debugger errors on php installs with magic_quotes_gpc on
62
- * fixed: support for https connections via proxy
63
- * fixed: wrap_xmlrpc_method() generated code failed to properly encode php objects
64
- * improved: slightly faster encoding of data which is internally UTF-8
65
- * improved: debugger always generates a 'null' id for jsonrpc if user omits it
66
- * new: debugger can take advantage of a graphical value builder
67
- (it has to be downloaded separately, as part of jsxmlrpc package)
68
- * new: support for the <NIL/> xmlrpc extension
69
- * new: server support for the system.getCapabilities xmlrpc extension
70
- * new: wrap_xmlrpc_method() accepts two new options: debug and return_on_fault
71
-
72
-
73
- XML-RPC for PHP version 2.1 - 2006/08/28
74
-
75
- This release corrects quite a few bugs and adds some interesting new features.
76
- There is a minor security enhancement and overall speedup too.
77
-
78
- It has been tested with PHP 4.0.5 up to 4.4.4 and 5.1.5.
79
- Please note that 404pl1 is NOT supported, and has not been since 2.0.
80
-
81
- *** PLASE READ CAREFULLY BELOW ***
82
-
83
- CHANGES THAT MIGHT AFFECT DEPLOYED APPLICATIONS:
84
-
85
- The wrap_php_function and wrap_xmlrpc_method functions have been moved out of
86
- the base library file xmlrpc.inc into a file of their own: xmlrpc_wrappers.inc.
87
- You will have to include() / require() it in your scripts if you have been using
88
- those functions.
89
-
90
- For increased security, the automatic rebuilding of php object instances out of
91
- received xmlrpc structs in wrap_xmlrpc_method() has been disabled (but it can be
92
- optionally reenabled).
93
-
94
- The constructor of xmlrpcval() values has seen major changes, and it will not
95
- throw a php warning anymore when invoked using an unknown xmlrpc type: the
96
- error will only be written to php error log. Also new xmlrpcval('true', 'boolean')
97
- is not supported anymore.
98
-
99
- MAJOR IMPROVEMENTS:
100
-
101
- The new function php_xmlrpc_decode_xml() will take the xml representation of
102
- either an xmlrpc request, response or single value and return the corresponding
103
- php-xmlrpc object instance.
104
-
105
- Both wrap_php_function() and wrap_xmlrpc_method() functions accept many more
106
- options to fine tune their behaviour, including one to return the php code to
107
- be saved and later used as standalone php script.
108
-
109
- A new function wrap_xmlrpc_server() has been added, to wrap all (or some) of the
110
- methods exposed by a remote xmlrpc server into a php class.
111
-
112
- Lib internals have been modified to provide better support for grafting extra
113
- functionality on top of it. Stay tuned for future releases of the EXTRAS package.
114
-
115
- Last but not least a new file has been added: verify_compat.php, to help users
116
- diagnose the level of compliance of the current php install with the library.
117
-
118
- CHANGELOG IN DETAIL:
119
-
120
- * fixed bug 1311927: client not playing nice with some proxy/firewall on ports != 80
121
- * fixed bug 1334340: all ereg_ functions have been replaced with corresponding preg_
122
- * fixed bug: wrong handling of 'deflate' http encoding, both server and client side
123
- * fixed bug: sending compressed responses when php output compression is enabled was not working
124
- * fixed bug: addarray() and addstruct() where not returning 1 when adding data to already initialized values
125
- * fixed bug: non-ascii chars used in struct element names where not being encoded correctly
126
- * restored compatibility with php 4.0.5 (for those poor souls still stuck on it)
127
- * server->service() now returns either the payload or xmlrpcresp instance
128
- * server->add_to_map() now accepts methods with no param definitions
129
- * added new function: php_xmlrpc_decode_xml()
130
- * added new function: wrap_xmlrpc_server()
131
- * major improvements and security enhancements to wrap_php_function() and wrap_xmlrpc_method()
132
- * documentation for single parameters of exposed methods can be added to the dispatch map
133
- (and turned into html docs in conjunction with a future release of the extras package)
134
- * full response payload is saved into xmlrpcresp object for further debugging
135
- * stricter parsing of incmoing xmlrpc messages: two more invalid cases are now detected
136
- (double data element inside array and struct/array after scalar inside value element)
137
- * debugger can now generate code that wraps a remote method into php function (works for jsonrpc, too)
138
- * debugger has better support for being activated via a single GET call (for integration into other tools?)
139
- * more logging of errors in a lot of situations
140
- * javadoc documentation of lib files almost complete
141
- * the usual amount of new testcases in the testsuite
142
- * many performance tweaks and code cleanups
143
- * added foundation for emulating the API of the xmlrpc extension (extras package needed)
144
-
145
-
146
- XML-RPC for PHP version 2.0 - 2006/04/24
147
-
148
- I'm pleased to announce XML-RPC for PHP version 2.0, final.
149
-
150
- With respect to the last release candidate, this release corrects a few small
151
- bugs and adds a couple of new features: more authentication options (digest and
152
- ntlm for servers, ntlm for proxies, and some https custom certificates stuff);
153
- all the examples have been reviewed and some demo files added,
154
- including a ready-made xmlrpc proxy (useful e.g. for ajax calls, when the xmlrpc
155
- client is a browser); the server logs more warning messages for incorrect situations;
156
- both client and server are more tolerant of commonly-found mistakes.
157
- The debugger has been upgraded to reflect the new client capabilities.
158
-
159
- In greater detail:
160
-
161
- * fixed bug: method xmlrpcval::structmemexists($value) would not work
162
- * fixed bug: wrap_xmlrpc_method would fail if invoked with a client object that
163
- has return_type=phpvals
164
- * fixed bug: in case of call to client::multicall without fallback and server error
165
- * fixed bug: recursive serialization of xmlrpcvals loosing specified UTF8 charset
166
- * fixed bug: serializing to ISO-8859-1 with php 5 would raise an error if non-ascii
167
- chars where found when decoding
168
- * new: client can use NTLM and Digest authentication methods for https and http 1.1
169
- connections; authentication to proxy can be set to NTLM, too
170
- * new: server tolerates user functions returning a single xmlrpcval object instead
171
- of an xmlrpcresp
172
- * new: server does more checks for presence and correct return type of user
173
- coded method handling functions, and logs inconsistencies to php error log
174
- * new: client method SetCaCertificate($cert, $is_dir) to validate server against
175
- * new: both server and client tolerate receiving 'true' and 'false' for bool values
176
- (which btw are not valid according to the xmlrpc spec)
177
-
178
-
179
- XML-RPC for PHP version 2.0RC3 - 2006/01/22
180
-
181
- This release corrects a few bugs and adds some interesting new features.
182
- It has been tested with PHP up to 4.4.2 and 5.1.2.
183
-
184
- * fixed bug: server not recognizing clients that declare support for http compression
185
- * fixed bug: serialization of new xmlrpcval (8, 'string') when internal encoding
186
- set to UTF-8
187
- * fixed bug: serialization of new xmlrpcval ('hello', 'int') would produce
188
- invalid xml-rpc
189
- * new: let the server accept 'class::method' syntax in the dispatch map
190
- * new: php_xmlrpc_decode() can decode xmlrpcmessage objects
191
- * new: both client and server can specify a charset to be used for serializing
192
- values instead of the default 'US-ASCII+xml-entities-for-other-characters'.
193
- Values allowed: ISO-8859-1 and UTF-8
194
- * new: the server object can register 'plain' php functions instead of functions
195
- that accept a single parameter of type xmlrpcmsg. Faster, uses less memory
196
- (but comes with minor drawbacks as well, read the manual for more details)
197
- * new: client::setDebug(2) can be used to have the request payload printed to
198
- screen before being sent
199
- * new: server::service($data) lets user parse data other than POST body, for
200
- easier testing / subclassing
201
- * changed: framework-generated debug messages are sent back by the server base64
202
- encoded, to avoid any charset/xml compatibility problem
203
- * other minor fixes
204
-
205
- The usual refactoring of a lot of (private) methods has taken place, with new
206
- parameters added to some functions.
207
- Javadoc documentation has been improved a lot.
208
- The HTML documentation has been shuffled around a bit, hoping to give it a more
209
- logical organization.
210
-
211
- The experimental support for the JSON protocol has been removed, and will be
212
- packaged as a separate download with some extra very interesting stuff (human
213
- readable auto-generated documentation, anyone?).
214
-
215
-
216
- XML-RPC for PHP version 2.0RC2 - 2005/11/22
217
-
218
- This release corrects a few bugs and adds basically one new method for better
219
- HTTPS support:
220
-
221
- * fixed two bugs that prevented xmlrpc calls to take place over https
222
- * fixed two bugs that prevented proper recognition of xml character set
223
- when it was declared inside the xml prologue
224
- * added xmlrpc_client::setKey($key, $keypass) method, to allow using client
225
- side certificates for https connections
226
- * fixed bug that prevented proper serialization of string xmlrpcvals when
227
- $xmlrpc_internalencoding was set to UTF-8
228
- * fixed bug in xmlrpc_server::echoInput() (and marked method as deprecated)
229
- * correctly set cookies/http headers into xmlrpcresp objects even when the
230
- sned() method call fails for some reason
231
- * added a benchmark file in the testsuite directory
232
-
233
- A couple of (private/protected) methods have been refactored, as well as a
234
- couple of extra parameters added to some (private) functions - this has no
235
- impact on the public API and should be of interest primarily to people extending
236
- / subclassing the lib.
237
-
238
- There is also new, PARTIAL support for the JSON-RPC protocol, implemented in
239
- two files in the extras dir (more info about json-rpc at http://json-rpc.org)
240
-
241
-
242
- XML-RPC for PHP version 2.0RC1 - 2005/10/03
243
-
244
- I'm pleased to announce XML-RPC for PHP version 2.0, release candidate 1.
245
-
246
- This release introduces so many new features it is almost impossible to list them
247
- here, making the library finally on pair with, if not more advanced than, any other
248
- similar offer (e.g. the PEAR XMLRPC package or the Incutio IXR library).
249
- No, really, trust me.
250
-
251
- The minimum supported PHP version is now 4.2 - natively - or 4.0.4pl1 - by usage of
252
- a couple of compatibility classes (code taken from PEAR php_compat package).
253
-
254
- The placement of files and directories in the distribution has been deeply modified,
255
- in the hope of making it more clear, now that the file count has increased.
256
- I hope you find it easy.
257
-
258
- Support for "advanced" HTTP features such as cookies, proxies and keep-alives has
259
- been added at last.
260
-
261
- It is now much easier to convert between xmlrpcval objects and php values, and
262
- in fact php_xmlrpc_encode and php_xmlrpc_decode are now the recommended methods
263
- for all cases, except when encoding base64 data.
264
-
265
- Two new (experimental) functions have been added, allowing automagic conversion
266
- of a php function into an xmlrpc method to be exposed and vice-versa.
267
-
268
- PHP objects can be now automatically serialized as xmlrpc struct values and
269
- correctly deserialized on the other end of the transmission, provided that the
270
- same class definition is present on both sides and no object members are of
271
- type resource.
272
-
273
- A lot of the existing class methods have been overloaded with extra parameters
274
- or new functionality, and a few added ex-novo, making usage easier than ever.
275
-
276
- A complete debugger solution is included in the distribution. It needs a web server
277
- to run (a freely available version of the same debugger is accessible online, it
278
- can be found at http://phpxmlrpc.sourceforge.net).
279
-
280
- For a more detailed list of changes, please read carefully chapter 2 of the
281
- included documentation, or, even better, take a look at the source code, which
282
- is commented in javadoc style quite a bit.
283
-
284
-
285
- XML-RPC for PHP version 1.2 - 2005/08/14
286
-
287
- This removes all use of eval(), which is a potential security problem.
288
- All users are encouraged to upgrade as soon as possible.
289
- As of this release we are no longer php3-compatible.
290
-
291
-
292
- XML-RPC for PHP version 1.1.1 - 2005/06/30
293
-
294
- This is a security vulnerability fix release.
295
- All users are invited to upgrade as soon as possible.
296
-
297
-
298
- XML-RPC for PHP version 1.1 - 2005/05/03
299
-
300
- I'm pleased to announce XML-RPC for PHP version 1.1
301
- It's taken two years to get to the this point, but here we are, finally.
302
-
303
- This is a bugfix and maintenance release. No major new features have been added.
304
- All known bugs have been ironed out, unless fixing would have meant breaking
305
- the API.
306
- The code has been tested with PHP 3, 4 and 5, even tough PHP 4 is the main
307
- development platform (and some warnings will be emitted when runnning PHP5).
308
-
309
- Notheworthy changes include:
310
-
311
- * do not clash any more with the EPI xmlrpc extension bundled with PHP 4 and 5
312
- * fixed the unicode/charset problems that have been plaguing the lib for years
313
- * proper parsing of int and float values prepended with zeroes or the '+' char
314
- * accept float values in exponential notation
315
- * configurable http user-agent string
316
- * use the same timeout on client socket reads as used for connecting
317
- * more explicative error messages in xmlrpcresponse in many cases
318
- * much more tolerant parsing of malformed http responses from xmlrpc servers
319
- * fixed memleak that prevented the client to be used in never-ending scripts
320
- * parse bigger xmlrpc messages without crashing (1MB in size or more)
321
- * be tolerant to xmlrpc responses generated on public servers that add
322
- javascript advertising at the end of hosted content
323
- * the lib generates quite a few less PHP warnings during standard operation
324
-
325
- This is the last release that will support PHP 3.
326
- The next release will include better support for PHP 5 and (possibly) a slew of
327
- new features.
328
-
329
- The changelog is available at:
330
- http://cvs.sourceforge.net/viewcvs.py/phpxmlrpc/xmlrpc/ChangeLog?view=markup
331
-
332
- Please report bugs to the XML-RPC PHP mailing list or to the sourceforge project
333
- pages at http://sourceforge.net/projects/phpxmlrpc/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/infusionsoft/xmlrpc-3.0/README DELETED
@@ -1,13 +0,0 @@
1
- NAME: XMLRPC FOR PHP
2
-
3
- DESCRIPTION: A php library for building xmlrpc clients and servers
4
-
5
-
6
-
7
- HTML documentation can be found in the doc/ directory.
8
-
9
- Recent changes in the ChangeLog
10
-
11
- Use of this software is subject to the terms in doc/index.html
12
-
13
- The passphrase for the rsakey.pem certificate is 'test'.
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/infusionsoft/xmlrpc-3.0/lib/xmlrpc.inc DELETED
@@ -1,3840 +0,0 @@
1
- <?php
2
- // by Edd Dumbill (C) 1999-2002
3
- // <edd@usefulinc.com>
4
-
5
- // Copyright (c) 1999,2000,2002 Edd Dumbill.
6
- // All rights reserved.
7
- //
8
- // Redistribution and use in source and binary forms, with or without
9
- // modification, are permitted provided that the following conditions
10
- // are met:
11
- //
12
- // * Redistributions of source code must retain the above copyright
13
- // notice, this list of conditions and the following disclaimer.
14
- //
15
- // * Redistributions in binary form must reproduce the above
16
- // copyright notice, this list of conditions and the following
17
- // disclaimer in the documentation and/or other materials provided
18
- // with the distribution.
19
- //
20
- // * Neither the name of the "XML-RPC for PHP" nor the names of its
21
- // contributors may be used to endorse or promote products derived
22
- // from this software without specific prior written permission.
23
- //
24
- // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
- // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
- // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
- // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
- // REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
- // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30
- // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
31
- // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32
- // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
33
- // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34
- // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
35
- // OF THE POSSIBILITY OF SUCH DAMAGE.
36
-
37
- if(!function_exists('xml_parser_create'))
38
- {
39
- // For PHP 4 onward, XML functionality is always compiled-in on windows:
40
- // no more need to dl-open it. It might have been compiled out on *nix...
41
- if(strtoupper(substr(PHP_OS, 0, 3) != 'WIN'))
42
- {
43
- dl('xml.so');
44
- }
45
- }
46
-
47
- // G. Giunta 2005/01/29: declare global these variables,
48
- // so that xmlrpc.inc will work even if included from within a function
49
- // Milosch: 2005/08/07 - explicitly request these via $GLOBALS where used.
50
- $GLOBALS['xmlrpcI4']='i4';
51
- $GLOBALS['xmlrpcInt']='int';
52
- $GLOBALS['xmlrpcBoolean']='boolean';
53
- $GLOBALS['xmlrpcDouble']='double';
54
- $GLOBALS['xmlrpcString']='string';
55
- $GLOBALS['xmlrpcDateTime']='dateTime.iso8601';
56
- $GLOBALS['xmlrpcBase64']='base64';
57
- $GLOBALS['xmlrpcArray']='array';
58
- $GLOBALS['xmlrpcStruct']='struct';
59
- $GLOBALS['xmlrpcValue']='undefined';
60
-
61
- $GLOBALS['xmlrpcTypes']=array(
62
- $GLOBALS['xmlrpcI4'] => 1,
63
- $GLOBALS['xmlrpcInt'] => 1,
64
- $GLOBALS['xmlrpcBoolean'] => 1,
65
- $GLOBALS['xmlrpcString'] => 1,
66
- $GLOBALS['xmlrpcDouble'] => 1,
67
- $GLOBALS['xmlrpcDateTime'] => 1,
68
- $GLOBALS['xmlrpcBase64'] => 1,
69
- $GLOBALS['xmlrpcArray'] => 2,
70
- $GLOBALS['xmlrpcStruct'] => 3
71
- );
72
-
73
- $GLOBALS['xmlrpc_valid_parents'] = array(
74
- 'VALUE' => array('MEMBER', 'DATA', 'PARAM', 'FAULT'),
75
- 'BOOLEAN' => array('VALUE'),
76
- 'I4' => array('VALUE'),
77
- 'INT' => array('VALUE'),
78
- 'STRING' => array('VALUE'),
79
- 'DOUBLE' => array('VALUE'),
80
- 'DATETIME.ISO8601' => array('VALUE'),
81
- 'BASE64' => array('VALUE'),
82
- 'MEMBER' => array('STRUCT'),
83
- 'NAME' => array('MEMBER'),
84
- 'DATA' => array('ARRAY'),
85
- 'ARRAY' => array('VALUE'),
86
- 'STRUCT' => array('VALUE'),
87
- 'PARAM' => array('PARAMS'),
88
- 'METHODNAME' => array('METHODCALL'),
89
- 'PARAMS' => array('METHODCALL', 'METHODRESPONSE'),
90
- 'FAULT' => array('METHODRESPONSE'),
91
- 'NIL' => array('VALUE'), // only used when extension activated
92
- 'EX:NIL' => array('VALUE') // only used when extension activated
93
- );
94
-
95
- // define extra types for supporting NULL (useful for json or <NIL/>)
96
- $GLOBALS['xmlrpcNull']='null';
97
- $GLOBALS['xmlrpcTypes']['null']=1;
98
-
99
- // Not in use anymore since 2.0. Shall we remove it?
100
- /// @deprecated
101
- $GLOBALS['xmlEntities']=array(
102
- 'amp' => '&',
103
- 'quot' => '"',
104
- 'lt' => '<',
105
- 'gt' => '>',
106
- 'apos' => "'"
107
- );
108
-
109
- // tables used for transcoding different charsets into us-ascii xml
110
-
111
- $GLOBALS['xml_iso88591_Entities']=array();
112
- $GLOBALS['xml_iso88591_Entities']['in'] = array();
113
- $GLOBALS['xml_iso88591_Entities']['out'] = array();
114
- for ($i = 0; $i < 32; $i++)
115
- {
116
- $GLOBALS['xml_iso88591_Entities']['in'][] = chr($i);
117
- $GLOBALS['xml_iso88591_Entities']['out'][] = '&#'.$i.';';
118
- }
119
- for ($i = 160; $i < 256; $i++)
120
- {
121
- $GLOBALS['xml_iso88591_Entities']['in'][] = chr($i);
122
- $GLOBALS['xml_iso88591_Entities']['out'][] = '&#'.$i.';';
123
- }
124
-
125
- /// @todo add to iso table the characters from cp_1252 range, i.e. 128 to 159?
126
- /// These will NOT be present in true ISO-8859-1, but will save the unwary
127
- /// windows user from sending junk (though no luck when reciving them...)
128
- /*
129
- $GLOBALS['xml_cp1252_Entities']=array();
130
- for ($i = 128; $i < 160; $i++)
131
- {
132
- $GLOBALS['xml_cp1252_Entities']['in'][] = chr($i);
133
- }
134
- $GLOBALS['xml_cp1252_Entities']['out'] = array(
135
- '&#x20AC;', '?', '&#x201A;', '&#x0192;',
136
- '&#x201E;', '&#x2026;', '&#x2020;', '&#x2021;',
137
- '&#x02C6;', '&#x2030;', '&#x0160;', '&#x2039;',
138
- '&#x0152;', '?', '&#x017D;', '?',
139
- '?', '&#x2018;', '&#x2019;', '&#x201C;',
140
- '&#x201D;', '&#x2022;', '&#x2013;', '&#x2014;',
141
- '&#x02DC;', '&#x2122;', '&#x0161;', '&#x203A;',
142
- '&#x0153;', '?', '&#x017E;', '&#x0178;'
143
- );
144
- */
145
-
146
- $GLOBALS['xmlrpcerr'] = array(
147
- 'unknown_method'=>1,
148
- 'invalid_return'=>2,
149
- 'incorrect_params'=>3,
150
- 'introspect_unknown'=>4,
151
- 'http_error'=>5,
152
- 'no_data'=>6,
153
- 'no_ssl'=>7,
154
- 'curl_fail'=>8,
155
- 'invalid_request'=>15,
156
- 'no_curl'=>16,
157
- 'server_error'=>17,
158
- 'multicall_error'=>18,
159
- 'multicall_notstruct'=>9,
160
- 'multicall_nomethod'=>10,
161
- 'multicall_notstring'=>11,
162
- 'multicall_recursion'=>12,
163
- 'multicall_noparams'=>13,
164
- 'multicall_notarray'=>14,
165
-
166
- 'cannot_decompress'=>103,
167
- 'decompress_fail'=>104,
168
- 'dechunk_fail'=>105,
169
- 'server_cannot_decompress'=>106,
170
- 'server_decompress_fail'=>107
171
- );
172
-
173
- $GLOBALS['xmlrpcstr'] = array(
174
- 'unknown_method'=>'Unknown method',
175
- 'invalid_return'=>'Invalid return payload: enable debugging to examine incoming payload',
176
- 'incorrect_params'=>'Incorrect parameters passed to method',
177
- 'introspect_unknown'=>"Can't introspect: method unknown",
178
- 'http_error'=>"Didn't receive 200 OK from remote server.",
179
- 'no_data'=>'No data received from server.',
180
- 'no_ssl'=>'No SSL support compiled in.',
181
- 'curl_fail'=>'CURL error',
182
- 'invalid_request'=>'Invalid request payload',
183
- 'no_curl'=>'No CURL support compiled in.',
184
- 'server_error'=>'Internal server error',
185
- 'multicall_error'=>'Received from server invalid multicall response',
186
- 'multicall_notstruct'=>'system.multicall expected struct',
187
- 'multicall_nomethod'=>'missing methodName',
188
- 'multicall_notstring'=>'methodName is not a string',
189
- 'multicall_recursion'=>'recursive system.multicall forbidden',
190
- 'multicall_noparams'=>'missing params',
191
- 'multicall_notarray'=>'params is not an array',
192
-
193
- 'cannot_decompress'=>'Received from server compressed HTTP and cannot decompress',
194
- 'decompress_fail'=>'Received from server invalid compressed HTTP',
195
- 'dechunk_fail'=>'Received from server invalid chunked HTTP',
196
- 'server_cannot_decompress'=>'Received from client compressed HTTP request and cannot decompress',
197
- 'server_decompress_fail'=>'Received from client invalid compressed HTTP request'
198
- );
199
-
200
- // The charset encoding used by the server for received messages and
201
- // by the client for received responses when received charset cannot be determined
202
- // or is not supported
203
- $GLOBALS['xmlrpc_defencoding']='UTF-8';
204
-
205
- // The encoding used internally by PHP.
206
- // String values received as xml will be converted to this, and php strings will be converted to xml
207
- // as if having been coded with this
208
- $GLOBALS['xmlrpc_internalencoding']='UTF-8';
209
-
210
- $GLOBALS['xmlrpcName']='XML-RPC for PHP';
211
- $GLOBALS['xmlrpcVersion']='3.0.0.beta';
212
-
213
- // let user errors start at 800
214
- $GLOBALS['xmlrpcerruser']=800;
215
- // let XML parse errors start at 100
216
- $GLOBALS['xmlrpcerrxml']=100;
217
-
218
- // formulate backslashes for escaping regexp
219
- // Not in use anymore since 2.0. Shall we remove it?
220
- /// @deprecated
221
- $GLOBALS['xmlrpc_backslash']=chr(92).chr(92);
222
-
223
- // set to TRUE to enable correct decoding of <NIL/> and <EX:NIL/> values
224
- $GLOBALS['xmlrpc_null_extension']=false;
225
-
226
- // set to TRUE to enable encoding of php NULL values to <EX:NIL/> instead of <NIL/>
227
- $GLOBALS['xmlrpc_null_apache_encoding']=false;
228
- $GLOBALS['xmlrpc_null_apache_encoding_ns']='http://ws.apache.org/xmlrpc/namespaces/extensions';
229
-
230
- // used to store state during parsing
231
- // quick explanation of components:
232
- // ac - used to accumulate values
233
- // isf - used to indicate a parsing fault (2) or xmlrpcresp fault (1)
234
- // isf_reason - used for storing xmlrpcresp fault string
235
- // lv - used to indicate "looking for a value": implements
236
- // the logic to allow values with no types to be strings
237
- // params - used to store parameters in method calls
238
- // method - used to store method name
239
- // stack - array with genealogy of xml elements names:
240
- // used to validate nesting of xmlrpc elements
241
- $GLOBALS['_xh']=null;
242
-
243
- /**
244
- * Convert a string to the correct XML representation in a target charset
245
- * To help correct communication of non-ascii chars inside strings, regardless
246
- * of the charset used when sending requests, parsing them, sending responses
247
- * and parsing responses, an option is to convert all non-ascii chars present in the message
248
- * into their equivalent 'charset entity'. Charset entities enumerated this way
249
- * are independent of the charset encoding used to transmit them, and all XML
250
- * parsers are bound to understand them.
251
- * Note that in the std case we are not sending a charset encoding mime type
252
- * along with http headers, so we are bound by RFC 3023 to emit strict us-ascii.
253
- *
254
- * @todo do a bit of basic benchmarking (strtr vs. str_replace)
255
- * @todo make usage of iconv() or recode_string() or mb_string() where available
256
- */
257
- function xmlrpc_encode_entitites($data, $src_encoding='', $dest_encoding='')
258
- {
259
- /* Jordan Novak edit
260
- * clean out invalid characters before sending
261
- */
262
- $data = str_replace(array("&#11;", "&#0;", "&#20;", "’", "“", "”"), "", $data);
263
- /*
264
- * End Jordan Novak edit
265
- */
266
- if ($src_encoding == '')
267
- {
268
- // lame, but we know no better...
269
- $src_encoding = $GLOBALS['xmlrpc_internalencoding'];
270
- }
271
-
272
- switch(strtoupper($src_encoding.'_'.$dest_encoding))
273
- {
274
- case 'ISO-8859-1_':
275
- case 'ISO-8859-1_US-ASCII':
276
- $escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $data);
277
- $escaped_data = str_replace($GLOBALS['xml_iso88591_Entities']['in'], $GLOBALS['xml_iso88591_Entities']['out'], $escaped_data);
278
- break;
279
- case 'ISO-8859-1_UTF-8':
280
- $escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $data);
281
- $escaped_data = utf8_encode($escaped_data);
282
- break;
283
- case 'ISO-8859-1_ISO-8859-1':
284
- case 'US-ASCII_US-ASCII':
285
- case 'US-ASCII_UTF-8':
286
- case 'US-ASCII_':
287
- case 'US-ASCII_ISO-8859-1':
288
- case 'UTF-8_UTF-8':
289
- //case 'CP1252_CP1252':
290
- $escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $data);
291
- break;
292
- case 'UTF-8_':
293
- case 'UTF-8_US-ASCII':
294
- case 'UTF-8_ISO-8859-1':
295
- // NB: this will choke on invalid UTF-8, going most likely beyond EOF
296
- $escaped_data = '';
297
- // be kind to users creating string xmlrpcvals out of different php types
298
- $data = (string) $data;
299
- $ns = strlen ($data);
300
- for ($nn = 0; $nn < $ns; $nn++)
301
- {
302
- $ch = $data[$nn];
303
- $ii = ord($ch);
304
- //1 7 0bbbbbbb (127)
305
- if ($ii < 128)
306
- {
307
- /// @todo shall we replace this with a (supposedly) faster str_replace?
308
- switch($ii){
309
- case 34:
310
- $escaped_data .= '&quot;';
311
- break;
312
- case 38:
313
- $escaped_data .= '&amp;';
314
- break;
315
- case 39:
316
- $escaped_data .= '&apos;';
317
- break;
318
- case 60:
319
- $escaped_data .= '&lt;';
320
- break;
321
- case 62:
322
- $escaped_data .= '&gt;';
323
- break;
324
- default:
325
- $escaped_data .= $ch;
326
- } // switch
327
- }
328
- //2 11 110bbbbb 10bbbbbb (2047)
329
- else if ($ii>>5 == 6)
330
- {
331
- $b1 = ($ii & 31);
332
- $ii = ord($data[$nn+1]);
333
- $b2 = ($ii & 63);
334
- $ii = ($b1 * 64) + $b2;
335
- $ent = sprintf ('&#%d;', $ii);
336
- $escaped_data .= $ent;
337
- $nn += 1;
338
- }
339
- //3 16 1110bbbb 10bbbbbb 10bbbbbb
340
- else if ($ii>>4 == 14)
341
- {
342
- $b1 = ($ii & 15);
343
- $ii = ord($data[$nn+1]);
344
- $b2 = ($ii & 63);
345
- $ii = ord($data[$nn+2]);
346
- $b3 = ($ii & 63);
347
- $ii = ((($b1 * 64) + $b2) * 64) + $b3;
348
- $ent = sprintf ('&#%d;', $ii);
349
- $escaped_data .= $ent;
350
- $nn += 2;
351
- }
352
- //4 21 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
353
- else if ($ii>>3 == 30)
354
- {
355
- $b1 = ($ii & 7);
356
- $ii = ord($data[$nn+1]);
357
- $b2 = ($ii & 63);
358
- $ii = ord($data[$nn+2]);
359
- $b3 = ($ii & 63);
360
- $ii = ord($data[$nn+3]);
361
- $b4 = ($ii & 63);
362
- $ii = ((((($b1 * 64) + $b2) * 64) + $b3) * 64) + $b4;
363
- $ent = sprintf ('&#%d;', $ii);
364
- $escaped_data .= $ent;
365
- $nn += 3;
366
- }
367
- }
368
- break;
369
- /*
370
- case 'CP1252_':
371
- case 'CP1252_US-ASCII':
372
- $escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $data);
373
- $escaped_data = str_replace($GLOBALS['xml_iso88591_Entities']['in'], $GLOBALS['xml_iso88591_Entities']['out'], $escaped_data);
374
- $escaped_data = str_replace($GLOBALS['xml_cp1252_Entities']['in'], $GLOBALS['xml_cp1252_Entities']['out'], $escaped_data);
375
- break;
376
- case 'CP1252_UTF-8':
377
- $escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $data);
378
- /// @todo we could use real UTF8 chars here instead of xml entities... (note that utf_8 encode all allone will NOT convert them)
379
- $escaped_data = str_replace($GLOBALS['xml_cp1252_Entities']['in'], $GLOBALS['xml_cp1252_Entities']['out'], $escaped_data);
380
- $escaped_data = utf8_encode($escaped_data);
381
- break;
382
- case 'CP1252_ISO-8859-1':
383
- $escaped_data = str_replace(array('&', '"', "'", '<', '>'), array('&amp;', '&quot;', '&apos;', '&lt;', '&gt;'), $data);
384
- // we might as well replave all funky chars with a '?' here, but we are kind and leave it to the receiving application layer to decide what to do with these weird entities...
385
- $escaped_data = str_replace($GLOBALS['xml_cp1252_Entities']['in'], $GLOBALS['xml_cp1252_Entities']['out'], $escaped_data);
386
- break;
387
- */
388
- default:
389
- $escaped_data = '';
390
- error_log("Converting from $src_encoding to $dest_encoding: not supported...");
391
- }
392
- return $escaped_data;
393
- }
394
-
395
- /// xml parser handler function for opening element tags
396
- function xmlrpc_se($parser, $name, $attrs, $accept_single_vals=false)
397
- {
398
- // if invalid xmlrpc already detected, skip all processing
399
- if ($GLOBALS['_xh']['isf'] < 2)
400
- {
401
- // check for correct element nesting
402
- // top level element can only be of 2 types
403
- /// @todo optimization creep: save this check into a bool variable, instead of using count() every time:
404
- /// there is only a single top level element in xml anyway
405
- if (count($GLOBALS['_xh']['stack']) == 0)
406
- {
407
- if ($name != 'METHODRESPONSE' && $name != 'METHODCALL' && (
408
- $name != 'VALUE' && !$accept_single_vals))
409
- {
410
- $GLOBALS['_xh']['isf'] = 2;
411
- $GLOBALS['_xh']['isf_reason'] = 'missing top level xmlrpc element';
412
- return;
413
- }
414
- else
415
- {
416
- $GLOBALS['_xh']['rt'] = strtolower($name);
417
- $GLOBALS['_xh']['rt'] = strtolower($name);
418
- }
419
- }
420
- else
421
- {
422
- // not top level element: see if parent is OK
423
- $parent = end($GLOBALS['_xh']['stack']);
424
- if (!array_key_exists($name, $GLOBALS['xmlrpc_valid_parents']) || !in_array($parent, $GLOBALS['xmlrpc_valid_parents'][$name]))
425
- {
426
- $GLOBALS['_xh']['isf'] = 2;
427
- $GLOBALS['_xh']['isf_reason'] = "xmlrpc element $name cannot be child of $parent";
428
- return;
429
- }
430
- }
431
-
432
- switch($name)
433
- {
434
- // optimize for speed switch cases: most common cases first
435
- case 'VALUE':
436
- /// @todo we could check for 2 VALUE elements inside a MEMBER or PARAM element
437
- $GLOBALS['_xh']['vt']='value'; // indicator: no value found yet
438
- $GLOBALS['_xh']['ac']='';
439
- $GLOBALS['_xh']['lv']=1;
440
- $GLOBALS['_xh']['php_class']=null;
441
- break;
442
- case 'I4':
443
- case 'INT':
444
- case 'STRING':
445
- case 'BOOLEAN':
446
- case 'DOUBLE':
447
- case 'DATETIME.ISO8601':
448
- case 'BASE64':
449
- if ($GLOBALS['_xh']['vt']!='value')
450
- {
451
- //two data elements inside a value: an error occurred!
452
- $GLOBALS['_xh']['isf'] = 2;
453
- $GLOBALS['_xh']['isf_reason'] = "$name element following a {$GLOBALS['_xh']['vt']} element inside a single value";
454
- return;
455
- }
456
- $GLOBALS['_xh']['ac']=''; // reset the accumulator
457
- break;
458
- case 'STRUCT':
459
- case 'ARRAY':
460
- if ($GLOBALS['_xh']['vt']!='value')
461
- {
462
- //two data elements inside a value: an error occurred!
463
- $GLOBALS['_xh']['isf'] = 2;
464
- $GLOBALS['_xh']['isf_reason'] = "$name element following a {$GLOBALS['_xh']['vt']} element inside a single value";
465
- return;
466
- }
467
- // create an empty array to hold child values, and push it onto appropriate stack
468
- $cur_val = array();
469
- $cur_val['values'] = array();
470
- $cur_val['type'] = $name;
471
- // check for out-of-band information to rebuild php objs
472
- // and in case it is found, save it
473
- if (@isset($attrs['PHP_CLASS']))
474
- {
475
- $cur_val['php_class'] = $attrs['PHP_CLASS'];
476
- }
477
- $GLOBALS['_xh']['valuestack'][] = $cur_val;
478
- $GLOBALS['_xh']['vt']='data'; // be prepared for a data element next
479
- break;
480
- case 'DATA':
481
- if ($GLOBALS['_xh']['vt']!='data')
482
- {
483
- //two data elements inside a value: an error occurred!
484
- $GLOBALS['_xh']['isf'] = 2;
485
- $GLOBALS['_xh']['isf_reason'] = "found two data elements inside an array element";
486
- return;
487
- }
488
- case 'METHODCALL':
489
- case 'METHODRESPONSE':
490
- case 'PARAMS':
491
- // valid elements that add little to processing
492
- break;
493
- case 'METHODNAME':
494
- case 'NAME':
495
- /// @todo we could check for 2 NAME elements inside a MEMBER element
496
- $GLOBALS['_xh']['ac']='';
497
- break;
498
- case 'FAULT':
499
- $GLOBALS['_xh']['isf']=1;
500
- break;
501
- case 'MEMBER':
502
- $GLOBALS['_xh']['valuestack'][count($GLOBALS['_xh']['valuestack'])-1]['name']=''; // set member name to null, in case we do not find in the xml later on
503
- //$GLOBALS['_xh']['ac']='';
504
- // Drop trough intentionally
505
- case 'PARAM':
506
- // clear value type, so we can check later if no value has been passed for this param/member
507
- $GLOBALS['_xh']['vt']=null;
508
- break;
509
- case 'NIL':
510
- break;
511
- case 'EX:NIL':
512
- if ($GLOBALS['xmlrpc_null_extension'])
513
- {
514
- if ($GLOBALS['_xh']['vt']!='value')
515
- {
516
- //two data elements inside a value: an error occurred!
517
- $GLOBALS['_xh']['isf'] = 2;
518
- $GLOBALS['_xh']['isf_reason'] = "$name element following a {$GLOBALS['_xh']['vt']} element inside a single value";
519
- return;
520
- }
521
- $GLOBALS['_xh']['ac']=''; // reset the accumulator
522
- break;
523
- }
524
- // we do not support the <NIL/> extension, so
525
- // drop through intentionally
526
- default:
527
- /// INVALID ELEMENT: RAISE ISF so that it is later recognized!!!
528
- $GLOBALS['_xh']['isf'] = 2;
529
- $GLOBALS['_xh']['isf_reason'] = "found not-xmlrpc xml element $name";
530
- break;
531
- }
532
-
533
- // Save current element name to stack, to validate nesting
534
- $GLOBALS['_xh']['stack'][] = $name;
535
-
536
- /// @todo optimization creep: move this inside the big switch() above
537
- if($name!='VALUE')
538
- {
539
- $GLOBALS['_xh']['lv']=0;
540
- }
541
- }
542
- }
543
-
544
- /// Used in decoding xml chunks that might represent single xmlrpc values
545
- function xmlrpc_se_any($parser, $name, $attrs)
546
- {
547
- xmlrpc_se($parser, $name, $attrs, true);
548
- }
549
-
550
- /// xml parser handler function for close element tags
551
- function xmlrpc_ee($parser, $name, $rebuild_xmlrpcvals = true)
552
- {
553
- if ($GLOBALS['_xh']['isf'] < 2)
554
- {
555
- // push this element name from stack
556
- // NB: if XML validates, correct opening/closing is guaranteed and
557
- // we do not have to check for $name == $curr_elem.
558
- // we also checked for proper nesting at start of elements...
559
- $curr_elem = array_pop($GLOBALS['_xh']['stack']);
560
-
561
- switch($name)
562
- {
563
- case 'VALUE':
564
- // This if() detects if no scalar was inside <VALUE></VALUE>
565
- if ($GLOBALS['_xh']['vt']=='value')
566
- {
567
- $GLOBALS['_xh']['value']=$GLOBALS['_xh']['ac'];
568
- $GLOBALS['_xh']['vt']=$GLOBALS['xmlrpcString'];
569
- }
570
-
571
- if ($rebuild_xmlrpcvals)
572
- {
573
- // build the xmlrpc val out of the data received, and substitute it
574
- $temp = new xmlrpcval($GLOBALS['_xh']['value'], $GLOBALS['_xh']['vt']);
575
- // in case we got info about underlying php class, save it
576
- // in the object we're rebuilding
577
- if (isset($GLOBALS['_xh']['php_class']))
578
- $temp->_php_class = $GLOBALS['_xh']['php_class'];
579
- // check if we are inside an array or struct:
580
- // if value just built is inside an array, let's move it into array on the stack
581
- $vscount = count($GLOBALS['_xh']['valuestack']);
582
- if ($vscount && $GLOBALS['_xh']['valuestack'][$vscount-1]['type']=='ARRAY')
583
- {
584
- $GLOBALS['_xh']['valuestack'][$vscount-1]['values'][] = $temp;
585
- }
586
- else
587
- {
588
- $GLOBALS['_xh']['value'] = $temp;
589
- }
590
- }
591
- else
592
- {
593
- /// @todo this needs to treat correctly php-serialized objects,
594
- /// since std deserializing is done by php_xmlrpc_decode,
595
- /// which we will not be calling...
596
- if (isset($GLOBALS['_xh']['php_class']))
597
- {
598
- }
599
-
600
- // check if we are inside an array or struct:
601
- // if value just built is inside an array, let's move it into array on the stack
602
- $vscount = count($GLOBALS['_xh']['valuestack']);
603
- if ($vscount && $GLOBALS['_xh']['valuestack'][$vscount-1]['type']=='ARRAY')
604
- {
605
- $GLOBALS['_xh']['valuestack'][$vscount-1]['values'][] = $GLOBALS['_xh']['value'];
606
- }
607
- }
608
- break;
609
- case 'BOOLEAN':
610
- case 'I4':
611
- case 'INT':
612
- case 'STRING':
613
- case 'DOUBLE':
614
- case 'DATETIME.ISO8601':
615
- case 'BASE64':
616
- $GLOBALS['_xh']['vt']=strtolower($name);
617
- /// @todo: optimization creep - remove the if/elseif cycle below
618
- /// since the case() in which we are already did that
619
- if ($name=='STRING')
620
- {
621
- $GLOBALS['_xh']['value']=$GLOBALS['_xh']['ac'];
622
- }
623
- elseif ($name=='DATETIME.ISO8601')
624
- {
625
- if (!preg_match('/^[0-9]{8}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/', $GLOBALS['_xh']['ac']))
626
- {
627
- error_log('XML-RPC: invalid value received in DATETIME: '.$GLOBALS['_xh']['ac']);
628
- }
629
- $GLOBALS['_xh']['vt']=$GLOBALS['xmlrpcDateTime'];
630
- $GLOBALS['_xh']['value']=$GLOBALS['_xh']['ac'];
631
- }
632
- elseif ($name=='BASE64')
633
- {
634
- /// @todo check for failure of base64 decoding / catch warnings
635
- $GLOBALS['_xh']['value']=base64_decode($GLOBALS['_xh']['ac']);
636
- }
637
- elseif ($name=='BOOLEAN')
638
- {
639
- // special case here: we translate boolean 1 or 0 into PHP
640
- // constants true or false.
641
- // Strings 'true' and 'false' are accepted, even though the
642
- // spec never mentions them (see eg. Blogger api docs)
643
- // NB: this simple checks helps a lot sanitizing input, ie no
644
- // security problems around here
645
- if ($GLOBALS['_xh']['ac']=='1' || strcasecmp($GLOBALS['_xh']['ac'], 'true') == 0)
646
- {
647
- $GLOBALS['_xh']['value']=true;
648
- }
649
- else
650
- {
651
- // log if receiveing something strange, even though we set the value to false anyway
652
- if ($GLOBALS['_xh']['ac']!='0' && strcasecmp($GLOBALS['_xh']['ac'], 'false') != 0)
653
- error_log('XML-RPC: invalid value received in BOOLEAN: '.$GLOBALS['_xh']['ac']);
654
- $GLOBALS['_xh']['value']=false;
655
- }
656
- }
657
- elseif ($name=='DOUBLE')
658
- {
659
- // we have a DOUBLE
660
- // we must check that only 0123456789-.<space> are characters here
661
- // NOTE: regexp could be much stricter than this...
662
- if (!preg_match('/^[+-eE0123456789 \t.]+$/', $GLOBALS['_xh']['ac']))
663
- {
664
- /// @todo: find a better way of throwing an error than this!
665
- error_log('XML-RPC: non numeric value received in DOUBLE: '.$GLOBALS['_xh']['ac']);
666
- $GLOBALS['_xh']['value']='ERROR_NON_NUMERIC_FOUND';
667
- }
668
- else
669
- {
670
- // it's ok, add it on
671
- $GLOBALS['_xh']['value']=(double)$GLOBALS['_xh']['ac'];
672
- }
673
- }
674
- else
675
- {
676
- // we have an I4/INT
677
- // we must check that only 0123456789-<space> are characters here
678
- if (!preg_match('/^[+-]?[0123456789 \t]+$/', $GLOBALS['_xh']['ac']))
679
- {
680
- /// @todo find a better way of throwing an error than this!
681
- error_log('XML-RPC: non numeric value received in INT: '.$GLOBALS['_xh']['ac']);
682
- $GLOBALS['_xh']['value']='ERROR_NON_NUMERIC_FOUND';
683
- }
684
- else
685
- {
686
- // it's ok, add it on
687
- $GLOBALS['_xh']['value']=(int)$GLOBALS['_xh']['ac'];
688
- }
689
- }
690
- //$GLOBALS['_xh']['ac']=''; // is this necessary?
691
- $GLOBALS['_xh']['lv']=3; // indicate we've found a value
692
- break;
693
- case 'NAME':
694
- $GLOBALS['_xh']['valuestack'][count($GLOBALS['_xh']['valuestack'])-1]['name'] = $GLOBALS['_xh']['ac'];
695
- break;
696
- case 'MEMBER':
697
- //$GLOBALS['_xh']['ac']=''; // is this necessary?
698
- // add to array in the stack the last element built,
699
- // unless no VALUE was found
700
- if ($GLOBALS['_xh']['vt'])
701
- {
702
- $vscount = count($GLOBALS['_xh']['valuestack']);
703
- $GLOBALS['_xh']['valuestack'][$vscount-1]['values'][$GLOBALS['_xh']['valuestack'][$vscount-1]['name']] = $GLOBALS['_xh']['value'];
704
- } else
705
- error_log('XML-RPC: missing VALUE inside STRUCT in received xml');
706
- break;
707
- case 'DATA':
708
- //$GLOBALS['_xh']['ac']=''; // is this necessary?
709
- $GLOBALS['_xh']['vt']=null; // reset this to check for 2 data elements in a row - even if they're empty
710
- break;
711
- case 'STRUCT':
712
- case 'ARRAY':
713
- // fetch out of stack array of values, and promote it to current value
714
- $curr_val = array_pop($GLOBALS['_xh']['valuestack']);
715
- $GLOBALS['_xh']['value'] = $curr_val['values'];
716
- $GLOBALS['_xh']['vt']=strtolower($name);
717
- if (isset($curr_val['php_class']))
718
- {
719
- $GLOBALS['_xh']['php_class'] = $curr_val['php_class'];
720
- }
721
- break;
722
- case 'PARAM':
723
- // add to array of params the current value,
724
- // unless no VALUE was found
725
- if ($GLOBALS['_xh']['vt'])
726
- {
727
- $GLOBALS['_xh']['params'][]=$GLOBALS['_xh']['value'];
728
- $GLOBALS['_xh']['pt'][]=$GLOBALS['_xh']['vt'];
729
- }
730
- else
731
- error_log('XML-RPC: missing VALUE inside PARAM in received xml');
732
- break;
733
- case 'METHODNAME':
734
- $GLOBALS['_xh']['method']=preg_replace('/^[\n\r\t ]+/', '', $GLOBALS['_xh']['ac']);
735
- break;
736
- case 'NIL':
737
- case 'EX:NIL':
738
- if ($GLOBALS['xmlrpc_null_extension'])
739
- {
740
- $GLOBALS['_xh']['vt']='null';
741
- $GLOBALS['_xh']['value']=null;
742
- $GLOBALS['_xh']['lv']=3;
743
- break;
744
- }
745
- // drop through intentionally if nil extension not enabled
746
- case 'PARAMS':
747
- case 'FAULT':
748
- case 'METHODCALL':
749
- case 'METHORESPONSE':
750
- break;
751
- default:
752
- // End of INVALID ELEMENT!
753
- // shall we add an assert here for unreachable code???
754
- break;
755
- }
756
- }
757
- }
758
-
759
- /// Used in decoding xmlrpc requests/responses without rebuilding xmlrpc values
760
- function xmlrpc_ee_fast($parser, $name)
761
- {
762
- xmlrpc_ee($parser, $name, false);
763
- }
764
-
765
- /// xml parser handler function for character data
766
- function xmlrpc_cd($parser, $data)
767
- {
768
- // skip processing if xml fault already detected
769
- if ($GLOBALS['_xh']['isf'] < 2)
770
- {
771
- // "lookforvalue==3" means that we've found an entire value
772
- // and should discard any further character data
773
- if($GLOBALS['_xh']['lv']!=3)
774
- {
775
- // G. Giunta 2006-08-23: useless change of 'lv' from 1 to 2
776
- //if($GLOBALS['_xh']['lv']==1)
777
- //{
778
- // if we've found text and we're just in a <value> then
779
- // say we've found a value
780
- //$GLOBALS['_xh']['lv']=2;
781
- //}
782
- // we always initialize the accumulator before starting parsing, anyway...
783
- //if(!@isset($GLOBALS['_xh']['ac']))
784
- //{
785
- // $GLOBALS['_xh']['ac'] = '';
786
- //}
787
- $GLOBALS['_xh']['ac'].=$data;
788
- }
789
- }
790
- }
791
-
792
- /// xml parser handler function for 'other stuff', ie. not char data or
793
- /// element start/end tag. In fact it only gets called on unknown entities...
794
- function xmlrpc_dh($parser, $data)
795
- {
796
- // skip processing if xml fault already detected
797
- if ($GLOBALS['_xh']['isf'] < 2)
798
- {
799
- if(substr($data, 0, 1) == '&' && substr($data, -1, 1) == ';')
800
- {
801
- // G. Giunta 2006-08-25: useless change of 'lv' from 1 to 2
802
- //if($GLOBALS['_xh']['lv']==1)
803
- //{
804
- // $GLOBALS['_xh']['lv']=2;
805
- //}
806
- $GLOBALS['_xh']['ac'].=$data;
807
- }
808
- }
809
- return true;
810
- }
811
-
812
-
813
- class xmlrpc_client
814
- {
815
- var $path;
816
- var $server;
817
- var $port=0;
818
- var $method='http';
819
- var $errno;
820
- var $errstr;
821
- var $debug=0;
822
- var $username='';
823
- var $password='';
824
- var $authtype=1;
825
- var $cert='';
826
- var $certpass='';
827
- var $cacert='';
828
- var $cacertdir='';
829
- var $key='';
830
- var $keypass='';
831
- var $verifypeer=true;
832
- var $verifyhost=2;
833
- var $no_multicall=false;
834
- var $proxy='';
835
- var $proxyport=0;
836
- var $proxy_user='';
837
- var $proxy_pass='';
838
- var $proxy_authtype=1;
839
- var $cookies=array();
840
- var $extracurlopts=array();
841
- var $extraUrlParams = null;
842
- var $curlError = null;
843
- var $curlInfo = null;
844
- var $curlErrorNo = null;
845
-
846
- /**
847
- * List of http compression methods accepted by the client for responses.
848
- * NB: PHP supports deflate, gzip compressions out of the box if compiled w. zlib
849
- *
850
- * NNB: you can set it to any non-empty array for HTTP11 and HTTPS, since
851
- * in those cases it will be up to CURL to decide the compression methods
852
- * it supports. You might check for the presence of 'zlib' in the output of
853
- * curl_version() to determine wheter compression is supported or not
854
- */
855
- var $accepted_compression = array();
856
- /**
857
- * Name of compression scheme to be used for sending requests.
858
- * Either null, gzip or deflate
859
- */
860
- var $request_compression = '';
861
- /**
862
- * CURL handle: used for keep-alive connections (PHP 4.3.8 up, see:
863
- * http://curl.haxx.se/docs/faq.html#7.3)
864
- */
865
- var $xmlrpc_curl_handle = null;
866
- /// Whether to use persistent connections for http 1.1 and https
867
- var $keepalive = false;
868
- /// Charset encodings that can be decoded without problems by the client
869
- var $accepted_charset_encodings = array();
870
- /// Charset encoding to be used in serializing request. NULL = use ASCII
871
- var $request_charset_encoding = '';
872
- /**
873
- * Decides the content of xmlrpcresp objects returned by calls to send()
874
- * valid strings are 'xmlrpcvals', 'phpvals' or 'xml'
875
- */
876
- var $return_type = 'xmlrpcvals';
877
- /**
878
- * Sent to servers in http headers
879
- */
880
- var $user_agent;
881
-
882
- /**
883
- * @param string $path either the complete server URL or the PATH part of the xmlrc server URL, e.g. /xmlrpc/server.php
884
- * @param string $server the server name / ip address
885
- * @param integer $port the port the server is listening on, defaults to 80 or 443 depending on protocol used
886
- * @param string $method the http protocol variant: defaults to 'http', 'https' and 'http11' can be used if CURL is installed
887
- */
888
- function __construct($path, $server='', $port='', $method='')
889
- {
890
- // allow user to specify all params in $path
891
- if($server == '' and $port == '' and $method == '')
892
- {
893
- $parts = parse_url($path);
894
- $server = $parts['host'];
895
- $path = isset($parts['path']) ? $parts['path'] : '';
896
- if(isset($parts['query']))
897
- {
898
- $path .= '?'.$parts['query'];
899
- }
900
- if(isset($parts['fragment']))
901
- {
902
- $path .= '#'.$parts['fragment'];
903
- }
904
- if(isset($parts['port']))
905
- {
906
- $port = $parts['port'];
907
- }
908
- if(isset($parts['scheme']))
909
- {
910
- $method = $parts['scheme'];
911
- }
912
- if(isset($parts['user']))
913
- {
914
- $this->username = $parts['user'];
915
- }
916
- if(isset($parts['pass']))
917
- {
918
- $this->password = $parts['pass'];
919
- }
920
- }
921
- if($path == '' || $path[0] != '/')
922
- {
923
- $this->path='/'.$path;
924
- }
925
- else
926
- {
927
- $this->path=$path;
928
- }
929
- $this->server=$server;
930
- if($port != '')
931
- {
932
- $this->port=$port;
933
- }
934
- if($method != '')
935
- {
936
- $this->method=$method;
937
- }
938
-
939
- // if ZLIB is enabled, let the client by default accept compressed responses
940
- if(function_exists('gzinflate') || (
941
- function_exists('curl_init') && (($info = curl_version()) &&
942
- ((is_string($info) && strpos($info, 'zlib') !== null) || isset($info['libz_version'])))
943
- ))
944
- {
945
- $this->accepted_compression = array('gzip', 'deflate');
946
- }
947
-
948
- // keepalives: enabled by default
949
- $this->keepalive = true;
950
-
951
- // by default the xml parser can support these 3 charset encodings
952
- $this->accepted_charset_encodings = array('UTF-8', 'ISO-8859-1', 'US-ASCII');
953
-
954
- // initialize user_agent string
955
- $this->user_agent = $GLOBALS['xmlrpcName'] . ' ' . $GLOBALS['xmlrpcVersion'];
956
- }
957
-
958
- /**
959
- * Enables/disables the echoing to screen of the xmlrpc responses received
960
- * @param integer $in values 0, 1 and 2 are supported (2 = echo sent msg too, before received response)
961
- * @access public
962
- */
963
- function setDebug($in)
964
- {
965
- $this->debug=$in;
966
- }
967
-
968
- /**
969
- * Add some http BASIC AUTH credentials, used by the client to authenticate
970
- * @param string $u username
971
- * @param string $p password
972
- * @param integer $t auth type. See curl_setopt man page for supported auth types. Defaults to CURLAUTH_BASIC (basic auth)
973
- * @access public
974
- */
975
- function setCredentials($u, $p, $t=1)
976
- {
977
- $this->username=$u;
978
- $this->password=$p;
979
- $this->authtype=$t;
980
- }
981
-
982
- /**
983
- * Add a client-side https certificate
984
- * @param string $cert
985
- * @param string $certpass
986
- * @access public
987
- */
988
- function setCertificate($cert, $certpass)
989
- {
990
- $this->cert = $cert;
991
- $this->certpass = $certpass;
992
- }
993
-
994
- /**
995
- * Add a CA certificate to verify server with (see man page about
996
- * CURLOPT_CAINFO for more details)
997
- * @param string $cacert certificate file name (or dir holding certificates)
998
- * @param bool $is_dir set to true to indicate cacert is a dir. defaults to false
999
- * @access public
1000
- */
1001
- function setCaCertificate($cacert, $is_dir=false)
1002
- {
1003
- if ($is_dir)
1004
- {
1005
- $this->cacertdir = $cacert;
1006
- }
1007
- else
1008
- {
1009
- $this->cacert = $cacert;
1010
- }
1011
- }
1012
-
1013
- /**
1014
- * Set attributes for SSL communication: private SSL key
1015
- * NB: does not work in older php/curl installs
1016
- * Thanks to Daniel Convissor
1017
- * @param string $key The name of a file containing a private SSL key
1018
- * @param string $keypass The secret password needed to use the private SSL key
1019
- * @access public
1020
- */
1021
- function setKey($key, $keypass)
1022
- {
1023
- $this->key = $key;
1024
- $this->keypass = $keypass;
1025
- }
1026
-
1027
- /**
1028
- * Set attributes for SSL communication: verify server certificate
1029
- * @param bool $i enable/disable verification of peer certificate
1030
- * @access public
1031
- */
1032
- function setSSLVerifyPeer($i)
1033
- {
1034
- $this->verifypeer = $i;
1035
- }
1036
-
1037
- /**
1038
- * Set attributes for SSL communication: verify match of server cert w. hostname
1039
- * @param int $i
1040
- * @access public
1041
- */
1042
- function setSSLVerifyHost($i)
1043
- {
1044
- $this->verifyhost = $i;
1045
- }
1046
-
1047
- /**
1048
- * Set proxy info
1049
- * @param string $proxyhost
1050
- * @param string $proxyport Defaults to 8080 for HTTP and 443 for HTTPS
1051
- * @param string $proxyusername Leave blank if proxy has public access
1052
- * @param string $proxypassword Leave blank if proxy has public access
1053
- * @param int $proxyauthtype set to constant CURLAUTH_NTLM to use NTLM auth with proxy
1054
- * @access public
1055
- */
1056
- function setProxy($proxyhost, $proxyport, $proxyusername = '', $proxypassword = '', $proxyauthtype = 1)
1057
- {
1058
- $this->proxy = $proxyhost;
1059
- $this->proxyport = $proxyport;
1060
- $this->proxy_user = $proxyusername;
1061
- $this->proxy_pass = $proxypassword;
1062
- $this->proxy_authtype = $proxyauthtype;
1063
- }
1064
-
1065
- /**
1066
- * Enables/disables reception of compressed xmlrpc responses.
1067
- * Note that enabling reception of compressed responses merely adds some standard
1068
- * http headers to xmlrpc requests. It is up to the xmlrpc server to return
1069
- * compressed responses when receiving such requests.
1070
- * @param string $compmethod either 'gzip', 'deflate', 'any' or ''
1071
- * @access public
1072
- */
1073
- function setAcceptedCompression($compmethod)
1074
- {
1075
- if ($compmethod == 'any')
1076
- $this->accepted_compression = array('gzip', 'deflate');
1077
- else
1078
- if ($compmethod == false )
1079
- $this->accepted_compression = array();
1080
- else
1081
- $this->accepted_compression = array($compmethod);
1082
- }
1083
-
1084
- /**
1085
- * Enables/disables http compression of xmlrpc request.
1086
- * Take care when sending compressed requests: servers might not support them
1087
- * (and automatic fallback to uncompressed requests is not yet implemented)
1088
- * @param string $compmethod either 'gzip', 'deflate' or ''
1089
- * @access public
1090
- */
1091
- function setRequestCompression($compmethod)
1092
- {
1093
- $this->request_compression = $compmethod;
1094
- }
1095
-
1096
- /**
1097
- * Adds a cookie to list of cookies that will be sent to server.
1098
- * NB: setting any param but name and value will turn the cookie into a 'version 1' cookie:
1099
- * do not do it unless you know what you are doing
1100
- * @param string $name
1101
- * @param string $value
1102
- * @param string $path
1103
- * @param string $domain
1104
- * @param int $port
1105
- * @access public
1106
- *
1107
- * @todo check correctness of urlencoding cookie value (copied from php way of doing it...)
1108
- */
1109
- function setCookie($name, $value='', $path='', $domain='', $port=null)
1110
- {
1111
- $this->cookies[$name]['value'] = urlencode($value);
1112
- if ($path || $domain || $port)
1113
- {
1114
- $this->cookies[$name]['path'] = $path;
1115
- $this->cookies[$name]['domain'] = $domain;
1116
- $this->cookies[$name]['port'] = $port;
1117
- $this->cookies[$name]['version'] = 1;
1118
- }
1119
- else
1120
- {
1121
- $this->cookies[$name]['version'] = 0;
1122
- }
1123
- }
1124
-
1125
- /**
1126
- * Directly set cURL options, for extra flexibility
1127
- * It allows eg. to bind client to a specific IP interface / address
1128
- * @param array $options
1129
- */
1130
- function SetCurlOptions( $options )
1131
- {
1132
- $this->extracurlopts = $options;
1133
- }
1134
-
1135
- /**
1136
- * Set user-agent string that will be used by this client instance
1137
- * in http headers sent to the server
1138
- */
1139
- function SetUserAgent( $agentstring )
1140
- {
1141
- $this->user_agent = $agentstring;
1142
- }
1143
-
1144
- /**
1145
- * Send an xmlrpc request
1146
- * @param mixed $msg The message object, or an array of messages for using multicall, or the complete xml representation of a request
1147
- * @param integer $timeout Connection timeout, in seconds, If unspecified, a platform specific timeout will apply
1148
- * @param string $method if left unspecified, the http protocol chosen during creation of the object will be used
1149
- * @return xmlrpcresp
1150
- * @access public
1151
- */
1152
- function& send($msg, $timeout=0, $method='')
1153
- {
1154
- // if user deos not specify http protocol, use native method of this client
1155
- // (i.e. method set during call to constructor)
1156
- if($method == '')
1157
- {
1158
- $method = $this->method;
1159
- }
1160
-
1161
- if(is_array($msg))
1162
- {
1163
- // $msg is an array of xmlrpcmsg's
1164
- $r = $this->multicall($msg, $timeout, $method);
1165
- return $r;
1166
- }
1167
- elseif(is_string($msg))
1168
- {
1169
- $n = new xmlrpcmsg('');
1170
- $n->payload = $msg;
1171
- $msg = $n;
1172
- }
1173
-
1174
- // where msg is an xmlrpcmsg
1175
- $msg->debug=$this->debug;
1176
-
1177
- if($method == 'https')
1178
- {
1179
- $r =& $this->sendPayloadHTTPS(
1180
- $msg,
1181
- $this->server,
1182
- $this->port,
1183
- $timeout,
1184
- $this->username,
1185
- $this->password,
1186
- $this->authtype,
1187
- $this->cert,
1188
- $this->certpass,
1189
- $this->cacert,
1190
- $this->cacertdir,
1191
- $this->proxy,
1192
- $this->proxyport,
1193
- $this->proxy_user,
1194
- $this->proxy_pass,
1195
- $this->proxy_authtype,
1196
- $this->keepalive,
1197
- $this->key,
1198
- $this->keypass
1199
- );
1200
- }
1201
- elseif($method == 'http11')
1202
- {
1203
- $r =& $this->sendPayloadCURL(
1204
- $msg,
1205
- $this->server,
1206
- $this->port,
1207
- $timeout,
1208
- $this->username,
1209
- $this->password,
1210
- $this->authtype,
1211
- null,
1212
- null,
1213
- null,
1214
- null,
1215
- $this->proxy,
1216
- $this->proxyport,
1217
- $this->proxy_user,
1218
- $this->proxy_pass,
1219
- $this->proxy_authtype,
1220
- 'http',
1221
- $this->keepalive
1222
- );
1223
- }
1224
- else
1225
- {
1226
- $r =& $this->sendPayloadHTTP10(
1227
- $msg,
1228
- $this->server,
1229
- $this->port,
1230
- $timeout,
1231
- $this->username,
1232
- $this->password,
1233
- $this->authtype,
1234
- $this->proxy,
1235
- $this->proxyport,
1236
- $this->proxy_user,
1237
- $this->proxy_pass,
1238
- $this->proxy_authtype
1239
- );
1240
- }
1241
-
1242
- return $r;
1243
- }
1244
-
1245
- /**
1246
- * @access private
1247
- */
1248
- function &sendPayloadHTTP10($msg, $server, $port, $timeout=0,
1249
- $username='', $password='', $authtype=1, $proxyhost='',
1250
- $proxyport=0, $proxyusername='', $proxypassword='', $proxyauthtype=1)
1251
- {
1252
- if($port==0)
1253
- {
1254
- $port=80;
1255
- }
1256
-
1257
- // Only create the payload if it was not created previously
1258
- if(empty($msg->payload))
1259
- {
1260
- $msg->createPayload($this->request_charset_encoding);
1261
- }
1262
-
1263
- $payload = $msg->payload;
1264
- // Deflate request body and set appropriate request headers
1265
- if(function_exists('gzdeflate') && ($this->request_compression == 'gzip' || $this->request_compression == 'deflate'))
1266
- {
1267
- if($this->request_compression == 'gzip')
1268
- {
1269
- $a = @gzencode($payload);
1270
- if($a)
1271
- {
1272
- $payload = $a;
1273
- $encoding_hdr = "Content-Encoding: gzip\r\n";
1274
- }
1275
- }
1276
- else
1277
- {
1278
- $a = @gzcompress($payload);
1279
- if($a)
1280
- {
1281
- $payload = $a;
1282
- $encoding_hdr = "Content-Encoding: deflate\r\n";
1283
- }
1284
- }
1285
- }
1286
- else
1287
- {
1288
- $encoding_hdr = '';
1289
- }
1290
-
1291
- // thanks to Grant Rauscher <grant7@firstworld.net> for this
1292
- $credentials='';
1293
- if($username!='')
1294
- {
1295
- $credentials='Authorization: Basic ' . base64_encode($username . ':' . $password) . "\r\n";
1296
- if ($authtype != 1)
1297
- {
1298
- error_log('XML-RPC: '.__METHOD__.': warning. Only Basic auth is supported with HTTP 1.0');
1299
- }
1300
- }
1301
-
1302
- $accepted_encoding = '';
1303
- if(is_array($this->accepted_compression) && count($this->accepted_compression))
1304
- {
1305
- $accepted_encoding = 'Accept-Encoding: ' . implode(', ', $this->accepted_compression) . "\r\n";
1306
- }
1307
-
1308
- $proxy_credentials = '';
1309
- if($proxyhost)
1310
- {
1311
- if($proxyport == 0)
1312
- {
1313
- $proxyport = 8080;
1314
- }
1315
- $connectserver = $proxyhost;
1316
- $connectport = $proxyport;
1317
- $uri = 'http://'.$server.':'.$port.$this->path;
1318
- if($proxyusername != '')
1319
- {
1320
- if ($proxyauthtype != 1)
1321
- {
1322
- error_log('XML-RPC: '.__METHOD__.': warning. Only Basic auth to proxy is supported with HTTP 1.0');
1323
- }
1324
- $proxy_credentials = 'Proxy-Authorization: Basic ' . base64_encode($proxyusername.':'.$proxypassword) . "\r\n";
1325
- }
1326
- }
1327
- else
1328
- {
1329
- $connectserver = $server;
1330
- $connectport = $port;
1331
- $uri = $this->path;
1332
- }
1333
-
1334
- // Cookie generation, as per rfc2965 (version 1 cookies) or
1335
- // netscape's rules (version 0 cookies)
1336
- $cookieheader='';
1337
- if (count($this->cookies))
1338
- {
1339
- $version = '';
1340
- foreach ($this->cookies as $name => $cookie)
1341
- {
1342
- if ($cookie['version'])
1343
- {
1344
- $version = ' $Version="' . $cookie['version'] . '";';
1345
- $cookieheader .= ' ' . $name . '="' . $cookie['value'] . '";';
1346
- if ($cookie['path'])
1347
- $cookieheader .= ' $Path="' . $cookie['path'] . '";';
1348
- if ($cookie['domain'])
1349
- $cookieheader .= ' $Domain="' . $cookie['domain'] . '";';
1350
- if ($cookie['port'])
1351
- $cookieheader .= ' $Port="' . $cookie['port'] . '";';
1352
- }
1353
- else
1354
- {
1355
- $cookieheader .= ' ' . $name . '=' . $cookie['value'] . ";";
1356
- }
1357
- }
1358
- $cookieheader = 'Cookie:' . $version . substr($cookieheader, 0, -1) . "\r\n";
1359
- }
1360
-
1361
- // omit port if 80
1362
- $port = ($port == 80) ? '' : (':' . $port);
1363
-
1364
- $op= 'POST ' . $uri. " HTTP/1.0\r\n" .
1365
- 'User-Agent: ' . $this->user_agent . "\r\n" .
1366
- 'Host: '. $server . $port . "\r\n" .
1367
- $credentials .
1368
- $proxy_credentials .
1369
- $accepted_encoding .
1370
- $encoding_hdr .
1371
- 'Accept-Charset: ' . implode(',', $this->accepted_charset_encodings) . "\r\n" .
1372
- $cookieheader .
1373
- 'Content-Type: ' . $msg->content_type . "\r\nContent-Length: " .
1374
- strlen($payload) . "\r\n\r\n" .
1375
- $payload;
1376
-
1377
- if($this->debug > 1)
1378
- {
1379
- print "<PRE>\n---SENDING---\n" . htmlentities($op) . "\n---END---\n</PRE>";
1380
- // let the client see this now in case http times out...
1381
- flush();
1382
- }
1383
-
1384
- if($timeout>0)
1385
- {
1386
- $fp=@fsockopen($connectserver, $connectport, $this->errno, $this->errstr, $timeout);
1387
- }
1388
- else
1389
- {
1390
- $fp=@fsockopen($connectserver, $connectport, $this->errno, $this->errstr);
1391
- }
1392
- if($fp)
1393
- {
1394
- if($timeout>0 && function_exists('stream_set_timeout'))
1395
- {
1396
- stream_set_timeout($fp, $timeout);
1397
- }
1398
- }
1399
- else
1400
- {
1401
- $this->errstr='Connect error: '.$this->errstr;
1402
- $r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $this->errstr . ' (' . $this->errno . ')');
1403
- return $r;
1404
- }
1405
-
1406
- if(!fputs($fp, $op, strlen($op)))
1407
- {
1408
- fclose($fp);
1409
- $this->errstr='Write error';
1410
- $r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $this->errstr);
1411
- return $r;
1412
- }
1413
- else
1414
- {
1415
- // reset errno and errstr on successful socket connection
1416
- $this->errstr = '';
1417
- }
1418
- // G. Giunta 2005/10/24: close socket before parsing.
1419
- // should yield slightly better execution times, and make easier recursive calls (e.g. to follow http redirects)
1420
- $ipd='';
1421
- do
1422
- {
1423
- // shall we check for $data === FALSE?
1424
- // as per the manual, it signals an error
1425
- $ipd.=fread($fp, 32768);
1426
- } while(!feof($fp));
1427
- fclose($fp);
1428
- $r =& $msg->parseResponse($ipd, false, $this->return_type);
1429
- return $r;
1430
-
1431
- }
1432
-
1433
- /**
1434
- * @access private
1435
- */
1436
- function &sendPayloadHTTPS($msg, $server, $port, $timeout=0, $username='',
1437
- $password='', $authtype=1, $cert='',$certpass='', $cacert='', $cacertdir='',
1438
- $proxyhost='', $proxyport=0, $proxyusername='', $proxypassword='', $proxyauthtype=1,
1439
- $keepalive=false, $key='', $keypass='')
1440
- {
1441
- $r =& $this->sendPayloadCURL($msg, $server, $port, $timeout, $username,
1442
- $password, $authtype, $cert, $certpass, $cacert, $cacertdir, $proxyhost, $proxyport,
1443
- $proxyusername, $proxypassword, $proxyauthtype, 'https', $keepalive, $key, $keypass);
1444
- return $r;
1445
- }
1446
-
1447
- /**
1448
- * Contributed by Justin Miller <justin@voxel.net>
1449
- * Requires curl to be built into PHP
1450
- * NB: CURL versions before 7.11.10 cannot use proxy to talk to https servers!
1451
- * @access private
1452
- */
1453
- function &sendPayloadCURL($msg, $server, $port, $timeout=0, $username='',
1454
- $password='', $authtype=1, $cert='', $certpass='', $cacert='', $cacertdir='',
1455
- $proxyhost='', $proxyport=0, $proxyusername='', $proxypassword='', $proxyauthtype=1, $method='https',
1456
- $keepalive=false, $key='', $keypass='')
1457
- {
1458
- if(!function_exists('curl_init'))
1459
- {
1460
- $this->errstr='CURL unavailable on this install';
1461
- $r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['no_curl'], $GLOBALS['xmlrpcstr']['no_curl']);
1462
- return $r;
1463
- }
1464
- if($method == 'https')
1465
- {
1466
- if(($info = curl_version()) &&
1467
- ((is_string($info) && strpos($info, 'OpenSSL') === null) || (is_array($info) && !isset($info['ssl_version']))))
1468
- {
1469
- $this->errstr='SSL unavailable on this install';
1470
- $r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['no_ssl'], $GLOBALS['xmlrpcstr']['no_ssl']);
1471
- return $r;
1472
- }
1473
- }
1474
-
1475
- if($port == 0)
1476
- {
1477
- if($method == 'http')
1478
- {
1479
- $port = 80;
1480
- }
1481
- else
1482
- {
1483
- $port = 443;
1484
- }
1485
- }
1486
-
1487
- // Only create the payload if it was not created previously
1488
- if(empty($msg->payload))
1489
- {
1490
- $msg->createPayload($this->request_charset_encoding);
1491
- }
1492
-
1493
- // Deflate request body and set appropriate request headers
1494
- $payload = $msg->payload;
1495
- if(function_exists('gzdeflate') && ($this->request_compression == 'gzip' || $this->request_compression == 'deflate'))
1496
- {
1497
- if($this->request_compression == 'gzip')
1498
- {
1499
- $a = @gzencode($payload);
1500
- if($a)
1501
- {
1502
- $payload = $a;
1503
- $encoding_hdr = 'Content-Encoding: gzip';
1504
- }
1505
- }
1506
- else
1507
- {
1508
- $a = @gzcompress($payload);
1509
- if($a)
1510
- {
1511
- $payload = $a;
1512
- $encoding_hdr = 'Content-Encoding: deflate';
1513
- }
1514
- }
1515
- }
1516
- else
1517
- {
1518
- $encoding_hdr = '';
1519
- }
1520
-
1521
- if($this->debug > 1)
1522
- {
1523
- print "<PRE>\n---SENDING---\n" . htmlentities($payload) . "\n---END---\n</PRE>";
1524
- // let the client see this now in case http times out...
1525
- flush();
1526
- }
1527
-
1528
- if(!$keepalive || !$this->xmlrpc_curl_handle)
1529
- {
1530
- $curl = curl_init($method . '://' . $server . ':' . $port . $this->path . ($this->extraUrlParams != null ? '?' . http_build_query($this->extraUrlParams) : ''));
1531
- if($keepalive)
1532
- {
1533
- $this->xmlrpc_curl_handle = $curl;
1534
- }
1535
- }
1536
- else
1537
- {
1538
- $curl = $this->xmlrpc_curl_handle;
1539
- }
1540
-
1541
- // results into variable
1542
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
1543
-
1544
- if($this->debug)
1545
- {
1546
- curl_setopt($curl, CURLOPT_VERBOSE, 1);
1547
- }
1548
- curl_setopt($curl, CURLOPT_USERAGENT, $this->user_agent);
1549
- // required for XMLRPC: post the data
1550
- curl_setopt($curl, CURLOPT_POST, 1);
1551
- // the data
1552
- curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
1553
-
1554
- // return the header too
1555
- curl_setopt($curl, CURLOPT_HEADER, 1);
1556
-
1557
- // NB: if we set an empty string, CURL will add http header indicating
1558
- // ALL methods it is supporting. This is possibly a better option than
1559
- // letting the user tell what curl can / cannot do...
1560
- if(is_array($this->accepted_compression) && count($this->accepted_compression))
1561
- {
1562
- //curl_setopt($curl, CURLOPT_ENCODING, implode(',', $this->accepted_compression));
1563
- // empty string means 'any supported by CURL' (shall we catch errors in case CURLOPT_SSLKEY undefined ?)
1564
- if (count($this->accepted_compression) == 1)
1565
- {
1566
- curl_setopt($curl, CURLOPT_ENCODING, $this->accepted_compression[0]);
1567
- }
1568
- else
1569
- curl_setopt($curl, CURLOPT_ENCODING, '');
1570
- }
1571
- // extra headers
1572
- $headers = array('Content-Type: ' . $msg->content_type , 'Accept-Charset: ' . implode(',', $this->accepted_charset_encodings));
1573
- // if no keepalive is wanted, let the server know it in advance
1574
- if(!$keepalive)
1575
- {
1576
- $headers[] = 'Connection: close';
1577
- }
1578
- // request compression header
1579
- if($encoding_hdr)
1580
- {
1581
- $headers[] = $encoding_hdr;
1582
- }
1583
-
1584
- curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
1585
- // timeout is borked
1586
- if($timeout)
1587
- {
1588
- curl_setopt($curl, CURLOPT_TIMEOUT, $timeout == 1 ? 1 : $timeout - 1);
1589
- }
1590
-
1591
- if($username && $password)
1592
- {
1593
- curl_setopt($curl, CURLOPT_USERPWD, $username.':'.$password);
1594
- if (defined('CURLOPT_HTTPAUTH'))
1595
- {
1596
- curl_setopt($curl, CURLOPT_HTTPAUTH, $authtype);
1597
- }
1598
- else if ($authtype != 1)
1599
- {
1600
- error_log('XML-RPC: '.__METHOD__.': warning. Only Basic auth is supported by the current PHP/curl install');
1601
- }
1602
- }
1603
-
1604
- if($method == 'https')
1605
- {
1606
- // set cert file
1607
- if($cert)
1608
- {
1609
- curl_setopt($curl, CURLOPT_SSLCERT, $cert);
1610
- }
1611
- // set cert password
1612
- if($certpass)
1613
- {
1614
- curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $certpass);
1615
- }
1616
- // whether to verify remote host's cert
1617
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $this->verifypeer);
1618
- // set ca certificates file/dir
1619
- if($cacert)
1620
- {
1621
- curl_setopt($curl, CURLOPT_CAINFO, $cacert);
1622
- }
1623
- if($cacertdir)
1624
- {
1625
- curl_setopt($curl, CURLOPT_CAPATH, $cacertdir);
1626
- }
1627
- // set key file (shall we catch errors in case CURLOPT_SSLKEY undefined ?)
1628
- if($key)
1629
- {
1630
- curl_setopt($curl, CURLOPT_SSLKEY, $key);
1631
- }
1632
- // set key password (shall we catch errors in case CURLOPT_SSLKEY undefined ?)
1633
- if($keypass)
1634
- {
1635
- curl_setopt($curl, CURLOPT_SSLKEYPASSWD, $keypass);
1636
- }
1637
- // whether to verify cert's common name (CN); 0 for no, 1 to verify that it exists, and 2 to verify that it matches the hostname used
1638
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, $this->verifyhost);
1639
- }
1640
-
1641
- // proxy info
1642
- if($proxyhost)
1643
- {
1644
- if($proxyport == 0)
1645
- {
1646
- $proxyport = 8080; // NB: even for HTTPS, local connection is on port 8080
1647
- }
1648
- curl_setopt($curl, CURLOPT_PROXY, $proxyhost.':'.$proxyport);
1649
- //curl_setopt($curl, CURLOPT_PROXYPORT,$proxyport);
1650
- if($proxyusername)
1651
- {
1652
- curl_setopt($curl, CURLOPT_PROXYUSERPWD, $proxyusername.':'.$proxypassword);
1653
- if (defined('CURLOPT_PROXYAUTH'))
1654
- {
1655
- curl_setopt($curl, CURLOPT_PROXYAUTH, $proxyauthtype);
1656
- }
1657
- else if ($proxyauthtype != 1)
1658
- {
1659
- error_log('XML-RPC: '.__METHOD__.': warning. Only Basic auth to proxy is supported by the current PHP/curl install');
1660
- }
1661
- }
1662
- }
1663
-
1664
- // NB: should we build cookie http headers by hand rather than let CURL do it?
1665
- // the following code does not honour 'expires', 'path' and 'domain' cookie attributes
1666
- // set to client obj the the user...
1667
- if (count($this->cookies))
1668
- {
1669
- $cookieheader = '';
1670
- foreach ($this->cookies as $name => $cookie)
1671
- {
1672
- $cookieheader .= $name . '=' . $cookie['value'] . '; ';
1673
- }
1674
- curl_setopt($curl, CURLOPT_COOKIE, substr($cookieheader, 0, -2));
1675
- }
1676
-
1677
- foreach ($this->extracurlopts as $opt => $val)
1678
- {
1679
- curl_setopt($curl, $opt, $val);
1680
- }
1681
-
1682
- $result = curl_exec($curl);
1683
-
1684
- if ($this->debug > 1)
1685
- {
1686
- print "<PRE>\n---CURL INFO---\n";
1687
- foreach(curl_getinfo($curl) as $name => $val)
1688
- {
1689
- if (is_array($val))
1690
- {
1691
- $val = implode("\n", $val);
1692
- }
1693
- print $name . ': ' . htmlentities($val) . "\n";
1694
- }
1695
-
1696
- print "---END---\n</PRE>";
1697
- }
1698
-
1699
- $this->curlError = curl_error($curl);
1700
- if ($this->curlError){
1701
- $this->curlInfo = curl_getinfo($curl);
1702
- $this->curlErrorNo = curl_errno($curl);
1703
- }
1704
-
1705
- if(!$result) /// @todo we should use a better check here - what if we get back '' or '0'?
1706
- {
1707
- $this->errstr='no response';
1708
- $resp=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['curl_fail'], $GLOBALS['xmlrpcstr']['curl_fail']. ': '. curl_error($curl));
1709
- curl_close($curl);
1710
- if($keepalive)
1711
- {
1712
- $this->xmlrpc_curl_handle = null;
1713
- }
1714
- }
1715
- else
1716
- {
1717
- if(!$keepalive)
1718
- {
1719
- curl_close($curl);
1720
- }
1721
- $resp =& $msg->parseResponse($result, true, $this->return_type);
1722
- // if we got back a 302, we can not reuse the curl handle for later calls
1723
- if($resp->faultCode() == $GLOBALS['xmlrpcerr']['http_error'] && $keepalive)
1724
- {
1725
- curl_close($curl);
1726
- $this->xmlrpc_curl_handle = null;
1727
- }
1728
- }
1729
- return $resp;
1730
- }
1731
-
1732
- /**
1733
- * Send an array of request messages and return an array of responses.
1734
- * Unless $this->no_multicall has been set to true, it will try first
1735
- * to use one single xmlrpc call to server method system.multicall, and
1736
- * revert to sending many successive calls in case of failure.
1737
- * This failure is also stored in $this->no_multicall for subsequent calls.
1738
- * Unfortunately, there is no server error code universally used to denote
1739
- * the fact that multicall is unsupported, so there is no way to reliably
1740
- * distinguish between that and a temporary failure.
1741
- * If you are sure that server supports multicall and do not want to
1742
- * fallback to using many single calls, set the fourth parameter to FALSE.
1743
- *
1744
- * NB: trying to shoehorn extra functionality into existing syntax has resulted
1745
- * in pretty much convoluted code...
1746
- *
1747
- * @param array $msgs an array of xmlrpcmsg objects
1748
- * @param integer $timeout connection timeout (in seconds)
1749
- * @param string $method the http protocol variant to be used
1750
- * @param boolean fallback When true, upon receiving an error during multicall, multiple single calls will be attempted
1751
- * @return array
1752
- * @access public
1753
- */
1754
- function multicall($msgs, $timeout=0, $method='', $fallback=true)
1755
- {
1756
- if ($method == '')
1757
- {
1758
- $method = $this->method;
1759
- }
1760
- if(!$this->no_multicall)
1761
- {
1762
- $results = $this->_try_multicall($msgs, $timeout, $method);
1763
- if(is_array($results))
1764
- {
1765
- // System.multicall succeeded
1766
- return $results;
1767
- }
1768
- else
1769
- {
1770
- // either system.multicall is unsupported by server,
1771
- // or call failed for some other reason.
1772
- if ($fallback)
1773
- {
1774
- // Don't try it next time...
1775
- $this->no_multicall = true;
1776
- }
1777
- else
1778
- {
1779
- if (is_a($results, 'xmlrpcresp'))
1780
- {
1781
- $result = $results;
1782
- }
1783
- else
1784
- {
1785
- $result = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['multicall_error'], $GLOBALS['xmlrpcstr']['multicall_error']);
1786
- }
1787
- }
1788
- }
1789
- }
1790
- else
1791
- {
1792
- // override fallback, in case careless user tries to do two
1793
- // opposite things at the same time
1794
- $fallback = true;
1795
- }
1796
-
1797
- $results = array();
1798
- if ($fallback)
1799
- {
1800
- // system.multicall is (probably) unsupported by server:
1801
- // emulate multicall via multiple requests
1802
- foreach($msgs as $msg)
1803
- {
1804
- $results[] =& $this->send($msg, $timeout, $method);
1805
- }
1806
- }
1807
- else
1808
- {
1809
- // user does NOT want to fallback on many single calls:
1810
- // since we should always return an array of responses,
1811
- // return an array with the same error repeated n times
1812
- foreach($msgs as $msg)
1813
- {
1814
- $results[] = $result;
1815
- }
1816
- }
1817
- return $results;
1818
- }
1819
-
1820
- /**
1821
- * Attempt to boxcar $msgs via system.multicall.
1822
- * Returns either an array of xmlrpcreponses, an xmlrpc error response
1823
- * or false (when received response does not respect valid multicall syntax)
1824
- * @access private
1825
- */
1826
- function _try_multicall($msgs, $timeout, $method)
1827
- {
1828
- // Construct multicall message
1829
- $calls = array();
1830
- foreach($msgs as $msg)
1831
- {
1832
- $call['methodName'] = new xmlrpcval($msg->method(),'string');
1833
- $numParams = $msg->getNumParams();
1834
- $params = array();
1835
- for($i = 0; $i < $numParams; $i++)
1836
- {
1837
- $params[$i] = $msg->getParam($i);
1838
- }
1839
- $call['params'] = new xmlrpcval($params, 'array');
1840
- $calls[] = new xmlrpcval($call, 'struct');
1841
- }
1842
- $multicall = new xmlrpcmsg('system.multicall');
1843
- $multicall->addParam(new xmlrpcval($calls, 'array'));
1844
-
1845
- // Attempt RPC call
1846
- $result =& $this->send($multicall, $timeout, $method);
1847
-
1848
- if($result->faultCode() != 0)
1849
- {
1850
- // call to system.multicall failed
1851
- return $result;
1852
- }
1853
-
1854
- // Unpack responses.
1855
- $rets = $result->value();
1856
-
1857
- if ($this->return_type == 'xml')
1858
- {
1859
- return $rets;
1860
- }
1861
- else if ($this->return_type == 'phpvals')
1862
- {
1863
- ///@todo test this code branch...
1864
- $rets = $result->value();
1865
- if(!is_array($rets))
1866
- {
1867
- return false; // bad return type from system.multicall
1868
- }
1869
- $numRets = count($rets);
1870
- if($numRets != count($msgs))
1871
- {
1872
- return false; // wrong number of return values.
1873
- }
1874
-
1875
- $response = array();
1876
- for($i = 0; $i < $numRets; $i++)
1877
- {
1878
- $val = $rets[$i];
1879
- if (!is_array($val)) {
1880
- return false;
1881
- }
1882
- switch(count($val))
1883
- {
1884
- case 1:
1885
- if(!isset($val[0]))
1886
- {
1887
- return false; // Bad value
1888
- }
1889
- // Normal return value
1890
- $response[$i] = new xmlrpcresp($val[0], 0, '', 'phpvals');
1891
- break;
1892
- case 2:
1893
- /// @todo remove usage of @: it is apparently quite slow
1894
- $code = @$val['faultCode'];
1895
- if(!is_int($code))
1896
- {
1897
- return false;
1898
- }
1899
- $str = @$val['faultString'];
1900
- if(!is_string($str))
1901
- {
1902
- return false;
1903
- }
1904
- $response[$i] = new xmlrpcresp(0, $code, $str);
1905
- break;
1906
- default:
1907
- return false;
1908
- }
1909
- }
1910
- return $response;
1911
- }
1912
- else // return type == 'xmlrpcvals'
1913
- {
1914
- $rets = $result->value();
1915
- if($rets->kindOf() != 'array')
1916
- {
1917
- return false; // bad return type from system.multicall
1918
- }
1919
- $numRets = $rets->arraysize();
1920
- if($numRets != count($msgs))
1921
- {
1922
- return false; // wrong number of return values.
1923
- }
1924
-
1925
- $response = array();
1926
- for($i = 0; $i < $numRets; $i++)
1927
- {
1928
- $val = $rets->arraymem($i);
1929
- switch($val->kindOf())
1930
- {
1931
- case 'array':
1932
- if($val->arraysize() != 1)
1933
- {
1934
- return false; // Bad value
1935
- }
1936
- // Normal return value
1937
- $response[$i] = new xmlrpcresp($val->arraymem(0));
1938
- break;
1939
- case 'struct':
1940
- $code = $val->structmem('faultCode');
1941
- if($code->kindOf() != 'scalar' || $code->scalartyp() != 'int')
1942
- {
1943
- return false;
1944
- }
1945
- $str = $val->structmem('faultString');
1946
- if($str->kindOf() != 'scalar' || $str->scalartyp() != 'string')
1947
- {
1948
- return false;
1949
- }
1950
- $response[$i] = new xmlrpcresp(0, $code->scalarval(), $str->scalarval());
1951
- break;
1952
- default:
1953
- return false;
1954
- }
1955
- }
1956
- return $response;
1957
- }
1958
- }
1959
- } // end class xmlrpc_client
1960
-
1961
- class xmlrpcresp
1962
- {
1963
- var $val = 0;
1964
- var $valtyp;
1965
- var $errno = 0;
1966
- var $errstr = '';
1967
- var $payload;
1968
- var $hdrs = array();
1969
- var $_cookies = array();
1970
- var $content_type = 'text/xml';
1971
- var $raw_data = '';
1972
-
1973
- /**
1974
- * @param mixed $val either an xmlrpcval obj, a php value or the xml serialization of an xmlrpcval (a string)
1975
- * @param integer $fcode set it to anything but 0 to create an error response
1976
- * @param string $fstr the error string, in case of an error response
1977
- * @param string $valtyp either 'xmlrpcvals', 'phpvals' or 'xml'
1978
- *
1979
- * @todo add check that $val / $fcode / $fstr is of correct type???
1980
- * NB: as of now we do not do it, since it might be either an xmlrpcval or a plain
1981
- * php val, or a complete xml chunk, depending on usage of xmlrpc_client::send() inside which creator is called...
1982
- */
1983
- function __construct($val, $fcode = 0, $fstr = '', $valtyp='')
1984
- {
1985
- if($fcode != 0)
1986
- {
1987
- // error response
1988
- $this->errno = $fcode;
1989
- $this->errstr = $fstr;
1990
- //$this->errstr = htmlspecialchars($fstr); // XXX: encoding probably shouldn't be done here; fix later.
1991
- }
1992
- else
1993
- {
1994
- // successful response
1995
- $this->val = $val;
1996
- if ($valtyp == '')
1997
- {
1998
- // user did not declare type of response value: try to guess it
1999
- if (is_object($this->val) && is_a($this->val, 'xmlrpcval'))
2000
- {
2001
- $this->valtyp = 'xmlrpcvals';
2002
- }
2003
- else if (is_string($this->val))
2004
- {
2005
- $this->valtyp = 'xml';
2006
-
2007
- }
2008
- else
2009
- {
2010
- $this->valtyp = 'phpvals';
2011
- }
2012
- }
2013
- else
2014
- {
2015
- // user declares type of resp value: believe him
2016
- $this->valtyp = $valtyp;
2017
- }
2018
- }
2019
- }
2020
-
2021
- /**
2022
- * Returns the error code of the response.
2023
- * @return integer the error code of this response (0 for not-error responses)
2024
- * @access public
2025
- */
2026
- function faultCode()
2027
- {
2028
- return $this->errno;
2029
- }
2030
-
2031
- /**
2032
- * Returns the error code of the response.
2033
- * @return string the error string of this response ('' for not-error responses)
2034
- * @access public
2035
- */
2036
- function faultString()
2037
- {
2038
- return $this->errstr;
2039
- }
2040
-
2041
- /**
2042
- * Returns the value received by the server.
2043
- * @return mixed the xmlrpcval object returned by the server. Might be an xml string or php value if the response has been created by specially configured xmlrpc_client objects
2044
- * @access public
2045
- */
2046
- function value()
2047
- {
2048
- return $this->val;
2049
- }
2050
-
2051
- /**
2052
- * Returns an array with the cookies received from the server.
2053
- * Array has the form: $cookiename => array ('value' => $val, $attr1 => $val1, $attr2 = $val2, ...)
2054
- * with attributes being e.g. 'expires', 'path', domain'.
2055
- * NB: cookies sent as 'expired' by the server (i.e. with an expiry date in the past)
2056
- * are still present in the array. It is up to the user-defined code to decide
2057
- * how to use the received cookies, and whether they have to be sent back with the next
2058
- * request to the server (using xmlrpc_client::setCookie) or not
2059
- * @return array array of cookies received from the server
2060
- * @access public
2061
- */
2062
- function cookies()
2063
- {
2064
- return $this->_cookies;
2065
- }
2066
-
2067
- /**
2068
- * Returns xml representation of the response. XML prologue not included
2069
- * @param string $charset_encoding the charset to be used for serialization. if null, US-ASCII is assumed
2070
- * @return string the xml representation of the response
2071
- * @access public
2072
- */
2073
- function serialize($charset_encoding='')
2074
- {
2075
- if ($charset_encoding != '')
2076
- $this->content_type = 'text/xml; charset=' . $charset_encoding;
2077
- else
2078
- $this->content_type = 'text/xml';
2079
- if ($GLOBALS['xmlrpc_null_apache_encoding'])
2080
- {
2081
- $result = "<methodResponse xmlns:ex=\"".$GLOBALS['xmlrpc_null_apache_encoding_ns']."\">\n";
2082
- }
2083
- else
2084
- {
2085
- $result = "<methodResponse>\n";
2086
- }
2087
- if($this->errno)
2088
- {
2089
- // G. Giunta 2005/2/13: let non-ASCII response messages be tolerated by clients
2090
- // by xml-encoding non ascii chars
2091
- $result .= "<fault>\n" .
2092
- "<value>\n<struct><member><name>faultCode</name>\n<value><int>" . $this->errno .
2093
- "</int></value>\n</member>\n<member>\n<name>faultString</name>\n<value><string>" .
2094
- xmlrpc_encode_entitites($this->errstr, $GLOBALS['xmlrpc_internalencoding'], $charset_encoding) . "</string></value>\n</member>\n" .
2095
- "</struct>\n</value>\n</fault>";
2096
- }
2097
- else
2098
- {
2099
- if(!is_object($this->val) || !is_a($this->val, 'xmlrpcval'))
2100
- {
2101
- if (is_string($this->val) && $this->valtyp == 'xml')
2102
- {
2103
- $result .= "<params>\n<param>\n" .
2104
- $this->val .
2105
- "</param>\n</params>";
2106
- }
2107
- else
2108
- {
2109
- /// @todo try to build something serializable?
2110
- die('cannot serialize xmlrpcresp objects whose content is native php values');
2111
- }
2112
- }
2113
- else
2114
- {
2115
- $result .= "<params>\n<param>\n" .
2116
- $this->val->serialize($charset_encoding) .
2117
- "</param>\n</params>";
2118
- }
2119
- }
2120
- $result .= "\n</methodResponse>";
2121
- $this->payload = $result;
2122
- return $result;
2123
- }
2124
- }
2125
-
2126
- class xmlrpcmsg
2127
- {
2128
- var $payload;
2129
- var $methodname;
2130
- var $params=array();
2131
- var $debug=0;
2132
- var $content_type = 'text/xml';
2133
-
2134
- /**
2135
- * @param string $meth the name of the method to invoke
2136
- * @param array $pars array of parameters to be passed to the method (xmlrpcval objects)
2137
- */
2138
- function __construct($meth, $pars=0)
2139
- {
2140
- $this->methodname=$meth;
2141
- if(is_array($pars) && count($pars)>0)
2142
- {
2143
- for($i=0; $i<count($pars); $i++)
2144
- {
2145
- $this->addParam($pars[$i]);
2146
- }
2147
- }
2148
- }
2149
-
2150
- /**
2151
- * @access private
2152
- */
2153
- function xml_header($charset_encoding='')
2154
- {
2155
- if ($charset_encoding != '')
2156
- {
2157
- return "<?xml version=\"1.0\" encoding=\"$charset_encoding\" ?" . ">\n<methodCall>\n";
2158
- }
2159
- else
2160
- {
2161
- return "<?xml version=\"1.0\"?" . ">\n<methodCall>\n";
2162
- }
2163
- }
2164
-
2165
- /**
2166
- * @access private
2167
- */
2168
- function xml_footer()
2169
- {
2170
- return '</methodCall>';
2171
- }
2172
-
2173
- /**
2174
- * @access private
2175
- */
2176
- function kindOf()
2177
- {
2178
- return 'msg';
2179
- }
2180
-
2181
- /**
2182
- * @access private
2183
- */
2184
- function createPayload($charset_encoding='')
2185
- {
2186
- if ($charset_encoding != '')
2187
- $this->content_type = 'text/xml; charset=' . $charset_encoding;
2188
- else
2189
- $this->content_type = 'text/xml';
2190
- $this->payload=$this->xml_header($charset_encoding);
2191
- $this->payload.='<methodName>' . $this->methodname . "</methodName>\n";
2192
- $this->payload.="<params>\n";
2193
- for($i=0; $i<count($this->params); $i++)
2194
- {
2195
- $p=$this->params[$i];
2196
- $this->payload.="<param>\n" . $p->serialize($charset_encoding) .
2197
- "</param>\n";
2198
- }
2199
- $this->payload.="</params>\n";
2200
- $this->payload.=$this->xml_footer();
2201
- }
2202
-
2203
- /**
2204
- * Gets/sets the xmlrpc method to be invoked
2205
- * @param string $meth the method to be set (leave empty not to set it)
2206
- * @return string the method that will be invoked
2207
- * @access public
2208
- */
2209
- function method($meth='')
2210
- {
2211
- if($meth!='')
2212
- {
2213
- $this->methodname=$meth;
2214
- }
2215
- return $this->methodname;
2216
- }
2217
-
2218
- /**
2219
- * Returns xml representation of the message. XML prologue included
2220
- * @param string $charset_encoding
2221
- * @return string the xml representation of the message, xml prologue included
2222
- * @access public
2223
- */
2224
- function serialize($charset_encoding='')
2225
- {
2226
- $this->createPayload($charset_encoding);
2227
- return $this->payload;
2228
- }
2229
-
2230
- /**
2231
- * Add a parameter to the list of parameters to be used upon method invocation
2232
- * @param xmlrpcval $par
2233
- * @return boolean false on failure
2234
- * @access public
2235
- */
2236
- function addParam($par)
2237
- {
2238
- // add check: do not add to self params which are not xmlrpcvals
2239
- if(is_object($par) && is_a($par, 'xmlrpcval'))
2240
- {
2241
- $this->params[]=$par;
2242
- return true;
2243
- }
2244
- else
2245
- {
2246
- return false;
2247
- }
2248
- }
2249
-
2250
- /**
2251
- * Returns the nth parameter in the message. The index zero-based.
2252
- * @param integer $i the index of the parameter to fetch (zero based)
2253
- * @return xmlrpcval the i-th parameter
2254
- * @access public
2255
- */
2256
- function getParam($i) { return $this->params[$i]; }
2257
-
2258
- /**
2259
- * Returns the number of parameters in the messge.
2260
- * @return integer the number of parameters currently set
2261
- * @access public
2262
- */
2263
- function getNumParams() { return count($this->params); }
2264
-
2265
- /**
2266
- * Given an open file handle, read all data available and parse it as axmlrpc response.
2267
- * NB: the file handle is not closed by this function.
2268
- * NNB: might have trouble in rare cases to work on network streams, as we
2269
- * check for a read of 0 bytes instead of feof($fp).
2270
- * But since checking for feof(null) returns false, we would risk an
2271
- * infinite loop in that case, because we cannot trust the caller
2272
- * to give us a valid pointer to an open file...
2273
- * @access public
2274
- * @param resource $fp stream pointer
2275
- * @return xmlrpcresp
2276
- * @todo add 2nd & 3rd param to be passed to ParseResponse() ???
2277
- */
2278
- function &parseResponseFile($fp)
2279
- {
2280
- $ipd='';
2281
- while($data=fread($fp, 32768))
2282
- {
2283
- $ipd.=$data;
2284
- }
2285
- //fclose($fp);
2286
- $r =& $this->parseResponse($ipd);
2287
- return $r;
2288
- }
2289
-
2290
- /**
2291
- * Parses HTTP headers and separates them from data.
2292
- * @access private
2293
- */
2294
- function &parseResponseHeaders(&$data, $headers_processed=false)
2295
- {
2296
- // Support "web-proxy-tunelling" connections for https through proxies
2297
- if(preg_match('/^HTTP\/1\.[0-1] 200 Connection established/', $data))
2298
- {
2299
- // Look for CR/LF or simple LF as line separator,
2300
- // (even though it is not valid http)
2301
- $pos = strpos($data,"\r\n\r\n");
2302
- if($pos || is_int($pos))
2303
- {
2304
- $bd = $pos+4;
2305
- }
2306
- else
2307
- {
2308
- $pos = strpos($data,"\n\n");
2309
- if($pos || is_int($pos))
2310
- {
2311
- $bd = $pos+2;
2312
- }
2313
- else
2314
- {
2315
- // No separation between response headers and body: fault?
2316
- $bd = 0;
2317
- }
2318
- }
2319
- if ($bd)
2320
- {
2321
- // this filters out all http headers from proxy.
2322
- // maybe we could take them into account, too?
2323
- $data = substr($data, $bd);
2324
- }
2325
- else
2326
- {
2327
- error_log('XML-RPC: '.__METHOD__.': HTTPS via proxy error, tunnel connection possibly failed');
2328
- $r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $GLOBALS['xmlrpcstr']['http_error']. ' (HTTPS via proxy error, tunnel connection possibly failed)');
2329
- return $r;
2330
- }
2331
- }
2332
-
2333
- // Strip HTTP 1.1 100 Continue header if present
2334
- while(preg_match('/^HTTP\/1\.1 1[0-9]{2} /', $data))
2335
- {
2336
- $pos = strpos($data, 'HTTP', 12);
2337
- // server sent a Continue header without any (valid) content following...
2338
- // give the client a chance to know it
2339
- if(!$pos && !is_int($pos)) // works fine in php 3, 4 and 5
2340
- {
2341
- break;
2342
- }
2343
- $data = substr($data, $pos);
2344
- }
2345
- if(!preg_match('/^HTTP\/[0-9.]+ 200 /', $data))
2346
- {
2347
- $errstr= substr($data, 0, strpos($data, "\n")-1);
2348
- error_log('XML-RPC: '.__METHOD__.': HTTP error, got response: ' .$errstr);
2349
- $r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['http_error'], $GLOBALS['xmlrpcstr']['http_error']. ' (' . $errstr . ')');
2350
- return $r;
2351
- }
2352
-
2353
- $GLOBALS['_xh']['headers'] = array();
2354
- $GLOBALS['_xh']['cookies'] = array();
2355
-
2356
- // be tolerant to usage of \n instead of \r\n to separate headers and data
2357
- // (even though it is not valid http)
2358
- $pos = strpos($data,"\r\n\r\n");
2359
- if($pos || is_int($pos))
2360
- {
2361
- $bd = $pos+4;
2362
- }
2363
- else
2364
- {
2365
- $pos = strpos($data,"\n\n");
2366
- if($pos || is_int($pos))
2367
- {
2368
- $bd = $pos+2;
2369
- }
2370
- else
2371
- {
2372
- // No separation between response headers and body: fault?
2373
- // we could take some action here instead of going on...
2374
- $bd = 0;
2375
- }
2376
- }
2377
- // be tolerant to line endings, and extra empty lines
2378
- $ar = preg_split("/\r?\n/", trim(substr($data, 0, $pos)));
2379
- while(list(,$line) = @each($ar))
2380
- {
2381
- // take care of multi-line headers and cookies
2382
- $arr = explode(':',$line,2);
2383
- if(count($arr) > 1)
2384
- {
2385
- $header_name = strtolower(trim($arr[0]));
2386
- /// @todo some other headers (the ones that allow a CSV list of values)
2387
- /// do allow many values to be passed using multiple header lines.
2388
- /// We should add content to $GLOBALS['_xh']['headers'][$header_name]
2389
- /// instead of replacing it for those...
2390
- if ($header_name == 'set-cookie' || $header_name == 'set-cookie2')
2391
- {
2392
- if ($header_name == 'set-cookie2')
2393
- {
2394
- // version 2 cookies:
2395
- // there could be many cookies on one line, comma separated
2396
- $cookies = explode(',', $arr[1]);
2397
- }
2398
- else
2399
- {
2400
- $cookies = array($arr[1]);
2401
- }
2402
- foreach ($cookies as $cookie)
2403
- {
2404
- // glue together all received cookies, using a comma to separate them
2405
- // (same as php does with getallheaders())
2406
- if (isset($GLOBALS['_xh']['headers'][$header_name]))
2407
- $GLOBALS['_xh']['headers'][$header_name] .= ', ' . trim($cookie);
2408
- else
2409
- $GLOBALS['_xh']['headers'][$header_name] = trim($cookie);
2410
- // parse cookie attributes, in case user wants to correctly honour them
2411
- // feature creep: only allow rfc-compliant cookie attributes?
2412
- // @todo support for server sending multiple time cookie with same name, but using different PATHs
2413
- $cookie = explode(';', $cookie);
2414
- foreach ($cookie as $pos => $val)
2415
- {
2416
- $val = explode('=', $val, 2);
2417
- $tag = trim($val[0]);
2418
- $val = trim(@$val[1]);
2419
- /// @todo with version 1 cookies, we should strip leading and trailing " chars
2420
- if ($pos == 0)
2421
- {
2422
- $cookiename = $tag;
2423
- $GLOBALS['_xh']['cookies'][$tag] = array();
2424
- $GLOBALS['_xh']['cookies'][$cookiename]['value'] = urldecode($val);
2425
- }
2426
- else
2427
- {
2428
- if ($tag != 'value')
2429
- {
2430
- $GLOBALS['_xh']['cookies'][$cookiename][$tag] = $val;
2431
- }
2432
- }
2433
- }
2434
- }
2435
- }
2436
- else
2437
- {
2438
- $GLOBALS['_xh']['headers'][$header_name] = trim($arr[1]);
2439
- }
2440
- }
2441
- elseif(isset($header_name))
2442
- {
2443
- /// @todo version1 cookies might span multiple lines, thus breaking the parsing above
2444
- $GLOBALS['_xh']['headers'][$header_name] .= ' ' . trim($line);
2445
- }
2446
- }
2447
-
2448
- $data = substr($data, $bd);
2449
-
2450
- if($this->debug && count($GLOBALS['_xh']['headers']))
2451
- {
2452
- print '<PRE>';
2453
- foreach($GLOBALS['_xh']['headers'] as $header => $value)
2454
- {
2455
- print htmlentities("HEADER: $header: $value\n");
2456
- }
2457
- foreach($GLOBALS['_xh']['cookies'] as $header => $value)
2458
- {
2459
- print htmlentities("COOKIE: $header={$value['value']}\n");
2460
- }
2461
- print "</PRE>\n";
2462
- }
2463
-
2464
- // if CURL was used for the call, http headers have been processed,
2465
- // and dechunking + reinflating have been carried out
2466
- if(!$headers_processed)
2467
- {
2468
- // Decode chunked encoding sent by http 1.1 servers
2469
- if(isset($GLOBALS['_xh']['headers']['transfer-encoding']) && $GLOBALS['_xh']['headers']['transfer-encoding'] == 'chunked')
2470
- {
2471
- if(!$data = decode_chunked($data))
2472
- {
2473
- error_log('XML-RPC: '.__METHOD__.': errors occurred when trying to rebuild the chunked data received from server');
2474
- $r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['dechunk_fail'], $GLOBALS['xmlrpcstr']['dechunk_fail']);
2475
- return $r;
2476
- }
2477
- }
2478
-
2479
- // Decode gzip-compressed stuff
2480
- // code shamelessly inspired from nusoap library by Dietrich Ayala
2481
- if(isset($GLOBALS['_xh']['headers']['content-encoding']))
2482
- {
2483
- $GLOBALS['_xh']['headers']['content-encoding'] = str_replace('x-', '', $GLOBALS['_xh']['headers']['content-encoding']);
2484
- if($GLOBALS['_xh']['headers']['content-encoding'] == 'deflate' || $GLOBALS['_xh']['headers']['content-encoding'] == 'gzip')
2485
- {
2486
- // if decoding works, use it. else assume data wasn't gzencoded
2487
- if(function_exists('gzinflate'))
2488
- {
2489
- if($GLOBALS['_xh']['headers']['content-encoding'] == 'deflate' && $degzdata = @gzuncompress($data))
2490
- {
2491
- $data = $degzdata;
2492
- if($this->debug)
2493
- print "<PRE>---INFLATED RESPONSE---[".strlen($data)." chars]---\n" . htmlentities($data) . "\n---END---</PRE>";
2494
- }
2495
- elseif($GLOBALS['_xh']['headers']['content-encoding'] == 'gzip' && $degzdata = @gzinflate(substr($data, 10)))
2496
- {
2497
- $data = $degzdata;
2498
- if($this->debug)
2499
- print "<PRE>---INFLATED RESPONSE---[".strlen($data)." chars]---\n" . htmlentities($data) . "\n---END---</PRE>";
2500
- }
2501
- else
2502
- {
2503
- error_log('XML-RPC: '.__METHOD__.': errors occurred when trying to decode the deflated data received from server');
2504
- $r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['decompress_fail'], $GLOBALS['xmlrpcstr']['decompress_fail']);
2505
- return $r;
2506
- }
2507
- }
2508
- else
2509
- {
2510
- error_log('XML-RPC: '.__METHOD__.': the server sent deflated data. Your php install must have the Zlib extension compiled in to support this.');
2511
- $r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['cannot_decompress'], $GLOBALS['xmlrpcstr']['cannot_decompress']);
2512
- return $r;
2513
- }
2514
- }
2515
- }
2516
- } // end of 'if needed, de-chunk, re-inflate response'
2517
-
2518
- // real stupid hack to avoid PHP complaining about returning NULL by ref
2519
- $r = null;
2520
- $r =& $r;
2521
- return $r;
2522
- }
2523
-
2524
- /**
2525
- * Parse the xmlrpc response contained in the string $data and return an xmlrpcresp object.
2526
- * @param string $data the xmlrpc response, eventually including http headers
2527
- * @param bool $headers_processed when true prevents parsing HTTP headers for interpretation of content-encoding and consequent decoding
2528
- * @param string $return_type decides return type, i.e. content of response->value(). Either 'xmlrpcvals', 'xml' or 'phpvals'
2529
- * @return xmlrpcresp
2530
- * @access public
2531
- */
2532
- function &parseResponse($data='', $headers_processed=false, $return_type='xmlrpcvals')
2533
- {
2534
- if($this->debug)
2535
- {
2536
- //by maHo, replaced htmlspecialchars with htmlentities
2537
- print "<PRE>---GOT---\n" . htmlentities($data) . "\n---END---\n</PRE>";
2538
- }
2539
-
2540
- if($data == '')
2541
- {
2542
- error_log('XML-RPC: '.__METHOD__.': no response received from server.');
2543
- $r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['no_data'], $GLOBALS['xmlrpcstr']['no_data']);
2544
- return $r;
2545
- }
2546
-
2547
- $GLOBALS['_xh']=array();
2548
-
2549
- $raw_data = $data;
2550
- // parse the HTTP headers of the response, if present, and separate them from data
2551
- if(substr($data, 0, 4) == 'HTTP')
2552
- {
2553
- $r =& $this->parseResponseHeaders($data, $headers_processed);
2554
- if ($r)
2555
- {
2556
- // failed processing of HTTP response headers
2557
- // save into response obj the full payload received, for debugging
2558
- $r->raw_data = $data;
2559
- return $r;
2560
- }
2561
- }
2562
- else
2563
- {
2564
- $GLOBALS['_xh']['headers'] = array();
2565
- $GLOBALS['_xh']['cookies'] = array();
2566
- }
2567
-
2568
- if($this->debug)
2569
- {
2570
- $start = strpos($data, '<!-- SERVER DEBUG INFO (BASE64 ENCODED):');
2571
- if ($start)
2572
- {
2573
- $start += strlen('<!-- SERVER DEBUG INFO (BASE64 ENCODED):');
2574
- $end = strpos($data, '-->', $start);
2575
- $comments = substr($data, $start, $end-$start);
2576
- print "<PRE>---SERVER DEBUG INFO (DECODED) ---\n\t".htmlentities(str_replace("\n", "\n\t", base64_decode($comments)))."\n---END---\n</PRE>";
2577
- }
2578
- }
2579
-
2580
- // be tolerant of extra whitespace in response body
2581
- $data = trim($data);
2582
-
2583
- /// @todo return an error msg if $data=='' ?
2584
-
2585
- // be tolerant of junk after methodResponse (e.g. javascript ads automatically inserted by free hosts)
2586
- // idea from Luca Mariano <luca.mariano@email.it> originally in PEARified version of the lib
2587
- $pos = strrpos($data, '</methodResponse>');
2588
- if($pos !== false)
2589
- {
2590
- $data = substr($data, 0, $pos+17);
2591
- }
2592
-
2593
- // if user wants back raw xml, give it to him
2594
- if ($return_type == 'xml')
2595
- {
2596
- $r = new xmlrpcresp($data, 0, '', 'xml');
2597
- $r->hdrs = $GLOBALS['_xh']['headers'];
2598
- $r->_cookies = $GLOBALS['_xh']['cookies'];
2599
- $r->raw_data = $raw_data;
2600
- return $r;
2601
- }
2602
-
2603
- // try to 'guestimate' the character encoding of the received response
2604
- $resp_encoding = guess_encoding(@$GLOBALS['_xh']['headers']['content-type'], $data);
2605
-
2606
- $GLOBALS['_xh']['ac']='';
2607
- //$GLOBALS['_xh']['qt']=''; //unused...
2608
- $GLOBALS['_xh']['stack'] = array();
2609
- $GLOBALS['_xh']['valuestack'] = array();
2610
- $GLOBALS['_xh']['isf']=0; // 0 = OK, 1 for xmlrpc fault responses, 2 = invalid xmlrpc
2611
- $GLOBALS['_xh']['isf_reason']='';
2612
- $GLOBALS['_xh']['rt']=''; // 'methodcall or 'methodresponse'
2613
-
2614
- // if response charset encoding is not known / supported, try to use
2615
- // the default encoding and parse the xml anyway, but log a warning...
2616
- if (!in_array($resp_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
2617
- // the following code might be better for mb_string enabled installs, but
2618
- // makes the lib about 200% slower...
2619
- //if (!is_valid_charset($resp_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
2620
- {
2621
- error_log('XML-RPC: '.__METHOD__.': invalid charset encoding of received response: '.$resp_encoding);
2622
- $resp_encoding = $GLOBALS['xmlrpc_defencoding'];
2623
- }
2624
- $parser = xml_parser_create($resp_encoding);
2625
- xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
2626
- // G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell
2627
- // the xml parser to give us back data in the expected charset.
2628
- // What if internal encoding is not in one of the 3 allowed?
2629
- // we use the broadest one, ie. utf8
2630
- // This allows to send data which is native in various charset,
2631
- // by extending xmlrpc_encode_entitites() and setting xmlrpc_internalencoding
2632
- if (!in_array($GLOBALS['xmlrpc_internalencoding'], array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
2633
- {
2634
- xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
2635
- }
2636
- else
2637
- {
2638
- xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
2639
- }
2640
-
2641
- if ($return_type == 'phpvals')
2642
- {
2643
- xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee_fast');
2644
- }
2645
- else
2646
- {
2647
- xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');
2648
- }
2649
-
2650
- xml_set_character_data_handler($parser, 'xmlrpc_cd');
2651
- xml_set_default_handler($parser, 'xmlrpc_dh');
2652
-
2653
- // **BEGIN JORDAN NOVAK EDIT**
2654
- // Sometimes customer data has these random characters in it, and it breaks the XML parsing
2655
- // $test = preg_match('/\&#[0-9]{1,3}/', $data, $matches);
2656
- $data = preg_replace(array('/\&#[0-9]{1,4}(?![0-9]{0,3};)/'),'', $data);
2657
- $data = str_replace(array("&#11;", "&#0;", "&#20;", "&#12", "&#7;", "&#6;", "&#3;"), "", $data);
2658
- // **END JORDAN NOVAK EDIT**
2659
-
2660
-
2661
- // first error check: xml not well formed
2662
- if(!xml_parse($parser, $data, count($data)))
2663
- {
2664
- try{
2665
- $bad_return = fopen("bad_return.xml.php", "w");
2666
- fwrite($bad_return, $data);
2667
- fclose($bad_return);
2668
- } catch(Exception $e){}
2669
- // thanks to Peter Kocks <peter.kocks@baygate.com>
2670
- // if((xml_get_current_line_number($parser)) == 1)
2671
- // {
2672
- // $errstr = 'XML error at line 1, check URL';
2673
- // }
2674
- // else
2675
- // {
2676
- $errstr = sprintf('XML error: %s at line %d, column %d, byte %d, text in context: %s',
2677
- xml_error_string(xml_get_error_code($parser)),
2678
- xml_get_current_line_number($parser), xml_get_current_column_number($parser), xml_get_current_byte_index($parser),
2679
- substr($data, (xml_get_current_byte_index($parser) - 100), 200)
2680
- );
2681
- // }
2682
- error_log($errstr);
2683
- $r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_return'], $GLOBALS['xmlrpcstr']['invalid_return'].' ('.$errstr.')');
2684
- xml_parser_free($parser);
2685
- if($this->debug)
2686
- {
2687
- print $errstr;
2688
- }
2689
- $r->hdrs = $GLOBALS['_xh']['headers'];
2690
- $r->_cookies = $GLOBALS['_xh']['cookies'];
2691
- $r->raw_data = $raw_data;
2692
- return $r;
2693
- }
2694
- xml_parser_free($parser);
2695
- // second error check: xml well formed but not xml-rpc compliant
2696
- if ($GLOBALS['_xh']['isf'] > 1)
2697
- {
2698
- if ($this->debug)
2699
- {
2700
- /// @todo echo something for user?
2701
- }
2702
-
2703
- $r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_return'],
2704
- $GLOBALS['xmlrpcstr']['invalid_return'] . ' ' . $GLOBALS['_xh']['isf_reason']);
2705
- }
2706
- // third error check: parsing of the response has somehow gone boink.
2707
- // NB: shall we omit this check, since we trust the parsing code?
2708
- elseif ($return_type == 'xmlrpcvals' && !is_object($GLOBALS['_xh']['value']))
2709
- {
2710
- // something odd has happened
2711
- // and it's time to generate a client side error
2712
- // indicating something odd went on
2713
- $r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_return'],
2714
- $GLOBALS['xmlrpcstr']['invalid_return']);
2715
- }
2716
- else
2717
- {
2718
- if ($this->debug)
2719
- {
2720
- print "<PRE>---PARSED---\n";
2721
- // somehow htmlentities chokes on var_export, and some full html string...
2722
- //print htmlentitites(var_export($GLOBALS['_xh']['value'], true));
2723
- print htmlspecialchars(var_export($GLOBALS['_xh']['value'], true));
2724
- print "\n---END---</PRE>";
2725
- }
2726
-
2727
- // note that using =& will raise an error if $GLOBALS['_xh']['st'] does not generate an object.
2728
- $v =& $GLOBALS['_xh']['value'];
2729
-
2730
- if($GLOBALS['_xh']['isf'])
2731
- {
2732
- /// @todo we should test here if server sent an int and a string,
2733
- /// and/or coerce them into such...
2734
- if ($return_type == 'xmlrpcvals')
2735
- {
2736
- $errno_v = $v->structmem('faultCode');
2737
- $errstr_v = $v->structmem('faultString');
2738
- $errno = $errno_v->scalarval();
2739
- $errstr = $errstr_v->scalarval();
2740
- }
2741
- else
2742
- {
2743
- $errno = $v['faultCode'];
2744
- $errstr = $v['faultString'];
2745
- }
2746
-
2747
- if($errno == 0)
2748
- {
2749
- // FAULT returned, errno needs to reflect that
2750
- $errno = -1;
2751
- }
2752
-
2753
- $r = new xmlrpcresp(0, $errno, $errstr);
2754
- }
2755
- else
2756
- {
2757
- $r=new xmlrpcresp($v, 0, '', $return_type);
2758
- }
2759
- }
2760
-
2761
- $r->hdrs = $GLOBALS['_xh']['headers'];
2762
- $r->_cookies = $GLOBALS['_xh']['cookies'];
2763
- $r->raw_data = $raw_data;
2764
- return $r;
2765
- }
2766
- }
2767
-
2768
- class xmlrpcval
2769
- {
2770
- var $me=array();
2771
- var $mytype=0;
2772
- var $_php_class=null;
2773
-
2774
- /**
2775
- * @param mixed $val
2776
- * @param string $type any valid xmlrpc type name (lowercase). If null, 'string' is assumed
2777
- */
2778
- function __construct($val=-1, $type='')
2779
- {
2780
- /// @todo: optimization creep - do not call addXX, do it all inline.
2781
- /// downside: booleans will not be coerced anymore
2782
- if($val!==-1 || $type!='')
2783
- {
2784
- // optimization creep: inlined all work done by constructor
2785
- switch($type)
2786
- {
2787
- case '':
2788
- $this->mytype=1;
2789
- $this->me['string']=$val;
2790
- break;
2791
- case 'i4':
2792
- case 'int':
2793
- case 'double':
2794
- case 'string':
2795
- case 'boolean':
2796
- case 'dateTime.iso8601':
2797
- case 'base64':
2798
- case 'null':
2799
- $this->mytype=1;
2800
- $this->me[$type]=$val;
2801
- break;
2802
- case 'array':
2803
- $this->mytype=2;
2804
- $this->me['array']=$val;
2805
- break;
2806
- case 'struct':
2807
- $this->mytype=3;
2808
- $this->me['struct']=$val;
2809
- break;
2810
- default:
2811
- error_log("XML-RPC: ".__METHOD__.": not a known type ($type)");
2812
- }
2813
- /*if($type=='')
2814
- {
2815
- $type='string';
2816
- }
2817
- if($GLOBALS['xmlrpcTypes'][$type]==1)
2818
- {
2819
- $this->addScalar($val,$type);
2820
- }
2821
- elseif($GLOBALS['xmlrpcTypes'][$type]==2)
2822
- {
2823
- $this->addArray($val);
2824
- }
2825
- elseif($GLOBALS['xmlrpcTypes'][$type]==3)
2826
- {
2827
- $this->addStruct($val);
2828
- }*/
2829
- }
2830
- }
2831
-
2832
- /**
2833
- * Add a single php value to an (unitialized) xmlrpcval
2834
- * @param mixed $val
2835
- * @param string $type
2836
- * @return int 1 or 0 on failure
2837
- */
2838
- function addScalar($val, $type='string')
2839
- {
2840
- $typeof=@$GLOBALS['xmlrpcTypes'][$type];
2841
- if($typeof!=1)
2842
- {
2843
- error_log("XML-RPC: ".__METHOD__.": not a scalar type ($type)");
2844
- return 0;
2845
- }
2846
-
2847
- // coerce booleans into correct values
2848
- // NB: we should either do it for datetimes, integers and doubles, too,
2849
- // or just plain remove this check, implemented on booleans only...
2850
- if($type==$GLOBALS['xmlrpcBoolean'])
2851
- {
2852
- if(strcasecmp($val,'true')==0 || $val==1 || ($val==true && strcasecmp($val,'false')))
2853
- {
2854
- $val=true;
2855
- }
2856
- else
2857
- {
2858
- $val=false;
2859
- }
2860
- }
2861
-
2862
- switch($this->mytype)
2863
- {
2864
- case 1:
2865
- error_log('XML-RPC: '.__METHOD__.': scalar xmlrpcval can have only one value');
2866
- return 0;
2867
- case 3:
2868
- error_log('XML-RPC: '.__METHOD__.': cannot add anonymous scalar to struct xmlrpcval');
2869
- return 0;
2870
- case 2:
2871
- // we're adding a scalar value to an array here
2872
- //$ar=$this->me['array'];
2873
- //$ar[]=new xmlrpcval($val, $type);
2874
- //$this->me['array']=$ar;
2875
- // Faster (?) avoid all the costly array-copy-by-val done here...
2876
- $this->me['array'][]=new xmlrpcval($val, $type);
2877
- return 1;
2878
- default:
2879
- // a scalar, so set the value and remember we're scalar
2880
- $this->me[$type]=$val;
2881
- $this->mytype=$typeof;
2882
- return 1;
2883
- }
2884
- }
2885
-
2886
- /**
2887
- * Add an array of xmlrpcval objects to an xmlrpcval
2888
- * @param array $vals
2889
- * @return int 1 or 0 on failure
2890
- * @access public
2891
- *
2892
- * @todo add some checking for $vals to be an array of xmlrpcvals?
2893
- */
2894
- function addArray($vals)
2895
- {
2896
- if($this->mytype==0)
2897
- {
2898
- $this->mytype=$GLOBALS['xmlrpcTypes']['array'];
2899
- $this->me['array']=$vals;
2900
- return 1;
2901
- }
2902
- elseif($this->mytype==2)
2903
- {
2904
- // we're adding to an array here
2905
- $this->me['array'] = array_merge($this->me['array'], $vals);
2906
- return 1;
2907
- }
2908
- else
2909
- {
2910
- error_log('XML-RPC: '.__METHOD__.': already initialized as a [' . $this->kindOf() . ']');
2911
- return 0;
2912
- }
2913
- }
2914
-
2915
- /**
2916
- * Add an array of named xmlrpcval objects to an xmlrpcval
2917
- * @param array $vals
2918
- * @return int 1 or 0 on failure
2919
- * @access public
2920
- *
2921
- * @todo add some checking for $vals to be an array?
2922
- */
2923
- function addStruct($vals)
2924
- {
2925
- if($this->mytype==0)
2926
- {
2927
- $this->mytype=$GLOBALS['xmlrpcTypes']['struct'];
2928
- $this->me['struct']=$vals;
2929
- return 1;
2930
- }
2931
- elseif($this->mytype==3)
2932
- {
2933
- // we're adding to a struct here
2934
- $this->me['struct'] = array_merge($this->me['struct'], $vals);
2935
- return 1;
2936
- }
2937
- else
2938
- {
2939
- error_log('XML-RPC: '.__METHOD__.': already initialized as a [' . $this->kindOf() . ']');
2940
- return 0;
2941
- }
2942
- }
2943
-
2944
- // poor man's version of print_r ???
2945
- // DEPRECATED!
2946
- function dump($ar)
2947
- {
2948
- foreach($ar as $key => $val)
2949
- {
2950
- echo "$key => $val<br />";
2951
- if($key == 'array')
2952
- {
2953
- while(list($key2, $val2) = each($val))
2954
- {
2955
- echo "-- $key2 => $val2<br />";
2956
- }
2957
- }
2958
- }
2959
- }
2960
-
2961
- /**
2962
- * Returns a string containing "struct", "array" or "scalar" describing the base type of the value
2963
- * @return string
2964
- * @access public
2965
- */
2966
- function kindOf()
2967
- {
2968
- switch($this->mytype)
2969
- {
2970
- case 3:
2971
- return 'struct';
2972
- break;
2973
- case 2:
2974
- return 'array';
2975
- break;
2976
- case 1:
2977
- return 'scalar';
2978
- break;
2979
- default:
2980
- return 'undef';
2981
- }
2982
- }
2983
-
2984
- /**
2985
- * @access private
2986
- */
2987
- function serializedata($typ, $val, $charset_encoding='')
2988
- {
2989
- $rs='';
2990
- switch(@$GLOBALS['xmlrpcTypes'][$typ])
2991
- {
2992
- case 1:
2993
- switch($typ)
2994
- {
2995
- case $GLOBALS['xmlrpcBase64']:
2996
- $rs.="<${typ}>" . base64_encode($val) . "</${typ}>";
2997
- break;
2998
- case $GLOBALS['xmlrpcBoolean']:
2999
- $rs.="<${typ}>" . ($val ? '1' : '0') . "</${typ}>";
3000
- break;
3001
- case $GLOBALS['xmlrpcString']:
3002
- // G. Giunta 2005/2/13: do NOT use htmlentities, since
3003
- // it will produce named html entities, which are invalid xml
3004
- $rs.="<${typ}>" . xmlrpc_encode_entitites($val, $GLOBALS['xmlrpc_internalencoding'], $charset_encoding). "</${typ}>";
3005
- break;
3006
- case $GLOBALS['xmlrpcInt']:
3007
- case $GLOBALS['xmlrpcI4']:
3008
- $rs.="<${typ}>".(int)$val."</${typ}>";
3009
- break;
3010
- case $GLOBALS['xmlrpcDouble']:
3011
- // avoid using standard conversion of float to string because it is locale-dependent,
3012
- // and also because the xmlrpc spec forbids exponential notation.
3013
- // sprintf('%F') could be most likely ok but it fails eg. on 2e-14.
3014
- // The code below tries its best at keeping max precision while avoiding exp notation,
3015
- // but there is of course no limit in the number of decimal places to be used...
3016
- $rs.="<${typ}>".preg_replace('/\\.?0+$/','',number_format((double)$val, 128, '.', ''))."</${typ}>";
3017
- break;
3018
- case $GLOBALS['xmlrpcDateTime']:
3019
- if (is_string($val))
3020
- {
3021
- $rs.="<${typ}>${val}</${typ}>";
3022
- }
3023
- else if(is_a($val, 'DateTime'))
3024
- {
3025
- $rs.="<${typ}>".$val->format('Ymd\TH:i:s')."</${typ}>";
3026
- }
3027
- else if(is_int($val))
3028
- {
3029
- $rs.="<${typ}>".strftime("%Y%m%dT%H:%M:%S", $val)."</${typ}>";
3030
- }
3031
- else
3032
- {
3033
- // not really a good idea here: but what shall we output anyway? left for backward compat...
3034
- $rs.="<${typ}>${val}</${typ}>";
3035
- }
3036
- break;
3037
- case $GLOBALS['xmlrpcNull']:
3038
- if ($GLOBALS['xmlrpc_null_apache_encoding'])
3039
- {
3040
- $rs.="<ex:nil/>";
3041
- }
3042
- else
3043
- {
3044
- $rs.="<nil/>";
3045
- }
3046
- break;
3047
- default:
3048
- // no standard type value should arrive here, but provide a possibility
3049
- // for xmlrpcvals of unknown type...
3050
- $rs.="<${typ}>${val}</${typ}>";
3051
- }
3052
- break;
3053
- case 3:
3054
- // struct
3055
- if ($this->_php_class)
3056
- {
3057
- $rs.='<struct php_class="' . $this->_php_class . "\">\n";
3058
- }
3059
- else
3060
- {
3061
- $rs.="<struct>\n";
3062
- }
3063
- foreach($val as $key2 => $val2)
3064
- {
3065
- $rs.='<member><name>'.xmlrpc_encode_entitites($key2, $GLOBALS['xmlrpc_internalencoding'], $charset_encoding)."</name>\n";
3066
- //$rs.=$this->serializeval($val2);
3067
- $rs.=$val2->serialize($charset_encoding);
3068
- $rs.="</member>\n";
3069
- }
3070
- $rs.='</struct>';
3071
- break;
3072
- case 2:
3073
- // array
3074
- $rs.="<array>\n<data>\n";
3075
- for($i=0; $i<count($val); $i++)
3076
- {
3077
- //$rs.=$this->serializeval($val[$i]);
3078
- $rs.=$val[$i]->serialize($charset_encoding);
3079
- }
3080
- $rs.="</data>\n</array>";
3081
- break;
3082
- default:
3083
- break;
3084
- }
3085
- return $rs;
3086
- }
3087
-
3088
- /**
3089
- * Returns xml representation of the value. XML prologue not included
3090
- * @param string $charset_encoding the charset to be used for serialization. if null, US-ASCII is assumed
3091
- * @return string
3092
- * @access public
3093
- */
3094
- function serialize($charset_encoding='')
3095
- {
3096
- // add check? slower, but helps to avoid recursion in serializing broken xmlrpcvals...
3097
- //if (is_object($o) && (get_class($o) == 'xmlrpcval' || is_subclass_of($o, 'xmlrpcval')))
3098
- //{
3099
- reset($this->me);
3100
- list($typ, $val) = each($this->me);
3101
- return '<value>' . $this->serializedata($typ, $val, $charset_encoding) . "</value>\n";
3102
- //}
3103
- }
3104
-
3105
- // DEPRECATED
3106
- function serializeval($o)
3107
- {
3108
- // add check? slower, but helps to avoid recursion in serializing broken xmlrpcvals...
3109
- //if (is_object($o) && (get_class($o) == 'xmlrpcval' || is_subclass_of($o, 'xmlrpcval')))
3110
- //{
3111
- $ar=$o->me;
3112
- reset($ar);
3113
- list($typ, $val) = each($ar);
3114
- return '<value>' . $this->serializedata($typ, $val) . "</value>\n";
3115
- //}
3116
- }
3117
-
3118
- /**
3119
- * Checks whether a struct member with a given name is present.
3120
- * Works only on xmlrpcvals of type struct.
3121
- * @param string $m the name of the struct member to be looked up
3122
- * @return boolean
3123
- * @access public
3124
- */
3125
- function structmemexists($m)
3126
- {
3127
- return array_key_exists($m, $this->me['struct']);
3128
- }
3129
-
3130
- /**
3131
- * Returns the value of a given struct member (an xmlrpcval object in itself).
3132
- * Will raise a php warning if struct member of given name does not exist
3133
- * @param string $m the name of the struct member to be looked up
3134
- * @return xmlrpcval
3135
- * @access public
3136
- */
3137
- function structmem($m)
3138
- {
3139
- return $this->me['struct'][$m];
3140
- }
3141
-
3142
- /**
3143
- * Reset internal pointer for xmlrpcvals of type struct.
3144
- * @access public
3145
- */
3146
- function structreset()
3147
- {
3148
- reset($this->me['struct']);
3149
- }
3150
-
3151
- /**
3152
- * Return next member element for xmlrpcvals of type struct.
3153
- * @return xmlrpcval
3154
- * @access public
3155
- */
3156
- function structeach()
3157
- {
3158
- return each($this->me['struct']);
3159
- }
3160
-
3161
- // DEPRECATED! this code looks like it is very fragile and has not been fixed
3162
- // for a long long time. Shall we remove it for 2.0?
3163
- function getval()
3164
- {
3165
- // UNSTABLE
3166
- reset($this->me);
3167
- list($a,$b)=each($this->me);
3168
- // contributed by I Sofer, 2001-03-24
3169
- // add support for nested arrays to scalarval
3170
- // i've created a new method here, so as to
3171
- // preserve back compatibility
3172
-
3173
- if(is_array($b))
3174
- {
3175
- @reset($b);
3176
- while(list($id,$cont) = @each($b))
3177
- {
3178
- $b[$id] = $cont->scalarval();
3179
- }
3180
- }
3181
-
3182
- // add support for structures directly encoding php objects
3183
- if(is_object($b))
3184
- {
3185
- $t = get_object_vars($b);
3186
- @reset($t);
3187
- while(list($id,$cont) = @each($t))
3188
- {
3189
- $t[$id] = $cont->scalarval();
3190
- }
3191
- @reset($t);
3192
- while(list($id,$cont) = @each($t))
3193
- {
3194
- @$b->$id = $cont;
3195
- }
3196
- }
3197
- // end contrib
3198
- return $b;
3199
- }
3200
-
3201
- /**
3202
- * Returns the value of a scalar xmlrpcval
3203
- * @return mixed
3204
- * @access public
3205
- */
3206
- function scalarval()
3207
- {
3208
- reset($this->me);
3209
- list(,$b)=each($this->me);
3210
- return $b;
3211
- }
3212
-
3213
- /**
3214
- * Returns the type of the xmlrpcval.
3215
- * For integers, 'int' is always returned in place of 'i4'
3216
- * @return string
3217
- * @access public
3218
- */
3219
- function scalartyp()
3220
- {
3221
- reset($this->me);
3222
- list($a,)=each($this->me);
3223
- if($a==$GLOBALS['xmlrpcI4'])
3224
- {
3225
- $a=$GLOBALS['xmlrpcInt'];
3226
- }
3227
- return $a;
3228
- }
3229
-
3230
- /**
3231
- * Returns the m-th member of an xmlrpcval of struct type
3232
- * @param integer $m the index of the value to be retrieved (zero based)
3233
- * @return xmlrpcval
3234
- * @access public
3235
- */
3236
- function arraymem($m)
3237
- {
3238
- return $this->me['array'][$m];
3239
- }
3240
-
3241
- /**
3242
- * Returns the number of members in an xmlrpcval of array type
3243
- * @return integer
3244
- * @access public
3245
- */
3246
- function arraysize()
3247
- {
3248
- return count($this->me['array']);
3249
- }
3250
-
3251
- /**
3252
- * Returns the number of members in an xmlrpcval of struct type
3253
- * @return integer
3254
- * @access public
3255
- */
3256
- function structsize()
3257
- {
3258
- return count($this->me['struct']);
3259
- }
3260
- }
3261
-
3262
-
3263
- // date helpers
3264
-
3265
- /**
3266
- * Given a timestamp, return the corresponding ISO8601 encoded string.
3267
- *
3268
- * Really, timezones ought to be supported
3269
- * but the XML-RPC spec says:
3270
- *
3271
- * "Don't assume a timezone. It should be specified by the server in its
3272
- * documentation what assumptions it makes about timezones."
3273
- *
3274
- * These routines always assume localtime unless
3275
- * $utc is set to 1, in which case UTC is assumed
3276
- * and an adjustment for locale is made when encoding
3277
- *
3278
- * @param int $timet (timestamp)
3279
- * @param int $utc (0 or 1)
3280
- * @return string
3281
- */
3282
- function iso8601_encode($timet, $utc=0)
3283
- {
3284
- if(!$utc)
3285
- {
3286
- $t=strftime("%Y%m%dT%H:%M:%S", $timet);
3287
- }
3288
- else
3289
- {
3290
- if(function_exists('gmstrftime'))
3291
- {
3292
- // gmstrftime doesn't exist in some versions
3293
- // of PHP
3294
- $t=gmstrftime("%Y%m%dT%H:%M:%S", $timet);
3295
- }
3296
- else
3297
- {
3298
- $t=strftime("%Y%m%dT%H:%M:%S", $timet-date('Z'));
3299
- }
3300
- }
3301
- return $t;
3302
- }
3303
-
3304
- /**
3305
- * Given an ISO8601 date string, return a timet in the localtime, or UTC
3306
- * @param string $idate
3307
- * @param int $utc either 0 or 1
3308
- * @return int (datetime)
3309
- */
3310
- function iso8601_decode($idate, $utc=0)
3311
- {
3312
- $t=0;
3313
- if(preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})/', $idate, $regs))
3314
- {
3315
- if($utc)
3316
- {
3317
- $t=gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
3318
- }
3319
- else
3320
- {
3321
- $t=mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
3322
- }
3323
- }
3324
- return $t;
3325
- }
3326
-
3327
- /**
3328
- * Takes an xmlrpc value in PHP xmlrpcval object format and translates it into native PHP types.
3329
- *
3330
- * Works with xmlrpc message objects as input, too.
3331
- *
3332
- * Given proper options parameter, can rebuild generic php object instances
3333
- * (provided those have been encoded to xmlrpc format using a corresponding
3334
- * option in php_xmlrpc_encode())
3335
- * PLEASE NOTE that rebuilding php objects involves calling their constructor function.
3336
- * This means that the remote communication end can decide which php code will
3337
- * get executed on your server, leaving the door possibly open to 'php-injection'
3338
- * style of attacks (provided you have some classes defined on your server that
3339
- * might wreak havoc if instances are built outside an appropriate context).
3340
- * Make sure you trust the remote server/client before eanbling this!
3341
- *
3342
- * @author Dan Libby (dan@libby.com)
3343
- *
3344
- * @param xmlrpcval $xmlrpc_val
3345
- * @param array $options if 'decode_php_objs' is set in the options array, xmlrpc structs can be decoded into php objects; if 'dates_as_objects' is set xmlrpc datetimes are decoded as php DateTime objects (standard is
3346
- * @return mixed
3347
- */
3348
- function php_xmlrpc_decode($xmlrpc_val, $options=array())
3349
- {
3350
- switch($xmlrpc_val->kindOf())
3351
- {
3352
- case 'scalar':
3353
- if (in_array('extension_api', $options))
3354
- {
3355
- reset($xmlrpc_val->me);
3356
- list($typ,$val) = each($xmlrpc_val->me);
3357
- switch ($typ)
3358
- {
3359
- case 'dateTime.iso8601':
3360
- $xmlrpc_val->scalar = $val;
3361
- $xmlrpc_val->xmlrpc_type = 'datetime';
3362
- $xmlrpc_val->timestamp = iso8601_decode($val);
3363
- return $xmlrpc_val;
3364
- case 'base64':
3365
- $xmlrpc_val->scalar = $val;
3366
- $xmlrpc_val->type = $typ;
3367
- return $xmlrpc_val;
3368
- default:
3369
- return $xmlrpc_val->scalarval();
3370
- }
3371
- }
3372
- if (in_array('dates_as_objects', $options) && $xmlrpc_val->scalartyp() == 'dateTime.iso8601')
3373
- {
3374
- // we return a Datetime object instead of a string
3375
- // since now the constructor of xmlrpcval accepts safely strings, ints and datetimes,
3376
- // we cater to all 3 cases here
3377
- $out = $xmlrpc_val->scalarval();
3378
- if (is_string($out))
3379
- {
3380
- $out = strtotime($out);
3381
- }
3382
- if (is_int($out))
3383
- {
3384
- $result = new Datetime();
3385
- $result->setTimestamp($out);
3386
- return $result;
3387
- }
3388
- elseif (is_a($out, 'Datetime'))
3389
- {
3390
- return $out;
3391
- }
3392
- }
3393
- return $xmlrpc_val->scalarval();
3394
- case 'array':
3395
- $size = $xmlrpc_val->arraysize();
3396
- $arr = array();
3397
- for($i = 0; $i < $size; $i++)
3398
- {
3399
- $arr[] = php_xmlrpc_decode($xmlrpc_val->arraymem($i), $options);
3400
- }
3401
- return $arr;
3402
- case 'struct':
3403
- $xmlrpc_val->structreset();
3404
- // If user said so, try to rebuild php objects for specific struct vals.
3405
- /// @todo should we raise a warning for class not found?
3406
- // shall we check for proper subclass of xmlrpcval instead of
3407
- // presence of _php_class to detect what we can do?
3408
- if (in_array('decode_php_objs', $options) && $xmlrpc_val->_php_class != ''
3409
- && class_exists($xmlrpc_val->_php_class))
3410
- {
3411
- $obj = @new $xmlrpc_val->_php_class;
3412
- while(list($key,$value)=$xmlrpc_val->structeach())
3413
- {
3414
- $obj->$key = php_xmlrpc_decode($value, $options);
3415
- }
3416
- return $obj;
3417
- }
3418
- else
3419
- {
3420
- $arr = array();
3421
- while(list($key,$value)=$xmlrpc_val->structeach())
3422
- {
3423
- $arr[$key] = php_xmlrpc_decode($value, $options);
3424
- }
3425
- return $arr;
3426
- }
3427
- case 'msg':
3428
- $paramcount = $xmlrpc_val->getNumParams();
3429
- $arr = array();
3430
- for($i = 0; $i < $paramcount; $i++)
3431
- {
3432
- $arr[] = php_xmlrpc_decode($xmlrpc_val->getParam($i));
3433
- }
3434
- return $arr;
3435
- }
3436
- }
3437
-
3438
- // This constant left here only for historical reasons...
3439
- // it was used to decide if we have to define xmlrpc_encode on our own, but
3440
- // we do not do it anymore
3441
- if(function_exists('xmlrpc_decode'))
3442
- {
3443
- define('XMLRPC_EPI_ENABLED','1');
3444
- }
3445
- else
3446
- {
3447
- define('XMLRPC_EPI_ENABLED','0');
3448
- }
3449
-
3450
- /**
3451
- * Takes native php types and encodes them into xmlrpc PHP object format.
3452
- * It will not re-encode xmlrpcval objects.
3453
- *
3454
- * Feature creep -- could support more types via optional type argument
3455
- * (string => datetime support has been added, ??? => base64 not yet)
3456
- *
3457
- * If given a proper options parameter, php object instances will be encoded
3458
- * into 'special' xmlrpc values, that can later be decoded into php objects
3459
- * by calling php_xmlrpc_decode() with a corresponding option
3460
- *
3461
- * @author Dan Libby (dan@libby.com)
3462
- *
3463
- * @param mixed $php_val the value to be converted into an xmlrpcval object
3464
- * @param array $options can include 'encode_php_objs', 'auto_dates', 'null_extension' or 'extension_api'
3465
- * @return xmlrpcval
3466
- */
3467
- function php_xmlrpc_encode($php_val, $options=array())
3468
- {
3469
- $type = gettype($php_val);
3470
- switch($type)
3471
- {
3472
- case 'string':
3473
- if (in_array('auto_dates', $options) && preg_match('/^[0-9]{8}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/', $php_val)){
3474
- $xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcDateTime']);
3475
- } else if(in_array('auto_base64', $options) && strpos($php_val, 'BASE64:') === 0){
3476
- $xmlrpc_val = new xmlrpcval(substr($php_val, 7), $GLOBALS['xmlrpcBase64']);
3477
- } else{
3478
- $xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcString']);
3479
- }
3480
- break;
3481
- case 'integer':
3482
- $xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcInt']);
3483
- break;
3484
- case 'double':
3485
- $xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcDouble']);
3486
- break;
3487
- // <G_Giunta_2001-02-29>
3488
- // Add support for encoding/decoding of booleans, since they are supported in PHP
3489
- case 'boolean':
3490
- $xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcBoolean']);
3491
- break;
3492
- // </G_Giunta_2001-02-29>
3493
- case 'array':
3494
- // PHP arrays can be encoded to either xmlrpc structs or arrays,
3495
- // depending on wheter they are hashes or plain 0..n integer indexed
3496
- // A shorter one-liner would be
3497
- // $tmp = array_diff(array_keys($php_val), range(0, count($php_val)-1));
3498
- // but execution time skyrockets!
3499
- $j = 0;
3500
- $arr = array();
3501
- $ko = false;
3502
- foreach($php_val as $key => $val)
3503
- {
3504
- $arr[$key] = php_xmlrpc_encode($val, $options);
3505
- if(!$ko && $key !== $j)
3506
- {
3507
- $ko = true;
3508
- }
3509
- $j++;
3510
- }
3511
- if($ko)
3512
- {
3513
- $xmlrpc_val = new xmlrpcval($arr, $GLOBALS['xmlrpcStruct']);
3514
- }
3515
- else
3516
- {
3517
- $xmlrpc_val = new xmlrpcval($arr, $GLOBALS['xmlrpcArray']);
3518
- }
3519
- break;
3520
- case 'object':
3521
- if(is_a($php_val, 'xmlrpcval'))
3522
- {
3523
- $xmlrpc_val = $php_val;
3524
- }
3525
- else if(is_a($php_val, 'DateTime'))
3526
- {
3527
- $xmlrpc_val = new xmlrpcval($php_val->format('Ymd\TH:i:s'), $GLOBALS['xmlrpcStruct']);
3528
- }
3529
- else
3530
- {
3531
- $arr = array();
3532
- reset($php_val);
3533
- while(list($k,$v) = each($php_val))
3534
- {
3535
- $arr[$k] = php_xmlrpc_encode($v, $options);
3536
- }
3537
- $xmlrpc_val = new xmlrpcval($arr, $GLOBALS['xmlrpcStruct']);
3538
- if (in_array('encode_php_objs', $options))
3539
- {
3540
- // let's save original class name into xmlrpcval:
3541
- // might be useful later on...
3542
- $xmlrpc_val->_php_class = get_class($php_val);
3543
- }
3544
- }
3545
- break;
3546
- case 'NULL':
3547
- if (in_array('extension_api', $options))
3548
- {
3549
- $xmlrpc_val = new xmlrpcval('', $GLOBALS['xmlrpcString']);
3550
- }
3551
- else if (in_array('null_extension', $options))
3552
- {
3553
- $xmlrpc_val = new xmlrpcval('', $GLOBALS['xmlrpcNull']);
3554
- }
3555
- else
3556
- {
3557
- $xmlrpc_val = new xmlrpcval();
3558
- }
3559
- break;
3560
- case 'resource':
3561
- if (in_array('extension_api', $options))
3562
- {
3563
- $xmlrpc_val = new xmlrpcval((int)$php_val, $GLOBALS['xmlrpcInt']);
3564
- }
3565
- else
3566
- {
3567
- $xmlrpc_val = new xmlrpcval();
3568
- }
3569
- // catch "user function", "unknown type"
3570
- default:
3571
- // giancarlo pinerolo <ping@alt.it>
3572
- // it has to return
3573
- // an empty object in case, not a boolean.
3574
- $xmlrpc_val = new xmlrpcval();
3575
- break;
3576
- }
3577
- return $xmlrpc_val;
3578
- }
3579
-
3580
- /**
3581
- * Convert the xml representation of a method response, method request or single
3582
- * xmlrpc value into the appropriate object (a.k.a. deserialize)
3583
- * @param string $xml_val
3584
- * @param array $options
3585
- * @return mixed false on error, or an instance of either xmlrpcval, xmlrpcmsg or xmlrpcresp
3586
- */
3587
- function php_xmlrpc_decode_xml($xml_val, $options=array())
3588
- {
3589
- $GLOBALS['_xh'] = array();
3590
- $GLOBALS['_xh']['ac'] = '';
3591
- $GLOBALS['_xh']['stack'] = array();
3592
- $GLOBALS['_xh']['valuestack'] = array();
3593
- $GLOBALS['_xh']['params'] = array();
3594
- $GLOBALS['_xh']['pt'] = array();
3595
- $GLOBALS['_xh']['isf'] = 0;
3596
- $GLOBALS['_xh']['isf_reason'] = '';
3597
- $GLOBALS['_xh']['method'] = false;
3598
- $GLOBALS['_xh']['rt'] = '';
3599
- /// @todo 'guestimate' encoding
3600
- $parser = xml_parser_create();
3601
- xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
3602
- // What if internal encoding is not in one of the 3 allowed?
3603
- // we use the broadest one, ie. utf8!
3604
- if (!in_array($GLOBALS['xmlrpc_internalencoding'], array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
3605
- {
3606
- xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
3607
- }
3608
- else
3609
- {
3610
- xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
3611
- }
3612
- xml_set_element_handler($parser, 'xmlrpc_se_any', 'xmlrpc_ee');
3613
- xml_set_character_data_handler($parser, 'xmlrpc_cd');
3614
- xml_set_default_handler($parser, 'xmlrpc_dh');
3615
- if(!xml_parse($parser, $xml_val, 1))
3616
- {
3617
- $errstr = sprintf('XML error: %s at line %d, column %d',
3618
- xml_error_string(xml_get_error_code($parser)),
3619
- xml_get_current_line_number($parser), xml_get_current_column_number($parser));
3620
- error_log($errstr);
3621
- xml_parser_free($parser);
3622
- return false;
3623
- }
3624
- xml_parser_free($parser);
3625
- if ($GLOBALS['_xh']['isf'] > 1) // test that $GLOBALS['_xh']['value'] is an obj, too???
3626
- {
3627
- error_log($GLOBALS['_xh']['isf_reason']);
3628
- return false;
3629
- }
3630
- switch ($GLOBALS['_xh']['rt'])
3631
- {
3632
- case 'methodresponse':
3633
- $v =& $GLOBALS['_xh']['value'];
3634
- if ($GLOBALS['_xh']['isf'] == 1)
3635
- {
3636
- $vc = $v->structmem('faultCode');
3637
- $vs = $v->structmem('faultString');
3638
- $r = new xmlrpcresp(0, $vc->scalarval(), $vs->scalarval());
3639
- }
3640
- else
3641
- {
3642
- $r = new xmlrpcresp($v);
3643
- }
3644
- return $r;
3645
- case 'methodcall':
3646
- $m = new xmlrpcmsg($GLOBALS['_xh']['method']);
3647
- for($i=0; $i < count($GLOBALS['_xh']['params']); $i++)
3648
- {
3649
- $m->addParam($GLOBALS['_xh']['params'][$i]);
3650
- }
3651
- return $m;
3652
- case 'value':
3653
- return $GLOBALS['_xh']['value'];
3654
- default:
3655
- return false;
3656
- }
3657
- }
3658
-
3659
- /**
3660
- * decode a string that is encoded w/ "chunked" transfer encoding
3661
- * as defined in rfc2068 par. 19.4.6
3662
- * code shamelessly stolen from nusoap library by Dietrich Ayala
3663
- *
3664
- * @param string $buffer the string to be decoded
3665
- * @return string
3666
- */
3667
- function decode_chunked($buffer)
3668
- {
3669
- // length := 0
3670
- $length = 0;
3671
- $new = '';
3672
-
3673
- // read chunk-size, chunk-extension (if any) and crlf
3674
- // get the position of the linebreak
3675
- $chunkend = strpos($buffer,"\r\n") + 2;
3676
- $temp = substr($buffer,0,$chunkend);
3677
- $chunk_size = hexdec( trim($temp) );
3678
- $chunkstart = $chunkend;
3679
- while($chunk_size > 0)
3680
- {
3681
- $chunkend = strpos($buffer, "\r\n", $chunkstart + $chunk_size);
3682
-
3683
- // just in case we got a broken connection
3684
- if($chunkend == false)
3685
- {
3686
- $chunk = substr($buffer,$chunkstart);
3687
- // append chunk-data to entity-body
3688
- $new .= $chunk;
3689
- $length += strlen($chunk);
3690
- break;
3691
- }
3692
-
3693
- // read chunk-data and crlf
3694
- $chunk = substr($buffer,$chunkstart,$chunkend-$chunkstart);
3695
- // append chunk-data to entity-body
3696
- $new .= $chunk;
3697
- // length := length + chunk-size
3698
- $length += strlen($chunk);
3699
- // read chunk-size and crlf
3700
- $chunkstart = $chunkend + 2;
3701
-
3702
- $chunkend = strpos($buffer,"\r\n",$chunkstart)+2;
3703
- if($chunkend == false)
3704
- {
3705
- break; //just in case we got a broken connection
3706
- }
3707
- $temp = substr($buffer,$chunkstart,$chunkend-$chunkstart);
3708
- $chunk_size = hexdec( trim($temp) );
3709
- $chunkstart = $chunkend;
3710
- }
3711
- return $new;
3712
- }
3713
-
3714
- /**
3715
- * xml charset encoding guessing helper function.
3716
- * Tries to determine the charset encoding of an XML chunk received over HTTP.
3717
- * NB: according to the spec (RFC 3023), if text/xml content-type is received over HTTP without a content-type,
3718
- * we SHOULD assume it is strictly US-ASCII. But we try to be more tolerant of unconforming (legacy?) clients/servers,
3719
- * which will be most probably using UTF-8 anyway...
3720
- *
3721
- * @param string $httpheader the http Content-type header
3722
- * @param string $xmlchunk xml content buffer
3723
- * @param string $encoding_prefs comma separated list of character encodings to be used as default (when mb extension is enabled)
3724
- * @return string
3725
- *
3726
- * @todo explore usage of mb_http_input(): does it detect http headers + post data? if so, use it instead of hand-detection!!!
3727
- */
3728
- function guess_encoding($httpheader='', $xmlchunk='', $encoding_prefs=null)
3729
- {
3730
- // discussion: see http://www.yale.edu/pclt/encoding/
3731
- // 1 - test if encoding is specified in HTTP HEADERS
3732
-
3733
- //Details:
3734
- // LWS: (\13\10)?( |\t)+
3735
- // token: (any char but excluded stuff)+
3736
- // quoted string: " (any char but double quotes and cointrol chars)* "
3737
- // header: Content-type = ...; charset=value(; ...)*
3738
- // where value is of type token, no LWS allowed between 'charset' and value
3739
- // Note: we do not check for invalid chars in VALUE:
3740
- // this had better be done using pure ereg as below
3741
- // Note 2: we might be removing whitespace/tabs that ought to be left in if
3742
- // the received charset is a quoted string. But nobody uses such charset names...
3743
-
3744
- /// @todo this test will pass if ANY header has charset specification, not only Content-Type. Fix it?
3745
- $matches = array();
3746
- if(preg_match('/;\s*charset\s*=([^;]+)/i', $httpheader, $matches))
3747
- {
3748
- return strtoupper(trim($matches[1], " \t\""));
3749
- }
3750
-
3751
- // 2 - scan the first bytes of the data for a UTF-16 (or other) BOM pattern
3752
- // (source: http://www.w3.org/TR/2000/REC-xml-20001006)
3753
- // NOTE: actually, according to the spec, even if we find the BOM and determine
3754
- // an encoding, we should check if there is an encoding specified
3755
- // in the xml declaration, and verify if they match.
3756
- /// @todo implement check as described above?
3757
- /// @todo implement check for first bytes of string even without a BOM? (It sure looks harder than for cases WITH a BOM)
3758
- if(preg_match('/^(\x00\x00\xFE\xFF|\xFF\xFE\x00\x00|\x00\x00\xFF\xFE|\xFE\xFF\x00\x00)/', $xmlchunk))
3759
- {
3760
- return 'UCS-4';
3761
- }
3762
- elseif(preg_match('/^(\xFE\xFF|\xFF\xFE)/', $xmlchunk))
3763
- {
3764
- return 'UTF-16';
3765
- }
3766
- elseif(preg_match('/^(\xEF\xBB\xBF)/', $xmlchunk))
3767
- {
3768
- return 'UTF-8';
3769
- }
3770
-
3771
- // 3 - test if encoding is specified in the xml declaration
3772
- // Details:
3773
- // SPACE: (#x20 | #x9 | #xD | #xA)+ === [ \x9\xD\xA]+
3774
- // EQ: SPACE?=SPACE? === [ \x9\xD\xA]*=[ \x9\xD\xA]*
3775
- if (preg_match('/^<\?xml\s+version\s*=\s*'. "((?:\"[a-zA-Z0-9_.:-]+\")|(?:'[a-zA-Z0-9_.:-]+'))".
3776
- '\s+encoding\s*=\s*' . "((?:\"[A-Za-z][A-Za-z0-9._-]*\")|(?:'[A-Za-z][A-Za-z0-9._-]*'))/",
3777
- $xmlchunk, $matches))
3778
- {
3779
- return strtoupper(substr($matches[2], 1, -1));
3780
- }
3781
-
3782
- // 4 - if mbstring is available, let it do the guesswork
3783
- // NB: we favour finding an encoding that is compatible with what we can process
3784
- if(extension_loaded('mbstring'))
3785
- {
3786
- if($encoding_prefs)
3787
- {
3788
- $enc = mb_detect_encoding($xmlchunk, $encoding_prefs);
3789
- }
3790
- else
3791
- {
3792
- $enc = mb_detect_encoding($xmlchunk);
3793
- }
3794
- // NB: mb_detect likes to call it ascii, xml parser likes to call it US_ASCII...
3795
- // IANA also likes better US-ASCII, so go with it
3796
- if($enc == 'ASCII')
3797
- {
3798
- $enc = 'US-'.$enc;
3799
- }
3800
- return $enc;
3801
- }
3802
- else
3803
- {
3804
- // no encoding specified: as per HTTP1.1 assume it is iso-8859-1?
3805
- // Both RFC 2616 (HTTP 1.1) and 1945 (HTTP 1.0) clearly state that for text/xxx content types
3806
- // this should be the standard. And we should be getting text/xml as request and response.
3807
- // BUT we have to be backward compatible with the lib, which always used UTF-8 as default...
3808
- return $GLOBALS['xmlrpc_defencoding'];
3809
- }
3810
- }
3811
-
3812
- /**
3813
- * Checks if a given charset encoding is present in a list of encodings or
3814
- * if it is a valid subset of any encoding in the list
3815
- * @param string $encoding charset to be tested
3816
- * @param mixed $validlist comma separated list of valid charsets (or array of charsets)
3817
- * @return bool
3818
- */
3819
- function is_valid_charset($encoding, $validlist)
3820
- {
3821
- $charset_supersets = array(
3822
- 'US-ASCII' => array ('ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4',
3823
- 'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8',
3824
- 'ISO-8859-9', 'ISO-8859-10', 'ISO-8859-11', 'ISO-8859-12',
3825
- 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'UTF-8',
3826
- 'EUC-JP', 'EUC-', 'EUC-KR', 'EUC-CN')
3827
- );
3828
- if (is_string($validlist))
3829
- $validlist = explode(',', $validlist);
3830
- if (@in_array(strtoupper($encoding), $validlist))
3831
- return true;
3832
- else
3833
- {
3834
- if (array_key_exists($encoding, $charset_supersets))
3835
- foreach ($validlist as $allowed)
3836
- if (in_array($allowed, $charset_supersets[$encoding]))
3837
- return true;
3838
- return false;
3839
- }
3840
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/infusionsoft/xmlrpc-3.0/lib/xmlrpc_wrappers.inc DELETED
@@ -1,955 +0,0 @@
1
- <?php
2
- /**
3
- * PHP-XMLRPC "wrapper" functions
4
- * Generate stubs to transparently access xmlrpc methods as php functions and viceversa
5
- *
6
- * @version $Id: xmlrpc_wrappers.inc,v 1.13 2008/09/20 01:23:47 ggiunta Exp $
7
- * @author Gaetano Giunta
8
- * @copyright (C) 2006-2009 G. Giunta
9
- * @license code licensed under the BSD License: http://phpxmlrpc.sourceforge.net/license.txt
10
- *
11
- * @todo separate introspection from code generation for func-2-method wrapping
12
- * @todo use some better templating system for code generation?
13
- * @todo implement method wrapping with preservation of php objs in calls
14
- * @todo when wrapping methods without obj rebuilding, use return_type = 'phpvals' (faster)
15
- * @todo implement self-parsing of php code for PHP <= 4
16
- */
17
-
18
- // requires: xmlrpc.inc
19
-
20
- /**
21
- * Given a string defining a php type or phpxmlrpc type (loosely defined: strings
22
- * accepted come from javadoc blocks), return corresponding phpxmlrpc type.
23
- * NB: for php 'resource' types returns empty string, since resources cannot be serialized;
24
- * for php class names returns 'struct', since php objects can be serialized as xmlrpc structs
25
- * for php arrays always return array, even though arrays sometiles serialize as json structs
26
- * @param string $phptype
27
- * @return string
28
- */
29
- function php_2_xmlrpc_type($phptype)
30
- {
31
- switch(strtolower($phptype))
32
- {
33
- case 'string':
34
- return $GLOBALS['xmlrpcString'];
35
- case 'integer':
36
- case $GLOBALS['xmlrpcInt']: // 'int'
37
- case $GLOBALS['xmlrpcI4']:
38
- return $GLOBALS['xmlrpcInt'];
39
- case 'double':
40
- return $GLOBALS['xmlrpcDouble'];
41
- case 'boolean':
42
- return $GLOBALS['xmlrpcBoolean'];
43
- case 'array':
44
- return $GLOBALS['xmlrpcArray'];
45
- case 'object':
46
- return $GLOBALS['xmlrpcStruct'];
47
- case $GLOBALS['xmlrpcBase64']:
48
- case $GLOBALS['xmlrpcStruct']:
49
- return strtolower($phptype);
50
- case 'resource':
51
- return '';
52
- default:
53
- if(class_exists($phptype))
54
- {
55
- return $GLOBALS['xmlrpcStruct'];
56
- }
57
- else
58
- {
59
- // unknown: might be any 'extended' xmlrpc type
60
- return $GLOBALS['xmlrpcValue'];
61
- }
62
- }
63
- }
64
-
65
- /**
66
- * Given a string defining a phpxmlrpc type return corresponding php type.
67
- * @param string $xmlrpctype
68
- * @return string
69
- */
70
- function xmlrpc_2_php_type($xmlrpctype)
71
- {
72
- switch(strtolower($xmlrpctype))
73
- {
74
- case 'base64':
75
- case 'datetime.iso8601':
76
- case 'string':
77
- return $GLOBALS['xmlrpcString'];
78
- case 'int':
79
- case 'i4':
80
- return 'integer';
81
- case 'struct':
82
- case 'array':
83
- return 'array';
84
- case 'double':
85
- return 'float';
86
- case 'undefined':
87
- return 'mixed';
88
- case 'boolean':
89
- case 'null':
90
- default:
91
- // unknown: might be any xmlrpc type
92
- return strtolower($xmlrpctype);
93
- }
94
- }
95
-
96
- /**
97
- * Given a user-defined PHP function, create a PHP 'wrapper' function that can
98
- * be exposed as xmlrpc method from an xmlrpc_server object and called from remote
99
- * clients (as well as its corresponding signature info).
100
- *
101
- * Since php is a typeless language, to infer types of input and output parameters,
102
- * it relies on parsing the javadoc-style comment block associated with the given
103
- * function. Usage of xmlrpc native types (such as datetime.dateTime.iso8601 and base64)
104
- * in the @param tag is also allowed, if you need the php function to receive/send
105
- * data in that particular format (note that base64 encoding/decoding is transparently
106
- * carried out by the lib, while datetime vals are passed around as strings)
107
- *
108
- * Known limitations:
109
- * - requires PHP 5.0.3 +
110
- * - only works for user-defined functions, not for PHP internal functions
111
- * (reflection does not support retrieving number/type of params for those)
112
- * - functions returning php objects will generate special xmlrpc responses:
113
- * when the xmlrpc decoding of those responses is carried out by this same lib, using
114
- * the appropriate param in php_xmlrpc_decode, the php objects will be rebuilt.
115
- * In short: php objects can be serialized, too (except for their resource members),
116
- * using this function.
117
- * Other libs might choke on the very same xml that will be generated in this case
118
- * (i.e. it has a nonstandard attribute on struct element tags)
119
- * - usage of javadoc @param tags using param names in a different order from the
120
- * function prototype is not considered valid (to be fixed?)
121
- *
122
- * Note that since rel. 2.0RC3 the preferred method to have the server call 'standard'
123
- * php functions (ie. functions not expecting a single xmlrpcmsg obj as parameter)
124
- * is by making use of the functions_parameters_type class member.
125
- *
126
- * @param string $funcname the name of the PHP user function to be exposed as xmlrpc method; array($obj, 'methodname') and array('class', 'methodname') are ok too
127
- * @param string $newfuncname (optional) name for function to be created
128
- * @param array $extra_options (optional) array of options for conversion. valid values include:
129
- * bool return_source when true, php code w. function definition will be returned, not evaluated
130
- * bool encode_php_objs let php objects be sent to server using the 'improved' xmlrpc notation, so server can deserialize them as php objects
131
- * bool decode_php_objs --- WARNING !!! possible security hazard. only use it with trusted servers ---
132
- * bool suppress_warnings remove from produced xml any runtime warnings due to the php function being invoked
133
- * @return false on error, or an array containing the name of the new php function,
134
- * its signature and docs, to be used in the server dispatch map
135
- *
136
- * @todo decide how to deal with params passed by ref: bomb out or allow?
137
- * @todo finish using javadoc info to build method sig if all params are named but out of order
138
- * @todo add a check for params of 'resource' type
139
- * @todo add some trigger_errors / error_log when returning false?
140
- * @todo what to do when the PHP function returns NULL? we are currently returning an empty string value...
141
- * @todo add an option to suppress php warnings in invocation of user function, similar to server debug level 3?
142
- * @todo if $newfuncname is empty, we could use create_user_func instead of eval, as it is possibly faster
143
- * @todo add a verbatim_object_copy parameter to allow avoiding the same obj instance?
144
- */
145
- function wrap_php_function($funcname, $newfuncname='', $extra_options=array())
146
- {
147
- $buildit = isset($extra_options['return_source']) ? !($extra_options['return_source']) : true;
148
- $prefix = isset($extra_options['prefix']) ? $extra_options['prefix'] : 'xmlrpc';
149
- $encode_php_objects = isset($extra_options['encode_php_objs']) ? (bool)$extra_options['encode_php_objs'] : false;
150
- $decode_php_objects = isset($extra_options['decode_php_objs']) ? (bool)$extra_options['decode_php_objs'] : false;
151
- $catch_warnings = isset($extra_options['suppress_warnings']) && $extra_options['suppress_warnings'] ? '@' : '';
152
-
153
- if(version_compare(phpversion(), '5.0.3') == -1)
154
- {
155
- // up to php 5.0.3 some useful reflection methods were missing
156
- error_log('XML-RPC: cannot not wrap php functions unless running php version bigger than 5.0.3');
157
- return false;
158
- }
159
-
160
- $exists = false;
161
- if (is_string($funcname) && strpos($funcname, '::') !== false)
162
- {
163
- $funcname = explode('::', $funcname);
164
- }
165
- if(is_array($funcname))
166
- {
167
- if(count($funcname) < 2 || (!is_string($funcname[0]) && !is_object($funcname[0])))
168
- {
169
- error_log('XML-RPC: syntax for function to be wrapped is wrong');
170
- return false;
171
- }
172
- if(is_string($funcname[0]))
173
- {
174
- $plainfuncname = implode('::', $funcname);
175
- }
176
- elseif(is_object($funcname[0]))
177
- {
178
- $plainfuncname = get_class($funcname[0]) . '->' . $funcname[1];
179
- }
180
- $exists = method_exists($funcname[0], $funcname[1]);
181
- if (!$exists && version_compare(phpversion(), '5.1') < 0)
182
- {
183
- // workaround for php 5.0: static class methods are not seen by method_exists
184
- $exists = is_callable( $funcname );
185
- }
186
- }
187
- else
188
- {
189
- $plainfuncname = $funcname;
190
- $exists = function_exists($funcname);
191
- }
192
-
193
- if(!$exists)
194
- {
195
- error_log('XML-RPC: function to be wrapped is not defined: '.$plainfuncname);
196
- return false;
197
- }
198
- else
199
- {
200
- // determine name of new php function
201
- if($newfuncname == '')
202
- {
203
- if(is_array($funcname))
204
- {
205
- if(is_string($funcname[0]))
206
- $xmlrpcfuncname = "{$prefix}_".implode('_', $funcname);
207
- else
208
- $xmlrpcfuncname = "{$prefix}_".get_class($funcname[0]) . '_' . $funcname[1];
209
- }
210
- else
211
- {
212
- $xmlrpcfuncname = "{$prefix}_$funcname";
213
- }
214
- }
215
- else
216
- {
217
- $xmlrpcfuncname = $newfuncname;
218
- }
219
- while($buildit && function_exists($xmlrpcfuncname))
220
- {
221
- $xmlrpcfuncname .= 'x';
222
- }
223
-
224
- // start to introspect PHP code
225
- if(is_array($funcname))
226
- {
227
- $func = new ReflectionMethod($funcname[0], $funcname[1]);
228
- if($func->isPrivate())
229
- {
230
- error_log('XML-RPC: method to be wrapped is private: '.$plainfuncname);
231
- return false;
232
- }
233
- if($func->isProtected())
234
- {
235
- error_log('XML-RPC: method to be wrapped is protected: '.$plainfuncname);
236
- return false;
237
- }
238
- if($func->isConstructor())
239
- {
240
- error_log('XML-RPC: method to be wrapped is the constructor: '.$plainfuncname);
241
- return false;
242
- }
243
- // php 503 always says isdestructor = true...
244
- if( version_compare(phpversion(), '5.0.3') != 0 && $func->isDestructor())
245
- {
246
- error_log('XML-RPC: method to be wrapped is the destructor: '.$plainfuncname);
247
- return false;
248
- }
249
- if($func->isAbstract())
250
- {
251
- error_log('XML-RPC: method to be wrapped is abstract: '.$plainfuncname);
252
- return false;
253
- }
254
- /// @todo add more checks for static vs. nonstatic?
255
- }
256
- else
257
- {
258
- $func = new ReflectionFunction($funcname);
259
- }
260
- if($func->isInternal())
261
- {
262
- // Note: from PHP 5.1.0 onward, we will possibly be able to use invokeargs
263
- // instead of getparameters to fully reflect internal php functions ?
264
- error_log('XML-RPC: function to be wrapped is internal: '.$plainfuncname);
265
- return false;
266
- }
267
-
268
- // retrieve parameter names, types and description from javadoc comments
269
-
270
- // function description
271
- $desc = '';
272
- // type of return val: by default 'any'
273
- $returns = $GLOBALS['xmlrpcValue'];
274
- // desc of return val
275
- $returnsDocs = '';
276
- // type + name of function parameters
277
- $paramDocs = array();
278
-
279
- $docs = $func->getDocComment();
280
- if($docs != '')
281
- {
282
- $docs = explode("\n", $docs);
283
- $i = 0;
284
- foreach($docs as $doc)
285
- {
286
- $doc = trim($doc, " \r\t/*");
287
- if(strlen($doc) && strpos($doc, '@') !== 0 && !$i)
288
- {
289
- if($desc)
290
- {
291
- $desc .= "\n";
292
- }
293
- $desc .= $doc;
294
- }
295
- elseif(strpos($doc, '@param') === 0)
296
- {
297
- // syntax: @param type [$name] desc
298
- if(preg_match('/@param\s+(\S+)(\s+\$\S+)?\s+(.+)/', $doc, $matches))
299
- {
300
- if(strpos($matches[1], '|'))
301
- {
302
- //$paramDocs[$i]['type'] = explode('|', $matches[1]);
303
- $paramDocs[$i]['type'] = 'mixed';
304
- }
305
- else
306
- {
307
- $paramDocs[$i]['type'] = $matches[1];
308
- }
309
- $paramDocs[$i]['name'] = trim($matches[2]);
310
- $paramDocs[$i]['doc'] = $matches[3];
311
- }
312
- $i++;
313
- }
314
- elseif(strpos($doc, '@return') === 0)
315
- {
316
- // syntax: @return type desc
317
- //$returns = preg_split('/\s+/', $doc);
318
- if(preg_match('/@return\s+(\S+)\s+(.+)/', $doc, $matches))
319
- {
320
- $returns = php_2_xmlrpc_type($matches[1]);
321
- if(isset($matches[2]))
322
- {
323
- $returnsDocs = $matches[2];
324
- }
325
- }
326
- }
327
- }
328
- }
329
-
330
- // execute introspection of actual function prototype
331
- $params = array();
332
- $i = 0;
333
- foreach($func->getParameters() as $paramobj)
334
- {
335
- $params[$i] = array();
336
- $params[$i]['name'] = '$'.$paramobj->getName();
337
- $params[$i]['isoptional'] = $paramobj->isOptional();
338
- $i++;
339
- }
340
-
341
-
342
- // start building of PHP code to be eval'd
343
- $innercode = '';
344
- $i = 0;
345
- $parsvariations = array();
346
- $pars = array();
347
- $pnum = count($params);
348
- foreach($params as $param)
349
- {
350
- if (isset($paramDocs[$i]['name']) && $paramDocs[$i]['name'] && strtolower($paramDocs[$i]['name']) != strtolower($param['name']))
351
- {
352
- // param name from phpdoc info does not match param definition!
353
- $paramDocs[$i]['type'] = 'mixed';
354
- }
355
-
356
- if($param['isoptional'])
357
- {
358
- // this particular parameter is optional. save as valid previous list of parameters
359
- $innercode .= "if (\$paramcount > $i) {\n";
360
- $parsvariations[] = $pars;
361
- }
362
- $innercode .= "\$p$i = \$msg->getParam($i);\n";
363
- if ($decode_php_objects)
364
- {
365
- $innercode .= "if (\$p{$i}->kindOf() == 'scalar') \$p$i = \$p{$i}->scalarval(); else \$p$i = php_{$prefix}_decode(\$p$i, array('decode_php_objs'));\n";
366
- }
367
- else
368
- {
369
- $innercode .= "if (\$p{$i}->kindOf() == 'scalar') \$p$i = \$p{$i}->scalarval(); else \$p$i = php_{$prefix}_decode(\$p$i);\n";
370
- }
371
-
372
- $pars[] = "\$p$i";
373
- $i++;
374
- if($param['isoptional'])
375
- {
376
- $innercode .= "}\n";
377
- }
378
- if($i == $pnum)
379
- {
380
- // last allowed parameters combination
381
- $parsvariations[] = $pars;
382
- }
383
- }
384
-
385
- $sigs = array();
386
- $psigs = array();
387
- if(count($parsvariations) == 0)
388
- {
389
- // only known good synopsis = no parameters
390
- $parsvariations[] = array();
391
- $minpars = 0;
392
- }
393
- else
394
- {
395
- $minpars = count($parsvariations[0]);
396
- }
397
-
398
- if($minpars)
399
- {
400
- // add to code the check for min params number
401
- // NB: this check needs to be done BEFORE decoding param values
402
- $innercode = "\$paramcount = \$msg->getNumParams();\n" .
403
- "if (\$paramcount < $minpars) return new {$prefix}resp(0, {$GLOBALS['xmlrpcerr']['incorrect_params']}, '{$GLOBALS['xmlrpcstr']['incorrect_params']}');\n" . $innercode;
404
- }
405
- else
406
- {
407
- $innercode = "\$paramcount = \$msg->getNumParams();\n" . $innercode;
408
- }
409
-
410
- $innercode .= "\$np = false;\n";
411
- // since there are no closures in php, if we are given an object instance,
412
- // we store a pointer to it in a global var...
413
- if ( is_array($funcname) && is_object($funcname[0]) )
414
- {
415
- $GLOBALS['xmlrpcWPFObjHolder'][$xmlrpcfuncname] =& $funcname[0];
416
- $innercode .= "\$obj =& \$GLOBALS['xmlrpcWPFObjHolder']['$xmlrpcfuncname'];\n";
417
- $realfuncname = '$obj->'.$funcname[1];
418
- }
419
- else
420
- {
421
- $realfuncname = $plainfuncname;
422
- }
423
- foreach($parsvariations as $pars)
424
- {
425
- $innercode .= "if (\$paramcount == " . count($pars) . ") \$retval = {$catch_warnings}$realfuncname(" . implode(',', $pars) . "); else\n";
426
- // build a 'generic' signature (only use an appropriate return type)
427
- $sig = array($returns);
428
- $psig = array($returnsDocs);
429
- for($i=0; $i < count($pars); $i++)
430
- {
431
- if (isset($paramDocs[$i]['type']))
432
- {
433
- $sig[] = php_2_xmlrpc_type($paramDocs[$i]['type']);
434
- }
435
- else
436
- {
437
- $sig[] = $GLOBALS['xmlrpcValue'];
438
- }
439
- $psig[] = isset($paramDocs[$i]['doc']) ? $paramDocs[$i]['doc'] : '';
440
- }
441
- $sigs[] = $sig;
442
- $psigs[] = $psig;
443
- }
444
- $innercode .= "\$np = true;\n";
445
- $innercode .= "if (\$np) return new {$prefix}resp(0, {$GLOBALS['xmlrpcerr']['incorrect_params']}, '{$GLOBALS['xmlrpcstr']['incorrect_params']}'); else {\n";
446
- //$innercode .= "if (\$_xmlrpcs_error_occurred) return new xmlrpcresp(0, $GLOBALS['xmlrpcerr']user, \$_xmlrpcs_error_occurred); else\n";
447
- $innercode .= "if (is_a(\$retval, '{$prefix}resp')) return \$retval; else\n";
448
- if($returns == $GLOBALS['xmlrpcDateTime'] || $returns == $GLOBALS['xmlrpcBase64'])
449
- {
450
- $innercode .= "return new {$prefix}resp(new {$prefix}val(\$retval, '$returns'));";
451
- }
452
- else
453
- {
454
- if ($encode_php_objects)
455
- $innercode .= "return new {$prefix}resp(php_{$prefix}_encode(\$retval, array('encode_php_objs')));\n";
456
- else
457
- $innercode .= "return new {$prefix}resp(php_{$prefix}_encode(\$retval));\n";
458
- }
459
- // shall we exclude functions returning by ref?
460
- // if($func->returnsReference())
461
- // return false;
462
- $code = "function $xmlrpcfuncname(\$msg) {\n" . $innercode . "}\n}";
463
- //print_r($code);
464
- if ($buildit)
465
- {
466
- $allOK = 0;
467
- eval($code.'$allOK=1;');
468
- // alternative
469
- //$xmlrpcfuncname = create_function('$m', $innercode);
470
-
471
- if(!$allOK)
472
- {
473
- error_log('XML-RPC: could not create function '.$xmlrpcfuncname.' to wrap php function '.$plainfuncname);
474
- return false;
475
- }
476
- }
477
-
478
- /// @todo examine if $paramDocs matches $parsvariations and build array for
479
- /// usage as method signature, plus put together a nice string for docs
480
-
481
- $ret = array('function' => $xmlrpcfuncname, 'signature' => $sigs, 'docstring' => $desc, 'signature_docs' => $psigs, 'source' => $code);
482
- return $ret;
483
- }
484
- }
485
-
486
- /**
487
- * Given a user-defined PHP class or php object, map its methods onto a list of
488
- * PHP 'wrapper' functions that can be exposed as xmlrpc methods from an xmlrpc_server
489
- * object and called from remote clients (as well as their corresponding signature info).
490
- *
491
- * @param mixed $classname the name of the class whose methods are to be exposed as xmlrpc methods, or an object instance of that class
492
- * @param array $extra_options see the docs for wrap_php_method for more options
493
- * string method_type 'static', 'nonstatic', 'all' and 'auto' (default); the latter will switch between static and non-static depending on wheter $classname is a class name or object instance
494
- * @return array or false on failure
495
- *
496
- * @todo get_class_methods will return both static and non-static methods.
497
- * we have to differentiate the action, depending on wheter we recived a class name or object
498
- */
499
- function wrap_php_class($classname, $extra_options=array())
500
- {
501
- $methodfilter = isset($extra_options['method_filter']) ? $extra_options['method_filter'] : '';
502
- $methodtype = isset($extra_options['method_type']) ? $extra_options['method_type'] : 'auto';
503
-
504
- if(version_compare(phpversion(), '5.0.3') == -1)
505
- {
506
- // up to php 5.0.3 some useful reflection methods were missing
507
- error_log('XML-RPC: cannot not wrap php functions unless running php version bigger than 5.0.3');
508
- return false;
509
- }
510
-
511
- $result = array();
512
- $mlist = get_class_methods($classname);
513
- foreach($mlist as $mname)
514
- {
515
- if ($methodfilter == '' || preg_match($methodfilter, $mname))
516
- {
517
- // echo $mlist."\n";
518
- $func = new ReflectionMethod($classname, $mname);
519
- if(!$func->isPrivate() && !$func->isProtected() && !$func->isConstructor() && !$func->isDestructor() && !$func->isAbstract())
520
- {
521
- if(($func->isStatic && ($methodtype == 'all' || $methodtype == 'static' || ($methodtype == 'auto' && is_string($classname)))) ||
522
- (!$func->isStatic && ($methodtype == 'all' || $methodtype == 'nonstatic' || ($methodtype == 'auto' && is_object($classname)))))
523
- {
524
- $methodwrap = wrap_php_function(array($classname, $mname), '', $extra_options);
525
- if ( $methodwrap )
526
- {
527
- $result[$methodwrap['function']] = $methodwrap['function'];
528
- }
529
- }
530
- }
531
- }
532
- }
533
- return $result;
534
- }
535
-
536
- /**
537
- * Given an xmlrpc client and a method name, register a php wrapper function
538
- * that will call it and return results using native php types for both
539
- * params and results. The generated php function will return an xmlrpcresp
540
- * oject for failed xmlrpc calls
541
- *
542
- * Known limitations:
543
- * - server must support system.methodsignature for the wanted xmlrpc method
544
- * - for methods that expose many signatures, only one can be picked (we
545
- * could in priciple check if signatures differ only by number of params
546
- * and not by type, but it would be more complication than we can spare time)
547
- * - nested xmlrpc params: the caller of the generated php function has to
548
- * encode on its own the params passed to the php function if these are structs
549
- * or arrays whose (sub)members include values of type datetime or base64
550
- *
551
- * Notes: the connection properties of the given client will be copied
552
- * and reused for the connection used during the call to the generated
553
- * php function.
554
- * Calling the generated php function 'might' be slow: a new xmlrpc client
555
- * is created on every invocation and an xmlrpc-connection opened+closed.
556
- * An extra 'debug' param is appended to param list of xmlrpc method, useful
557
- * for debugging purposes.
558
- *
559
- * @param xmlrpc_client $client an xmlrpc client set up correctly to communicate with target server
560
- * @param string $methodname the xmlrpc method to be mapped to a php function
561
- * @param array $extra_options array of options that specify conversion details. valid ptions include
562
- * integer signum the index of the method signature to use in mapping (if method exposes many sigs)
563
- * integer timeout timeout (in secs) to be used when executing function/calling remote method
564
- * string protocol 'http' (default), 'http11' or 'https'
565
- * string new_function_name the name of php function to create. If unsepcified, lib will pick an appropriate name
566
- * string return_source if true return php code w. function definition instead fo function name
567
- * bool encode_php_objs let php objects be sent to server using the 'improved' xmlrpc notation, so server can deserialize them as php objects
568
- * bool decode_php_objs --- WARNING !!! possible security hazard. only use it with trusted servers ---
569
- * mixed return_on_fault a php value to be returned when the xmlrpc call fails/returns a fault response (by default the xmlrpcresp object is returned in this case). If a string is used, '%faultCode%' and '%faultString%' tokens will be substituted with actual error values
570
- * bool debug set it to 1 or 2 to see debug results of querying server for method synopsis
571
- * @return string the name of the generated php function (or false) - OR AN ARRAY...
572
- */
573
- function wrap_xmlrpc_method($client, $methodname, $extra_options=0, $timeout=0, $protocol='', $newfuncname='')
574
- {
575
- // mind numbing: let caller use sane calling convention (as per javadoc, 3 params),
576
- // OR the 2.0 calling convention (no options) - we really love backward compat, don't we?
577
- if (!is_array($extra_options))
578
- {
579
- $signum = $extra_options;
580
- $extra_options = array();
581
- }
582
- else
583
- {
584
- $signum = isset($extra_options['signum']) ? (int)$extra_options['signum'] : 0;
585
- $timeout = isset($extra_options['timeout']) ? (int)$extra_options['timeout'] : 0;
586
- $protocol = isset($extra_options['protocol']) ? $extra_options['protocol'] : '';
587
- $newfuncname = isset($extra_options['new_function_name']) ? $extra_options['new_function_name'] : '';
588
- }
589
- //$encode_php_objects = in_array('encode_php_objects', $extra_options);
590
- //$verbatim_client_copy = in_array('simple_client_copy', $extra_options) ? 1 :
591
- // in_array('build_class_code', $extra_options) ? 2 : 0;
592
-
593
- $encode_php_objects = isset($extra_options['encode_php_objs']) ? (bool)$extra_options['encode_php_objs'] : false;
594
- $decode_php_objects = isset($extra_options['decode_php_objs']) ? (bool)$extra_options['decode_php_objs'] : false;
595
- $simple_client_copy = isset($extra_options['simple_client_copy']) ? (int)($extra_options['simple_client_copy']) : 0;
596
- $buildit = isset($extra_options['return_source']) ? !($extra_options['return_source']) : true;
597
- $prefix = isset($extra_options['prefix']) ? $extra_options['prefix'] : 'xmlrpc';
598
- if (isset($extra_options['return_on_fault']))
599
- {
600
- $decode_fault = true;
601
- $fault_response = $extra_options['return_on_fault'];
602
- }
603
- else
604
- {
605
- $decode_fault = false;
606
- $fault_response = '';
607
- }
608
- $debug = isset($extra_options['debug']) ? ($extra_options['debug']) : 0;
609
-
610
- $msgclass = $prefix.'msg';
611
- $valclass = $prefix.'val';
612
- $decodefunc = 'php_'.$prefix.'_decode';
613
-
614
- $msg = new $msgclass('system.methodSignature');
615
- $msg->addparam(new $valclass($methodname));
616
- $client->setDebug($debug);
617
- $response =& $client->send($msg, $timeout, $protocol);
618
- if($response->faultCode())
619
- {
620
- error_log('XML-RPC: could not retrieve method signature from remote server for method '.$methodname);
621
- return false;
622
- }
623
- else
624
- {
625
- $msig = $response->value();
626
- if ($client->return_type != 'phpvals')
627
- {
628
- $msig = $decodefunc($msig);
629
- }
630
- if(!is_array($msig) || count($msig) <= $signum)
631
- {
632
- error_log('XML-RPC: could not retrieve method signature nr.'.$signum.' from remote server for method '.$methodname);
633
- return false;
634
- }
635
- else
636
- {
637
- // pick a suitable name for the new function, avoiding collisions
638
- if($newfuncname != '')
639
- {
640
- $xmlrpcfuncname = $newfuncname;
641
- }
642
- else
643
- {
644
- // take care to insure that methodname is translated to valid
645
- // php function name
646
- $xmlrpcfuncname = $prefix.'_'.preg_replace(array('/\./', '/[^a-zA-Z0-9_\x7f-\xff]/'),
647
- array('_', ''), $methodname);
648
- }
649
- while($buildit && function_exists($xmlrpcfuncname))
650
- {
651
- $xmlrpcfuncname .= 'x';
652
- }
653
-
654
- $msig = $msig[$signum];
655
- $mdesc = '';
656
- // if in 'offline' mode, get method description too.
657
- // in online mode, favour speed of operation
658
- if(!$buildit)
659
- {
660
- $msg = new $msgclass('system.methodHelp');
661
- $msg->addparam(new $valclass($methodname));
662
- $response =& $client->send($msg, $timeout, $protocol);
663
- if (!$response->faultCode())
664
- {
665
- $mdesc = $response->value();
666
- if ($client->return_type != 'phpvals')
667
- {
668
- $mdesc = $mdesc->scalarval();
669
- }
670
- }
671
- }
672
-
673
- $results = build_remote_method_wrapper_code($client, $methodname,
674
- $xmlrpcfuncname, $msig, $mdesc, $timeout, $protocol, $simple_client_copy,
675
- $prefix, $decode_php_objects, $encode_php_objects, $decode_fault,
676
- $fault_response);
677
-
678
- //print_r($code);
679
- if ($buildit)
680
- {
681
- $allOK = 0;
682
- eval($results['source'].'$allOK=1;');
683
- // alternative
684
- //$xmlrpcfuncname = create_function('$m', $innercode);
685
- if($allOK)
686
- {
687
- return $xmlrpcfuncname;
688
- }
689
- else
690
- {
691
- error_log('XML-RPC: could not create function '.$xmlrpcfuncname.' to wrap remote method '.$methodname);
692
- return false;
693
- }
694
- }
695
- else
696
- {
697
- $results['function'] = $xmlrpcfuncname;
698
- return $results;
699
- }
700
- }
701
- }
702
- }
703
-
704
- /**
705
- * Similar to wrap_xmlrpc_method, but will generate a php class that wraps
706
- * all xmlrpc methods exposed by the remote server as own methods.
707
- * For more details see wrap_xmlrpc_method.
708
- * @param xmlrpc_client $client the client obj all set to query the desired server
709
- * @param array $extra_options list of options for wrapped code
710
- * @return mixed false on error, the name of the created class if all ok or an array with code, class name and comments (if the appropriatevoption is set in extra_options)
711
- */
712
- function wrap_xmlrpc_server($client, $extra_options=array())
713
- {
714
- $methodfilter = isset($extra_options['method_filter']) ? $extra_options['method_filter'] : '';
715
- //$signum = isset($extra_options['signum']) ? (int)$extra_options['signum'] : 0;
716
- $timeout = isset($extra_options['timeout']) ? (int)$extra_options['timeout'] : 0;
717
- $protocol = isset($extra_options['protocol']) ? $extra_options['protocol'] : '';
718
- $newclassname = isset($extra_options['new_class_name']) ? $extra_options['new_class_name'] : '';
719
- $encode_php_objects = isset($extra_options['encode_php_objs']) ? (bool)$extra_options['encode_php_objs'] : false;
720
- $decode_php_objects = isset($extra_options['decode_php_objs']) ? (bool)$extra_options['decode_php_objs'] : false;
721
- $verbatim_client_copy = isset($extra_options['simple_client_copy']) ? !($extra_options['simple_client_copy']) : true;
722
- $buildit = isset($extra_options['return_source']) ? !($extra_options['return_source']) : true;
723
- $prefix = isset($extra_options['prefix']) ? $extra_options['prefix'] : 'xmlrpc';
724
-
725
- $msgclass = $prefix.'msg';
726
- //$valclass = $prefix.'val';
727
- $decodefunc = 'php_'.$prefix.'_decode';
728
-
729
- $msg = new $msgclass('system.listMethods');
730
- $response =& $client->send($msg, $timeout, $protocol);
731
- if($response->faultCode())
732
- {
733
- error_log('XML-RPC: could not retrieve method list from remote server');
734
- return false;
735
- }
736
- else
737
- {
738
- $mlist = $response->value();
739
- if ($client->return_type != 'phpvals')
740
- {
741
- $mlist = $decodefunc($mlist);
742
- }
743
- if(!is_array($mlist) || !count($mlist))
744
- {
745
- error_log('XML-RPC: could not retrieve meaningful method list from remote server');
746
- return false;
747
- }
748
- else
749
- {
750
- // pick a suitable name for the new function, avoiding collisions
751
- if($newclassname != '')
752
- {
753
- $xmlrpcclassname = $newclassname;
754
- }
755
- else
756
- {
757
- $xmlrpcclassname = $prefix.'_'.preg_replace(array('/\./', '/[^a-zA-Z0-9_\x7f-\xff]/'),
758
- array('_', ''), $client->server).'_client';
759
- }
760
- while($buildit && class_exists($xmlrpcclassname))
761
- {
762
- $xmlrpcclassname .= 'x';
763
- }
764
-
765
- /// @todo add function setdebug() to new class, to enable/disable debugging
766
- $source = "class $xmlrpcclassname\n{\nvar \$client;\n\n";
767
- $source .= "function $xmlrpcclassname()\n{\n";
768
- $source .= build_client_wrapper_code($client, $verbatim_client_copy, $prefix);
769
- $source .= "\$this->client =& \$client;\n}\n\n";
770
- $opts = array('simple_client_copy' => 2, 'return_source' => true,
771
- 'timeout' => $timeout, 'protocol' => $protocol,
772
- 'encode_php_objs' => $encode_php_objects, 'prefix' => $prefix,
773
- 'decode_php_objs' => $decode_php_objects
774
- );
775
- /// @todo build javadoc for class definition, too
776
- foreach($mlist as $mname)
777
- {
778
- if ($methodfilter == '' || preg_match($methodfilter, $mname))
779
- {
780
- $opts['new_function_name'] = preg_replace(array('/\./', '/[^a-zA-Z0-9_\x7f-\xff]/'),
781
- array('_', ''), $mname);
782
- $methodwrap = wrap_xmlrpc_method($client, $mname, $opts);
783
- if ($methodwrap)
784
- {
785
- if (!$buildit)
786
- {
787
- $source .= $methodwrap['docstring'];
788
- }
789
- $source .= $methodwrap['source']."\n";
790
- }
791
- else
792
- {
793
- error_log('XML-RPC: will not create class method to wrap remote method '.$mname);
794
- }
795
- }
796
- }
797
- $source .= "}\n";
798
- if ($buildit)
799
- {
800
- $allOK = 0;
801
- eval($source.'$allOK=1;');
802
- // alternative
803
- //$xmlrpcfuncname = create_function('$m', $innercode);
804
- if($allOK)
805
- {
806
- return $xmlrpcclassname;
807
- }
808
- else
809
- {
810
- error_log('XML-RPC: could not create class '.$xmlrpcclassname.' to wrap remote server '.$client->server);
811
- return false;
812
- }
813
- }
814
- else
815
- {
816
- return array('class' => $xmlrpcclassname, 'code' => $source, 'docstring' => '');
817
- }
818
- }
819
- }
820
- }
821
-
822
- /**
823
- * Given the necessary info, build php code that creates a new function to
824
- * invoke a remote xmlrpc method.
825
- * Take care that no full checking of input parameters is done to ensure that
826
- * valid php code is emitted.
827
- * Note: real spaghetti code follows...
828
- * @access private
829
- */
830
- function build_remote_method_wrapper_code($client, $methodname, $xmlrpcfuncname,
831
- $msig, $mdesc='', $timeout=0, $protocol='', $client_copy_mode=0, $prefix='xmlrpc',
832
- $decode_php_objects=false, $encode_php_objects=false, $decode_fault=false,
833
- $fault_response='')
834
- {
835
- $code = "function $xmlrpcfuncname (";
836
- if ($client_copy_mode < 2)
837
- {
838
- // client copy mode 0 or 1 == partial / full client copy in emitted code
839
- $innercode = build_client_wrapper_code($client, $client_copy_mode, $prefix);
840
- $innercode .= "\$client->setDebug(\$debug);\n";
841
- $this_ = '';
842
- }
843
- else
844
- {
845
- // client copy mode 2 == no client copy in emitted code
846
- $innercode = '';
847
- $this_ = 'this->';
848
- }
849
- $innercode .= "\$msg = new {$prefix}msg('$methodname');\n";
850
-
851
- if ($mdesc != '')
852
- {
853
- // take care that PHP comment is not terminated unwillingly by method description
854
- $mdesc = "/**\n* ".str_replace('*/', '* /', $mdesc)."\n";
855
- }
856
- else
857
- {
858
- $mdesc = "/**\nFunction $xmlrpcfuncname\n";
859
- }
860
-
861
- // param parsing
862
- $plist = array();
863
- $pcount = count($msig);
864
- for($i = 1; $i < $pcount; $i++)
865
- {
866
- $plist[] = "\$p$i";
867
- $ptype = $msig[$i];
868
- if($ptype == 'i4' || $ptype == 'int' || $ptype == 'boolean' || $ptype == 'double' ||
869
- $ptype == 'string' || $ptype == 'dateTime.iso8601' || $ptype == 'base64' || $ptype == 'null')
870
- {
871
- // only build directly xmlrpcvals when type is known and scalar
872
- $innercode .= "\$p$i = new {$prefix}val(\$p$i, '$ptype');\n";
873
- }
874
- else
875
- {
876
- if ($encode_php_objects)
877
- {
878
- $innercode .= "\$p$i =& php_{$prefix}_encode(\$p$i, array('encode_php_objs'));\n";
879
- }
880
- else
881
- {
882
- $innercode .= "\$p$i =& php_{$prefix}_encode(\$p$i);\n";
883
- }
884
- }
885
- $innercode .= "\$msg->addparam(\$p$i);\n";
886
- $mdesc .= '* @param '.xmlrpc_2_php_type($ptype)." \$p$i\n";
887
- }
888
- if ($client_copy_mode < 2)
889
- {
890
- $plist[] = '$debug=0';
891
- $mdesc .= "* @param int \$debug when 1 (or 2) will enable debugging of the underlying {$prefix} call (defaults to 0)\n";
892
- }
893
- $plist = implode(', ', $plist);
894
- $mdesc .= '* @return '.xmlrpc_2_php_type($msig[0])." (or an {$prefix}resp obj instance if call fails)\n*/\n";
895
-
896
- $innercode .= "\$res =& \${$this_}client->send(\$msg, $timeout, '$protocol');\n";
897
- if ($decode_fault)
898
- {
899
- if (is_string($fault_response) && ((strpos($fault_response, '%faultCode%') !== false) || (strpos($fault_response, '%faultString%') !== false)))
900
- {
901
- $respcode = "str_replace(array('%faultCode%', '%faultString%'), array(\$res->faultCode(), \$res->faultString()), '".str_replace("'", "''", $fault_response)."')";
902
- }
903
- else
904
- {
905
- $respcode = var_export($fault_response, true);
906
- }
907
- }
908
- else
909
- {
910
- $respcode = '$res';
911
- }
912
- if ($decode_php_objects)
913
- {
914
- $innercode .= "if (\$res->faultcode()) return $respcode; else return php_{$prefix}_decode(\$res->value(), array('decode_php_objs'));";
915
- }
916
- else
917
- {
918
- $innercode .= "if (\$res->faultcode()) return $respcode; else return php_{$prefix}_decode(\$res->value());";
919
- }
920
-
921
- $code = $code . $plist. ") {\n" . $innercode . "\n}\n";
922
-
923
- return array('source' => $code, 'docstring' => $mdesc);
924
- }
925
-
926
- /**
927
- * Given necessary info, generate php code that will rebuild a client object
928
- * Take care that no full checking of input parameters is done to ensure that
929
- * valid php code is emitted.
930
- * @access private
931
- */
932
- function build_client_wrapper_code($client, $verbatim_client_copy, $prefix='xmlrpc')
933
- {
934
- $code = "\$client = new {$prefix}_client('".str_replace("'", "\'", $client->path).
935
- "', '" . str_replace("'", "\'", $client->server) . "', $client->port);\n";
936
-
937
- // copy all client fields to the client that will be generated runtime
938
- // (this provides for future expansion or subclassing of client obj)
939
- if ($verbatim_client_copy)
940
- {
941
- foreach($client as $fld => $val)
942
- {
943
- if($fld != 'debug' && $fld != 'return_type')
944
- {
945
- $val = var_export($val, true);
946
- $code .= "\$client->$fld = $val;\n";
947
- }
948
- }
949
- }
950
- // only make sure that client always returns the correct data type
951
- $code .= "\$client->return_type = '{$prefix}vals';\n";
952
- //$code .= "\$client->setDebug(\$debug);\n";
953
- return $code;
954
- }
955
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/infusionsoft/xmlrpc-3.0/lib/xmlrpcs.inc DELETED
@@ -1,1246 +0,0 @@
1
- <?php
2
- // by Edd Dumbill (C) 1999-2002
3
- // <edd@usefulinc.com>
4
- // $Id: xmlrpcs.inc,v 1.71 2008/10/29 23:41:28 ggiunta Exp $
5
-
6
- // Copyright (c) 1999,2000,2002 Edd Dumbill.
7
- // All rights reserved.
8
- //
9
- // Redistribution and use in source and binary forms, with or without
10
- // modification, are permitted provided that the following conditions
11
- // are met:
12
- //
13
- // * Redistributions of source code must retain the above copyright
14
- // notice, this list of conditions and the following disclaimer.
15
- //
16
- // * Redistributions in binary form must reproduce the above
17
- // copyright notice, this list of conditions and the following
18
- // disclaimer in the documentation and/or other materials provided
19
- // with the distribution.
20
- //
21
- // * Neither the name of the "XML-RPC for PHP" nor the names of its
22
- // contributors may be used to endorse or promote products derived
23
- // from this software without specific prior written permission.
24
- //
25
- // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
- // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
- // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28
- // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29
- // REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30
- // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
31
- // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
32
- // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33
- // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
34
- // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35
- // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
36
- // OF THE POSSIBILITY OF SUCH DAMAGE.
37
-
38
- // XML RPC Server class
39
- // requires: xmlrpc.inc
40
-
41
- $GLOBALS['xmlrpcs_capabilities'] = array(
42
- // xmlrpc spec: always supported
43
- 'xmlrpc' => new xmlrpcval(array(
44
- 'specUrl' => new xmlrpcval('http://www.xmlrpc.com/spec', 'string'),
45
- 'specVersion' => new xmlrpcval(1, 'int')
46
- ), 'struct'),
47
- // if we support system.xxx functions, we always support multicall, too...
48
- // Note that, as of 2006/09/17, the following URL does not respond anymore
49
- 'system.multicall' => new xmlrpcval(array(
50
- 'specUrl' => new xmlrpcval('http://www.xmlrpc.com/discuss/msgReader$1208', 'string'),
51
- 'specVersion' => new xmlrpcval(1, 'int')
52
- ), 'struct'),
53
- // introspection: version 2! we support 'mixed', too
54
- 'introspection' => new xmlrpcval(array(
55
- 'specUrl' => new xmlrpcval('http://phpxmlrpc.sourceforge.net/doc-2/ch10.html', 'string'),
56
- 'specVersion' => new xmlrpcval(2, 'int')
57
- ), 'struct')
58
- );
59
-
60
- /* Functions that implement system.XXX methods of xmlrpc servers */
61
- $_xmlrpcs_getCapabilities_sig=array(array($GLOBALS['xmlrpcStruct']));
62
- $_xmlrpcs_getCapabilities_doc='This method lists all the capabilites that the XML-RPC server has: the (more or less standard) extensions to the xmlrpc spec that it adheres to';
63
- $_xmlrpcs_getCapabilities_sdoc=array(array('list of capabilities, described as structs with a version number and url for the spec'));
64
- function _xmlrpcs_getCapabilities($server, $m=null)
65
- {
66
- $outAr = $GLOBALS['xmlrpcs_capabilities'];
67
- // NIL extension
68
- if ($GLOBALS['xmlrpc_null_extension']) {
69
- $outAr['nil'] = new xmlrpcval(array(
70
- 'specUrl' => new xmlrpcval('http://www.ontosys.com/xml-rpc/extensions.php', 'string'),
71
- 'specVersion' => new xmlrpcval(1, 'int')
72
- ), 'struct');
73
- }
74
- return new xmlrpcresp(new xmlrpcval($outAr, 'struct'));
75
- }
76
-
77
- // listMethods: signature was either a string, or nothing.
78
- // The useless string variant has been removed
79
- $_xmlrpcs_listMethods_sig=array(array($GLOBALS['xmlrpcArray']));
80
- $_xmlrpcs_listMethods_doc='This method lists all the methods that the XML-RPC server knows how to dispatch';
81
- $_xmlrpcs_listMethods_sdoc=array(array('list of method names'));
82
- function _xmlrpcs_listMethods($server, $m=null) // if called in plain php values mode, second param is missing
83
- {
84
-
85
- $outAr=array();
86
- foreach($server->dmap as $key => $val)
87
- {
88
- $outAr[]=new xmlrpcval($key, 'string');
89
- }
90
- if($server->allow_system_funcs)
91
- {
92
- foreach($GLOBALS['_xmlrpcs_dmap'] as $key => $val)
93
- {
94
- $outAr[]=new xmlrpcval($key, 'string');
95
- }
96
- }
97
- return new xmlrpcresp(new xmlrpcval($outAr, 'array'));
98
- }
99
-
100
- $_xmlrpcs_methodSignature_sig=array(array($GLOBALS['xmlrpcArray'], $GLOBALS['xmlrpcString']));
101
- $_xmlrpcs_methodSignature_doc='Returns an array of known signatures (an array of arrays) for the method name passed. If no signatures are known, returns a none-array (test for type != array to detect missing signature)';
102
- $_xmlrpcs_methodSignature_sdoc=array(array('list of known signatures, each sig being an array of xmlrpc type names', 'name of method to be described'));
103
- function _xmlrpcs_methodSignature($server, $m)
104
- {
105
- // let accept as parameter both an xmlrpcval or string
106
- if (is_object($m))
107
- {
108
- $methName=$m->getParam(0);
109
- $methName=$methName->scalarval();
110
- }
111
- else
112
- {
113
- $methName=$m;
114
- }
115
- if(strpos($methName, "system.") === 0)
116
- {
117
- $dmap=$GLOBALS['_xmlrpcs_dmap']; $sysCall=1;
118
- }
119
- else
120
- {
121
- $dmap=$server->dmap; $sysCall=0;
122
- }
123
- if(isset($dmap[$methName]))
124
- {
125
- if(isset($dmap[$methName]['signature']))
126
- {
127
- $sigs=array();
128
- foreach($dmap[$methName]['signature'] as $inSig)
129
- {
130
- $cursig=array();
131
- foreach($inSig as $sig)
132
- {
133
- $cursig[]=new xmlrpcval($sig, 'string');
134
- }
135
- $sigs[]=new xmlrpcval($cursig, 'array');
136
- }
137
- $r=new xmlrpcresp(new xmlrpcval($sigs, 'array'));
138
- }
139
- else
140
- {
141
- // NB: according to the official docs, we should be returning a
142
- // "none-array" here, which means not-an-array
143
- $r=new xmlrpcresp(new xmlrpcval('undef', 'string'));
144
- }
145
- }
146
- else
147
- {
148
- $r=new xmlrpcresp(0,$GLOBALS['xmlrpcerr']['introspect_unknown'], $GLOBALS['xmlrpcstr']['introspect_unknown']);
149
- }
150
- return $r;
151
- }
152
-
153
- $_xmlrpcs_methodHelp_sig=array(array($GLOBALS['xmlrpcString'], $GLOBALS['xmlrpcString']));
154
- $_xmlrpcs_methodHelp_doc='Returns help text if defined for the method passed, otherwise returns an empty string';
155
- $_xmlrpcs_methodHelp_sdoc=array(array('method description', 'name of the method to be described'));
156
- function _xmlrpcs_methodHelp($server, $m)
157
- {
158
- // let accept as parameter both an xmlrpcval or string
159
- if (is_object($m))
160
- {
161
- $methName=$m->getParam(0);
162
- $methName=$methName->scalarval();
163
- }
164
- else
165
- {
166
- $methName=$m;
167
- }
168
- if(strpos($methName, "system.") === 0)
169
- {
170
- $dmap=$GLOBALS['_xmlrpcs_dmap']; $sysCall=1;
171
- }
172
- else
173
- {
174
- $dmap=$server->dmap; $sysCall=0;
175
- }
176
- if(isset($dmap[$methName]))
177
- {
178
- if(isset($dmap[$methName]['docstring']))
179
- {
180
- $r=new xmlrpcresp(new xmlrpcval($dmap[$methName]['docstring']), 'string');
181
- }
182
- else
183
- {
184
- $r=new xmlrpcresp(new xmlrpcval('', 'string'));
185
- }
186
- }
187
- else
188
- {
189
- $r=new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['introspect_unknown'], $GLOBALS['xmlrpcstr']['introspect_unknown']);
190
- }
191
- return $r;
192
- }
193
-
194
- $_xmlrpcs_multicall_sig = array(array($GLOBALS['xmlrpcArray'], $GLOBALS['xmlrpcArray']));
195
- $_xmlrpcs_multicall_doc = 'Boxcar multiple RPC calls in one request. See http://www.xmlrpc.com/discuss/msgReader$1208 for details';
196
- $_xmlrpcs_multicall_sdoc = array(array('list of response structs, where each struct has the usual members', 'list of calls, with each call being represented as a struct, with members "methodname" and "params"'));
197
- function _xmlrpcs_multicall_error($err)
198
- {
199
- if(is_string($err))
200
- {
201
- $str = $GLOBALS['xmlrpcstr']["multicall_${err}"];
202
- $code = $GLOBALS['xmlrpcerr']["multicall_${err}"];
203
- }
204
- else
205
- {
206
- $code = $err->faultCode();
207
- $str = $err->faultString();
208
- }
209
- $struct = array();
210
- $struct['faultCode'] = new xmlrpcval($code, 'int');
211
- $struct['faultString'] = new xmlrpcval($str, 'string');
212
- return new xmlrpcval($struct, 'struct');
213
- }
214
-
215
- function _xmlrpcs_multicall_do_call($server, $call)
216
- {
217
- if($call->kindOf() != 'struct')
218
- {
219
- return _xmlrpcs_multicall_error('notstruct');
220
- }
221
- $methName = @$call->structmem('methodName');
222
- if(!$methName)
223
- {
224
- return _xmlrpcs_multicall_error('nomethod');
225
- }
226
- if($methName->kindOf() != 'scalar' || $methName->scalartyp() != 'string')
227
- {
228
- return _xmlrpcs_multicall_error('notstring');
229
- }
230
- if($methName->scalarval() == 'system.multicall')
231
- {
232
- return _xmlrpcs_multicall_error('recursion');
233
- }
234
-
235
- $params = @$call->structmem('params');
236
- if(!$params)
237
- {
238
- return _xmlrpcs_multicall_error('noparams');
239
- }
240
- if($params->kindOf() != 'array')
241
- {
242
- return _xmlrpcs_multicall_error('notarray');
243
- }
244
- $numParams = $params->arraysize();
245
-
246
- $msg = new xmlrpcmsg($methName->scalarval());
247
- for($i = 0; $i < $numParams; $i++)
248
- {
249
- if(!$msg->addParam($params->arraymem($i)))
250
- {
251
- $i++;
252
- return _xmlrpcs_multicall_error(new xmlrpcresp(0,
253
- $GLOBALS['xmlrpcerr']['incorrect_params'],
254
- $GLOBALS['xmlrpcstr']['incorrect_params'] . ": probable xml error in param " . $i));
255
- }
256
- }
257
-
258
- $result = $server->execute($msg);
259
-
260
- if($result->faultCode() != 0)
261
- {
262
- return _xmlrpcs_multicall_error($result); // Method returned fault.
263
- }
264
-
265
- return new xmlrpcval(array($result->value()), 'array');
266
- }
267
-
268
- function _xmlrpcs_multicall_do_call_phpvals($server, $call)
269
- {
270
- if(!is_array($call))
271
- {
272
- return _xmlrpcs_multicall_error('notstruct');
273
- }
274
- if(!array_key_exists('methodName', $call))
275
- {
276
- return _xmlrpcs_multicall_error('nomethod');
277
- }
278
- if (!is_string($call['methodName']))
279
- {
280
- return _xmlrpcs_multicall_error('notstring');
281
- }
282
- if($call['methodName'] == 'system.multicall')
283
- {
284
- return _xmlrpcs_multicall_error('recursion');
285
- }
286
- if(!array_key_exists('params', $call))
287
- {
288
- return _xmlrpcs_multicall_error('noparams');
289
- }
290
- if(!is_array($call['params']))
291
- {
292
- return _xmlrpcs_multicall_error('notarray');
293
- }
294
-
295
- // this is a real dirty and simplistic hack, since we might have received a
296
- // base64 or datetime values, but they will be listed as strings here...
297
- $numParams = count($call['params']);
298
- $pt = array();
299
- foreach($call['params'] as $val)
300
- $pt[] = php_2_xmlrpc_type(gettype($val));
301
-
302
- $result = $server->execute($call['methodName'], $call['params'], $pt);
303
-
304
- if($result->faultCode() != 0)
305
- {
306
- return _xmlrpcs_multicall_error($result); // Method returned fault.
307
- }
308
-
309
- return new xmlrpcval(array($result->value()), 'array');
310
- }
311
-
312
- function _xmlrpcs_multicall($server, $m)
313
- {
314
- $result = array();
315
- // let accept a plain list of php parameters, beside a single xmlrpc msg object
316
- if (is_object($m))
317
- {
318
- $calls = $m->getParam(0);
319
- $numCalls = $calls->arraysize();
320
- for($i = 0; $i < $numCalls; $i++)
321
- {
322
- $call = $calls->arraymem($i);
323
- $result[$i] = _xmlrpcs_multicall_do_call($server, $call);
324
- }
325
- }
326
- else
327
- {
328
- $numCalls=count($m);
329
- for($i = 0; $i < $numCalls; $i++)
330
- {
331
- $result[$i] = _xmlrpcs_multicall_do_call_phpvals($server, $m[$i]);
332
- }
333
- }
334
-
335
- return new xmlrpcresp(new xmlrpcval($result, 'array'));
336
- }
337
-
338
- $GLOBALS['_xmlrpcs_dmap']=array(
339
- 'system.listMethods' => array(
340
- 'function' => '_xmlrpcs_listMethods',
341
- 'signature' => $_xmlrpcs_listMethods_sig,
342
- 'docstring' => $_xmlrpcs_listMethods_doc,
343
- 'signature_docs' => $_xmlrpcs_listMethods_sdoc),
344
- 'system.methodHelp' => array(
345
- 'function' => '_xmlrpcs_methodHelp',
346
- 'signature' => $_xmlrpcs_methodHelp_sig,
347
- 'docstring' => $_xmlrpcs_methodHelp_doc,
348
- 'signature_docs' => $_xmlrpcs_methodHelp_sdoc),
349
- 'system.methodSignature' => array(
350
- 'function' => '_xmlrpcs_methodSignature',
351
- 'signature' => $_xmlrpcs_methodSignature_sig,
352
- 'docstring' => $_xmlrpcs_methodSignature_doc,
353
- 'signature_docs' => $_xmlrpcs_methodSignature_sdoc),
354
- 'system.multicall' => array(
355
- 'function' => '_xmlrpcs_multicall',
356
- 'signature' => $_xmlrpcs_multicall_sig,
357
- 'docstring' => $_xmlrpcs_multicall_doc,
358
- 'signature_docs' => $_xmlrpcs_multicall_sdoc),
359
- 'system.getCapabilities' => array(
360
- 'function' => '_xmlrpcs_getCapabilities',
361
- 'signature' => $_xmlrpcs_getCapabilities_sig,
362
- 'docstring' => $_xmlrpcs_getCapabilities_doc,
363
- 'signature_docs' => $_xmlrpcs_getCapabilities_sdoc)
364
- );
365
-
366
- $GLOBALS['_xmlrpcs_occurred_errors'] = '';
367
- $GLOBALS['_xmlrpcs_prev_ehandler'] = '';
368
-
369
- /**
370
- * Error handler used to track errors that occur during server-side execution of PHP code.
371
- * This allows to report back to the client whether an internal error has occurred or not
372
- * using an xmlrpc response object, instead of letting the client deal with the html junk
373
- * that a PHP execution error on the server generally entails.
374
- *
375
- * NB: in fact a user defined error handler can only handle WARNING, NOTICE and USER_* errors.
376
- *
377
- */
378
- function _xmlrpcs_errorHandler($errcode, $errstring, $filename=null, $lineno=null, $context=null)
379
- {
380
- // obey the @ protocol
381
- if (error_reporting() == 0)
382
- return;
383
-
384
- //if($errcode != E_NOTICE && $errcode != E_WARNING && $errcode != E_USER_NOTICE && $errcode != E_USER_WARNING)
385
- if($errcode != E_STRICT)
386
- {
387
- $GLOBALS['_xmlrpcs_occurred_errors'] = $GLOBALS['_xmlrpcs_occurred_errors'] . $errstring . "\n";
388
- }
389
- // Try to avoid as much as possible disruption to the previous error handling
390
- // mechanism in place
391
- if($GLOBALS['_xmlrpcs_prev_ehandler'] == '')
392
- {
393
- // The previous error handler was the default: all we should do is log error
394
- // to the default error log (if level high enough)
395
- if(ini_get('log_errors') && (intval(ini_get('error_reporting')) & $errcode))
396
- {
397
- error_log($errstring);
398
- }
399
- }
400
- else
401
- {
402
- // Pass control on to previous error handler, trying to avoid loops...
403
- if($GLOBALS['_xmlrpcs_prev_ehandler'] != '_xmlrpcs_errorHandler')
404
- {
405
- // NB: this code will NOT work on php < 4.0.2: only 2 params were used for error handlers
406
- if(is_array($GLOBALS['_xmlrpcs_prev_ehandler']))
407
- {
408
- // the following works both with static class methods and plain object methods as error handler
409
- call_user_func_array($GLOBALS['_xmlrpcs_prev_ehandler'], array($errcode, $errstring, $filename, $lineno, $context));
410
- }
411
- else
412
- {
413
- $GLOBALS['_xmlrpcs_prev_ehandler']($errcode, $errstring, $filename, $lineno, $context);
414
- }
415
- }
416
- }
417
- }
418
-
419
- $GLOBALS['_xmlrpc_debuginfo']='';
420
-
421
- /**
422
- * Add a string to the debug info that can be later seralized by the server
423
- * as part of the response message.
424
- * Note that for best compatbility, the debug string should be encoded using
425
- * the $GLOBALS['xmlrpc_internalencoding'] character set.
426
- * @param string $m
427
- * @access public
428
- */
429
- function xmlrpc_debugmsg($m)
430
- {
431
- $GLOBALS['_xmlrpc_debuginfo'] .= $m . "\n";
432
- }
433
-
434
- class xmlrpc_server
435
- {
436
- /**
437
- * Array defining php functions exposed as xmlrpc methods by this server
438
- * @access private
439
- */
440
- var $dmap=array();
441
- /**
442
- * Defines how functions in dmap will be invoked: either using an xmlrpc msg object
443
- * or plain php values.
444
- * valid strings are 'xmlrpcvals', 'phpvals' or 'epivals'
445
- */
446
- var $functions_parameters_type='xmlrpcvals';
447
- /**
448
- * Option used for fine-tuning the encoding the php values returned from
449
- * functions registered in the dispatch map when the functions_parameters_types
450
- * member is set to 'phpvals'
451
- * @see php_xmlrpc_encode for a list of values
452
- */
453
- var $phpvals_encoding_options = array( 'auto_dates' );
454
- /// controls wether the server is going to echo debugging messages back to the client as comments in response body. valid values: 0,1,2,3
455
- var $debug = 1;
456
- /**
457
- * Controls behaviour of server when invoked user function throws an exception:
458
- * 0 = catch it and return an 'internal error' xmlrpc response (default)
459
- * 1 = catch it and return an xmlrpc response with the error corresponding to the exception
460
- * 2 = allow the exception to float to the upper layers
461
- */
462
- var $exception_handling = 0;
463
- /**
464
- * When set to true, it will enable HTTP compression of the response, in case
465
- * the client has declared its support for compression in the request.
466
- */
467
- var $compress_response = false;
468
- /**
469
- * List of http compression methods accepted by the server for requests.
470
- * NB: PHP supports deflate, gzip compressions out of the box if compiled w. zlib
471
- */
472
- var $accepted_compression = array();
473
- /// shall we serve calls to system.* methods?
474
- var $allow_system_funcs = true;
475
- /// list of charset encodings natively accepted for requests
476
- var $accepted_charset_encodings = array();
477
- /**
478
- * charset encoding to be used for response.
479
- * NB: if we can, we will convert the generated response from internal_encoding to the intended one.
480
- * can be: a supported xml encoding (only UTF-8 and ISO-8859-1 at present, unless mbstring is enabled),
481
- * null (leave unspecified in response, convert output stream to US_ASCII),
482
- * 'default' (use xmlrpc library default as specified in xmlrpc.inc, convert output stream if needed),
483
- * or 'auto' (use client-specified charset encoding or same as request if request headers do not specify it (unless request is US-ASCII: then use library default anyway).
484
- * NB: pretty dangerous if you accept every charset and do not have mbstring enabled)
485
- */
486
- var $response_charset_encoding = '';
487
- /**
488
- * Storage for internal debug info
489
- * @access private
490
- */
491
- var $debug_info = '';
492
- /**
493
- * Extra data passed at runtime to method handling functions. Used only by EPI layer
494
- */
495
- var $user_data = null;
496
-
497
- /**
498
- * @param array $dispmap the dispatch map withd efinition of exposed services
499
- * @param boolean $servicenow set to false to prevent the server from runnung upon construction
500
- */
501
- function xmlrpc_server($dispMap=null, $serviceNow=true)
502
- {
503
- // if ZLIB is enabled, let the server by default accept compressed requests,
504
- // and compress responses sent to clients that support them
505
- if(function_exists('gzinflate'))
506
- {
507
- $this->accepted_compression = array('gzip', 'deflate');
508
- $this->compress_response = true;
509
- }
510
-
511
- // by default the xml parser can support these 3 charset encodings
512
- $this->accepted_charset_encodings = array('UTF-8', 'ISO-8859-1', 'US-ASCII');
513
-
514
- // dispMap is a dispatch array of methods
515
- // mapped to function names and signatures
516
- // if a method
517
- // doesn't appear in the map then an unknown
518
- // method error is generated
519
- /* milosch - changed to make passing dispMap optional.
520
- * instead, you can use the class add_to_map() function
521
- * to add functions manually (borrowed from SOAPX4)
522
- */
523
- if($dispMap)
524
- {
525
- $this->dmap = $dispMap;
526
- if($serviceNow)
527
- {
528
- $this->service();
529
- }
530
- }
531
- }
532
-
533
- /**
534
- * Set debug level of server.
535
- * @param integer $in debug lvl: determines info added to xmlrpc responses (as xml comments)
536
- * 0 = no debug info,
537
- * 1 = msgs set from user with debugmsg(),
538
- * 2 = add complete xmlrpc request (headers and body),
539
- * 3 = add also all processing warnings happened during method processing
540
- * (NB: this involves setting a custom error handler, and might interfere
541
- * with the standard processing of the php function exposed as method. In
542
- * particular, triggering an USER_ERROR level error will not halt script
543
- * execution anymore, but just end up logged in the xmlrpc response)
544
- * Note that info added at elevel 2 and 3 will be base64 encoded
545
- * @access public
546
- */
547
- function setDebug($in)
548
- {
549
- $this->debug=$in;
550
- }
551
-
552
- /**
553
- * Return a string with the serialized representation of all debug info
554
- * @param string $charset_encoding the target charset encoding for the serialization
555
- * @return string an XML comment (or two)
556
- */
557
- function serializeDebug($charset_encoding='')
558
- {
559
- // Tough encoding problem: which internal charset should we assume for debug info?
560
- // It might contain a copy of raw data received from client, ie with unknown encoding,
561
- // intermixed with php generated data and user generated data...
562
- // so we split it: system debug is base 64 encoded,
563
- // user debug info should be encoded by the end user using the INTERNAL_ENCODING
564
- $out = '';
565
- if ($this->debug_info != '')
566
- {
567
- $out .= "<!-- SERVER DEBUG INFO (BASE64 ENCODED):\n".base64_encode($this->debug_info)."\n-->\n";
568
- }
569
- if($GLOBALS['_xmlrpc_debuginfo']!='')
570
- {
571
-
572
- $out .= "<!-- DEBUG INFO:\n" . xmlrpc_encode_entitites(str_replace('--', '_-', $GLOBALS['_xmlrpc_debuginfo']), $GLOBALS['xmlrpc_internalencoding'], $charset_encoding) . "\n-->\n";
573
- // NB: a better solution MIGHT be to use CDATA, but we need to insert it
574
- // into return payload AFTER the beginning tag
575
- //$out .= "<![CDATA[ DEBUG INFO:\n\n" . str_replace(']]>', ']_]_>', $GLOBALS['_xmlrpc_debuginfo']) . "\n]]>\n";
576
- }
577
- return $out;
578
- }
579
-
580
- /**
581
- * Execute the xmlrpc request, printing the response
582
- * @param string $data the request body. If null, the http POST request will be examined
583
- * @return xmlrpcresp the response object (usually not used by caller...)
584
- * @access public
585
- */
586
- function service($data=null, $return_payload=false)
587
- {
588
- if ($data === null)
589
- {
590
- // workaround for a known bug in php ver. 5.2.2 that broke $HTTP_RAW_POST_DATA
591
- $ver = phpversion();
592
- if ($ver[0] >= 5)
593
- {
594
- $data = file_get_contents('php://input');
595
- }
596
- else
597
- {
598
- $data = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
599
- }
600
- }
601
- $raw_data = $data;
602
-
603
- // reset internal debug info
604
- $this->debug_info = '';
605
-
606
- // Echo back what we received, before parsing it
607
- if($this->debug > 1)
608
- {
609
- $this->debugmsg("+++GOT+++\n" . $data . "\n+++END+++");
610
- }
611
-
612
- $r = $this->parseRequestHeaders($data, $req_charset, $resp_charset, $resp_encoding);
613
- if (!$r)
614
- {
615
- $r=$this->parseRequest($data, $req_charset);
616
- }
617
-
618
- // save full body of request into response, for more debugging usages
619
- $r->raw_data = $raw_data;
620
-
621
- if($this->debug > 2 && $GLOBALS['_xmlrpcs_occurred_errors'])
622
- {
623
- $this->debugmsg("+++PROCESSING ERRORS AND WARNINGS+++\n" .
624
- $GLOBALS['_xmlrpcs_occurred_errors'] . "+++END+++");
625
- }
626
-
627
- $payload=$this->xml_header($resp_charset);
628
- if($this->debug > 0)
629
- {
630
- $payload = $payload . $this->serializeDebug($resp_charset);
631
- }
632
-
633
- // G. Giunta 2006-01-27: do not create response serialization if it has
634
- // already happened. Helps building json magic
635
- if (empty($r->payload))
636
- {
637
- $r->serialize($resp_charset);
638
- }
639
- $payload = $payload . $r->payload;
640
-
641
- if ($return_payload)
642
- {
643
- return $payload;
644
- }
645
-
646
- // if we get a warning/error that has output some text before here, then we cannot
647
- // add a new header. We cannot say we are sending xml, either...
648
- if(!headers_sent())
649
- {
650
- header('Content-Type: '.$r->content_type);
651
- // we do not know if client actually told us an accepted charset, but if he did
652
- // we have to tell him what we did
653
- header("Vary: Accept-Charset");
654
-
655
- // http compression of output: only
656
- // if we can do it, and we want to do it, and client asked us to,
657
- // and php ini settings do not force it already
658
- $php_no_self_compress = !ini_get('zlib.output_compression') && (ini_get('output_handler') != 'ob_gzhandler');
659
- if($this->compress_response && function_exists('gzencode') && $resp_encoding != ''
660
- && $php_no_self_compress)
661
- {
662
- if(strpos($resp_encoding, 'gzip') !== false)
663
- {
664
- $payload = gzencode($payload);
665
- header("Content-Encoding: gzip");
666
- header("Vary: Accept-Encoding");
667
- }
668
- elseif (strpos($resp_encoding, 'deflate') !== false)
669
- {
670
- $payload = gzcompress($payload);
671
- header("Content-Encoding: deflate");
672
- header("Vary: Accept-Encoding");
673
- }
674
- }
675
-
676
- // do not ouput content-length header if php is compressing output for us:
677
- // it will mess up measurements
678
- if($php_no_self_compress)
679
- {
680
- header('Content-Length: ' . (int)strlen($payload));
681
- }
682
- }
683
- else
684
- {
685
- error_log('XML-RPC: '.__METHOD__.': http headers already sent before response is fully generated. Check for php warning or error messages');
686
- }
687
-
688
- print $payload;
689
-
690
- // return request, in case subclasses want it
691
- return $r;
692
- }
693
-
694
- /**
695
- * Add a method to the dispatch map
696
- * @param string $methodname the name with which the method will be made available
697
- * @param string $function the php function that will get invoked
698
- * @param array $sig the array of valid method signatures
699
- * @param string $doc method documentation
700
- * @param array $sigdoc the array of valid method signatures docs (one string per param, one for return type)
701
- * @access public
702
- */
703
- function add_to_map($methodname,$function,$sig=null,$doc=false,$sigdoc=false)
704
- {
705
- $this->dmap[$methodname] = array(
706
- 'function' => $function,
707
- 'docstring' => $doc
708
- );
709
- if ($sig)
710
- {
711
- $this->dmap[$methodname]['signature'] = $sig;
712
- }
713
- if ($sigdoc)
714
- {
715
- $this->dmap[$methodname]['signature_docs'] = $sigdoc;
716
- }
717
- }
718
-
719
- /**
720
- * Verify type and number of parameters received against a list of known signatures
721
- * @param array $in array of either xmlrpcval objects or xmlrpc type definitions
722
- * @param array $sig array of known signatures to match against
723
- * @access private
724
- */
725
- function verifySignature($in, $sig)
726
- {
727
- // check each possible signature in turn
728
- if (is_object($in))
729
- {
730
- $numParams = $in->getNumParams();
731
- }
732
- else
733
- {
734
- $numParams = count($in);
735
- }
736
- foreach($sig as $cursig)
737
- {
738
- if(count($cursig)==$numParams+1)
739
- {
740
- $itsOK=1;
741
- for($n=0; $n<$numParams; $n++)
742
- {
743
- if (is_object($in))
744
- {
745
- $p=$in->getParam($n);
746
- if($p->kindOf() == 'scalar')
747
- {
748
- $pt=$p->scalartyp();
749
- }
750
- else
751
- {
752
- $pt=$p->kindOf();
753
- }
754
- }
755
- else
756
- {
757
- $pt= $in[$n] == 'i4' ? 'int' : strtolower($in[$n]); // dispatch maps never use i4...
758
- }
759
-
760
- // param index is $n+1, as first member of sig is return type
761
- if($pt != $cursig[$n+1] && $cursig[$n+1] != $GLOBALS['xmlrpcValue'])
762
- {
763
- $itsOK=0;
764
- $pno=$n+1;
765
- $wanted=$cursig[$n+1];
766
- $got=$pt;
767
- break;
768
- }
769
- }
770
- if($itsOK)
771
- {
772
- return array(1,'');
773
- }
774
- }
775
- }
776
- if(isset($wanted))
777
- {
778
- return array(0, "Wanted ${wanted}, got ${got} at param ${pno}");
779
- }
780
- else
781
- {
782
- return array(0, "No method signature matches number of parameters");
783
- }
784
- }
785
-
786
- /**
787
- * Parse http headers received along with xmlrpc request. If needed, inflate request
788
- * @return null on success or an xmlrpcresp
789
- * @access private
790
- */
791
- function parseRequestHeaders(&$data, &$req_encoding, &$resp_encoding, &$resp_compression)
792
- {
793
- // check if $_SERVER is populated: it might have been disabled via ini file
794
- // (this is true even when in CLI mode)
795
- if (count($_SERVER) == 0)
796
- {
797
- error_log('XML-RPC: '.__METHOD__.': cannot parse request headers as $_SERVER is not populated');
798
- }
799
-
800
- if($this->debug > 1)
801
- {
802
- if(function_exists('getallheaders'))
803
- {
804
- $this->debugmsg(''); // empty line
805
- foreach(getallheaders() as $name => $val)
806
- {
807
- $this->debugmsg("HEADER: $name: $val");
808
- }
809
- }
810
-
811
- }
812
-
813
- if(isset($_SERVER['HTTP_CONTENT_ENCODING']))
814
- {
815
- $content_encoding = str_replace('x-', '', $_SERVER['HTTP_CONTENT_ENCODING']);
816
- }
817
- else
818
- {
819
- $content_encoding = '';
820
- }
821
-
822
- // check if request body has been compressed and decompress it
823
- if($content_encoding != '' && strlen($data))
824
- {
825
- if($content_encoding == 'deflate' || $content_encoding == 'gzip')
826
- {
827
- // if decoding works, use it. else assume data wasn't gzencoded
828
- if(function_exists('gzinflate') && in_array($content_encoding, $this->accepted_compression))
829
- {
830
- if($content_encoding == 'deflate' && $degzdata = @gzuncompress($data))
831
- {
832
- $data = $degzdata;
833
- if($this->debug > 1)
834
- {
835
- $this->debugmsg("\n+++INFLATED REQUEST+++[".strlen($data)." chars]+++\n" . $data . "\n+++END+++");
836
- }
837
- }
838
- elseif($content_encoding == 'gzip' && $degzdata = @gzinflate(substr($data, 10)))
839
- {
840
- $data = $degzdata;
841
- if($this->debug > 1)
842
- $this->debugmsg("+++INFLATED REQUEST+++[".strlen($data)." chars]+++\n" . $data . "\n+++END+++");
843
- }
844
- else
845
- {
846
- $r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['server_decompress_fail'], $GLOBALS['xmlrpcstr']['server_decompress_fail']);
847
- return $r;
848
- }
849
- }
850
- else
851
- {
852
- //error_log('The server sent deflated data. Your php install must have the Zlib extension compiled in to support this.');
853
- $r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['server_cannot_decompress'], $GLOBALS['xmlrpcstr']['server_cannot_decompress']);
854
- return $r;
855
- }
856
- }
857
- }
858
-
859
- // check if client specified accepted charsets, and if we know how to fulfill
860
- // the request
861
- if ($this->response_charset_encoding == 'auto')
862
- {
863
- $resp_encoding = '';
864
- if (isset($_SERVER['HTTP_ACCEPT_CHARSET']))
865
- {
866
- // here we should check if we can match the client-requested encoding
867
- // with the encodings we know we can generate.
868
- /// @todo we should parse q=0.x preferences instead of getting first charset specified...
869
- $client_accepted_charsets = explode(',', strtoupper($_SERVER['HTTP_ACCEPT_CHARSET']));
870
- // Give preference to internal encoding
871
- $known_charsets = array($GLOBALS['xmlrpc_internalencoding'], 'UTF-8', 'ISO-8859-1', 'US-ASCII');
872
- foreach ($known_charsets as $charset)
873
- {
874
- foreach ($client_accepted_charsets as $accepted)
875
- if (strpos($accepted, $charset) === 0)
876
- {
877
- $resp_encoding = $charset;
878
- break;
879
- }
880
- if ($resp_encoding)
881
- break;
882
- }
883
- }
884
- }
885
- else
886
- {
887
- $resp_encoding = $this->response_charset_encoding;
888
- }
889
-
890
- if (isset($_SERVER['HTTP_ACCEPT_ENCODING']))
891
- {
892
- $resp_compression = $_SERVER['HTTP_ACCEPT_ENCODING'];
893
- }
894
- else
895
- {
896
- $resp_compression = '';
897
- }
898
-
899
- // 'guestimate' request encoding
900
- /// @todo check if mbstring is enabled and automagic input conversion is on: it might mingle with this check???
901
- $req_encoding = guess_encoding(isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : '',
902
- $data);
903
-
904
- return null;
905
- }
906
-
907
- /**
908
- * Parse an xml chunk containing an xmlrpc request and execute the corresponding
909
- * php function registered with the server
910
- * @param string $data the xml request
911
- * @param string $req_encoding (optional) the charset encoding of the xml request
912
- * @return xmlrpcresp
913
- * @access private
914
- */
915
- function parseRequest($data, $req_encoding='')
916
- {
917
- // 2005/05/07 commented and moved into caller function code
918
- //if($data=='')
919
- //{
920
- // $data=$GLOBALS['HTTP_RAW_POST_DATA'];
921
- //}
922
-
923
- // G. Giunta 2005/02/13: we do NOT expect to receive html entities
924
- // so we do not try to convert them into xml character entities
925
- //$data = xmlrpc_html_entity_xlate($data);
926
-
927
- $GLOBALS['_xh']=array();
928
- $GLOBALS['_xh']['ac']='';
929
- $GLOBALS['_xh']['stack']=array();
930
- $GLOBALS['_xh']['valuestack'] = array();
931
- $GLOBALS['_xh']['params']=array();
932
- $GLOBALS['_xh']['pt']=array();
933
- $GLOBALS['_xh']['isf']=0;
934
- $GLOBALS['_xh']['isf_reason']='';
935
- $GLOBALS['_xh']['method']=false; // so we can check later if we got a methodname or not
936
- $GLOBALS['_xh']['rt']='';
937
-
938
- // decompose incoming XML into request structure
939
- if ($req_encoding != '')
940
- {
941
- if (!in_array($req_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
942
- // the following code might be better for mb_string enabled installs, but
943
- // makes the lib about 200% slower...
944
- //if (!is_valid_charset($req_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
945
- {
946
- error_log('XML-RPC: '.__METHOD__.': invalid charset encoding of received request: '.$req_encoding);
947
- $req_encoding = $GLOBALS['xmlrpc_defencoding'];
948
- }
949
- /// @BUG this will fail on PHP 5 if charset is not specified in the xml prologue,
950
- // the encoding is not UTF8 and there are non-ascii chars in the text...
951
- /// @todo use an ampty string for php 5 ???
952
- $parser = xml_parser_create($req_encoding);
953
- }
954
- else
955
- {
956
- $parser = xml_parser_create();
957
- }
958
-
959
- xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
960
- // G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell
961
- // the xml parser to give us back data in the expected charset
962
- // What if internal encoding is not in one of the 3 allowed?
963
- // we use the broadest one, ie. utf8
964
- // This allows to send data which is native in various charset,
965
- // by extending xmlrpc_encode_entitites() and setting xmlrpc_internalencoding
966
- if (!in_array($GLOBALS['xmlrpc_internalencoding'], array('UTF-8', 'ISO-8859-1', 'US-ASCII')))
967
- {
968
- xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
969
- }
970
- else
971
- {
972
- xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
973
- }
974
-
975
- if ($this->functions_parameters_type != 'xmlrpcvals')
976
- xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee_fast');
977
- else
978
- xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');
979
- xml_set_character_data_handler($parser, 'xmlrpc_cd');
980
- xml_set_default_handler($parser, 'xmlrpc_dh');
981
- if(!xml_parse($parser, $data, 1))
982
- {
983
- // return XML error as a faultCode
984
- $r=new xmlrpcresp(0,
985
- $GLOBALS['xmlrpcerrxml']+xml_get_error_code($parser),
986
- sprintf('XML error: %s at line %d, column %d',
987
- xml_error_string(xml_get_error_code($parser)),
988
- xml_get_current_line_number($parser), xml_get_current_column_number($parser)));
989
- xml_parser_free($parser);
990
- }
991
- elseif ($GLOBALS['_xh']['isf'])
992
- {
993
- xml_parser_free($parser);
994
- $r=new xmlrpcresp(0,
995
- $GLOBALS['xmlrpcerr']['invalid_request'],
996
- $GLOBALS['xmlrpcstr']['invalid_request'] . ' ' . $GLOBALS['_xh']['isf_reason']);
997
- }
998
- else
999
- {
1000
- xml_parser_free($parser);
1001
- // small layering violation in favor of speed and memory usage:
1002
- // we should allow the 'execute' method handle this, but in the
1003
- // most common scenario (xmlrpcvals type server with some methods
1004
- // registered as phpvals) that would mean a useless encode+decode pass
1005
- if ($this->functions_parameters_type != 'xmlrpcvals' || (isset($this->dmap[$GLOBALS['_xh']['method']]['parameters_type']) && ($this->dmap[$GLOBALS['_xh']['method']]['parameters_type'] == 'phpvals')))
1006
- {
1007
- if($this->debug > 1)
1008
- {
1009
- $this->debugmsg("\n+++PARSED+++\n".var_export($GLOBALS['_xh']['params'], true)."\n+++END+++");
1010
- }
1011
- $r = $this->execute($GLOBALS['_xh']['method'], $GLOBALS['_xh']['params'], $GLOBALS['_xh']['pt']);
1012
- }
1013
- else
1014
- {
1015
- // build an xmlrpcmsg object with data parsed from xml
1016
- $m=new xmlrpcmsg($GLOBALS['_xh']['method']);
1017
- // now add parameters in
1018
- for($i=0; $i<count($GLOBALS['_xh']['params']); $i++)
1019
- {
1020
- $m->addParam($GLOBALS['_xh']['params'][$i]);
1021
- }
1022
-
1023
- if($this->debug > 1)
1024
- {
1025
- $this->debugmsg("\n+++PARSED+++\n".var_export($m, true)."\n+++END+++");
1026
- }
1027
- $r = $this->execute($m);
1028
- }
1029
- }
1030
- return $r;
1031
- }
1032
-
1033
- /**
1034
- * Execute a method invoked by the client, checking parameters used
1035
- * @param mixed $m either an xmlrpcmsg obj or a method name
1036
- * @param array $params array with method parameters as php types (if m is method name only)
1037
- * @param array $paramtypes array with xmlrpc types of method parameters (if m is method name only)
1038
- * @return xmlrpcresp
1039
- * @access private
1040
- */
1041
- function execute($m, $params=null, $paramtypes=null)
1042
- {
1043
- if (is_object($m))
1044
- {
1045
- $methName = $m->method();
1046
- }
1047
- else
1048
- {
1049
- $methName = $m;
1050
- }
1051
- $sysCall = $this->allow_system_funcs && (strpos($methName, "system.") === 0);
1052
- $dmap = $sysCall ? $GLOBALS['_xmlrpcs_dmap'] : $this->dmap;
1053
-
1054
- if(!isset($dmap[$methName]['function']))
1055
- {
1056
- // No such method
1057
- return new xmlrpcresp(0,
1058
- $GLOBALS['xmlrpcerr']['unknown_method'],
1059
- $GLOBALS['xmlrpcstr']['unknown_method']);
1060
- }
1061
-
1062
- // Check signature
1063
- if(isset($dmap[$methName]['signature']))
1064
- {
1065
- $sig = $dmap[$methName]['signature'];
1066
- if (is_object($m))
1067
- {
1068
- list($ok, $errstr) = $this->verifySignature($m, $sig);
1069
- }
1070
- else
1071
- {
1072
- list($ok, $errstr) = $this->verifySignature($paramtypes, $sig);
1073
- }
1074
- if(!$ok)
1075
- {
1076
- // Didn't match.
1077
- return new xmlrpcresp(
1078
- 0,
1079
- $GLOBALS['xmlrpcerr']['incorrect_params'],
1080
- $GLOBALS['xmlrpcstr']['incorrect_params'] . ": ${errstr}"
1081
- );
1082
- }
1083
- }
1084
-
1085
- $func = $dmap[$methName]['function'];
1086
- // let the 'class::function' syntax be accepted in dispatch maps
1087
- if(is_string($func) && strpos($func, '::'))
1088
- {
1089
- $func = explode('::', $func);
1090
- }
1091
- // verify that function to be invoked is in fact callable
1092
- if(!is_callable($func))
1093
- {
1094
- error_log("XML-RPC: ".__METHOD__.": function $func registered as method handler is not callable");
1095
- return new xmlrpcresp(
1096
- 0,
1097
- $GLOBALS['xmlrpcerr']['server_error'],
1098
- $GLOBALS['xmlrpcstr']['server_error'] . ": no function matches method"
1099
- );
1100
- }
1101
-
1102
- // If debug level is 3, we should catch all errors generated during
1103
- // processing of user function, and log them as part of response
1104
- if($this->debug > 2)
1105
- {
1106
- $GLOBALS['_xmlrpcs_prev_ehandler'] = set_error_handler('_xmlrpcs_errorHandler');
1107
- }
1108
- try
1109
- {
1110
- // Allow mixed-convention servers
1111
- if (is_object($m))
1112
- {
1113
- if($sysCall)
1114
- {
1115
- $r = call_user_func($func, $this, $m);
1116
- }
1117
- else
1118
- {
1119
- $r = call_user_func($func, $m);
1120
- }
1121
- if (!is_a($r, 'xmlrpcresp'))
1122
- {
1123
- error_log("XML-RPC: ".__METHOD__.": function $func registered as method handler does not return an xmlrpcresp object");
1124
- if (is_a($r, 'xmlrpcval'))
1125
- {
1126
- $r = new xmlrpcresp($r);
1127
- }
1128
- else
1129
- {
1130
- $r = new xmlrpcresp(
1131
- 0,
1132
- $GLOBALS['xmlrpcerr']['server_error'],
1133
- $GLOBALS['xmlrpcstr']['server_error'] . ": function does not return xmlrpcresp object"
1134
- );
1135
- }
1136
- }
1137
- }
1138
- else
1139
- {
1140
- // call a 'plain php' function
1141
- if($sysCall)
1142
- {
1143
- array_unshift($params, $this);
1144
- $r = call_user_func_array($func, $params);
1145
- }
1146
- else
1147
- {
1148
- // 3rd API convention for method-handling functions: EPI-style
1149
- if ($this->functions_parameters_type == 'epivals')
1150
- {
1151
- $r = call_user_func_array($func, array($methName, $params, $this->user_data));
1152
- // mimic EPI behaviour: if we get an array that looks like an error, make it
1153
- // an eror response
1154
- if (is_array($r) && array_key_exists('faultCode', $r) && array_key_exists('faultString', $r))
1155
- {
1156
- $r = new xmlrpcresp(0, (integer)$r['faultCode'], (string)$r['faultString']);
1157
- }
1158
- else
1159
- {
1160
- // functions using EPI api should NOT return resp objects,
1161
- // so make sure we encode the return type correctly
1162
- $r = new xmlrpcresp(php_xmlrpc_encode($r, array('extension_api')));
1163
- }
1164
- }
1165
- else
1166
- {
1167
- $r = call_user_func_array($func, $params);
1168
- }
1169
- }
1170
- // the return type can be either an xmlrpcresp object or a plain php value...
1171
- if (!is_a($r, 'xmlrpcresp'))
1172
- {
1173
- // what should we assume here about automatic encoding of datetimes
1174
- // and php classes instances???
1175
- $r = new xmlrpcresp(php_xmlrpc_encode($r, $this->phpvals_encoding_options));
1176
- }
1177
- }
1178
- }
1179
- catch(Exception $e)
1180
- {
1181
- // (barring errors in the lib) an uncatched exception happened
1182
- // in the called function, we wrap it in a proper error-response
1183
- switch($this->exception_handling)
1184
- {
1185
- case 2:
1186
- throw $e;
1187
- break;
1188
- case 1:
1189
- $r = new xmlrpcresp(0, $e->getCode(), $e->getMessage());
1190
- break;
1191
- default:
1192
- $r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['server_error'], $GLOBALS['xmlrpcstr']['server_error']);
1193
- }
1194
- }
1195
- if($this->debug > 2)
1196
- {
1197
- // note: restore the error handler we found before calling the
1198
- // user func, even if it has been changed inside the func itself
1199
- if($GLOBALS['_xmlrpcs_prev_ehandler'])
1200
- {
1201
- set_error_handler($GLOBALS['_xmlrpcs_prev_ehandler']);
1202
- }
1203
- else
1204
- {
1205
- restore_error_handler();
1206
- }
1207
- }
1208
- return $r;
1209
- }
1210
-
1211
- /**
1212
- * add a string to the 'internal debug message' (separate from 'user debug message')
1213
- * @param string $strings
1214
- * @access private
1215
- */
1216
- function debugmsg($string)
1217
- {
1218
- $this->debug_info .= $string."\n";
1219
- }
1220
-
1221
- /**
1222
- * @access private
1223
- */
1224
- function xml_header($charset_encoding='')
1225
- {
1226
- if ($charset_encoding != '')
1227
- {
1228
- return "<?xml version=\"1.0\" encoding=\"$charset_encoding\"?" . ">\n";
1229
- }
1230
- else
1231
- {
1232
- return "<?xml version=\"1.0\"?" . ">\n";
1233
- }
1234
- }
1235
-
1236
- /**
1237
- * A debugging routine: just echoes back the input packet as a string value
1238
- * DEPRECATED!
1239
- */
1240
- function echoInput()
1241
- {
1242
- $r=new xmlrpcresp(new xmlrpcval( "'Aha said I: '" . $GLOBALS['HTTP_RAW_POST_DATA'], 'string'));
1243
- print $r->serialize();
1244
- }
1245
- }
1246
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/vendor/infusionsoft/xmlrpc/lib/xmlrpc.inc ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // by Edd Dumbill (C) 1999-2002
3
+ // <edd@usefulinc.com>
4
+
5
+ // Copyright (c) 1999,2000,2002 Edd Dumbill.
6
+ // All rights reserved.
7
+ //
8
+ // Redistribution and use in source and binary forms, with or without
9
+ // modification, are permitted provided that the following conditions
10
+ // are met:
11
+ //
12
+ // * Redistributions of source code must retain the above copyright
13
+ // notice, this list of conditions and the following disclaimer.
14
+ //
15
+ // * Redistributions in binary form must reproduce the above
16
+ // copyright notice, this list of conditions and the following
17
+ // disclaimer in the documentation and/or other materials provided
18
+ // with the distribution.
19
+ //
20
+ // * Neither the name of the "XML-RPC for PHP" nor the names of its
21
+ // contributors may be used to endorse or promote products derived
22
+ // from this software without specific prior written permission.
23
+ //
24
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ // REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30
+ // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
31
+ // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32
+ // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
33
+ // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34
+ // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
35
+ // OF THE POSSIBILITY OF SUCH DAMAGE.
36
+
37
+ /******************************************************************************
38
+ *
39
+ * *** DEPRECATED ***
40
+ *
41
+ * This file is only used to insure backwards compatibility
42
+ * with the API of the library <= rev. 3
43
+ *
44
+ * If it is included, the library will work without any further autoloading
45
+ *****************************************************************************/
46
+
47
+ include_once(__DIR__.'/../src/PhpXmlRpc.php');
48
+ include_once(__DIR__.'/../src/Value.php');
49
+ include_once(__DIR__.'/../src/Request.php');
50
+ include_once(__DIR__.'/../src/Response.php');
51
+ include_once(__DIR__.'/../src/Client.php');
52
+ include_once(__DIR__.'/../src/Encoder.php');
53
+ include_once(__DIR__.'/../src/Helper/Charset.php');
54
+ include_once(__DIR__.'/../src/Helper/Date.php');
55
+ include_once(__DIR__.'/../src/Helper/Http.php');
56
+ include_once(__DIR__.'/../src/Helper/Logger.php');
57
+ include_once(__DIR__.'/../src/Helper/XMLParser.php');
58
+
59
+
60
+ /* Expose the global variables which used to be defined */
61
+ PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding = 'ISO-8859-1'; // old default
62
+ PhpXmlRpc\PhpXmlRpc::exportGlobals();
63
+
64
+ /* some stuff deprecated enough that we do not want to put it in the new lib version */
65
+
66
+ /// @deprecated
67
+ $GLOBALS['xmlEntities'] = array(
68
+ 'amp' => '&',
69
+ 'quot' => '"',
70
+ 'lt' => '<',
71
+ 'gt' => '>',
72
+ 'apos' => "'"
73
+ );
74
+
75
+ // formulate backslashes for escaping regexp
76
+ // Not in use anymore since 2.0. Shall we remove it?
77
+ /// @deprecated
78
+ $GLOBALS['xmlrpc_backslash'] = chr(92).chr(92);
79
+
80
+ /* Expose with the old names the classes which have been namespaced */
81
+
82
+ class xmlrpcval extends PhpXmlRpc\Value
83
+ {
84
+ /**
85
+ * @deprecated
86
+ * @param xmlrpcval $o
87
+ * @return string
88
+ */
89
+ public function serializeval($o)
90
+ {
91
+ // add check? slower, but helps to avoid recursion in serializing broken xmlrpcvals...
92
+ //if (is_object($o) && (get_class($o) == 'xmlrpcval' || is_subclass_of($o, 'xmlrpcval')))
93
+ //{
94
+ $ar = $o->me;
95
+ $val = reset($ar);
96
+ $typ = key($ar);
97
+
98
+ return '<value>' . $this->serializedata($typ, $val) . "</value>\n";
99
+ //}
100
+ }
101
+
102
+ /**
103
+ * @deprecated this code looks like it is very fragile and has not been fixed
104
+ * for a long long time. Shall we remove it for 2.0?
105
+ */
106
+ public function getval()
107
+ {
108
+ // UNSTABLE
109
+ $b = reset($this->me);
110
+ $a = key($this->me);
111
+ // contributed by I Sofer, 2001-03-24
112
+ // add support for nested arrays to scalarval
113
+ // i've created a new method here, so as to
114
+ // preserve back compatibility
115
+
116
+ if (is_array($b)) {
117
+ foreach($b as $id => $cont) {
118
+ $b[$id] = $cont->scalarval();
119
+ }
120
+ }
121
+
122
+ // add support for structures directly encoding php objects
123
+ if (is_object($b)) {
124
+ $t = get_object_vars($b);
125
+ foreach($t as $id => $cont) {
126
+ $t[$id] = $cont->scalarval();
127
+ }
128
+ foreach($t as $id => $cont) {
129
+ @$b->$id = $cont;
130
+ }
131
+ }
132
+ // end contrib
133
+ return $b;
134
+ }
135
+
136
+ /// reset functionality added by parent class: same as it would happen if no interface was declared
137
+ public function count()
138
+ {
139
+ return 1;
140
+ }
141
+
142
+ /// reset functionality added by parent class: same as it would happen if no interface was declared
143
+ public function getIterator() {
144
+ return new ArrayIterator($this);
145
+ }
146
+ }
147
+
148
+ class xmlrpcmsg extends PhpXmlRpc\Request
149
+ {
150
+ }
151
+
152
+ class xmlrpcresp extends PhpXmlRpc\Response
153
+ {
154
+ }
155
+
156
+ class xmlrpc_client extends PhpXmlRpc\Client
157
+ {
158
+ }
159
+
160
+ /* Expose as global functions the ones which are now class methods */
161
+
162
+ /// Wrong speling, but we are adamant on backwards compatibility!
163
+ function xmlrpc_encode_entitites($data, $srcEncoding='', $destEncoding='')
164
+ {
165
+ return PhpXmlRpc\Helper\Charset::instance()->encodeEntitites($data, $srcEncoding, $destEncoding);
166
+ }
167
+
168
+ function iso8601_encode($timeT, $utc=0)
169
+ {
170
+ return PhpXmlRpc\Helper\Date::iso8601Encode($timeT, $utc);
171
+ }
172
+
173
+ function iso8601_decode($iDate, $utc=0)
174
+ {
175
+ return PhpXmlRpc\Helper\Date::iso8601Decode($iDate, $utc);
176
+ }
177
+
178
+ function decode_chunked($buffer)
179
+ {
180
+ return PhpXmlRpc\Helper\Http::decodeChunked($buffer);
181
+ }
182
+
183
+ function php_xmlrpc_decode($xmlrpcVal, $options=array())
184
+ {
185
+ $encoder = new PhpXmlRpc\Encoder();
186
+ return $encoder->decode($xmlrpcVal, $options);
187
+ }
188
+
189
+ function php_xmlrpc_encode($phpVal, $options=array())
190
+ {
191
+ $encoder = new PhpXmlRpc\Encoder();
192
+ return $encoder->encode($phpVal, $options);
193
+ }
194
+
195
+ function php_xmlrpc_decode_xml($xmlVal, $options=array())
196
+ {
197
+ $encoder = new PhpXmlRpc\Encoder();
198
+ return $encoder->decodeXml($xmlVal, $options);
199
+ }
200
+
201
+ function guess_encoding($httpHeader='', $xmlChunk='', $encodingPrefs=null)
202
+ {
203
+ return PhpXmlRpc\Helper\XMLParser::guessEncoding($httpHeader, $xmlChunk, $encodingPrefs);
204
+ }
205
+
206
+ function has_encoding($xmlChunk)
207
+ {
208
+ return PhpXmlRpc\Helper\XMLParser::hasEncoding($xmlChunk);
209
+ }
210
+
211
+ function is_valid_charset($encoding, $validList)
212
+ {
213
+ return PhpXmlRpc\Helper\Charset::instance()->isValidCharset($encoding, $validList);
214
+ }
js/build/builder.bundle.js CHANGED
@@ -20692,6 +20692,7 @@ var InlineEditor = function (_Component) {
20692
  inline: true,
20693
  menubar: false,
20694
  paste_as_text: true,
 
20695
  skin: FLBuilder ? false : 'lightgray',
20696
  skin_url: FLBuilder ? false : tinyMCEPreInit.baseURL + '/skins/lightgray/',
20697
  theme: 'modern',
@@ -20813,6 +20814,7 @@ var InlineEditor = function (_Component) {
20813
  }, {
20814
  key: 'onEditorChange',
20815
  value: function onEditorChange(e) {
 
20816
  var target = e.target.bodyElement ? e.target.bodyElement : e.target;
20817
 
20818
  var _getEditorEventVars = this.getEditorEventVars(target),
@@ -20830,9 +20832,9 @@ var InlineEditor = function (_Component) {
20830
  var textarea = settings.find('#fl-field-' + field.name + ' textarea.wp-editor-area');
20831
  var editorId = textarea.attr('id');
20832
  if (textarea.closest('.tmce-active').length) {
20833
- tinymce.get(editorId).setContent(content);
20834
  } else {
20835
- textarea.val(content);
20836
  }
20837
  } else {
20838
  var _textarea = document.createElement('textarea');
@@ -21004,6 +21006,16 @@ var InlineEditor = function (_Component) {
21004
  value: function matchHTML(a, b) {
21005
  return this.cleanHTML(a) === this.cleanHTML(b);
21006
  }
 
 
 
 
 
 
 
 
 
 
21007
  }, {
21008
  key: 'cleanHTML',
21009
  value: function cleanHTML(html) {
20692
  inline: true,
20693
  menubar: false,
20694
  paste_as_text: true,
20695
+ relative_urls: false,
20696
  skin: FLBuilder ? false : 'lightgray',
20697
  skin_url: FLBuilder ? false : tinyMCEPreInit.baseURL + '/skins/lightgray/',
20698
  theme: 'modern',
20814
  }, {
20815
  key: 'onEditorChange',
20816
  value: function onEditorChange(e) {
20817
+
20818
  var target = e.target.bodyElement ? e.target.bodyElement : e.target;
20819
 
20820
  var _getEditorEventVars = this.getEditorEventVars(target),
20832
  var textarea = settings.find('#fl-field-' + field.name + ' textarea.wp-editor-area');
20833
  var editorId = textarea.attr('id');
20834
  if (textarea.closest('.tmce-active').length) {
20835
+ tinymce.get(editorId).setContent(this.fixURLs(content));
20836
  } else {
20837
+ textarea.val(this.fixURLs(content));
20838
  }
20839
  } else {
20840
  var _textarea = document.createElement('textarea');
21006
  value: function matchHTML(a, b) {
21007
  return this.cleanHTML(a) === this.cleanHTML(b);
21008
  }
21009
+ }, {
21010
+ key: 'fixURLs',
21011
+ value: function fixURLs(html) {
21012
+ html = html.replace(/href="[^http#]/g, 'href="' + FLBuilderConfig.homeUrl + '/');
21013
+ html = html.replace(/href="(\.\.\/){1,2}/g, 'href="' + FLBuilderConfig.homeUrl + '/');
21014
+
21015
+ html = html.replace(/src="(\.\.\/){1,2}/g, 'src="' + FLBuilderConfig.homeUrl + '/');
21016
+ html = html.replace(/src="[^http]/g, 'src="' + FLBuilderConfig.homeUrl + '/');
21017
+ return html;
21018
+ }
21019
  }, {
21020
  key: 'cleanHTML',
21021
  value: function cleanHTML(html) {
js/build/builder.bundle.min.js CHANGED
@@ -3,7 +3,7 @@ object-assign
3
  (c) Sindre Sorhus
4
  @license MIT
5
  */
6
- var o=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,a,u=r(e),c=1;c<arguments.length;c++){n=Object(arguments[c]);for(var s in n)i.call(n,s)&&(u[s]=n[s]);if(o){a=o(n);for(var f=0;f<a.length;f++)l.call(n,a[f])&&(u[a[f]]=n[a[f]])}}return u}},function(e,t,n){"use strict";function r(e,t,n,r,i,l,a,u){if(o(t),!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var s=[n,r,i,l,a,u],f=0;c=new Error(t.replace(/%s/g,function(){return s[f++]})),c.name="Invariant Violation"}throw c.framesToPop=1,c}}var o=function(e){};e.exports=r},function(e,t,n){"use strict";var r={};e.exports=r},function(e,t,n){"use strict";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var o=n(0),i=r(o),l=n(7),a=r(l),u=n(15),c=r(u),s=n(16),f=r(s);n(23),a.default.render(i.default.createElement(c.default,null,i.default.createElement(f.default,null)),document.getElementById("fl-ui-root"))},function(e,t,n){"use strict";function r(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=0;r<t;r++)n+="&args[]="+encodeURIComponent(arguments[r+1]);g(!1,"Minified React error #"+e+"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ",n)}function o(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||F}function i(){}function l(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||F}function a(e,t,n){var r=void 0,o={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)I.call(t,r)&&!U.hasOwnProperty(r)&&(o[r]=t[r]);var a=arguments.length-2;if(1===a)o.children=n;else if(1<a){for(var u=Array(a),c=0;c<a;c++)u[c]=arguments[c+2];o.children=u}if(e&&e.defaultProps)for(r in a=e.defaultProps)void 0===o[r]&&(o[r]=a[r]);return{$$typeof:E,type:e,key:i,ref:l,props:o,_owner:R.current}}function u(e){return"object"==typeof e&&null!==e&&e.$$typeof===E}function c(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,function(e){return t[e]})}function s(e,t,n,r){if(D.length){var o=D.pop();return o.result=e,o.keyPrefix=t,o.func=n,o.context=r,o.count=0,o}return{result:e,keyPrefix:t,func:n,context:r,count:0}}function f(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>D.length&&D.push(e)}function d(e,t,n,o){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var l=!1;if(null===e)l=!0;else switch(i){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case E:case _:l=!0}}if(l)return n(o,e,""===t?"."+p(e,0):t),1;if(l=0,t=""===t?".":t+":",Array.isArray(e))for(var a=0;a<e.length;a++){i=e[a];var u=t+p(i,a);l+=d(i,u,n,o)}else if(null===e||void 0===e?u=null:(u=M&&e[M]||e["@@iterator"],u="function"==typeof u?u:null),"function"==typeof u)for(e=u.call(e),a=0;!(i=e.next()).done;)i=i.value,u=t+p(i,a++),l+=d(i,u,n,o);else"object"===i&&(n=""+e,r("31","[object Object]"===n?"object with keys {"+Object.keys(e).join(", ")+"}":n,""));return l}function p(e,t){return"object"==typeof e&&null!==e&&null!=e.key?c(e.key):t.toString(36)}function h(e,t){e.func.call(e.context,t,e.count++)}function m(e,t,n){var r=e.result,o=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?y(e,r,n,k.thatReturnsArgument):null!=e&&(u(e)&&(t=o+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(j,"$&/")+"/")+n,e={$$typeof:E,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}),r.push(e))}function y(e,t,n,r,o){var i="";null!=n&&(i=(""+n).replace(j,"$&/")+"/"),t=s(t,i,r,o),null==e||d(e,"",m,t),f(t)}/** @license React v16.4.2
7
  * react.production.min.js
8
  *
9
  * Copyright (c) 2013-present, Facebook, Inc.
@@ -11,7 +11,7 @@ var o=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,l=Object.pr
11
  * This source code is licensed under the MIT license found in the
12
  * LICENSE file in the root directory of this source tree.
13
  */
14
- var v=n(1),g=n(2),b=n(3),k=n(4),w="function"==typeof Symbol&&Symbol.for,E=w?Symbol.for("react.element"):60103,_=w?Symbol.for("react.portal"):60106,C=w?Symbol.for("react.fragment"):60107,x=w?Symbol.for("react.strict_mode"):60108,T=w?Symbol.for("react.profiler"):60114,S=w?Symbol.for("react.provider"):60109,P=w?Symbol.for("react.context"):60110,N=w?Symbol.for("react.async_mode"):60111,O=w?Symbol.for("react.forward_ref"):60112;w&&Symbol.for("react.timeout");var M="function"==typeof Symbol&&Symbol.iterator,F={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};o.prototype.isReactComponent={},o.prototype.setState=function(e,t){"object"!=typeof e&&"function"!=typeof e&&null!=e&&r("85"),this.updater.enqueueSetState(this,e,t,"setState")},o.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},i.prototype=o.prototype;var L=l.prototype=new i;L.constructor=l,v(L,o.prototype),L.isPureReactComponent=!0;var R={current:null},I=Object.prototype.hasOwnProperty,U={key:!0,ref:!0,__self:!0,__source:!0},j=/\/+/g,D=[],z={Children:{map:function(e,t,n){if(null==e)return e;var r=[];return y(e,r,null,t,n),r},forEach:function(e,t,n){if(null==e)return e;t=s(null,null,t,n),null==e||d(e,"",h,t),f(t)},count:function(e){return null==e?0:d(e,"",k.thatReturnsNull,null)},toArray:function(e){var t=[];return y(e,t,null,k.thatReturnsArgument),t},only:function(e){return u(e)||r("143"),e}},createRef:function(){return{current:null}},Component:o,PureComponent:l,createContext:function(e,t){return void 0===t&&(t=null),e={$$typeof:P,_calculateChangedBits:t,_defaultValue:e,_currentValue:e,_currentValue2:e,_changedBits:0,_changedBits2:0,Provider:null,Consumer:null},e.Provider={$$typeof:S,_context:e},e.Consumer=e},forwardRef:function(e){return{$$typeof:O,render:e}},Fragment:C,StrictMode:x,unstable_AsyncMode:N,unstable_Profiler:T,createElement:a,cloneElement:function(e,t,n){(null===e||void 0===e)&&r("267",e);var o=void 0,i=v({},e.props),l=e.key,a=e.ref,u=e._owner;if(null!=t){void 0!==t.ref&&(a=t.ref,u=R.current),void 0!==t.key&&(l=""+t.key);var c=void 0;e.type&&e.type.defaultProps&&(c=e.type.defaultProps);for(o in t)I.call(t,o)&&!U.hasOwnProperty(o)&&(i[o]=void 0===t[o]&&void 0!==c?c[o]:t[o])}if(1===(o=arguments.length-2))i.children=n;else if(1<o){c=Array(o);for(var s=0;s<o;s++)c[s]=arguments[s+2];i.children=c}return{$$typeof:E,type:e.type,key:l,ref:a,props:i,_owner:u}},createFactory:function(e){var t=a.bind(null,e);return t.type=e,t},isValidElement:u,version:"16.4.2",__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentOwner:R,assign:v}},A={default:z},B=A&&z||A;e.exports=B.default?B.default:B},function(e,t,n){"use strict";function r(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(e){console.error(e)}}r(),e.exports=n(8)},function(e,t,n){"use strict";function r(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=0;r<t;r++)n+="&args[]="+encodeURIComponent(arguments[r+1]);Rr(!1,"Minified React error #"+e+"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ",n)}function o(e,t,n,r,o,i,l,a,u){this._hasCaughtError=!1,this._caughtError=null;var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(e){this._caughtError=e,this._hasCaughtError=!0}}function i(){if(Vr._hasRethrowError){var e=Vr._rethrowError;throw Vr._rethrowError=null,Vr._hasRethrowError=!1,e}}function l(){if(Wr)for(var e in Qr){var t=Qr[e],n=Wr.indexOf(e);if(-1<n||r("96",e),!$r[n]){t.extractEvents||r("97",e),$r[n]=t,n=t.eventTypes;for(var o in n){var i=void 0,l=n[o],u=t,c=o;Kr.hasOwnProperty(c)&&r("99",c),Kr[c]=l;var s=l.phasedRegistrationNames;if(s){for(i in s)s.hasOwnProperty(i)&&a(s[i],u,c);i=!0}else l.registrationName?(a(l.registrationName,u,c),i=!0):i=!1;i||r("98",o,e)}}}}function a(e,t,n){qr[e]&&r("100",e),qr[e]=t,Gr[e]=t.eventTypes[n].dependencies}function u(e){Wr&&r("101"),Wr=Array.prototype.slice.call(e),l()}function c(e){var t,n=!1;for(t in e)if(e.hasOwnProperty(t)){var o=e[t];Qr.hasOwnProperty(t)&&Qr[t]===o||(Qr[t]&&r("102",t),Qr[t]=o,n=!0)}n&&l()}function s(e,t,n,r){t=e.type||"unknown-event",e.currentTarget=Jr(r),Vr.invokeGuardedCallbackAndCatchFirstError(t,n,void 0,e),e.currentTarget=null}function f(e,t){return null==t&&r("30"),null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}function d(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}function p(e,t){if(e){var n=e._dispatchListeners,r=e._dispatchInstances;if(Array.isArray(n))for(var o=0;o<n.length&&!e.isPropagationStopped();o++)s(e,t,n[o],r[o]);else n&&s(e,t,n,r);e._dispatchListeners=null,e._dispatchInstances=null,e.isPersistent()||e.constructor.release(e)}}function h(e){return p(e,!0)}function m(e){return p(e,!1)}function y(e,t){var n=e.stateNode;if(!n)return null;var o=Xr(n);if(!o)return null;n=o[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":(o=!o.disabled)||(e=e.type,o=!("button"===e||"input"===e||"select"===e||"textarea"===e)),e=!o;break e;default:e=!1}return e?null:(n&&"function"!=typeof n&&r("231",t,typeof n),n)}function v(e,t){null!==e&&(eo=f(eo,e)),e=eo,eo=null,e&&(t?d(e,h):d(e,m),eo&&r("95"),Vr.rethrowCaughtError())}function g(e,t,n,r){for(var o=null,i=0;i<$r.length;i++){var l=$r[i];l&&(l=l.extractEvents(e,t,n,r))&&(o=f(o,l))}v(o,!1)}function b(e){if(e[oo])return e[oo];for(;!e[oo];){if(!e.parentNode)return null;e=e.parentNode}return e=e[oo],5===e.tag||6===e.tag?e:null}function k(e){if(5===e.tag||6===e.tag)return e.stateNode;r("33")}function w(e){return e[io]||null}function E(e){do{e=e.return}while(e&&5!==e.tag);return e||null}function _(e,t,n){for(var r=[];e;)r.push(e),e=E(e);for(e=r.length;0<e--;)t(r[e],"captured",n);for(e=0;e<r.length;e++)t(r[e],"bubbled",n)}function C(e,t,n){(t=y(e,n.dispatchConfig.phasedRegistrationNames[t]))&&(n._dispatchListeners=f(n._dispatchListeners,t),n._dispatchInstances=f(n._dispatchInstances,e))}function x(e){e&&e.dispatchConfig.phasedRegistrationNames&&_(e._targetInst,C,e)}function T(e){if(e&&e.dispatchConfig.phasedRegistrationNames){var t=e._targetInst;t=t?E(t):null,_(t,C,e)}}function S(e,t,n){e&&n&&n.dispatchConfig.registrationName&&(t=y(e,n.dispatchConfig.registrationName))&&(n._dispatchListeners=f(n._dispatchListeners,t),n._dispatchInstances=f(n._dispatchInstances,e))}function P(e){e&&e.dispatchConfig.registrationName&&S(e._targetInst,null,e)}function N(e){d(e,x)}function O(e,t,n,r){if(n&&r)e:{for(var o=n,i=r,l=0,a=o;a;a=E(a))l++;a=0;for(var u=i;u;u=E(u))a++;for(;0<l-a;)o=E(o),l--;for(;0<a-l;)i=E(i),a--;for(;l--;){if(o===i||o===i.alternate)break e;o=E(o),i=E(i)}o=null}else o=null;for(i=o,o=[];n&&n!==i&&(null===(l=n.alternate)||l!==i);)o.push(n),n=E(n);for(n=[];r&&r!==i&&(null===(l=r.alternate)||l!==i);)n.push(r),r=E(r);for(r=0;r<o.length;r++)S(o[r],"bubbled",e);for(e=n.length;0<e--;)S(n[e],"captured",t)}function M(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n["ms"+e]="MS"+t,n["O"+e]="o"+t.toLowerCase(),n}function F(e){if(co[e])return co[e];if(!uo[e])return e;var t,n=uo[e];for(t in n)if(n.hasOwnProperty(t)&&t in so)return co[e]=n[t];return e}function L(){return!vo&&Ur.canUseDOM&&(vo="textContent"in document.documentElement?"textContent":"innerText"),vo}function R(){if(go._fallbackText)return go._fallbackText;var e,t,n=go._startText,r=n.length,o=I(),i=o.length;for(e=0;e<r&&n[e]===o[e];e++);var l=r-e;for(t=1;t<=l&&n[r-t]===o[i-t];t++);return go._fallbackText=o.slice(e,1<t?1-t:void 0),go._fallbackText}function I(){return"value"in go._root?go._root.value:go._root[L()]}function U(e,t,n,r){this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n,e=this.constructor.Interface;for(var o in e)e.hasOwnProperty(o)&&((t=e[o])?this[o]=t(n):"target"===o?this.target=r:this[o]=n[o]);return this.isDefaultPrevented=(null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue)?Dr.thatReturnsTrue:Dr.thatReturnsFalse,this.isPropagationStopped=Dr.thatReturnsFalse,this}function j(e,t,n,r){if(this.eventPool.length){var o=this.eventPool.pop();return this.call(o,e,t,n,r),o}return new this(e,t,n,r)}function D(e){e instanceof this||r("223"),e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function z(e){e.eventPool=[],e.getPooled=j,e.release=D}function A(e,t){switch(e){case"keyup":return-1!==_o.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function B(e){return e=e.detail,"object"==typeof e&&"data"in e?e.data:null}function H(e,t){switch(e){case"compositionend":return B(t);case"keypress":return 32!==t.which?null:(Oo=!0,Po);case"textInput":return e=t.data,e===Po&&Oo?null:e;default:return null}}function V(e,t){if(Mo)return"compositionend"===e||!Co&&A(e,t)?(e=R(),go._root=null,go._startText=null,go._fallbackText=null,Mo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return So?null:t.data;default:return null}}function W(e){if(e=Zr(e)){Lo&&"function"==typeof Lo.restoreControlledState||r("194");var t=Xr(e.stateNode);Lo.restoreControlledState(e.stateNode,e.type,t)}}function Q(e){Io?Uo?Uo.push(e):Uo=[e]:Io=e}function $(){return null!==Io||null!==Uo}function K(){if(Io){var e=Io,t=Uo;if(Uo=Io=null,W(e),t)for(e=0;e<t.length;e++)W(t[e])}}function q(e,t){return e(t)}function G(e,t,n){return e(t,n)}function Y(){}function X(e,t){if(Do)return e(t);Do=!0;try{return q(e,t)}finally{Do=!1,$()&&(Y(),K())}}function Z(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!zo[e.type]:"textarea"===t}function J(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}function ee(e,t){return!(!Ur.canUseDOM||t&&!("addEventListener"in document))&&(e="on"+e,t=e in document,t||(t=document.createElement("div"),t.setAttribute(e,"return;"),t="function"==typeof t[e]),t)}function te(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function ne(e){var t=te(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,i.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function re(e){e._valueTracker||(e._valueTracker=ne(e))}function oe(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=te(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function ie(e){return null===e||void 0===e?null:(e=Zo&&e[Zo]||e["@@iterator"],"function"==typeof e?e:null)}function le(e){var t=e.type;if("function"==typeof t)return t.displayName||t.name;if("string"==typeof t)return t;switch(t){case Go:return"AsyncMode";case qo:return"Context.Consumer";case Wo:return"ReactFragment";case Vo:return"ReactPortal";case $o:return"Profiler("+e.pendingProps.id+")";case Ko:return"Context.Provider";case Qo:return"StrictMode";case Xo:return"Timeout"}if("object"==typeof t&&null!==t)switch(t.$$typeof){case Yo:return e=t.render.displayName||t.render.name||"",""!==e?"ForwardRef("+e+")":"ForwardRef"}return null}function ae(e){var t="";do{e:switch(e.tag){case 0:case 1:case 2:case 5:var n=e._debugOwner,r=e._debugSource,o=le(e),i=null;n&&(i=le(n)),n=r,o="\n in "+(o||"Unknown")+(n?" (at "+n.fileName.replace(/^.*[\\\/]/,"")+":"+n.lineNumber+")":i?" (created by "+i+")":"");break e;default:o=""}t+=o,e=e.return}while(e);return t}function ue(e){return!!ei.call(ni,e)||!ei.call(ti,e)&&(Jo.test(e)?ni[e]=!0:(ti[e]=!0,!1))}function ce(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}function se(e,t,n,r){if(null===t||void 0===t||ce(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function fe(e,t,n,r,o){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t}function de(e){return e[1].toUpperCase()}function pe(e,t,n,r){var o=ri.hasOwnProperty(t)?ri[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(se(t,n,o,r)&&(n=null),r||null===o?ue(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(o=o.type,n=3===o||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}function he(e,t){var n=t.checked;return jr({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function me(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=ke(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function ye(e,t){null!=(t=t.checked)&&pe(e,"checked",t,!1)}function ve(e,t){ye(e,t);var n=ke(t.value);null!=n&&("number"===t.type?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n)),t.hasOwnProperty("value")?be(e,t.type,n):t.hasOwnProperty("defaultValue")&&be(e,t.type,ke(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function ge(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){t=""+e._wrapperState.initialValue;var r=e.value;n||t===r||(e.value=t),e.defaultValue=t}n=e.name,""!==n&&(e.name=""),e.defaultChecked=!e.defaultChecked,e.defaultChecked=!e.defaultChecked,""!==n&&(e.name=n)}function be(e,t,n){"number"===t&&e.ownerDocument.activeElement===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ke(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function we(e,t,n){return e=U.getPooled(ii.change,e,t,n),e.type="change",Q(n),N(e),e}function Ee(e){v(e,!1)}function _e(e){if(oe(k(e)))return e}function Ce(e,t){if("change"===e)return t}function xe(){li&&(li.detachEvent("onpropertychange",Te),ai=li=null)}function Te(e){"value"===e.propertyName&&_e(ai)&&(e=we(ai,e,J(e)),X(Ee,e))}function Se(e,t,n){"focus"===e?(xe(),li=t,ai=n,li.attachEvent("onpropertychange",Te)):"blur"===e&&xe()}function Pe(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return _e(ai)}function Ne(e,t){if("click"===e)return _e(t)}function Oe(e,t){if("input"===e||"change"===e)return _e(t)}function Me(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=fi[e])&&!!t[e]}function Fe(){return Me}function Le(e){var t=e;if(e.alternate)for(;t.return;)t=t.return;else{if(0!=(2&t.effectTag))return 1;for(;t.return;)if(t=t.return,0!=(2&t.effectTag))return 1}return 3===t.tag?2:3}function Re(e){2!==Le(e)&&r("188")}function Ie(e){var t=e.alternate;if(!t)return t=Le(e),3===t&&r("188"),1===t?null:e;for(var n=e,o=t;;){var i=n.return,l=i?i.alternate:null;if(!i||!l)break;if(i.child===l.child){for(var a=i.child;a;){if(a===n)return Re(i),e;if(a===o)return Re(i),t;a=a.sibling}r("188")}if(n.return!==o.return)n=i,o=l;else{a=!1;for(var u=i.child;u;){if(u===n){a=!0,n=i,o=l;break}if(u===o){a=!0,o=i,n=l;break}u=u.sibling}if(!a){for(u=l.child;u;){if(u===n){a=!0,n=l,o=i;break}if(u===o){a=!0,o=l,n=i;break}u=u.sibling}a||r("189")}}n.alternate!==o&&r("190")}return 3!==n.tag&&r("188"),n.stateNode.current===n?e:t}function Ue(e){if(!(e=Ie(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function je(e){if(!(e=Ie(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child&&4!==t.tag)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function De(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function ze(e,t){var n=e[0];e=e[1];var r="on"+(e[0].toUpperCase()+e.slice(1));t={phasedRegistrationNames:{bubbled:r,captured:r+"Capture"},dependencies:[n],isInteractive:t},Si[e]=t,Pi[n]=t}function Ae(e){var t=e.targetInst;do{if(!t){e.ancestors.push(t);break}var n;for(n=t;n.return;)n=n.return;if(!(n=3!==n.tag?null:n.stateNode.containerInfo))break;e.ancestors.push(t),t=b(n)}while(t);for(n=0;n<e.ancestors.length;n++)t=e.ancestors[n],g(e.topLevelType,t,e.nativeEvent,J(e.nativeEvent))}function Be(e){Fi=!!e}function He(e,t){if(!t)return null;var n=(Oi(e)?We:Qe).bind(null,e);t.addEventListener(e,n,!1)}function Ve(e,t){if(!t)return null;var n=(Oi(e)?We:Qe).bind(null,e);t.addEventListener(e,n,!0)}function We(e,t){G(Qe,e,t)}function Qe(e,t){if(Fi){var n=J(t);if(n=b(n),null===n||"number"!=typeof n.tag||2===Le(n)||(n=null),Mi.length){var r=Mi.pop();r.topLevelType=e,r.nativeEvent=t,r.targetInst=n,e=r}else e={topLevelType:e,nativeEvent:t,targetInst:n,ancestors:[]};try{X(Ae,e)}finally{e.topLevelType=null,e.nativeEvent=null,e.targetInst=null,e.ancestors.length=0,10>Mi.length&&Mi.push(e)}}}function $e(e){return Object.prototype.hasOwnProperty.call(e,Ui)||(e[Ui]=Ii++,Ri[e[Ui]]={}),Ri[e[Ui]]}function Ke(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function qe(e,t){var n=Ke(e);e=0;for(var r;n;){if(3===n.nodeType){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Ke(n)}}function Ge(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function Ye(e,t){if(Hi||null==zi||zi!==zr())return null;var n=zi;return"selectionStart"in n&&Ge(n)?n={start:n.selectionStart,end:n.selectionEnd}:window.getSelection?(n=window.getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}):n=void 0,Bi&&Ar(Bi,n)?null:(Bi=n,e=U.getPooled(Di.select,Ai,e,t),e.type="select",e.target=zi,N(e),e)}function Xe(e){var t="";return Ir.Children.forEach(e,function(e){null==e||"string"!=typeof e&&"number"!=typeof e||(t+=e)}),t}function Ze(e,t){return e=jr({children:void 0},t),(t=Xe(t.children))&&(e.children=t),e}function Je(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+n,t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function et(e,t){var n=t.value;e._wrapperState={initialValue:null!=n?n:t.defaultValue,wasMultiple:!!t.multiple}}function tt(e,t){return null!=t.dangerouslySetInnerHTML&&r("91"),jr({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function nt(e,t){var n=t.value;null==n&&(n=t.defaultValue,t=t.children,null!=t&&(null!=n&&r("92"),Array.isArray(t)&&(1>=t.length||r("93"),t=t[0]),n=""+t),null==n&&(n="")),e._wrapperState={initialValue:""+n}}function rt(e,t){var n=t.value;null!=n&&(n=""+n,n!==e.value&&(e.value=n),null==t.defaultValue&&(e.defaultValue=n)),null!=t.defaultValue&&(e.defaultValue=t.defaultValue)}function ot(e){var t=e.textContent;t===e._wrapperState.initialValue&&(e.value=t)}function it(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function lt(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?it(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}function at(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}function ut(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=n,i=t[n];o=null==i||"boolean"==typeof i||""===i?"":r||"number"!=typeof i||0===i||ml.hasOwnProperty(o)&&ml[o]?(""+i).trim():i+"px","float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}function ct(e,t,n){t&&(vl[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML)&&r("137",e,n()),null!=t.dangerouslySetInnerHTML&&(null!=t.children&&r("60"),"object"==typeof t.dangerouslySetInnerHTML&&"__html"in t.dangerouslySetInnerHTML||r("61")),null!=t.style&&"object"!=typeof t.style&&r("62",n()))}function st(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function ft(e,t){e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument;var n=$e(e);t=Gr[t];for(var r=0;r<t.length;r++){var o=t[r];if(!n.hasOwnProperty(o)||!n[o]){switch(o){case"scroll":Ve("scroll",e);break;case"focus":case"blur":Ve("focus",e),Ve("blur",e),n.blur=!0,n.focus=!0;break;case"cancel":case"close":ee(o,!0)&&Ve(o,e);break;case"invalid":case"submit":case"reset":break;default:-1===yo.indexOf(o)&&He(o,e)}n[o]=!0}}}function dt(e,t,n,r){return n=9===n.nodeType?n:n.ownerDocument,r===dl.html&&(r=it(e)),r===dl.html?"script"===e?(e=n.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):e="string"==typeof t.is?n.createElement(e,{is:t.is}):n.createElement(e):e=n.createElementNS(r,e),e}function pt(e,t){return(9===t.nodeType?t:t.ownerDocument).createTextNode(e)}function ht(e,t,n,r){var o=st(t,n);switch(t){case"iframe":case"object":He("load",e);var i=n;break;case"video":case"audio":for(i=0;i<yo.length;i++)He(yo[i],e);i=n;break;case"source":He("error",e),i=n;break;case"img":case"image":case"link":He("error",e),He("load",e),i=n;break;case"form":He("reset",e),He("submit",e),i=n;break;case"details":He("toggle",e),i=n;break;case"input":me(e,n),i=he(e,n),He("invalid",e),ft(r,"onChange");break;case"option":i=Ze(e,n);break;case"select":et(e,n),i=jr({},n,{value:void 0}),He("invalid",e),ft(r,"onChange");break;case"textarea":nt(e,n),i=tt(e,n),He("invalid",e),ft(r,"onChange");break;default:i=n}ct(t,i,gl);var l,a=i;for(l in a)if(a.hasOwnProperty(l)){var u=a[l];"style"===l?ut(e,u,gl):"dangerouslySetInnerHTML"===l?null!=(u=u?u.__html:void 0)&&hl(e,u):"children"===l?"string"==typeof u?("textarea"!==t||""!==u)&&at(e,u):"number"==typeof u&&at(e,""+u):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(qr.hasOwnProperty(l)?null!=u&&ft(r,l):null!=u&&pe(e,l,u,o))}switch(t){case"input":re(e),ge(e,n,!1);break;case"textarea":re(e),ot(e,n);break;case"option":null!=n.value&&e.setAttribute("value",n.value);break;case"select":e.multiple=!!n.multiple,t=n.value,null!=t?Je(e,!!n.multiple,t,!1):null!=n.defaultValue&&Je(e,!!n.multiple,n.defaultValue,!0);break;default:"function"==typeof i.onClick&&(e.onclick=Dr)}}function mt(e,t,n,r,o){var i=null;switch(t){case"input":n=he(e,n),r=he(e,r),i=[];break;case"option":n=Ze(e,n),r=Ze(e,r),i=[];break;case"select":n=jr({},n,{value:void 0}),r=jr({},r,{value:void 0}),i=[];break;case"textarea":n=tt(e,n),r=tt(e,r),i=[];break;default:"function"!=typeof n.onClick&&"function"==typeof r.onClick&&(e.onclick=Dr)}ct(t,r,gl),t=e=void 0;var l=null;for(e in n)if(!r.hasOwnProperty(e)&&n.hasOwnProperty(e)&&null!=n[e])if("style"===e){var a=n[e];for(t in a)a.hasOwnProperty(t)&&(l||(l={}),l[t]="")}else"dangerouslySetInnerHTML"!==e&&"children"!==e&&"suppressContentEditableWarning"!==e&&"suppressHydrationWarning"!==e&&"autoFocus"!==e&&(qr.hasOwnProperty(e)?i||(i=[]):(i=i||[]).push(e,null));for(e in r){var u=r[e];if(a=null!=n?n[e]:void 0,r.hasOwnProperty(e)&&u!==a&&(null!=u||null!=a))if("style"===e)if(a){for(t in a)!a.hasOwnProperty(t)||u&&u.hasOwnProperty(t)||(l||(l={}),l[t]="");for(t in u)u.hasOwnProperty(t)&&a[t]!==u[t]&&(l||(l={}),l[t]=u[t])}else l||(i||(i=[]),i.push(e,l)),l=u;else"dangerouslySetInnerHTML"===e?(u=u?u.__html:void 0,a=a?a.__html:void 0,null!=u&&a!==u&&(i=i||[]).push(e,""+u)):"children"===e?a===u||"string"!=typeof u&&"number"!=typeof u||(i=i||[]).push(e,""+u):"suppressContentEditableWarning"!==e&&"suppressHydrationWarning"!==e&&(qr.hasOwnProperty(e)?(null!=u&&ft(o,e),i||a===u||(i=[])):(i=i||[]).push(e,u))}return l&&(i=i||[]).push("style",l),i}function yt(e,t,n,r,o){"input"===n&&"radio"===o.type&&null!=o.name&&ye(e,o),st(n,r),r=st(n,o);for(var i=0;i<t.length;i+=2){var l=t[i],a=t[i+1];"style"===l?ut(e,a,gl):"dangerouslySetInnerHTML"===l?hl(e,a):"children"===l?at(e,a):pe(e,l,a,r)}switch(n){case"input":ve(e,o);break;case"textarea":rt(e,o);break;case"select":e._wrapperState.initialValue=void 0,t=e._wrapperState.wasMultiple,e._wrapperState.wasMultiple=!!o.multiple,n=o.value,null!=n?Je(e,!!o.multiple,n,!1):t!==!!o.multiple&&(null!=o.defaultValue?Je(e,!!o.multiple,o.defaultValue,!0):Je(e,!!o.multiple,o.multiple?[]:"",!1))}}function vt(e,t,n,r,o){switch(t){case"iframe":case"object":He("load",e);break;case"video":case"audio":for(r=0;r<yo.length;r++)He(yo[r],e);break;case"source":He("error",e);break;case"img":case"image":case"link":He("error",e),He("load",e);break;case"form":He("reset",e),He("submit",e);break;case"details":He("toggle",e);break;case"input":me(e,n),He("invalid",e),ft(o,"onChange");break;case"select":et(e,n),He("invalid",e),ft(o,"onChange");break;case"textarea":nt(e,n),He("invalid",e),ft(o,"onChange")}ct(t,n,gl),r=null;for(var i in n)if(n.hasOwnProperty(i)){var l=n[i];"children"===i?"string"==typeof l?e.textContent!==l&&(r=["children",l]):"number"==typeof l&&e.textContent!==""+l&&(r=["children",""+l]):qr.hasOwnProperty(i)&&null!=l&&ft(o,i)}switch(t){case"input":re(e),ge(e,n,!0);break;case"textarea":re(e),ot(e,n);break;case"select":case"option":break;default:"function"==typeof n.onClick&&(e.onclick=Dr)}return r}function gt(e,t){return e.nodeValue!==t}function bt(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function kt(e,t){return"textarea"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&"string"==typeof t.dangerouslySetInnerHTML.__html}function wt(e){for(e=e.nextSibling;e&&1!==e.nodeType&&3!==e.nodeType;)e=e.nextSibling;return e}function Et(e){for(e=e.firstChild;e&&1!==e.nodeType&&3!==e.nodeType;)e=e.nextSibling;return e}function _t(e){return{current:e}}function Ct(e){0>Tl||(e.current=xl[Tl],xl[Tl]=null,Tl--)}function xt(e,t){Tl++,xl[Tl]=e.current,e.current=t}function Tt(e){return Pt(e)?Nl:Sl.current}function St(e,t){var n=e.type.contextTypes;if(!n)return Hr;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,i={};for(o in n)i[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Pt(e){return 2===e.tag&&null!=e.type.childContextTypes}function Nt(e){Pt(e)&&(Ct(Pl,e),Ct(Sl,e))}function Ot(e){Ct(Pl,e),Ct(Sl,e)}function Mt(e,t,n){Sl.current!==Hr&&r("168"),xt(Sl,t,e),xt(Pl,n,e)}function Ft(e,t){var n=e.stateNode,o=e.type.childContextTypes;if("function"!=typeof n.getChildContext)return t;n=n.getChildContext();for(var i in n)i in o||r("108",le(e)||"Unknown",i);return jr({},t,n)}function Lt(e){if(!Pt(e))return!1;var t=e.stateNode;return t=t&&t.__reactInternalMemoizedMergedChildContext||Hr,Nl=Sl.current,xt(Sl,t,e),xt(Pl,Pl.current,e),!0}function Rt(e,t){var n=e.stateNode;if(n||r("169"),t){var o=Ft(e,Nl);n.__reactInternalMemoizedMergedChildContext=o,Ct(Pl,e),Ct(Sl,e),xt(Sl,o,e)}else Ct(Pl,e);xt(Pl,t,e)}function It(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=null,this.index=0,this.ref=null,this.pendingProps=t,this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.expirationTime=0,this.alternate=null}function Ut(e,t,n){var r=e.alternate;return null===r?(r=new It(e.tag,t,e.key,e.mode),r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.effectTag=0,r.nextEffect=null,r.firstEffect=null,r.lastEffect=null),r.expirationTime=n,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function jt(e,t,n){var o=e.type,i=e.key;if(e=e.props,"function"==typeof o)var l=o.prototype&&o.prototype.isReactComponent?2:0;else if("string"==typeof o)l=5;else switch(o){case Wo:return Dt(e.children,t,n,i);case Go:l=11,t|=3;break;case Qo:l=11,t|=2;break;case $o:return o=new It(15,e,i,4|t),o.type=$o,o.expirationTime=n,o;case Xo:l=16,t|=2;break;default:e:{switch("object"==typeof o&&null!==o?o.$$typeof:null){case Ko:l=13;break e;case qo:l=12;break e;case Yo:l=14;break e;default:r("130",null==o?o:typeof o,"")}l=void 0}}return t=new It(l,e,i,t),t.type=o,t.expirationTime=n,t}function Dt(e,t,n,r){return e=new It(10,e,r,t),e.expirationTime=n,e}function zt(e,t,n){return e=new It(6,e,null,t),e.expirationTime=n,e}function At(e,t,n){return t=new It(4,null!==e.children?e.children:[],e.key,t),t.expirationTime=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Bt(e,t,n){return t=new It(3,null,null,t?3:0),e={current:t,containerInfo:e,pendingChildren:null,earliestPendingTime:0,latestPendingTime:0,earliestSuspendedTime:0,latestSuspendedTime:0,latestPingedTime:0,pendingCommitExpirationTime:0,finishedWork:null,context:null,pendingContext:null,hydrate:n,remainingExpirationTime:0,firstBatch:null,nextScheduledRoot:null},t.stateNode=e}function Ht(e){return function(t){try{return e(t)}catch(e){}}}function Vt(e){if("undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var n=t.inject(e);Ol=Ht(function(e){return t.onCommitFiberRoot(n,e)}),Ml=Ht(function(e){return t.onCommitFiberUnmount(n,e)})}catch(e){}return!0}function Wt(e){"function"==typeof Ol&&Ol(e)}function Qt(e){"function"==typeof Ml&&Ml(e)}function $t(e){return{expirationTime:0,baseState:e,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Kt(e){return{expirationTime:e.expirationTime,baseState:e.baseState,firstUpdate:e.firstUpdate,lastUpdate:e.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function qt(e){return{expirationTime:e,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function Gt(e,t,n){null===e.lastUpdate?e.firstUpdate=e.lastUpdate=t:(e.lastUpdate.next=t,e.lastUpdate=t),(0===e.expirationTime||e.expirationTime>n)&&(e.expirationTime=n)}function Yt(e,t,n){var r=e.alternate;if(null===r){var o=e.updateQueue,i=null;null===o&&(o=e.updateQueue=$t(e.memoizedState))}else o=e.updateQueue,i=r.updateQueue,null===o?null===i?(o=e.updateQueue=$t(e.memoizedState),i=r.updateQueue=$t(r.memoizedState)):o=e.updateQueue=Kt(i):null===i&&(i=r.updateQueue=Kt(o));null===i||o===i?Gt(o,t,n):null===o.lastUpdate||null===i.lastUpdate?(Gt(o,t,n),Gt(i,t,n)):(Gt(o,t,n),i.lastUpdate=t)}function Xt(e,t,n){var r=e.updateQueue;r=null===r?e.updateQueue=$t(e.memoizedState):Zt(e,r),null===r.lastCapturedUpdate?r.firstCapturedUpdate=r.lastCapturedUpdate=t:(r.lastCapturedUpdate.next=t,r.lastCapturedUpdate=t),(0===r.expirationTime||r.expirationTime>n)&&(r.expirationTime=n)}function Zt(e,t){var n=e.alternate;return null!==n&&t===n.updateQueue&&(t=e.updateQueue=Kt(t)),t}function Jt(e,t,n,r,o,i){switch(n.tag){case 1:return e=n.payload,"function"==typeof e?e.call(i,r,o):e;case 3:e.effectTag=-1025&e.effectTag|64;case 0:if(e=n.payload,null===(o="function"==typeof e?e.call(i,r,o):e)||void 0===o)break;return jr({},r,o);case 2:Fl=!0}return r}function en(e,t,n,r,o){if(Fl=!1,!(0===t.expirationTime||t.expirationTime>o)){t=Zt(e,t);for(var i=t.baseState,l=null,a=0,u=t.firstUpdate,c=i;null!==u;){var s=u.expirationTime;s>o?(null===l&&(l=u,i=c),(0===a||a>s)&&(a=s)):(c=Jt(e,t,u,c,n,r),null!==u.callback&&(e.effectTag|=32,u.nextEffect=null,null===t.lastEffect?t.firstEffect=t.lastEffect=u:(t.lastEffect.nextEffect=u,t.lastEffect=u))),u=u.next}for(s=null,u=t.firstCapturedUpdate;null!==u;){var f=u.expirationTime;f>o?(null===s&&(s=u,null===l&&(i=c)),(0===a||a>f)&&(a=f)):(c=Jt(e,t,u,c,n,r),null!==u.callback&&(e.effectTag|=32,u.nextEffect=null,null===t.lastCapturedEffect?t.firstCapturedEffect=t.lastCapturedEffect=u:(t.lastCapturedEffect.nextEffect=u,t.lastCapturedEffect=u))),u=u.next}null===l&&(t.lastUpdate=null),null===s?t.lastCapturedUpdate=null:e.effectTag|=32,null===l&&null===s&&(i=c),t.baseState=i,t.firstUpdate=l,t.firstCapturedUpdate=s,t.expirationTime=a,e.memoizedState=c}}function tn(e,t){"function"!=typeof e&&r("191",e),e.call(t)}function nn(e,t,n){for(null!==t.firstCapturedUpdate&&(null!==t.lastUpdate&&(t.lastUpdate.next=t.firstCapturedUpdate,t.lastUpdate=t.lastCapturedUpdate),t.firstCapturedUpdate=t.lastCapturedUpdate=null),e=t.firstEffect,t.firstEffect=t.lastEffect=null;null!==e;){var r=e.callback;null!==r&&(e.callback=null,tn(r,n)),e=e.nextEffect}for(e=t.firstCapturedEffect,t.firstCapturedEffect=t.lastCapturedEffect=null;null!==e;)t=e.callback,null!==t&&(e.callback=null,tn(t,n)),e=e.nextEffect}function rn(e,t){return{value:e,source:t,stack:ae(t)}}function on(e){var t=e.type._context;xt(Il,t._changedBits,e),xt(Rl,t._currentValue,e),xt(Ll,e,e),t._currentValue=e.pendingProps.value,t._changedBits=e.stateNode}function ln(e){var t=Il.current,n=Rl.current;Ct(Ll,e),Ct(Rl,e),Ct(Il,e),e=e.type._context,e._currentValue=n,e._changedBits=t}function an(e){return e===Ul&&r("174"),e}function un(e,t){xt(zl,t,e),xt(Dl,e,e),xt(jl,Ul,e);var n=t.nodeType;switch(n){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:lt(null,"");break;default:n=8===n?t.parentNode:t,t=n.namespaceURI||null,n=n.tagName,t=lt(t,n)}Ct(jl,e),xt(jl,t,e)}function cn(e){Ct(jl,e),Ct(Dl,e),Ct(zl,e)}function sn(e){Dl.current===e&&(Ct(jl,e),Ct(Dl,e))}function fn(e,t,n){var r=e.memoizedState;t=t(n,r),r=null===t||void 0===t?r:jr({},r,t),e.memoizedState=r,null!==(e=e.updateQueue)&&0===e.expirationTime&&(e.baseState=r)}function dn(e,t,n,r,o,i){var l=e.stateNode;return e=e.type,"function"==typeof l.shouldComponentUpdate?l.shouldComponentUpdate(n,o,i):!e.prototype||!e.prototype.isPureReactComponent||(!Ar(t,n)||!Ar(r,o))}function pn(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Al.enqueueReplaceState(t,t.state,null)}function hn(e,t){var n=e.type,r=e.stateNode,o=e.pendingProps,i=Tt(e);r.props=o,r.state=e.memoizedState,r.refs=Hr,r.context=St(e,i),i=e.updateQueue,null!==i&&(en(e,i,o,r,t),r.state=e.memoizedState),i=e.type.getDerivedStateFromProps,"function"==typeof i&&(fn(e,i,o),r.state=e.memoizedState),"function"==typeof n.getDerivedStateFromProps||"function"==typeof r.getSnapshotBeforeUpdate||"function"!=typeof r.UNSAFE_componentWillMount&&"function"!=typeof r.componentWillMount||(n=r.state,"function"==typeof r.componentWillMount&&r.componentWillMount(),"function"==typeof r.UNSAFE_componentWillMount&&r.UNSAFE_componentWillMount(),n!==r.state&&Al.enqueueReplaceState(r,r.state,null),null!==(i=e.updateQueue)&&(en(e,i,o,r,t),r.state=e.memoizedState)),"function"==typeof r.componentDidMount&&(e.effectTag|=4)}function mn(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){n=n._owner;var o=void 0;n&&(2!==n.tag&&r("110"),o=n.stateNode),o||r("147",e);var i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs===Hr?o.refs={}:o.refs;null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}"string"!=typeof e&&r("148"),n._owner||r("254",e)}return e}function yn(e,t){"textarea"!==e.type&&r("31","[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t,"")}function vn(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.effectTag=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function o(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function i(e,t,n){return e=Ut(e,t,n),e.index=0,e.sibling=null,e}function l(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index,r<n?(t.effectTag=2,n):r):(t.effectTag=2,n):n}function a(t){return e&&null===t.alternate&&(t.effectTag=2),t}function u(e,t,n,r){return null===t||6!==t.tag?(t=zt(n,e.mode,r),t.r
3
  (c) Sindre Sorhus
4
  @license MIT
5
  */
6
+ var o=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,a,u=r(e),c=1;c<arguments.length;c++){n=Object(arguments[c]);for(var s in n)i.call(n,s)&&(u[s]=n[s]);if(o){a=o(n);for(var f=0;f<a.length;f++)l.call(n,a[f])&&(u[a[f]]=n[a[f]])}}return u}},function(e,t,n){"use strict";function r(e,t,n,r,i,l,a,u){if(o(t),!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var s=[n,r,i,l,a,u],f=0;c=new Error(t.replace(/%s/g,function(){return s[f++]})),c.name="Invariant Violation"}throw c.framesToPop=1,c}}var o=function(e){};e.exports=r},function(e,t,n){"use strict";var r={};e.exports=r},function(e,t,n){"use strict";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var o=n(0),i=r(o),l=n(7),a=r(l),u=n(15),c=r(u),s=n(16),f=r(s);n(23),a.default.render(i.default.createElement(c.default,null,i.default.createElement(f.default,null)),document.getElementById("fl-ui-root"))},function(e,t,n){"use strict";function r(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=0;r<t;r++)n+="&args[]="+encodeURIComponent(arguments[r+1]);g(!1,"Minified React error #"+e+"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ",n)}function o(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||F}function i(){}function l(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||F}function a(e,t,n){var r=void 0,o={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)U.call(t,r)&&!I.hasOwnProperty(r)&&(o[r]=t[r]);var a=arguments.length-2;if(1===a)o.children=n;else if(1<a){for(var u=Array(a),c=0;c<a;c++)u[c]=arguments[c+2];o.children=u}if(e&&e.defaultProps)for(r in a=e.defaultProps)void 0===o[r]&&(o[r]=a[r]);return{$$typeof:E,type:e,key:i,ref:l,props:o,_owner:R.current}}function u(e){return"object"==typeof e&&null!==e&&e.$$typeof===E}function c(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,function(e){return t[e]})}function s(e,t,n,r){if(D.length){var o=D.pop();return o.result=e,o.keyPrefix=t,o.func=n,o.context=r,o.count=0,o}return{result:e,keyPrefix:t,func:n,context:r,count:0}}function f(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>D.length&&D.push(e)}function d(e,t,n,o){var i=typeof e;"undefined"!==i&&"boolean"!==i||(e=null);var l=!1;if(null===e)l=!0;else switch(i){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case E:case _:l=!0}}if(l)return n(o,e,""===t?"."+p(e,0):t),1;if(l=0,t=""===t?".":t+":",Array.isArray(e))for(var a=0;a<e.length;a++){i=e[a];var u=t+p(i,a);l+=d(i,u,n,o)}else if(null===e||void 0===e?u=null:(u=M&&e[M]||e["@@iterator"],u="function"==typeof u?u:null),"function"==typeof u)for(e=u.call(e),a=0;!(i=e.next()).done;)i=i.value,u=t+p(i,a++),l+=d(i,u,n,o);else"object"===i&&(n=""+e,r("31","[object Object]"===n?"object with keys {"+Object.keys(e).join(", ")+"}":n,""));return l}function p(e,t){return"object"==typeof e&&null!==e&&null!=e.key?c(e.key):t.toString(36)}function h(e,t){e.func.call(e.context,t,e.count++)}function m(e,t,n){var r=e.result,o=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?y(e,r,n,k.thatReturnsArgument):null!=e&&(u(e)&&(t=o+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(j,"$&/")+"/")+n,e={$$typeof:E,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}),r.push(e))}function y(e,t,n,r,o){var i="";null!=n&&(i=(""+n).replace(j,"$&/")+"/"),t=s(t,i,r,o),null==e||d(e,"",m,t),f(t)}/** @license React v16.4.2
7
  * react.production.min.js
8
  *
9
  * Copyright (c) 2013-present, Facebook, Inc.
11
  * This source code is licensed under the MIT license found in the
12
  * LICENSE file in the root directory of this source tree.
13
  */