Completed
Push — master ( d80a25...6415e4 )
by
unknown
41s
created
redux-core/inc/classes/class-redux-enqueue.php 2 patches
Indentation   +730 added lines, -730 removed lines patch added patch discarded remove patch
@@ -12,737 +12,737 @@
 block discarded – undo
12 12
 
13 13
 if ( ! class_exists( 'Redux_Enqueue', false ) ) {
14 14
 
15
-	/**
16
-	 * Class Redux_Enqueue
17
-	 */
18
-	class Redux_Enqueue extends Redux_Class {
19
-
20
-		/**
21
-		 * Data to localize.
22
-		 *
23
-		 * @var array
24
-		 */
25
-		public array $localize_data = array();
26
-
27
-		/**
28
-		 * Min string for .min files.
29
-		 *
30
-		 * @var string
31
-		 */
32
-		private string $min = '';
33
-
34
-		/**
35
-		 * Timestamp for file versions.
36
-		 *
37
-		 * @var string
38
-		 */
39
-		private string $timestamp = '';
40
-
41
-		/**
42
-		 * Localize data required for the repeater extension.
43
-		 *
44
-		 * @var array
45
-		 */
46
-		private array $repeater_data = array();
47
-
48
-		/**
49
-		 * Redux_Enqueue constructor.
50
-		 *
51
-		 * @param     object $redux ReduxFramework pointer.
52
-		 */
53
-		public function __construct( $redux ) {
54
-			parent::__construct( $redux );
55
-
56
-			// Enqueue the admin page CSS and JS.
57
-			if ( isset( $_GET['page'] ) && $_GET['page'] === $redux->args['page_slug'] ) { // phpcs:ignore WordPress.Security.NonceVerification
58
-				add_action( 'admin_enqueue_scripts', array( $this, 'init' ), 1 );
59
-			}
60
-
61
-			add_action( 'wp_enqueue_scripts', array( $this, 'frontend_init' ), 10 );
62
-
63
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
64
-			do_action( "redux/{$redux->args['opt_name']}/enqueue/construct", $this );
65
-
66
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
67
-			do_action( 'redux/enqueue/construct', $this );
68
-
69
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
70
-			do_action( 'redux/search/' . $redux->args['opt_name'] . '/construct' );
71
-
72
-			//if ( isset( $_GET['page'] ) && sanitize_text_field( wp_unslash( $_GET['page'] === $this->parent->args['page_slug'] ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
73
-			//	add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ), 0 );
74
-			//}
75
-
76
-			//add_action( "redux/metaboxes/{$this->parent->args[ 'opt_name' ]}/enqueue", array( $this, 'enqueue' ), 10 );
77
-		}
78
-
79
-		/**
80
-		 * Scripts to enqueue on the frontend
81
-		 */
82
-		public function frontend_init() {
83
-			$core = $this->core();
84
-
85
-			if ( $core->args['elusive_frontend'] ) {
86
-				Redux_Functions_Ex::enqueue_elusive_font();
87
-			}
88
-
89
-			if ( $core->args['fontawesome_frontend'] ) {
90
-				Redux_Functions_Ex::enqueue_font_awesome();
91
-			}
92
-		}
93
-
94
-		/**
95
-		 * Class init functions.
96
-		 */
97
-		public function init() {
98
-			$core = $this->core();
99
-
100
-			Redux_Functions::$parent = $core;
101
-
102
-			$this->min = Redux_Functions::is_min();
103
-
104
-			$this->timestamp = Redux_Core::$version;
105
-			if ( $core->args['dev_mode'] ) {
106
-				$this->timestamp .= '.' . time();
107
-			}
108
-
109
-			$this->register_styles( $core );
110
-			$this->register_scripts();
111
-
112
-			add_thickbox();
113
-
114
-			$this->enqueue_fields( $core );
115
-
116
-			add_filter( "redux/{$core->args['opt_name']}/localize", array( 'Redux_Helpers', 'localize' ) );
117
-
118
-			$this->set_localized_data( $core );
119
-
120
-			/**
121
-			 * Action 'redux/page/{opt_name}/enqueue'
122
-			 */
123
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
124
-			do_action( "redux/page/{$core->args['opt_name']}/enqueue" );
125
-		}
126
-
127
-		/**
128
-		 * Register all core framework styles.
129
-		 *
130
-		 * @param ReduxFramework $core ReduxFramework object.
131
-		 */
132
-		private function register_styles( ReduxFramework $core ) {
133
-
134
-			/**
135
-			 * Redux Admin CSS
136
-			 */
137
-			if ( 'wordpress' === $core->args['admin_theme'] || 'wp' === $core->args['admin_theme'] ) { // phpcs:ignore WordPress.WP.CapitalPDangit
138
-				$color_scheme = get_user_option( 'admin_color' );
139
-			} elseif ( 'classic' === $core->args['admin_theme'] || '' === $core->args['admin_theme'] ) {
140
-				$color_scheme = 'classic';
141
-			} else {
142
-				$color_scheme = $core->args['admin_theme'];
143
-			}
144
-
145
-			if ( ! file_exists( Redux_Core::$dir . "assets/css/colors/$color_scheme/colors$this->min.css" ) ) {
146
-				$color_scheme = 'fresh';
147
-			}
148
-
149
-			$css = Redux_Core::$url . "assets/css/colors/$color_scheme/colors$this->min.css";
150
-
151
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
152
-			$css = apply_filters( 'redux/enqueue/' . $core->args['opt_name'] . '/args/admin_theme/css_url', $css );
153
-
154
-			wp_register_style(
155
-				'redux-admin-theme',
156
-				$css,
157
-				array(),
158
-				$this->timestamp
159
-			);
160
-
161
-			wp_enqueue_style(
162
-				'redux-admin-css',
163
-				Redux_Core::$url . "assets/css/redux-admin$this->min.css",
164
-				array( 'redux-admin-theme' ),
165
-				$this->timestamp
166
-			);
167
-
168
-			/**
169
-			 * Redux Fields CSS
170
-			 */
171
-			if ( ! $core->args['dev_mode'] ) {
172
-				wp_enqueue_style(
173
-					'redux-fields',
174
-					Redux_Core::$url . 'assets/css/redux-fields.min.css',
175
-					array(),
176
-					$this->timestamp
177
-				);
178
-			}
179
-
180
-			/**
181
-			 * Select2 CSS
182
-			 */
183
-			wp_enqueue_style(
184
-				'select2-css',
185
-				Redux_Core::$url . 'assets/css/vendor/select2.min.css',
186
-				array(),
187
-				'4.1.0'
188
-			);
189
-
190
-			/**
191
-			 * Spectrum CSS
192
-			 */
193
-			wp_register_style(
194
-				'redux-spectrum-css',
195
-				Redux_Core::$url . "assets/css/vendor/spectrum$this->min.css",
196
-				array(),
197
-				'1.3.3'
198
-			);
199
-
200
-			/**
201
-			 * Elusive Icon CSS
202
-			 */
203
-			Redux_Functions_Ex::enqueue_elusive_font();
204
-
205
-			/**
206
-			 * Font Awesome for Social Profiles and Icon Select
207
-			 */
208
-			Redux_Functions_Ex::enqueue_font_awesome();
209
-
210
-			/**
211
-			 * QTip CSS
212
-			 */
213
-			wp_enqueue_style(
214
-				'qtip',
215
-				Redux_Core::$url . "assets/css/vendor/qtip$this->min.css",
216
-				array(),
217
-				'3.0.3'
218
-			);
219
-
220
-			/**
221
-			 * JQuery UI CSS
222
-			 */
223
-			wp_enqueue_style(
224
-				'jquery-ui',
225
-				// phpcs:ignore WordPress.NamingConventions.ValidHookName
226
-				apply_filters(
227
-				// phpcs:ignore WordPress.NamingConventions.ValidHookName
228
-					"redux/page/{$core->args['opt_name']}/enqueue/jquery-ui-css",
229
-					Redux_Core::$url . 'assets/css/vendor/jquery-ui-1.10.0.custom.css'
230
-				),
231
-				array(),
232
-				$this->timestamp
233
-			);
234
-
235
-			/**
236
-			 * Iris CSS
237
-			 */
238
-			wp_enqueue_style( 'wp-color-picker' );
239
-
240
-			if ( $core->args['dev_mode'] ) {
241
-
242
-				/**
243
-				 * Media CSS
244
-				 */
245
-				wp_enqueue_style(
246
-					'redux-field-media',
247
-					Redux_Core::$url . 'assets/css/media.css',
248
-					array(),
249
-					$this->timestamp
250
-				);
251
-			}
252
-
253
-			/**
254
-			 * RTL CSS
255
-			 */
256
-			if ( is_rtl() ) {
257
-				wp_enqueue_style(
258
-					'redux-rtl',
259
-					Redux_Core::$url . 'assets/css/rtl.css',
260
-					array(),
261
-					$this->timestamp
262
-				);
263
-			}
264
-		}
265
-
266
-		/**
267
-		 * Register all core framework scripts.
268
-		 */
269
-		private function register_scripts() {
270
-			// *****************************************************************
271
-			// JQuery / JQuery UI JS
272
-			// *****************************************************************
273
-			wp_enqueue_script( 'jquery' );
274
-			wp_enqueue_script( 'jquery-ui-core' );
275
-			wp_enqueue_script( 'jquery-ui-dialog' );
276
-
277
-			/**
278
-			 * Select2 Sortable JS
279
-			 */
280
-			wp_register_script(
281
-				'redux-select2-sortable',
282
-				Redux_Core::$url . 'assets/js/vendor/select2-sortable/redux.select2.sortable' . $this->min . '.js',
283
-				array( 'jquery', 'jquery-ui-sortable' ),
284
-				$this->timestamp,
285
-				true
286
-			);
287
-
288
-			/**
289
-			 * Select2
290
-			 */
291
-			wp_enqueue_script(
292
-				'select2-js',
293
-				Redux_Core::$url . 'assets/js/vendor/select2/select2' . $this->min . '.js`',
294
-				array( 'jquery', 'redux-select2-sortable' ),
295
-				'4.1.0',
296
-				true
297
-			);
298
-
299
-			/**
300
-			 * QTip JS
301
-			 */
302
-			wp_enqueue_script(
303
-				'qtip',
304
-				Redux_Core::$url . 'assets/js/vendor/qtip/qtip' . $this->min . '.js',
305
-				array( 'jquery' ),
306
-				'3.0.3',
307
-				true
308
-			);
309
-
310
-			/**
311
-			 * Iris alpha color picker
312
-			 */
313
-			if ( ! wp_script_is( 'redux-wp-color-picker-alpha' ) ) {
314
-				wp_enqueue_style( 'wp-color-picker' );
315
-
316
-				wp_register_script(
317
-					'redux-wp-color-picker-alpha',
318
-					Redux_Core::$url . 'assets/js/vendor/wp-color-picker-alpha/wp-color-picker-alpha' . $this->min . '.js',
319
-					array( 'jquery', 'wp-color-picker' ),
320
-					'3.0.0',
321
-					true
322
-				);
323
-			}
324
-
325
-			/**
326
-			 * Block UI (used by Custom Fonts and Color Schemes).
327
-			 */
328
-			wp_register_script(
329
-				'redux-block-ui',
330
-				Redux_Core::$url . 'assets/js/vendor/block-ui/jquery.blockUI' . $this->min . '.js',
331
-				array( 'jquery' ),
332
-				'2.70.0',
333
-				true
334
-			);
335
-
336
-			/**
337
-			 * Spectrum JS
338
-			 */
339
-			wp_register_script(
340
-				'redux-spectrum-js',
341
-				Redux_Core::$url . 'assets/js/vendor/spectrum/redux-spectrum' . $this->min . '.js',
342
-				array( 'jquery' ),
343
-				'1.3.3',
344
-				true
345
-			);
346
-
347
-			/**
348
-			 * Vendor JS
349
-			 */
350
-			wp_register_script(
351
-				'redux-vendor',
352
-				Redux_Core::$url . 'assets/js/redux-vendors' . $this->min . '.js',
353
-				array( 'jquery' ),
354
-				$this->timestamp,
355
-				true
356
-			);
357
-
358
-			/**
359
-			 * Redux JS
360
-			 */
361
-			wp_register_script(
362
-				'redux-js',
363
-				Redux_Core::$url . 'assets/js/redux' . $this->min . '.js',
364
-				array( 'jquery', 'redux-vendor' ),
365
-				$this->timestamp,
366
-				true
367
-			);
368
-		}
369
-
370
-		/**
371
-		 * Enqueue fields that are in use.
372
-		 *
373
-		 * @param ReduxFramework $core  ReduxFramework object.
374
-		 * @param array          $field Field array.
375
-		 */
376
-		public function enqueue_field( ReduxFramework $core, array $field ) {
377
-			if ( isset( $field['type'] ) && 'callback' !== $field['type'] ) {
378
-				$field_type = str_replace( '_', '-', $field['type'] );
379
-				$core_path  = Redux_Core::$dir . "inc/fields/{$field['type']}/class-redux-$field_type.php";
380
-
381
-				// Shim for v3 extension class names.
382
-				if ( ! file_exists( $core_path ) ) {
383
-					$core_path = Redux_Core::$dir . "inc/fields/{$field['type']}/field_{$field['type']}.php";
384
-				}
385
-
386
-				$filter_path = $core_path;
387
-
388
-				/**
389
-				 * Field class file
390
-				 * filter 'redux/{opt_name}/field/class/{field.type}'
391
-				 *
392
-				 * @param     string    $filter_path Field class file path
393
-				 * @param     array     $field       Field config data
394
-				 */
395
-				// phpcs:ignore WordPress.NamingConventions.ValidHookName
396
-				$class_file = apply_filters(
397
-				// phpcs:ignore WordPress.NamingConventions.ValidHookName
398
-					"redux/{$core->args['opt_name']}/field/class/{$field['type']}",
399
-					$filter_path,
400
-					$field
401
-				);
402
-
403
-				$field_classes = array( 'Redux_' . $field['type'], 'ReduxFramework_' . $field['type'] );
404
-
405
-				if ( $class_file ) {
406
-					$field_class = Redux_Functions::class_exists_ex( $field_classes );
407
-					if ( false === $field_class ) {
408
-						if ( file_exists( $class_file ) ) {
409
-							require_once $class_file;
410
-
411
-							$field_class = Redux_Functions::class_exists_ex( $field_classes );
412
-						} else {
413
-							return;
414
-						}
415
-					}
416
-
417
-					if ( false !== $field_class && ( ( method_exists( $field_class, 'enqueue' ) ) || method_exists( $field_class, 'localize' ) ) ) {
418
-						if ( ! isset( $core->options[ $field['id'] ] ) ) {
419
-							$core->options[ $field['id'] ] = '';
420
-						}
421
-
422
-						$the_field = new $field_class( $field, $core->options[ $field['id'] ], $core );
423
-
424
-						// Move dev_mode check to a new if/then block.
425
-						if ( ! wp_script_is( 'redux-field-' . $field_type ) && ( class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) ) {
426
-							$the_field->enqueue();
427
-						}
428
-
429
-						if ( class_exists( $field_class ) && method_exists( $field_class, 'always_enqueue' ) ) {
430
-							$the_field->always_enqueue();
431
-						}
432
-
433
-						if ( method_exists( $field_class, 'localize' ) ) {
434
-							$the_field->localize( $field );
435
-
436
-							if ( ! isset( $this->localize_data[ $field['type'] ] ) ) {
437
-								$this->localize_data[ $field['type'] ] = array();
438
-							}
439
-
440
-							$localize_data = $the_field->localize( $field );
441
-
442
-							$shims = array( 'repeater' );
443
-
444
-							// phpcs:ignore WordPress.NamingConventions.ValidHookName
445
-							$shims = apply_filters( 'redux/' . $core->args['opt_name'] . '/localize/shims', $shims );
446
-
447
-							if ( is_array( $shims ) && in_array( $field['type'], $shims, true ) ) {
448
-								$this->repeater_data[ $field['type'] ][ $field['id'] ] = $localize_data;
449
-							}
450
-
451
-							$this->localize_data[ $field['type'] ][ $field['id'] ] = $localize_data;
452
-						}
453
-
454
-						unset( $the_field );
455
-					}
456
-				}
457
-			}
458
-		}
459
-
460
-		/**
461
-		 * Enqueue field files.
462
-		 *
463
-		 * @param ReduxFramework $core ReduxFramework object.
464
-		 */
465
-		private function enqueue_fields( ReduxFramework $core ) {
466
-			foreach ( $core->sections as $section ) {
467
-				if ( isset( $section['fields'] ) ) {
468
-					foreach ( $section['fields'] as $field ) {
469
-						$this->enqueue_field( $core, $field );
470
-					}
471
-				}
472
-			}
473
-		}
474
-
475
-		/**
476
-		 * Build a localized array from field functions, if any.
477
-		 *
478
-		 * @param ReduxFramework $core ReduxFramework object.
479
-		 * @param string         $type Field type.
480
-		 */
481
-		private function build_local_array( ReduxFramework $core, string $type ) {
482
-			if ( isset( $core->transients['last_save_mode'] ) && ! empty( $core->transients['notices'][ $type ] ) ) {
483
-				$the_total = 0;
484
-				$messages  = array();
485
-
486
-				foreach ( $core->transients['notices'][ $type ] as $msg ) {
487
-					if ( is_array( $msg ) && ! empty( $msg ) ) {
488
-						$messages[ $msg['section_id'] ][ $type ][] = $msg;
489
-
490
-						if ( ! isset( $messages[ $msg['section_id'] ]['total'] ) ) {
491
-							$messages[ $msg['section_id'] ]['total'] = 0;
492
-						}
493
-
494
-						++$messages[ $msg['section_id'] ]['total'];
495
-						++$the_total;
496
-					}
497
-				}
498
-
499
-				$this->localize_data[ $type ] = array(
500
-					'total' => $the_total,
501
-					"$type" => $messages,
502
-				);
503
-
504
-				unset( $core->transients['notices'][ $type ] );
505
-			}
506
-		}
507
-
508
-		/**
509
-		 * Compile panel errors and wearings for a localized array.
510
-		 */
511
-		public function get_warnings_and_errors_array() {
512
-			$core = $this->core();
513
-
514
-			$this->build_local_array( $core, 'errors' );
515
-			$this->build_local_array( $core, 'warnings' );
516
-			$this->build_local_array( $core, 'sanitize' );
517
-
518
-			if ( empty( $core->transients['notices'] ) ) {
519
-				if ( isset( $core->transients['notices'] ) ) {
520
-					unset( $core->transients['notices'] );
521
-				}
522
-			}
523
-		}
524
-
525
-		/**
526
-		 * Commit localized data to global array.
527
-		 *
528
-		 * @param ReduxFramework $core ReduxFramework object.
529
-		 */
530
-		private function set_localized_data( ReduxFramework $core ) {
531
-			if ( ! empty( $core->args['last_tab'] ) ) {
532
-				$this->localize_data['last_tab'] = $core->args['last_tab'];
533
-			}
534
-
535
-			$this->localize_data['search'] = esc_html__( 'Search for field(s)', 'redux-framework' );
536
-
537
-			$this->localize_data['font_weights'] = $this->args['font_weights'];
538
-
539
-			$this->localize_data['required'] = Redux_Core::$required;
540
-			$this->repeater_data['fonts']    = Redux_Core::$fonts;
541
-
542
-			if ( ! isset( $this->repeater_data['opt_names'] ) ) {
543
-				$this->repeater_data['opt_names'] = array();
544
-			}
545
-
546
-			$this->repeater_data['opt_names'][]    = $core->args['opt_name'];
547
-			$this->repeater_data['folds']          = array();
548
-			$this->localize_data['required_child'] = Redux_Core::$required_child;
549
-			$this->localize_data['fields']         = $core->fields;
550
-
551
-			if ( isset( Redux_Core::$font_groups['google'] ) ) {
552
-				$this->repeater_data['googlefonts'] = Redux_Core::$font_groups['google'];
553
-			}
554
-
555
-			if ( isset( Redux_Core::$font_groups['std'] ) ) {
556
-				$this->repeater_data['stdfonts'] = Redux_Core::$font_groups['std'];
557
-			}
558
-
559
-			if ( isset( Redux_Core::$font_groups['customfonts'] ) ) {
560
-				$this->repeater_data['customfonts'] = Redux_Core::$font_groups['customfonts'];
561
-			}
562
-
563
-			if ( isset( Redux_Core::$font_groups['typekitfonts'] ) ) {
564
-				$this->repeater_data['typekitfonts'] = Redux_Core::$font_groups['typekitfonts'];
565
-			}
566
-
567
-			$this->localize_data['folds'] = Redux_Core::$folds;
568
-
569
-			// Make sure the children are all hidden properly.
570
-			foreach ( $core->fields as $key => $value ) {
571
-				if ( in_array( $key, Redux_Core::$fields_hidden, true ) ) {
572
-					foreach ( $value as $k => $v ) {
573
-						if ( ! in_array( $k, Redux_Core::$fields_hidden, true ) ) {
574
-							Redux_Core::$fields_hidden[] = $k;
575
-							Redux_Core::$folds[ $k ]     = 'hide';
576
-						}
577
-					}
578
-				}
579
-			}
580
-
581
-			$this->localize_data['fields_hidden'] = Redux_Core::$fields_hidden;
582
-			$this->localize_data['options']       = $core->options;
583
-			$this->localize_data['defaults']      = $core->options_defaults;
584
-
585
-			/**
586
-			 * Save pending string
587
-			 * filter 'redux/{opt_name}/localize/save_pending'
588
-			 *
589
-			 * @param string $msg Save_pending string
590
-			 */
591
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
592
-			$save_pending = apply_filters(
593
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
594
-				"redux/{$core->args['opt_name']}/localize/save_pending",
595
-				esc_html__(
596
-					'You have changes that are not saved. Would you like to save them now?',
597
-					'redux-framework'
598
-				)
599
-			);
600
-
601
-			/**
602
-			 * Reset all string
603
-			 * filter 'redux/{opt_name}/localize/reset'
604
-			 *
605
-			 * @param string $msg Reset all string.
606
-			 */
607
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
608
-			$reset_all = apply_filters(
609
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
610
-				"redux/{$core->args['opt_name']}/localize/reset",
611
-				esc_html__(
612
-					'Are you sure? Resetting will lose all custom values.',
613
-					'redux-framework'
614
-				)
615
-			);
616
-
617
-			/**
618
-			 * Reset section string
619
-			 * filter 'redux/{opt_name}/localize/reset_section'
620
-			 *
621
-			 * @param string $msg Reset section string.
622
-			 */
623
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
624
-			$reset_section = apply_filters(
625
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
626
-				"redux/{$core->args['opt_name']}/localize/reset_section",
627
-				esc_html__(
628
-					'Are you sure? Resetting will lose all custom values in this section.',
629
-					'redux-framework'
630
-				)
631
-			);
632
-
633
-			/**
634
-			 * Preset confirm string
635
-			 * filter 'redux/{opt_name}/localize/preset'
636
-			 *
637
-			 * @param string $msg Preset confirm string.
638
-			 */
639
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
640
-			$preset_confirm = apply_filters(
641
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
642
-				"redux/{$core->args['opt_name']}/localize/preset",
643
-				esc_html__(
644
-					'Your current options will be replaced with the values of this preset. Would you like to proceed?',
645
-					'redux-framework'
646
-				)
647
-			);
648
-
649
-			/**
650
-			 * Import confirm string
651
-			 * filter 'redux/{opt_name}/localize/import
652
-			 *
653
-			 * @param string $msg Import confirm string.
654
-			 */
655
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
656
-			$import_confirm = apply_filters(
657
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
658
-				"redux/{$core->args['opt_name']}/localize/import",
659
-				esc_html__(
660
-					'Your current options will be replaced with the values of this import. Would you like to proceed?',
661
-					'redux-framework'
662
-				)
663
-			);
664
-
665
-			global $pagenow;
666
-
667
-			$this->localize_data['args'] = array(
668
-				'dev_mode'               => $core->args['dev_mode'],
669
-				'save_pending'           => $save_pending,
670
-				'reset_confirm'          => $reset_all,
671
-				'reset_section_confirm'  => $reset_section,
672
-				'preset_confirm'         => $preset_confirm,
673
-				'import_section_confirm' => $import_confirm,
674
-				'please_wait'            => esc_html__( 'Please Wait', 'redux-framework' ),
675
-				'opt_name'               => $core->args['opt_name'],
676
-				'flyout_submenus'        => $core->args['flyout_submenus'] ?? false,
677
-				'search'                 => $core->args['search'] ?? true,
678
-				'slug'                   => $core->args['page_slug'],
679
-				'hints'                  => $core->args['hints'],
680
-				'disable_save_warn'      => $core->args['disable_save_warn'],
681
-				'class'                  => $core->args['class'],
682
-				'ajax_save'              => $core->args['ajax_save'],
683
-				'menu_search'            => $pagenow . '?page=' . $core->args['page_slug'] . '&tab=',
684
-			);
685
-
686
-			$this->localize_data['ajax'] = array(
687
-				'console' => esc_html__(
688
-					'There was an error saving. Here is the result of your action:',
689
-					'redux-framework'
690
-				),
691
-				'alert'   => esc_html__(
692
-					'There was a problem with your action. Please try again or reload the page.',
693
-					'redux-framework'
694
-				),
695
-			);
696
-
697
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
698
-			$this->localize_data = apply_filters( "redux/{$core->args['opt_name']}/localize", $this->localize_data );
699
-
700
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
701
-			$this->repeater_data = apply_filters( "redux/{$core->args['opt_name']}/repeater", $this->repeater_data );
702
-
703
-			$this->get_warnings_and_errors_array();
704
-
705
-			if ( ! isset( $core->repeater_data ) ) {
706
-				$core->repeater_data = array();
707
-			}
708
-			$core->repeater_data = Redux_Functions_Ex::nested_wp_parse_args(
709
-				$this->repeater_data,
710
-				$core->repeater_data
711
-			);
712
-
713
-			if ( ! isset( $core->localize_data ) ) {
714
-				$core->localize_data = array();
715
-			}
716
-			$core->localize_data = Redux_Functions_Ex::nested_wp_parse_args(
717
-				$this->localize_data,
718
-				$core->localize_data
719
-			);
720
-
721
-			// Shim for extension compatibility.
722
-			if ( Redux::$extension_compatibility ) {
723
-				$this->repeater_data = Redux_Functions_Ex::nested_wp_parse_args(
724
-					$this->repeater_data,
725
-					$core->localize_data
726
-				);
727
-			}
728
-
729
-			wp_localize_script(
730
-				'redux-js',
731
-				'redux',
732
-				$this->repeater_data
733
-			);
734
-
735
-			wp_localize_script(
736
-				'redux-js',
737
-				'redux_' . str_replace( '-', '_', $core->args['opt_name'] ),
738
-				$this->localize_data
739
-			);
740
-
741
-			wp_enqueue_script( 'redux-js' ); // Enqueue the JS now.
742
-		}
743
-	}
15
+    /**
16
+     * Class Redux_Enqueue
17
+     */
18
+    class Redux_Enqueue extends Redux_Class {
19
+
20
+        /**
21
+         * Data to localize.
22
+         *
23
+         * @var array
24
+         */
25
+        public array $localize_data = array();
26
+
27
+        /**
28
+         * Min string for .min files.
29
+         *
30
+         * @var string
31
+         */
32
+        private string $min = '';
33
+
34
+        /**
35
+         * Timestamp for file versions.
36
+         *
37
+         * @var string
38
+         */
39
+        private string $timestamp = '';
40
+
41
+        /**
42
+         * Localize data required for the repeater extension.
43
+         *
44
+         * @var array
45
+         */
46
+        private array $repeater_data = array();
47
+
48
+        /**
49
+         * Redux_Enqueue constructor.
50
+         *
51
+         * @param     object $redux ReduxFramework pointer.
52
+         */
53
+        public function __construct( $redux ) {
54
+            parent::__construct( $redux );
55
+
56
+            // Enqueue the admin page CSS and JS.
57
+            if ( isset( $_GET['page'] ) && $_GET['page'] === $redux->args['page_slug'] ) { // phpcs:ignore WordPress.Security.NonceVerification
58
+                add_action( 'admin_enqueue_scripts', array( $this, 'init' ), 1 );
59
+            }
60
+
61
+            add_action( 'wp_enqueue_scripts', array( $this, 'frontend_init' ), 10 );
62
+
63
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
64
+            do_action( "redux/{$redux->args['opt_name']}/enqueue/construct", $this );
65
+
66
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
67
+            do_action( 'redux/enqueue/construct', $this );
68
+
69
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
70
+            do_action( 'redux/search/' . $redux->args['opt_name'] . '/construct' );
71
+
72
+            //if ( isset( $_GET['page'] ) && sanitize_text_field( wp_unslash( $_GET['page'] === $this->parent->args['page_slug'] ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
73
+            //	add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ), 0 );
74
+            //}
75
+
76
+            //add_action( "redux/metaboxes/{$this->parent->args[ 'opt_name' ]}/enqueue", array( $this, 'enqueue' ), 10 );
77
+        }
78
+
79
+        /**
80
+         * Scripts to enqueue on the frontend
81
+         */
82
+        public function frontend_init() {
83
+            $core = $this->core();
84
+
85
+            if ( $core->args['elusive_frontend'] ) {
86
+                Redux_Functions_Ex::enqueue_elusive_font();
87
+            }
88
+
89
+            if ( $core->args['fontawesome_frontend'] ) {
90
+                Redux_Functions_Ex::enqueue_font_awesome();
91
+            }
92
+        }
93
+
94
+        /**
95
+         * Class init functions.
96
+         */
97
+        public function init() {
98
+            $core = $this->core();
99
+
100
+            Redux_Functions::$parent = $core;
101
+
102
+            $this->min = Redux_Functions::is_min();
103
+
104
+            $this->timestamp = Redux_Core::$version;
105
+            if ( $core->args['dev_mode'] ) {
106
+                $this->timestamp .= '.' . time();
107
+            }
108
+
109
+            $this->register_styles( $core );
110
+            $this->register_scripts();
111
+
112
+            add_thickbox();
113
+
114
+            $this->enqueue_fields( $core );
115
+
116
+            add_filter( "redux/{$core->args['opt_name']}/localize", array( 'Redux_Helpers', 'localize' ) );
117
+
118
+            $this->set_localized_data( $core );
119
+
120
+            /**
121
+             * Action 'redux/page/{opt_name}/enqueue'
122
+             */
123
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
124
+            do_action( "redux/page/{$core->args['opt_name']}/enqueue" );
125
+        }
126
+
127
+        /**
128
+         * Register all core framework styles.
129
+         *
130
+         * @param ReduxFramework $core ReduxFramework object.
131
+         */
132
+        private function register_styles( ReduxFramework $core ) {
133
+
134
+            /**
135
+             * Redux Admin CSS
136
+             */
137
+            if ( 'wordpress' === $core->args['admin_theme'] || 'wp' === $core->args['admin_theme'] ) { // phpcs:ignore WordPress.WP.CapitalPDangit
138
+                $color_scheme = get_user_option( 'admin_color' );
139
+            } elseif ( 'classic' === $core->args['admin_theme'] || '' === $core->args['admin_theme'] ) {
140
+                $color_scheme = 'classic';
141
+            } else {
142
+                $color_scheme = $core->args['admin_theme'];
143
+            }
144
+
145
+            if ( ! file_exists( Redux_Core::$dir . "assets/css/colors/$color_scheme/colors$this->min.css" ) ) {
146
+                $color_scheme = 'fresh';
147
+            }
148
+
149
+            $css = Redux_Core::$url . "assets/css/colors/$color_scheme/colors$this->min.css";
150
+
151
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
152
+            $css = apply_filters( 'redux/enqueue/' . $core->args['opt_name'] . '/args/admin_theme/css_url', $css );
153
+
154
+            wp_register_style(
155
+                'redux-admin-theme',
156
+                $css,
157
+                array(),
158
+                $this->timestamp
159
+            );
160
+
161
+            wp_enqueue_style(
162
+                'redux-admin-css',
163
+                Redux_Core::$url . "assets/css/redux-admin$this->min.css",
164
+                array( 'redux-admin-theme' ),
165
+                $this->timestamp
166
+            );
167
+
168
+            /**
169
+             * Redux Fields CSS
170
+             */
171
+            if ( ! $core->args['dev_mode'] ) {
172
+                wp_enqueue_style(
173
+                    'redux-fields',
174
+                    Redux_Core::$url . 'assets/css/redux-fields.min.css',
175
+                    array(),
176
+                    $this->timestamp
177
+                );
178
+            }
179
+
180
+            /**
181
+             * Select2 CSS
182
+             */
183
+            wp_enqueue_style(
184
+                'select2-css',
185
+                Redux_Core::$url . 'assets/css/vendor/select2.min.css',
186
+                array(),
187
+                '4.1.0'
188
+            );
189
+
190
+            /**
191
+             * Spectrum CSS
192
+             */
193
+            wp_register_style(
194
+                'redux-spectrum-css',
195
+                Redux_Core::$url . "assets/css/vendor/spectrum$this->min.css",
196
+                array(),
197
+                '1.3.3'
198
+            );
199
+
200
+            /**
201
+             * Elusive Icon CSS
202
+             */
203
+            Redux_Functions_Ex::enqueue_elusive_font();
204
+
205
+            /**
206
+             * Font Awesome for Social Profiles and Icon Select
207
+             */
208
+            Redux_Functions_Ex::enqueue_font_awesome();
209
+
210
+            /**
211
+             * QTip CSS
212
+             */
213
+            wp_enqueue_style(
214
+                'qtip',
215
+                Redux_Core::$url . "assets/css/vendor/qtip$this->min.css",
216
+                array(),
217
+                '3.0.3'
218
+            );
219
+
220
+            /**
221
+             * JQuery UI CSS
222
+             */
223
+            wp_enqueue_style(
224
+                'jquery-ui',
225
+                // phpcs:ignore WordPress.NamingConventions.ValidHookName
226
+                apply_filters(
227
+                // phpcs:ignore WordPress.NamingConventions.ValidHookName
228
+                    "redux/page/{$core->args['opt_name']}/enqueue/jquery-ui-css",
229
+                    Redux_Core::$url . 'assets/css/vendor/jquery-ui-1.10.0.custom.css'
230
+                ),
231
+                array(),
232
+                $this->timestamp
233
+            );
234
+
235
+            /**
236
+             * Iris CSS
237
+             */
238
+            wp_enqueue_style( 'wp-color-picker' );
239
+
240
+            if ( $core->args['dev_mode'] ) {
241
+
242
+                /**
243
+                 * Media CSS
244
+                 */
245
+                wp_enqueue_style(
246
+                    'redux-field-media',
247
+                    Redux_Core::$url . 'assets/css/media.css',
248
+                    array(),
249
+                    $this->timestamp
250
+                );
251
+            }
252
+
253
+            /**
254
+             * RTL CSS
255
+             */
256
+            if ( is_rtl() ) {
257
+                wp_enqueue_style(
258
+                    'redux-rtl',
259
+                    Redux_Core::$url . 'assets/css/rtl.css',
260
+                    array(),
261
+                    $this->timestamp
262
+                );
263
+            }
264
+        }
265
+
266
+        /**
267
+         * Register all core framework scripts.
268
+         */
269
+        private function register_scripts() {
270
+            // *****************************************************************
271
+            // JQuery / JQuery UI JS
272
+            // *****************************************************************
273
+            wp_enqueue_script( 'jquery' );
274
+            wp_enqueue_script( 'jquery-ui-core' );
275
+            wp_enqueue_script( 'jquery-ui-dialog' );
276
+
277
+            /**
278
+             * Select2 Sortable JS
279
+             */
280
+            wp_register_script(
281
+                'redux-select2-sortable',
282
+                Redux_Core::$url . 'assets/js/vendor/select2-sortable/redux.select2.sortable' . $this->min . '.js',
283
+                array( 'jquery', 'jquery-ui-sortable' ),
284
+                $this->timestamp,
285
+                true
286
+            );
287
+
288
+            /**
289
+             * Select2
290
+             */
291
+            wp_enqueue_script(
292
+                'select2-js',
293
+                Redux_Core::$url . 'assets/js/vendor/select2/select2' . $this->min . '.js`',
294
+                array( 'jquery', 'redux-select2-sortable' ),
295
+                '4.1.0',
296
+                true
297
+            );
298
+
299
+            /**
300
+             * QTip JS
301
+             */
302
+            wp_enqueue_script(
303
+                'qtip',
304
+                Redux_Core::$url . 'assets/js/vendor/qtip/qtip' . $this->min . '.js',
305
+                array( 'jquery' ),
306
+                '3.0.3',
307
+                true
308
+            );
309
+
310
+            /**
311
+             * Iris alpha color picker
312
+             */
313
+            if ( ! wp_script_is( 'redux-wp-color-picker-alpha' ) ) {
314
+                wp_enqueue_style( 'wp-color-picker' );
315
+
316
+                wp_register_script(
317
+                    'redux-wp-color-picker-alpha',
318
+                    Redux_Core::$url . 'assets/js/vendor/wp-color-picker-alpha/wp-color-picker-alpha' . $this->min . '.js',
319
+                    array( 'jquery', 'wp-color-picker' ),
320
+                    '3.0.0',
321
+                    true
322
+                );
323
+            }
324
+
325
+            /**
326
+             * Block UI (used by Custom Fonts and Color Schemes).
327
+             */
328
+            wp_register_script(
329
+                'redux-block-ui',
330
+                Redux_Core::$url . 'assets/js/vendor/block-ui/jquery.blockUI' . $this->min . '.js',
331
+                array( 'jquery' ),
332
+                '2.70.0',
333
+                true
334
+            );
335
+
336
+            /**
337
+             * Spectrum JS
338
+             */
339
+            wp_register_script(
340
+                'redux-spectrum-js',
341
+                Redux_Core::$url . 'assets/js/vendor/spectrum/redux-spectrum' . $this->min . '.js',
342
+                array( 'jquery' ),
343
+                '1.3.3',
344
+                true
345
+            );
346
+
347
+            /**
348
+             * Vendor JS
349
+             */
350
+            wp_register_script(
351
+                'redux-vendor',
352
+                Redux_Core::$url . 'assets/js/redux-vendors' . $this->min . '.js',
353
+                array( 'jquery' ),
354
+                $this->timestamp,
355
+                true
356
+            );
357
+
358
+            /**
359
+             * Redux JS
360
+             */
361
+            wp_register_script(
362
+                'redux-js',
363
+                Redux_Core::$url . 'assets/js/redux' . $this->min . '.js',
364
+                array( 'jquery', 'redux-vendor' ),
365
+                $this->timestamp,
366
+                true
367
+            );
368
+        }
369
+
370
+        /**
371
+         * Enqueue fields that are in use.
372
+         *
373
+         * @param ReduxFramework $core  ReduxFramework object.
374
+         * @param array          $field Field array.
375
+         */
376
+        public function enqueue_field( ReduxFramework $core, array $field ) {
377
+            if ( isset( $field['type'] ) && 'callback' !== $field['type'] ) {
378
+                $field_type = str_replace( '_', '-', $field['type'] );
379
+                $core_path  = Redux_Core::$dir . "inc/fields/{$field['type']}/class-redux-$field_type.php";
380
+
381
+                // Shim for v3 extension class names.
382
+                if ( ! file_exists( $core_path ) ) {
383
+                    $core_path = Redux_Core::$dir . "inc/fields/{$field['type']}/field_{$field['type']}.php";
384
+                }
385
+
386
+                $filter_path = $core_path;
387
+
388
+                /**
389
+                 * Field class file
390
+                 * filter 'redux/{opt_name}/field/class/{field.type}'
391
+                 *
392
+                 * @param     string    $filter_path Field class file path
393
+                 * @param     array     $field       Field config data
394
+                 */
395
+                // phpcs:ignore WordPress.NamingConventions.ValidHookName
396
+                $class_file = apply_filters(
397
+                // phpcs:ignore WordPress.NamingConventions.ValidHookName
398
+                    "redux/{$core->args['opt_name']}/field/class/{$field['type']}",
399
+                    $filter_path,
400
+                    $field
401
+                );
402
+
403
+                $field_classes = array( 'Redux_' . $field['type'], 'ReduxFramework_' . $field['type'] );
404
+
405
+                if ( $class_file ) {
406
+                    $field_class = Redux_Functions::class_exists_ex( $field_classes );
407
+                    if ( false === $field_class ) {
408
+                        if ( file_exists( $class_file ) ) {
409
+                            require_once $class_file;
410
+
411
+                            $field_class = Redux_Functions::class_exists_ex( $field_classes );
412
+                        } else {
413
+                            return;
414
+                        }
415
+                    }
416
+
417
+                    if ( false !== $field_class && ( ( method_exists( $field_class, 'enqueue' ) ) || method_exists( $field_class, 'localize' ) ) ) {
418
+                        if ( ! isset( $core->options[ $field['id'] ] ) ) {
419
+                            $core->options[ $field['id'] ] = '';
420
+                        }
421
+
422
+                        $the_field = new $field_class( $field, $core->options[ $field['id'] ], $core );
423
+
424
+                        // Move dev_mode check to a new if/then block.
425
+                        if ( ! wp_script_is( 'redux-field-' . $field_type ) && ( class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) ) {
426
+                            $the_field->enqueue();
427
+                        }
428
+
429
+                        if ( class_exists( $field_class ) && method_exists( $field_class, 'always_enqueue' ) ) {
430
+                            $the_field->always_enqueue();
431
+                        }
432
+
433
+                        if ( method_exists( $field_class, 'localize' ) ) {
434
+                            $the_field->localize( $field );
435
+
436
+                            if ( ! isset( $this->localize_data[ $field['type'] ] ) ) {
437
+                                $this->localize_data[ $field['type'] ] = array();
438
+                            }
439
+
440
+                            $localize_data = $the_field->localize( $field );
441
+
442
+                            $shims = array( 'repeater' );
443
+
444
+                            // phpcs:ignore WordPress.NamingConventions.ValidHookName
445
+                            $shims = apply_filters( 'redux/' . $core->args['opt_name'] . '/localize/shims', $shims );
446
+
447
+                            if ( is_array( $shims ) && in_array( $field['type'], $shims, true ) ) {
448
+                                $this->repeater_data[ $field['type'] ][ $field['id'] ] = $localize_data;
449
+                            }
450
+
451
+                            $this->localize_data[ $field['type'] ][ $field['id'] ] = $localize_data;
452
+                        }
453
+
454
+                        unset( $the_field );
455
+                    }
456
+                }
457
+            }
458
+        }
459
+
460
+        /**
461
+         * Enqueue field files.
462
+         *
463
+         * @param ReduxFramework $core ReduxFramework object.
464
+         */
465
+        private function enqueue_fields( ReduxFramework $core ) {
466
+            foreach ( $core->sections as $section ) {
467
+                if ( isset( $section['fields'] ) ) {
468
+                    foreach ( $section['fields'] as $field ) {
469
+                        $this->enqueue_field( $core, $field );
470
+                    }
471
+                }
472
+            }
473
+        }
474
+
475
+        /**
476
+         * Build a localized array from field functions, if any.
477
+         *
478
+         * @param ReduxFramework $core ReduxFramework object.
479
+         * @param string         $type Field type.
480
+         */
481
+        private function build_local_array( ReduxFramework $core, string $type ) {
482
+            if ( isset( $core->transients['last_save_mode'] ) && ! empty( $core->transients['notices'][ $type ] ) ) {
483
+                $the_total = 0;
484
+                $messages  = array();
485
+
486
+                foreach ( $core->transients['notices'][ $type ] as $msg ) {
487
+                    if ( is_array( $msg ) && ! empty( $msg ) ) {
488
+                        $messages[ $msg['section_id'] ][ $type ][] = $msg;
489
+
490
+                        if ( ! isset( $messages[ $msg['section_id'] ]['total'] ) ) {
491
+                            $messages[ $msg['section_id'] ]['total'] = 0;
492
+                        }
493
+
494
+                        ++$messages[ $msg['section_id'] ]['total'];
495
+                        ++$the_total;
496
+                    }
497
+                }
498
+
499
+                $this->localize_data[ $type ] = array(
500
+                    'total' => $the_total,
501
+                    "$type" => $messages,
502
+                );
503
+
504
+                unset( $core->transients['notices'][ $type ] );
505
+            }
506
+        }
507
+
508
+        /**
509
+         * Compile panel errors and wearings for a localized array.
510
+         */
511
+        public function get_warnings_and_errors_array() {
512
+            $core = $this->core();
513
+
514
+            $this->build_local_array( $core, 'errors' );
515
+            $this->build_local_array( $core, 'warnings' );
516
+            $this->build_local_array( $core, 'sanitize' );
517
+
518
+            if ( empty( $core->transients['notices'] ) ) {
519
+                if ( isset( $core->transients['notices'] ) ) {
520
+                    unset( $core->transients['notices'] );
521
+                }
522
+            }
523
+        }
524
+
525
+        /**
526
+         * Commit localized data to global array.
527
+         *
528
+         * @param ReduxFramework $core ReduxFramework object.
529
+         */
530
+        private function set_localized_data( ReduxFramework $core ) {
531
+            if ( ! empty( $core->args['last_tab'] ) ) {
532
+                $this->localize_data['last_tab'] = $core->args['last_tab'];
533
+            }
534
+
535
+            $this->localize_data['search'] = esc_html__( 'Search for field(s)', 'redux-framework' );
536
+
537
+            $this->localize_data['font_weights'] = $this->args['font_weights'];
538
+
539
+            $this->localize_data['required'] = Redux_Core::$required;
540
+            $this->repeater_data['fonts']    = Redux_Core::$fonts;
541
+
542
+            if ( ! isset( $this->repeater_data['opt_names'] ) ) {
543
+                $this->repeater_data['opt_names'] = array();
544
+            }
545
+
546
+            $this->repeater_data['opt_names'][]    = $core->args['opt_name'];
547
+            $this->repeater_data['folds']          = array();
548
+            $this->localize_data['required_child'] = Redux_Core::$required_child;
549
+            $this->localize_data['fields']         = $core->fields;
550
+
551
+            if ( isset( Redux_Core::$font_groups['google'] ) ) {
552
+                $this->repeater_data['googlefonts'] = Redux_Core::$font_groups['google'];
553
+            }
554
+
555
+            if ( isset( Redux_Core::$font_groups['std'] ) ) {
556
+                $this->repeater_data['stdfonts'] = Redux_Core::$font_groups['std'];
557
+            }
558
+
559
+            if ( isset( Redux_Core::$font_groups['customfonts'] ) ) {
560
+                $this->repeater_data['customfonts'] = Redux_Core::$font_groups['customfonts'];
561
+            }
562
+
563
+            if ( isset( Redux_Core::$font_groups['typekitfonts'] ) ) {
564
+                $this->repeater_data['typekitfonts'] = Redux_Core::$font_groups['typekitfonts'];
565
+            }
566
+
567
+            $this->localize_data['folds'] = Redux_Core::$folds;
568
+
569
+            // Make sure the children are all hidden properly.
570
+            foreach ( $core->fields as $key => $value ) {
571
+                if ( in_array( $key, Redux_Core::$fields_hidden, true ) ) {
572
+                    foreach ( $value as $k => $v ) {
573
+                        if ( ! in_array( $k, Redux_Core::$fields_hidden, true ) ) {
574
+                            Redux_Core::$fields_hidden[] = $k;
575
+                            Redux_Core::$folds[ $k ]     = 'hide';
576
+                        }
577
+                    }
578
+                }
579
+            }
580
+
581
+            $this->localize_data['fields_hidden'] = Redux_Core::$fields_hidden;
582
+            $this->localize_data['options']       = $core->options;
583
+            $this->localize_data['defaults']      = $core->options_defaults;
584
+
585
+            /**
586
+             * Save pending string
587
+             * filter 'redux/{opt_name}/localize/save_pending'
588
+             *
589
+             * @param string $msg Save_pending string
590
+             */
591
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
592
+            $save_pending = apply_filters(
593
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
594
+                "redux/{$core->args['opt_name']}/localize/save_pending",
595
+                esc_html__(
596
+                    'You have changes that are not saved. Would you like to save them now?',
597
+                    'redux-framework'
598
+                )
599
+            );
600
+
601
+            /**
602
+             * Reset all string
603
+             * filter 'redux/{opt_name}/localize/reset'
604
+             *
605
+             * @param string $msg Reset all string.
606
+             */
607
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
608
+            $reset_all = apply_filters(
609
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
610
+                "redux/{$core->args['opt_name']}/localize/reset",
611
+                esc_html__(
612
+                    'Are you sure? Resetting will lose all custom values.',
613
+                    'redux-framework'
614
+                )
615
+            );
616
+
617
+            /**
618
+             * Reset section string
619
+             * filter 'redux/{opt_name}/localize/reset_section'
620
+             *
621
+             * @param string $msg Reset section string.
622
+             */
623
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
624
+            $reset_section = apply_filters(
625
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
626
+                "redux/{$core->args['opt_name']}/localize/reset_section",
627
+                esc_html__(
628
+                    'Are you sure? Resetting will lose all custom values in this section.',
629
+                    'redux-framework'
630
+                )
631
+            );
632
+
633
+            /**
634
+             * Preset confirm string
635
+             * filter 'redux/{opt_name}/localize/preset'
636
+             *
637
+             * @param string $msg Preset confirm string.
638
+             */
639
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
640
+            $preset_confirm = apply_filters(
641
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
642
+                "redux/{$core->args['opt_name']}/localize/preset",
643
+                esc_html__(
644
+                    'Your current options will be replaced with the values of this preset. Would you like to proceed?',
645
+                    'redux-framework'
646
+                )
647
+            );
648
+
649
+            /**
650
+             * Import confirm string
651
+             * filter 'redux/{opt_name}/localize/import
652
+             *
653
+             * @param string $msg Import confirm string.
654
+             */
655
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
656
+            $import_confirm = apply_filters(
657
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
658
+                "redux/{$core->args['opt_name']}/localize/import",
659
+                esc_html__(
660
+                    'Your current options will be replaced with the values of this import. Would you like to proceed?',
661
+                    'redux-framework'
662
+                )
663
+            );
664
+
665
+            global $pagenow;
666
+
667
+            $this->localize_data['args'] = array(
668
+                'dev_mode'               => $core->args['dev_mode'],
669
+                'save_pending'           => $save_pending,
670
+                'reset_confirm'          => $reset_all,
671
+                'reset_section_confirm'  => $reset_section,
672
+                'preset_confirm'         => $preset_confirm,
673
+                'import_section_confirm' => $import_confirm,
674
+                'please_wait'            => esc_html__( 'Please Wait', 'redux-framework' ),
675
+                'opt_name'               => $core->args['opt_name'],
676
+                'flyout_submenus'        => $core->args['flyout_submenus'] ?? false,
677
+                'search'                 => $core->args['search'] ?? true,
678
+                'slug'                   => $core->args['page_slug'],
679
+                'hints'                  => $core->args['hints'],
680
+                'disable_save_warn'      => $core->args['disable_save_warn'],
681
+                'class'                  => $core->args['class'],
682
+                'ajax_save'              => $core->args['ajax_save'],
683
+                'menu_search'            => $pagenow . '?page=' . $core->args['page_slug'] . '&tab=',
684
+            );
685
+
686
+            $this->localize_data['ajax'] = array(
687
+                'console' => esc_html__(
688
+                    'There was an error saving. Here is the result of your action:',
689
+                    'redux-framework'
690
+                ),
691
+                'alert'   => esc_html__(
692
+                    'There was a problem with your action. Please try again or reload the page.',
693
+                    'redux-framework'
694
+                ),
695
+            );
696
+
697
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
698
+            $this->localize_data = apply_filters( "redux/{$core->args['opt_name']}/localize", $this->localize_data );
699
+
700
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
701
+            $this->repeater_data = apply_filters( "redux/{$core->args['opt_name']}/repeater", $this->repeater_data );
702
+
703
+            $this->get_warnings_and_errors_array();
704
+
705
+            if ( ! isset( $core->repeater_data ) ) {
706
+                $core->repeater_data = array();
707
+            }
708
+            $core->repeater_data = Redux_Functions_Ex::nested_wp_parse_args(
709
+                $this->repeater_data,
710
+                $core->repeater_data
711
+            );
712
+
713
+            if ( ! isset( $core->localize_data ) ) {
714
+                $core->localize_data = array();
715
+            }
716
+            $core->localize_data = Redux_Functions_Ex::nested_wp_parse_args(
717
+                $this->localize_data,
718
+                $core->localize_data
719
+            );
720
+
721
+            // Shim for extension compatibility.
722
+            if ( Redux::$extension_compatibility ) {
723
+                $this->repeater_data = Redux_Functions_Ex::nested_wp_parse_args(
724
+                    $this->repeater_data,
725
+                    $core->localize_data
726
+                );
727
+            }
728
+
729
+            wp_localize_script(
730
+                'redux-js',
731
+                'redux',
732
+                $this->repeater_data
733
+            );
734
+
735
+            wp_localize_script(
736
+                'redux-js',
737
+                'redux_' . str_replace( '-', '_', $core->args['opt_name'] ),
738
+                $this->localize_data
739
+            );
740
+
741
+            wp_enqueue_script( 'redux-js' ); // Enqueue the JS now.
742
+        }
743
+    }
744 744
 }
745 745
 
746 746
 if ( ! class_exists( 'reduxCoreEnqueue' ) ) {
747
-	class_alias( 'Redux_Enqueue', 'reduxCoreEnqueue' );
747
+    class_alias( 'Redux_Enqueue', 'reduxCoreEnqueue' );
748 748
 }
Please login to merge, or discard this patch.
Spacing   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -415,11 +415,11 @@  discard block
 block discarded – undo
415 415
 					}
416 416
 
417 417
 					if ( false !== $field_class && ( ( method_exists( $field_class, 'enqueue' ) ) || method_exists( $field_class, 'localize' ) ) ) {
418
-						if ( ! isset( $core->options[ $field['id'] ] ) ) {
419
-							$core->options[ $field['id'] ] = '';
418
+						if ( ! isset( $core->options[$field['id']] ) ) {
419
+							$core->options[$field['id']] = '';
420 420
 						}
421 421
 
422
-						$the_field = new $field_class( $field, $core->options[ $field['id'] ], $core );
422
+						$the_field = new $field_class( $field, $core->options[$field['id']], $core );
423 423
 
424 424
 						// Move dev_mode check to a new if/then block.
425 425
 						if ( ! wp_script_is( 'redux-field-' . $field_type ) && ( class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) ) {
@@ -433,8 +433,8 @@  discard block
 block discarded – undo
433 433
 						if ( method_exists( $field_class, 'localize' ) ) {
434 434
 							$the_field->localize( $field );
435 435
 
436
-							if ( ! isset( $this->localize_data[ $field['type'] ] ) ) {
437
-								$this->localize_data[ $field['type'] ] = array();
436
+							if ( ! isset( $this->localize_data[$field['type']] ) ) {
437
+								$this->localize_data[$field['type']] = array();
438 438
 							}
439 439
 
440 440
 							$localize_data = $the_field->localize( $field );
@@ -445,10 +445,10 @@  discard block
 block discarded – undo
445 445
 							$shims = apply_filters( 'redux/' . $core->args['opt_name'] . '/localize/shims', $shims );
446 446
 
447 447
 							if ( is_array( $shims ) && in_array( $field['type'], $shims, true ) ) {
448
-								$this->repeater_data[ $field['type'] ][ $field['id'] ] = $localize_data;
448
+								$this->repeater_data[$field['type']][$field['id']] = $localize_data;
449 449
 							}
450 450
 
451
-							$this->localize_data[ $field['type'] ][ $field['id'] ] = $localize_data;
451
+							$this->localize_data[$field['type']][$field['id']] = $localize_data;
452 452
 						}
453 453
 
454 454
 						unset( $the_field );
@@ -479,29 +479,29 @@  discard block
 block discarded – undo
479 479
 		 * @param string         $type Field type.
480 480
 		 */
481 481
 		private function build_local_array( ReduxFramework $core, string $type ) {
482
-			if ( isset( $core->transients['last_save_mode'] ) && ! empty( $core->transients['notices'][ $type ] ) ) {
482
+			if ( isset( $core->transients['last_save_mode'] ) && ! empty( $core->transients['notices'][$type] ) ) {
483 483
 				$the_total = 0;
484 484
 				$messages  = array();
485 485
 
486
-				foreach ( $core->transients['notices'][ $type ] as $msg ) {
486
+				foreach ( $core->transients['notices'][$type] as $msg ) {
487 487
 					if ( is_array( $msg ) && ! empty( $msg ) ) {
488
-						$messages[ $msg['section_id'] ][ $type ][] = $msg;
488
+						$messages[$msg['section_id']][$type][] = $msg;
489 489
 
490
-						if ( ! isset( $messages[ $msg['section_id'] ]['total'] ) ) {
491
-							$messages[ $msg['section_id'] ]['total'] = 0;
490
+						if ( ! isset( $messages[$msg['section_id']]['total'] ) ) {
491
+							$messages[$msg['section_id']]['total'] = 0;
492 492
 						}
493 493
 
494
-						++$messages[ $msg['section_id'] ]['total'];
494
+						++$messages[$msg['section_id']]['total'];
495 495
 						++$the_total;
496 496
 					}
497 497
 				}
498 498
 
499
-				$this->localize_data[ $type ] = array(
499
+				$this->localize_data[$type] = array(
500 500
 					'total' => $the_total,
501 501
 					"$type" => $messages,
502 502
 				);
503 503
 
504
-				unset( $core->transients['notices'][ $type ] );
504
+				unset( $core->transients['notices'][$type] );
505 505
 			}
506 506
 		}
507 507
 
@@ -572,7 +572,7 @@  discard block
 block discarded – undo
572 572
 					foreach ( $value as $k => $v ) {
573 573
 						if ( ! in_array( $k, Redux_Core::$fields_hidden, true ) ) {
574 574
 							Redux_Core::$fields_hidden[] = $k;
575
-							Redux_Core::$folds[ $k ]     = 'hide';
575
+							Redux_Core::$folds[$k]     = 'hide';
576 576
 						}
577 577
 					}
578 578
 				}
Please login to merge, or discard this patch.
redux-core/inc/classes/class-redux-functions-ex.php 2 patches
Spacing   +20 added lines, -20 removed lines patch added patch discarded remove patch
@@ -79,13 +79,13 @@  discard block
 block discarded – undo
79 79
 
80 80
 			if ( isset( $field['color_alpha'] ) && $field['color_alpha'] ) {
81 81
 				if ( is_array( $field['color_alpha'] ) ) {
82
-					$value = $field['color_alpha'][ $index ] ?? false;
82
+					$value = $field['color_alpha'][$index] ?? false;
83 83
 				} else {
84 84
 					$value = $field['color_alpha'];
85 85
 				}
86 86
 			}
87 87
 
88
-			return 'data-alpha-enabled="' . (bool) esc_attr( $value ) . '"';
88
+			return 'data-alpha-enabled="' . ( bool ) esc_attr( $value ) . '"';
89 89
 		}
90 90
 
91 91
 		/**
@@ -112,10 +112,10 @@  discard block
 block discarded – undo
112 112
 
113 113
 				$k = key( $params );
114 114
 
115
-				if ( ! isset( $result[ $k ] ) ) {
115
+				if ( ! isset( $result[$k] ) ) {
116 116
 					$result += $params;
117
-				} elseif ( is_array( $result[ $k ] ) && is_array( $params[ $k ] ) ) {
118
-					$result[ $k ] = self::array_merge_recursive_distinct( $result[ $k ], $params[ $k ] );
117
+				} elseif ( is_array( $result[$k] ) && is_array( $params[$k] ) ) {
118
+					$result[$k] = self::array_merge_recursive_distinct( $result[$k], $params[$k] );
119 119
 				}
120 120
 			}
121 121
 
@@ -139,12 +139,12 @@  discard block
 block discarded – undo
139 139
 
140 140
 			foreach ( $array2 as $key => $value ) {
141 141
 
142
-				if ( is_array( $value ) && isset( $merged[ $key ] ) && is_array( $merged[ $key ] ) ) {
143
-					$merged[ $key ] = self::array_merge_recursive_distinct( $merged[ $key ], $value );
144
-				} elseif ( is_numeric( $key ) && isset( $merged[ $key ] ) ) {
142
+				if ( is_array( $value ) && isset( $merged[$key] ) && is_array( $merged[$key] ) ) {
143
+					$merged[$key] = self::array_merge_recursive_distinct( $merged[$key], $value );
144
+				} elseif ( is_numeric( $key ) && isset( $merged[$key] ) ) {
145 145
 					$merged[] = $value;
146 146
 				} else {
147
-					$merged[ $key ] = $value;
147
+					$merged[$key] = $value;
148 148
 				}
149 149
 			}
150 150
 
@@ -168,20 +168,20 @@  discard block
 block discarded – undo
168 168
 			$caller = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 2 )[1]['file'];
169 169
 
170 170
 			if ( ! empty( $caller ) && ! empty( $opt_name ) && class_exists( 'Redux_Core' ) ) {
171
-				if ( ! isset( Redux_Core::$callers[ $opt_name ] ) ) {
172
-					Redux_Core::$callers[ $opt_name ] = array();
171
+				if ( ! isset( Redux_Core::$callers[$opt_name] ) ) {
172
+					Redux_Core::$callers[$opt_name] = array();
173 173
 				}
174 174
 
175 175
 				if ( strpos( $caller, 'class-redux-' ) !== false || strpos( $caller, 'redux-core/framework.php' ) ) {
176 176
 					return;
177 177
 				}
178 178
 
179
-				if ( ! in_array( $caller, Redux_Core::$callers[ $opt_name ], true ) ) {
180
-					Redux_Core::$callers[ $opt_name ][] = $caller;
179
+				if ( ! in_array( $caller, Redux_Core::$callers[$opt_name], true ) ) {
180
+					Redux_Core::$callers[$opt_name][] = $caller;
181 181
 				}
182 182
 
183
-				if ( ! empty( self::$args[ $opt_name ]['callers'] ) && ! in_array( $caller, self::$args[ $opt_name ]['callers'], true ) ) {
184
-					self::$args[ $opt_name ]['callers'][] = $caller;
183
+				if ( ! empty( self::$args[$opt_name]['callers'] ) && ! in_array( $caller, self::$args[$opt_name]['callers'], true ) ) {
184
+					self::$args[$opt_name]['callers'][] = $caller;
185 185
 				}
186 186
 			}
187 187
 		}
@@ -362,13 +362,13 @@  discard block
 block discarded – undo
362 362
 						'url'       => self::verify_url_protocol( trailingslashit( trailingslashit( $url ) . $relative_path ) . $filename ),
363 363
 						'basename'  => trailingslashit( $slug ) . trailingslashit( $relative_path ) . $filename,
364 364
 					);
365
-					$data['realpath'] = $data['real_path'];  // Shim for old extensions.
365
+					$data['realpath'] = $data['real_path']; // Shim for old extensions.
366 366
 
367 367
 					if ( count( $theme_paths ) > 1 ) {
368 368
 						$key = array_search( $theme_path, $theme_paths, true );
369 369
 
370 370
 						if ( false !== $key ) {
371
-							unset( $theme_paths[ $key ] );
371
+							unset( $theme_paths[$key] );
372 372
 						}
373 373
 
374 374
 						$theme_paths_end = end( $theme_paths );
@@ -397,10 +397,10 @@  discard block
 block discarded – undo
397 397
 			$result = $b;
398 398
 
399 399
 			foreach ( $a as $k => &$v ) {
400
-				if ( is_array( $v ) && isset( $result[ $k ] ) ) {
401
-					$result[ $k ] = self::nested_wp_parse_args( $v, $result[ $k ] );
400
+				if ( is_array( $v ) && isset( $result[$k] ) ) {
401
+					$result[$k] = self::nested_wp_parse_args( $v, $result[$k] );
402 402
 				} else {
403
-					$result[ $k ] = $v;
403
+					$result[$k] = $v;
404 404
 				}
405 405
 			}
406 406
 
Please login to merge, or discard this patch.
Indentation   +472 added lines, -472 removed lines patch added patch discarded remove patch
@@ -13,476 +13,476 @@
 block discarded – undo
13 13
 // Don't duplicate me!
14 14
 if ( ! class_exists( 'Redux_Functions_Ex', false ) ) {
15 15
 
16
-	/**
17
-	 * Redux Functions Class
18
-	 * A Class of useful functions that can/should be shared among all Redux files.
19
-	 *
20
-	 * @since       3.0.0
21
-	 */
22
-	class Redux_Functions_Ex {
23
-
24
-		/**
25
-		 * What is this for?
26
-		 *
27
-		 * @var array
28
-		 */
29
-		public static $args;
30
-
31
-		/**
32
-		 * Enqueue Font Awesome.
33
-		 *
34
-		 * @return void
35
-		 */
36
-		public static function enqueue_font_awesome() {
37
-			wp_enqueue_style(
38
-				'font-awesome',
39
-				Redux_Core::$url . 'assets/font-awesome/css/all' . Redux_Functions::is_min() . '.css',
40
-				array(),
41
-				'6.5.2'
42
-			);
43
-
44
-			wp_enqueue_style(
45
-				'font-awesome-4-shims',
46
-				Redux_Core::$url . 'assets/font-awesome/css/v4-shims' . Redux_Functions::is_min() . '.css',
47
-				array(),
48
-				'6.5.2'
49
-			);
50
-		}
51
-
52
-		/**
53
-		 * Enqueue Elusive Font.
54
-		 *
55
-		 * @return void
56
-		 */
57
-		public static function enqueue_elusive_font() {
58
-			wp_enqueue_style(
59
-				'redux-elusive-icon',
60
-				Redux_Core::$url . 'assets/css/vendor/elusive-icons' . Redux_Functions::is_min() . '.css',
61
-				array(),
62
-				'2.0.0'
63
-			);
64
-		}
65
-
66
-		/**
67
-		 * Output alpha data tag for Iris alpha color picker, if enabled.
68
-		 *
69
-		 * @param array $data Data array.
70
-		 *
71
-		 * @return string
72
-		 */
73
-		public static function output_alpha_data( array $data ): string {
74
-			$index = null;
75
-
76
-			extract( $data ); // phpcs:ignore WordPress.PHP.DontExtract
77
-
78
-			$value = false;
79
-
80
-			if ( isset( $field['color_alpha'] ) && $field['color_alpha'] ) {
81
-				if ( is_array( $field['color_alpha'] ) ) {
82
-					$value = $field['color_alpha'][ $index ] ?? false;
83
-				} else {
84
-					$value = $field['color_alpha'];
85
-				}
86
-			}
87
-
88
-			return 'data-alpha-enabled="' . (bool) esc_attr( $value ) . '"';
89
-		}
90
-
91
-		/**
92
-		 * Parses the string into variables without the max_input_vars limitation.
93
-		 *
94
-		 * @param string $str String of data.
95
-		 *
96
-		 * @return  array|false $result
97
-		 * @since   3.5.7.11
98
-		 * @author  harunbasic
99
-		 * @access  private
100
-		 */
101
-		public static function parse_str( string $str ) {
102
-			if ( '' === $str ) {
103
-				return false;
104
-			}
105
-
106
-			$result = array();
107
-			$pairs  = explode( '&', $str );
108
-
109
-			foreach ( $pairs as $pair ) {
110
-				// use the original parse_str() on each element.
111
-				parse_str( $pair, $params );
112
-
113
-				$k = key( $params );
114
-
115
-				if ( ! isset( $result[ $k ] ) ) {
116
-					$result += $params;
117
-				} elseif ( is_array( $result[ $k ] ) && is_array( $params[ $k ] ) ) {
118
-					$result[ $k ] = self::array_merge_recursive_distinct( $result[ $k ], $params[ $k ] );
119
-				}
120
-			}
121
-
122
-			return $result;
123
-		}
124
-
125
-		/**
126
-		 * Merge arrays without converting values with duplicate keys to arrays as array_merge_recursive does.
127
-		 * As seen here http://php.net/manual/en/function.array-merge-recursive.php#92195
128
-		 *
129
-		 * @param array $array1 array one.
130
-		 * @param array $array2 array two.
131
-		 *
132
-		 * @return  array $merged
133
-		 * @since   3.5.7.11
134
-		 * @author  harunbasic
135
-		 * @access  private
136
-		 */
137
-		public static function array_merge_recursive_distinct( array $array1, array $array2 ): array {
138
-			$merged = $array1;
139
-
140
-			foreach ( $array2 as $key => $value ) {
141
-
142
-				if ( is_array( $value ) && isset( $merged[ $key ] ) && is_array( $merged[ $key ] ) ) {
143
-					$merged[ $key ] = self::array_merge_recursive_distinct( $merged[ $key ], $value );
144
-				} elseif ( is_numeric( $key ) && isset( $merged[ $key ] ) ) {
145
-					$merged[] = $value;
146
-				} else {
147
-					$merged[ $key ] = $value;
148
-				}
149
-			}
150
-
151
-			return $merged;
152
-		}
153
-
154
-		/**
155
-		 * Records calling function.
156
-		 *
157
-		 * @param string $opt_name Panel opt_name.
158
-		 */
159
-		public static function record_caller( string $opt_name = '' ) {
160
-			global $pagenow;
161
-
162
-			// phpcs:ignore WordPress.Security.NonceVerification
163
-			if ( ! ( 'options-general.php' === $pagenow && isset( $_GET['page'] ) && ( 'redux-framework' === $_GET['page'] || 'health-check' === $_GET['page'] ) ) ) {
164
-				return;
165
-			}
166
-
167
-			// phpcs:ignore WordPress.PHP.DevelopmentFunctions
168
-			$caller = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 2 )[1]['file'];
169
-
170
-			if ( ! empty( $caller ) && ! empty( $opt_name ) && class_exists( 'Redux_Core' ) ) {
171
-				if ( ! isset( Redux_Core::$callers[ $opt_name ] ) ) {
172
-					Redux_Core::$callers[ $opt_name ] = array();
173
-				}
174
-
175
-				if ( strpos( $caller, 'class-redux-' ) !== false || strpos( $caller, 'redux-core/framework.php' ) ) {
176
-					return;
177
-				}
178
-
179
-				if ( ! in_array( $caller, Redux_Core::$callers[ $opt_name ], true ) ) {
180
-					Redux_Core::$callers[ $opt_name ][] = $caller;
181
-				}
182
-
183
-				if ( ! empty( self::$args[ $opt_name ]['callers'] ) && ! in_array( $caller, self::$args[ $opt_name ]['callers'], true ) ) {
184
-					self::$args[ $opt_name ]['callers'][] = $caller;
185
-				}
186
-			}
187
-		}
188
-
189
-		/**
190
-		 * Normalize path.
191
-		 *
192
-		 * @param string $path Path to normalize.
193
-		 *
194
-		 * @return string|string[]|null
195
-		 */
196
-		public static function wp_normalize_path( string $path = '' ) {
197
-			if ( function_exists( 'wp_normalize_path' ) ) {
198
-				$path = wp_normalize_path( $path );
199
-			} else {
200
-				// Shim for pre WP 3.9.
201
-				$path = str_replace( '\\', '/', $path );
202
-				$path = preg_replace( '|(?<=.)/+|', '/', $path );
203
-
204
-				if ( ':' === substr( $path, 1, 1 ) ) {
205
-					$path = ucfirst( $path );
206
-				}
207
-			}
208
-
209
-			return $path;
210
-		}
211
-
212
-		/**
213
-		 * Action to add generator tag to page HEAD.
214
-		 */
215
-		public static function generator() {
216
-			add_action( 'wp_head', array( 'Redux_Functions_Ex', 'meta_tag' ) );
217
-		}
218
-
219
-
220
-		/**
221
-		 * Callback for wp_head hook to add meta tag.
222
-		 */
223
-		public static function meta_tag() {
224
-			echo '<meta name="generator" content="Redux ' . esc_html( Redux_Core::$version ) . '" />';
225
-		}
226
-
227
-		/**
228
-		 * Run URL through a ssl check.
229
-		 *
230
-		 * @param string $url URL to check.
231
-		 *
232
-		 * @return string
233
-		 */
234
-		public static function verify_url_protocol( string $url ): string {
235
-			// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
236
-			$protocol = ! empty( $_SERVER['HTTPS'] ) && 'off' !== $_SERVER['HTTPS'] || ( ! empty( $_SERVER['SERVER_PORT'] ) && 443 === $_SERVER['SERVER_PORT'] ) ? 'https://' : 'http://';
237
-
238
-			if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
239
-				$new_protocol = sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) . '://'; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
240
-				if ( 'http://' === $protocol && $new_protocol !== $protocol && false === strpos( $url, $new_protocol ) ) {
241
-					$url = str_replace( $protocol, $new_protocol, $url );
242
-				}
243
-			}
244
-
245
-			return $url;
246
-		}
247
-
248
-		/**
249
-		 * Check s.
250
-		 *
251
-		 * @access public
252
-		 * @return bool
253
-		 * @since  4.0.0
254
-		 */
255
-		public static function s(): bool {
256
-			if ( ! get_option( 'redux_p' . 'ro_lic' . 'ense_key', false ) ) { // phpcs:ignore Generic.Strings.UnnecessaryStringConcat.Found
257
-				$s = get_option( 'redux_p' . 'ro_l' . 'icense_status', false ); // phpcs:ignore Generic.Strings.UnnecessaryStringConcat.Found
258
-
259
-				if ( in_array( $s, array( 'valid', 'site_inactive' ), true ) ) {
260
-					return true;
261
-				}
262
-			}
263
-
264
-			return false;
265
-		}
266
-
267
-		/**
268
-		 * Is file in theme.
269
-		 *
270
-		 * @param string $file File to check.
271
-		 *
272
-		 * @return bool
273
-		 */
274
-		public static function file_in_theme( string $file ): bool {
275
-			$file_path = self::wp_normalize_path( dirname( $file ) );
276
-
277
-			if ( strpos( $file_path, self::wp_normalize_path( get_template_directory() ) ) !== false ) {
278
-				return true;
279
-			} elseif ( strpos( $file_path, self::wp_normalize_path( get_stylesheet_directory() ) ) !== false ) {
280
-				return true;
281
-			}
282
-
283
-			return false;
284
-		}
285
-
286
-		/**
287
-		 * Is Redux embedded inside a plugin?
288
-		 *
289
-		 * @param string $file File to check.
290
-		 *
291
-		 * @return array|bool
292
-		 */
293
-		public static function is_inside_plugin( string $file ) {
294
-			$file            = self::wp_normalize_path( $file );
295
-			$plugin_basename = self::wp_normalize_path( plugin_basename( $file ) );
296
-
297
-			if ( self::file_in_theme( $file ) ) {
298
-				return false;
299
-			}
300
-
301
-			if ( $plugin_basename !== $file ) {
302
-				$slug = explode( '/', $plugin_basename );
303
-				$slug = $slug[0];
304
-
305
-				return array(
306
-					'slug'      => $slug,
307
-					'basename'  => $plugin_basename,
308
-					'path'      => $file,
309
-					'url'       => self::verify_url_protocol( plugins_url( $plugin_basename ) ),
310
-					'real_path' => self::wp_normalize_path( dirname( realpath( $file ) ) ),
311
-				);
312
-			}
313
-
314
-			return false;
315
-		}
316
-
317
-		/**
318
-		 * Is Redux embedded in a theme?
319
-		 *
320
-		 * @param string $file File to check.
321
-		 *
322
-		 * @return array|bool
323
-		 */
324
-		public static function is_inside_theme( string $file = '' ) {
325
-
326
-			if ( ! self::file_in_theme( $file ) ) {
327
-				return false;
328
-			}
329
-
330
-			$theme_paths = array(
331
-				self::wp_normalize_path( get_template_directory() )   => get_template_directory_uri(),
332
-				// parent.
333
-				self::wp_normalize_path( get_stylesheet_directory() ) => get_stylesheet_directory_uri(),
334
-				// child.
335
-			);
336
-
337
-			$theme_paths = array_unique( $theme_paths );
338
-			$file_path   = self::wp_normalize_path( $file );
339
-
340
-			$filename = explode( DIRECTORY_SEPARATOR, $file );
341
-
342
-			end( $filename );
343
-
344
-			$filename = prev( $filename );
345
-
346
-			foreach ( $theme_paths as $theme_path => $url ) {
347
-				$real_path = self::wp_normalize_path( realpath( $theme_path ) );
348
-
349
-				if ( empty( $real_path ) ) {
350
-					continue;
351
-				}
352
-
353
-				if ( strpos( $file_path, $real_path ) !== false ) {
354
-					$slug             = explode( '/', $theme_path );
355
-					$slug             = end( $slug );
356
-					$relative_path    = explode( $slug . '/', dirname( $file_path ) );
357
-					$relative_path    = $relative_path[1];
358
-					$data             = array(
359
-						'slug'      => $slug,
360
-						'path'      => trailingslashit( trailingslashit( $theme_path ) . $relative_path ) . $filename,
361
-						'real_path' => trailingslashit( trailingslashit( $real_path ) . $relative_path ) . $filename,
362
-						'url'       => self::verify_url_protocol( trailingslashit( trailingslashit( $url ) . $relative_path ) . $filename ),
363
-						'basename'  => trailingslashit( $slug ) . trailingslashit( $relative_path ) . $filename,
364
-					);
365
-					$data['realpath'] = $data['real_path'];  // Shim for old extensions.
366
-
367
-					if ( count( $theme_paths ) > 1 ) {
368
-						$key = array_search( $theme_path, $theme_paths, true );
369
-
370
-						if ( false !== $key ) {
371
-							unset( $theme_paths[ $key ] );
372
-						}
373
-
374
-						$theme_paths_end = end( $theme_paths );
375
-						$parent_slug_end = explode( '/', $theme_paths_end );
376
-						$parent_slug_end = end( $parent_slug_end );
377
-
378
-						$data['parent_slug'] = $parent_slug_end;
379
-					}
380
-
381
-					return $data;
382
-				}
383
-			}
384
-
385
-			return false;
386
-		}
387
-
388
-		/**
389
-		 * Used to merge two deep arrays.
390
-		 *
391
-		 * @param array $a First array to deeply merge.
392
-		 * @param array $b Second array to deeply merge.
393
-		 *
394
-		 * @return    array - Deep merge of the two arrays.
395
-		 */
396
-		public static function nested_wp_parse_args( array &$a, array $b ): array {
397
-			$result = $b;
398
-
399
-			foreach ( $a as $k => &$v ) {
400
-				if ( is_array( $v ) && isset( $result[ $k ] ) ) {
401
-					$result[ $k ] = self::nested_wp_parse_args( $v, $result[ $k ] );
402
-				} else {
403
-					$result[ $k ] = $v;
404
-				}
405
-			}
406
-
407
-			return $result;
408
-		}
409
-
410
-		/**
411
-		 * AJAX callback key
412
-		 */
413
-		public static function hash_key(): string {
414
-			$key  = defined( 'AUTH_KEY' ) ? AUTH_KEY : get_site_url();
415
-			$key .= defined( 'SECURE_AUTH_KEY' ) ? SECURE_AUTH_KEY : '';
416
-
417
-			return $key;
418
-		}
419
-
420
-		/**
421
-		 * Register a class path to be autoloaded.
422
-		 * Registers a namespace to be autoloaded from a given path, using the
423
-		 * WordPress/HM-style filenames (`class-{name}.php`).
424
-		 *
425
-		 * @link https://engineering.hmn.md/standards/style/php/#file-naming
426
-		 *
427
-		 * @param string $prefix Prefix to autoload from.
428
-		 * @param string $path   Path to validate.
429
-		 */
430
-		public static function register_class_path( string $prefix = '', string $path = '' ) {
431
-			if ( ! class_exists( 'Redux_Autoloader' ) ) {
432
-				require_once Redux_Path::get_path( '/inc/classes/class-redux-autoloader.php' );
433
-			}
434
-
435
-			$loader = new Redux_Autoloader( $prefix, $path );
436
-
437
-			spl_autoload_register( array( $loader, 'load' ) );
438
-		}
439
-
440
-		/**
441
-		 * Check if a string starts with a string.
442
-		 *
443
-		 * @param string $haystack Full string.
444
-		 * @param string $needle   String to check if it starts with.
445
-		 *
446
-		 * @return bool
447
-		 */
448
-		public static function string_starts_with( string $haystack, string $needle ): bool {
449
-			$length = strlen( $needle );
450
-
451
-			return substr( $haystack, 0, $length ) === $needle;
452
-		}
453
-
454
-		/**
455
-		 * Check if a string ends with a string.
456
-		 *
457
-		 * @param string $haystack Full string.
458
-		 * @param string $needle   String to check if it starts with.
459
-		 *
460
-		 * @return bool
461
-		 */
462
-		public static function string_ends_with( string $haystack, string $needle ): bool {
463
-			$length = strlen( $needle );
464
-
465
-			if ( ! $length ) {
466
-				return true;
467
-			}
468
-
469
-			return substr( $haystack, - $length ) === $needle;
470
-		}
471
-
472
-		/**
473
-		 * Is plugin active.
474
-		 *
475
-		 * @param string $name Plugin name.
476
-		 *
477
-		 * @return bool
478
-		 */
479
-		public static function is_plugin_active( string $name ): bool {
480
-			// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- active_plugins is a WP hook.
481
-			if ( in_array( $name . '/' . $name . '.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ), true ) ) {
482
-				return true;
483
-			}
484
-
485
-			return false;
486
-		}
487
-	}
16
+    /**
17
+     * Redux Functions Class
18
+     * A Class of useful functions that can/should be shared among all Redux files.
19
+     *
20
+     * @since       3.0.0
21
+     */
22
+    class Redux_Functions_Ex {
23
+
24
+        /**
25
+         * What is this for?
26
+         *
27
+         * @var array
28
+         */
29
+        public static $args;
30
+
31
+        /**
32
+         * Enqueue Font Awesome.
33
+         *
34
+         * @return void
35
+         */
36
+        public static function enqueue_font_awesome() {
37
+            wp_enqueue_style(
38
+                'font-awesome',
39
+                Redux_Core::$url . 'assets/font-awesome/css/all' . Redux_Functions::is_min() . '.css',
40
+                array(),
41
+                '6.5.2'
42
+            );
43
+
44
+            wp_enqueue_style(
45
+                'font-awesome-4-shims',
46
+                Redux_Core::$url . 'assets/font-awesome/css/v4-shims' . Redux_Functions::is_min() . '.css',
47
+                array(),
48
+                '6.5.2'
49
+            );
50
+        }
51
+
52
+        /**
53
+         * Enqueue Elusive Font.
54
+         *
55
+         * @return void
56
+         */
57
+        public static function enqueue_elusive_font() {
58
+            wp_enqueue_style(
59
+                'redux-elusive-icon',
60
+                Redux_Core::$url . 'assets/css/vendor/elusive-icons' . Redux_Functions::is_min() . '.css',
61
+                array(),
62
+                '2.0.0'
63
+            );
64
+        }
65
+
66
+        /**
67
+         * Output alpha data tag for Iris alpha color picker, if enabled.
68
+         *
69
+         * @param array $data Data array.
70
+         *
71
+         * @return string
72
+         */
73
+        public static function output_alpha_data( array $data ): string {
74
+            $index = null;
75
+
76
+            extract( $data ); // phpcs:ignore WordPress.PHP.DontExtract
77
+
78
+            $value = false;
79
+
80
+            if ( isset( $field['color_alpha'] ) && $field['color_alpha'] ) {
81
+                if ( is_array( $field['color_alpha'] ) ) {
82
+                    $value = $field['color_alpha'][ $index ] ?? false;
83
+                } else {
84
+                    $value = $field['color_alpha'];
85
+                }
86
+            }
87
+
88
+            return 'data-alpha-enabled="' . (bool) esc_attr( $value ) . '"';
89
+        }
90
+
91
+        /**
92
+         * Parses the string into variables without the max_input_vars limitation.
93
+         *
94
+         * @param string $str String of data.
95
+         *
96
+         * @return  array|false $result
97
+         * @since   3.5.7.11
98
+         * @author  harunbasic
99
+         * @access  private
100
+         */
101
+        public static function parse_str( string $str ) {
102
+            if ( '' === $str ) {
103
+                return false;
104
+            }
105
+
106
+            $result = array();
107
+            $pairs  = explode( '&', $str );
108
+
109
+            foreach ( $pairs as $pair ) {
110
+                // use the original parse_str() on each element.
111
+                parse_str( $pair, $params );
112
+
113
+                $k = key( $params );
114
+
115
+                if ( ! isset( $result[ $k ] ) ) {
116
+                    $result += $params;
117
+                } elseif ( is_array( $result[ $k ] ) && is_array( $params[ $k ] ) ) {
118
+                    $result[ $k ] = self::array_merge_recursive_distinct( $result[ $k ], $params[ $k ] );
119
+                }
120
+            }
121
+
122
+            return $result;
123
+        }
124
+
125
+        /**
126
+         * Merge arrays without converting values with duplicate keys to arrays as array_merge_recursive does.
127
+         * As seen here http://php.net/manual/en/function.array-merge-recursive.php#92195
128
+         *
129
+         * @param array $array1 array one.
130
+         * @param array $array2 array two.
131
+         *
132
+         * @return  array $merged
133
+         * @since   3.5.7.11
134
+         * @author  harunbasic
135
+         * @access  private
136
+         */
137
+        public static function array_merge_recursive_distinct( array $array1, array $array2 ): array {
138
+            $merged = $array1;
139
+
140
+            foreach ( $array2 as $key => $value ) {
141
+
142
+                if ( is_array( $value ) && isset( $merged[ $key ] ) && is_array( $merged[ $key ] ) ) {
143
+                    $merged[ $key ] = self::array_merge_recursive_distinct( $merged[ $key ], $value );
144
+                } elseif ( is_numeric( $key ) && isset( $merged[ $key ] ) ) {
145
+                    $merged[] = $value;
146
+                } else {
147
+                    $merged[ $key ] = $value;
148
+                }
149
+            }
150
+
151
+            return $merged;
152
+        }
153
+
154
+        /**
155
+         * Records calling function.
156
+         *
157
+         * @param string $opt_name Panel opt_name.
158
+         */
159
+        public static function record_caller( string $opt_name = '' ) {
160
+            global $pagenow;
161
+
162
+            // phpcs:ignore WordPress.Security.NonceVerification
163
+            if ( ! ( 'options-general.php' === $pagenow && isset( $_GET['page'] ) && ( 'redux-framework' === $_GET['page'] || 'health-check' === $_GET['page'] ) ) ) {
164
+                return;
165
+            }
166
+
167
+            // phpcs:ignore WordPress.PHP.DevelopmentFunctions
168
+            $caller = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 2 )[1]['file'];
169
+
170
+            if ( ! empty( $caller ) && ! empty( $opt_name ) && class_exists( 'Redux_Core' ) ) {
171
+                if ( ! isset( Redux_Core::$callers[ $opt_name ] ) ) {
172
+                    Redux_Core::$callers[ $opt_name ] = array();
173
+                }
174
+
175
+                if ( strpos( $caller, 'class-redux-' ) !== false || strpos( $caller, 'redux-core/framework.php' ) ) {
176
+                    return;
177
+                }
178
+
179
+                if ( ! in_array( $caller, Redux_Core::$callers[ $opt_name ], true ) ) {
180
+                    Redux_Core::$callers[ $opt_name ][] = $caller;
181
+                }
182
+
183
+                if ( ! empty( self::$args[ $opt_name ]['callers'] ) && ! in_array( $caller, self::$args[ $opt_name ]['callers'], true ) ) {
184
+                    self::$args[ $opt_name ]['callers'][] = $caller;
185
+                }
186
+            }
187
+        }
188
+
189
+        /**
190
+         * Normalize path.
191
+         *
192
+         * @param string $path Path to normalize.
193
+         *
194
+         * @return string|string[]|null
195
+         */
196
+        public static function wp_normalize_path( string $path = '' ) {
197
+            if ( function_exists( 'wp_normalize_path' ) ) {
198
+                $path = wp_normalize_path( $path );
199
+            } else {
200
+                // Shim for pre WP 3.9.
201
+                $path = str_replace( '\\', '/', $path );
202
+                $path = preg_replace( '|(?<=.)/+|', '/', $path );
203
+
204
+                if ( ':' === substr( $path, 1, 1 ) ) {
205
+                    $path = ucfirst( $path );
206
+                }
207
+            }
208
+
209
+            return $path;
210
+        }
211
+
212
+        /**
213
+         * Action to add generator tag to page HEAD.
214
+         */
215
+        public static function generator() {
216
+            add_action( 'wp_head', array( 'Redux_Functions_Ex', 'meta_tag' ) );
217
+        }
218
+
219
+
220
+        /**
221
+         * Callback for wp_head hook to add meta tag.
222
+         */
223
+        public static function meta_tag() {
224
+            echo '<meta name="generator" content="Redux ' . esc_html( Redux_Core::$version ) . '" />';
225
+        }
226
+
227
+        /**
228
+         * Run URL through a ssl check.
229
+         *
230
+         * @param string $url URL to check.
231
+         *
232
+         * @return string
233
+         */
234
+        public static function verify_url_protocol( string $url ): string {
235
+            // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
236
+            $protocol = ! empty( $_SERVER['HTTPS'] ) && 'off' !== $_SERVER['HTTPS'] || ( ! empty( $_SERVER['SERVER_PORT'] ) && 443 === $_SERVER['SERVER_PORT'] ) ? 'https://' : 'http://';
237
+
238
+            if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
239
+                $new_protocol = sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) . '://'; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
240
+                if ( 'http://' === $protocol && $new_protocol !== $protocol && false === strpos( $url, $new_protocol ) ) {
241
+                    $url = str_replace( $protocol, $new_protocol, $url );
242
+                }
243
+            }
244
+
245
+            return $url;
246
+        }
247
+
248
+        /**
249
+         * Check s.
250
+         *
251
+         * @access public
252
+         * @return bool
253
+         * @since  4.0.0
254
+         */
255
+        public static function s(): bool {
256
+            if ( ! get_option( 'redux_p' . 'ro_lic' . 'ense_key', false ) ) { // phpcs:ignore Generic.Strings.UnnecessaryStringConcat.Found
257
+                $s = get_option( 'redux_p' . 'ro_l' . 'icense_status', false ); // phpcs:ignore Generic.Strings.UnnecessaryStringConcat.Found
258
+
259
+                if ( in_array( $s, array( 'valid', 'site_inactive' ), true ) ) {
260
+                    return true;
261
+                }
262
+            }
263
+
264
+            return false;
265
+        }
266
+
267
+        /**
268
+         * Is file in theme.
269
+         *
270
+         * @param string $file File to check.
271
+         *
272
+         * @return bool
273
+         */
274
+        public static function file_in_theme( string $file ): bool {
275
+            $file_path = self::wp_normalize_path( dirname( $file ) );
276
+
277
+            if ( strpos( $file_path, self::wp_normalize_path( get_template_directory() ) ) !== false ) {
278
+                return true;
279
+            } elseif ( strpos( $file_path, self::wp_normalize_path( get_stylesheet_directory() ) ) !== false ) {
280
+                return true;
281
+            }
282
+
283
+            return false;
284
+        }
285
+
286
+        /**
287
+         * Is Redux embedded inside a plugin?
288
+         *
289
+         * @param string $file File to check.
290
+         *
291
+         * @return array|bool
292
+         */
293
+        public static function is_inside_plugin( string $file ) {
294
+            $file            = self::wp_normalize_path( $file );
295
+            $plugin_basename = self::wp_normalize_path( plugin_basename( $file ) );
296
+
297
+            if ( self::file_in_theme( $file ) ) {
298
+                return false;
299
+            }
300
+
301
+            if ( $plugin_basename !== $file ) {
302
+                $slug = explode( '/', $plugin_basename );
303
+                $slug = $slug[0];
304
+
305
+                return array(
306
+                    'slug'      => $slug,
307
+                    'basename'  => $plugin_basename,
308
+                    'path'      => $file,
309
+                    'url'       => self::verify_url_protocol( plugins_url( $plugin_basename ) ),
310
+                    'real_path' => self::wp_normalize_path( dirname( realpath( $file ) ) ),
311
+                );
312
+            }
313
+
314
+            return false;
315
+        }
316
+
317
+        /**
318
+         * Is Redux embedded in a theme?
319
+         *
320
+         * @param string $file File to check.
321
+         *
322
+         * @return array|bool
323
+         */
324
+        public static function is_inside_theme( string $file = '' ) {
325
+
326
+            if ( ! self::file_in_theme( $file ) ) {
327
+                return false;
328
+            }
329
+
330
+            $theme_paths = array(
331
+                self::wp_normalize_path( get_template_directory() )   => get_template_directory_uri(),
332
+                // parent.
333
+                self::wp_normalize_path( get_stylesheet_directory() ) => get_stylesheet_directory_uri(),
334
+                // child.
335
+            );
336
+
337
+            $theme_paths = array_unique( $theme_paths );
338
+            $file_path   = self::wp_normalize_path( $file );
339
+
340
+            $filename = explode( DIRECTORY_SEPARATOR, $file );
341
+
342
+            end( $filename );
343
+
344
+            $filename = prev( $filename );
345
+
346
+            foreach ( $theme_paths as $theme_path => $url ) {
347
+                $real_path = self::wp_normalize_path( realpath( $theme_path ) );
348
+
349
+                if ( empty( $real_path ) ) {
350
+                    continue;
351
+                }
352
+
353
+                if ( strpos( $file_path, $real_path ) !== false ) {
354
+                    $slug             = explode( '/', $theme_path );
355
+                    $slug             = end( $slug );
356
+                    $relative_path    = explode( $slug . '/', dirname( $file_path ) );
357
+                    $relative_path    = $relative_path[1];
358
+                    $data             = array(
359
+                        'slug'      => $slug,
360
+                        'path'      => trailingslashit( trailingslashit( $theme_path ) . $relative_path ) . $filename,
361
+                        'real_path' => trailingslashit( trailingslashit( $real_path ) . $relative_path ) . $filename,
362
+                        'url'       => self::verify_url_protocol( trailingslashit( trailingslashit( $url ) . $relative_path ) . $filename ),
363
+                        'basename'  => trailingslashit( $slug ) . trailingslashit( $relative_path ) . $filename,
364
+                    );
365
+                    $data['realpath'] = $data['real_path'];  // Shim for old extensions.
366
+
367
+                    if ( count( $theme_paths ) > 1 ) {
368
+                        $key = array_search( $theme_path, $theme_paths, true );
369
+
370
+                        if ( false !== $key ) {
371
+                            unset( $theme_paths[ $key ] );
372
+                        }
373
+
374
+                        $theme_paths_end = end( $theme_paths );
375
+                        $parent_slug_end = explode( '/', $theme_paths_end );
376
+                        $parent_slug_end = end( $parent_slug_end );
377
+
378
+                        $data['parent_slug'] = $parent_slug_end;
379
+                    }
380
+
381
+                    return $data;
382
+                }
383
+            }
384
+
385
+            return false;
386
+        }
387
+
388
+        /**
389
+         * Used to merge two deep arrays.
390
+         *
391
+         * @param array $a First array to deeply merge.
392
+         * @param array $b Second array to deeply merge.
393
+         *
394
+         * @return    array - Deep merge of the two arrays.
395
+         */
396
+        public static function nested_wp_parse_args( array &$a, array $b ): array {
397
+            $result = $b;
398
+
399
+            foreach ( $a as $k => &$v ) {
400
+                if ( is_array( $v ) && isset( $result[ $k ] ) ) {
401
+                    $result[ $k ] = self::nested_wp_parse_args( $v, $result[ $k ] );
402
+                } else {
403
+                    $result[ $k ] = $v;
404
+                }
405
+            }
406
+
407
+            return $result;
408
+        }
409
+
410
+        /**
411
+         * AJAX callback key
412
+         */
413
+        public static function hash_key(): string {
414
+            $key  = defined( 'AUTH_KEY' ) ? AUTH_KEY : get_site_url();
415
+            $key .= defined( 'SECURE_AUTH_KEY' ) ? SECURE_AUTH_KEY : '';
416
+
417
+            return $key;
418
+        }
419
+
420
+        /**
421
+         * Register a class path to be autoloaded.
422
+         * Registers a namespace to be autoloaded from a given path, using the
423
+         * WordPress/HM-style filenames (`class-{name}.php`).
424
+         *
425
+         * @link https://engineering.hmn.md/standards/style/php/#file-naming
426
+         *
427
+         * @param string $prefix Prefix to autoload from.
428
+         * @param string $path   Path to validate.
429
+         */
430
+        public static function register_class_path( string $prefix = '', string $path = '' ) {
431
+            if ( ! class_exists( 'Redux_Autoloader' ) ) {
432
+                require_once Redux_Path::get_path( '/inc/classes/class-redux-autoloader.php' );
433
+            }
434
+
435
+            $loader = new Redux_Autoloader( $prefix, $path );
436
+
437
+            spl_autoload_register( array( $loader, 'load' ) );
438
+        }
439
+
440
+        /**
441
+         * Check if a string starts with a string.
442
+         *
443
+         * @param string $haystack Full string.
444
+         * @param string $needle   String to check if it starts with.
445
+         *
446
+         * @return bool
447
+         */
448
+        public static function string_starts_with( string $haystack, string $needle ): bool {
449
+            $length = strlen( $needle );
450
+
451
+            return substr( $haystack, 0, $length ) === $needle;
452
+        }
453
+
454
+        /**
455
+         * Check if a string ends with a string.
456
+         *
457
+         * @param string $haystack Full string.
458
+         * @param string $needle   String to check if it starts with.
459
+         *
460
+         * @return bool
461
+         */
462
+        public static function string_ends_with( string $haystack, string $needle ): bool {
463
+            $length = strlen( $needle );
464
+
465
+            if ( ! $length ) {
466
+                return true;
467
+            }
468
+
469
+            return substr( $haystack, - $length ) === $needle;
470
+        }
471
+
472
+        /**
473
+         * Is plugin active.
474
+         *
475
+         * @param string $name Plugin name.
476
+         *
477
+         * @return bool
478
+         */
479
+        public static function is_plugin_active( string $name ): bool {
480
+            // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- active_plugins is a WP hook.
481
+            if ( in_array( $name . '/' . $name . '.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ), true ) ) {
482
+                return true;
483
+            }
484
+
485
+            return false;
486
+        }
487
+    }
488 488
 }
Please login to merge, or discard this patch.
redux-core/class-redux-core.php 2 patches
Indentation   +614 added lines, -614 removed lines patch added patch discarded remove patch
@@ -11,620 +11,620 @@
 block discarded – undo
11 11
 
12 12
 if ( ! class_exists( 'Redux_Core', false ) ) {
13 13
 
14
-	/**
15
-	 * Class Redux_Core
16
-	 */
17
-	class Redux_Core {
18
-
19
-		/**
20
-		 * Class instance.
21
-		 *
22
-		 * @var null|Redux_Core
23
-		 */
24
-		public static ?Redux_Core $instance = null;
25
-
26
-		/**
27
-		 * Project version
28
-		 *
29
-		 * @var string
30
-		 */
31
-		public static string $version;
32
-
33
-		/**
34
-		 * Project directory.
35
-		 *
36
-		 * @var string.
37
-		 */
38
-		public static string $dir;
39
-
40
-		/**
41
-		 * Project URL.
42
-		 *
43
-		 * @var string.
44
-		 */
45
-		public static string $url;
46
-
47
-		/**
48
-		 * Base directory path.
49
-		 *
50
-		 * @var string
51
-		 */
52
-		public static string $redux_path;
53
-
54
-		/**
55
-		 * Absolute direction path to WordPress upload directory.
56
-		 *
57
-		 * @var string
58
-		 */
59
-		public static string $upload_dir = '';
60
-
61
-		/**
62
-		 * Full URL to WordPress upload directory.
63
-		 *
64
-		 * @var null|string
65
-		 */
66
-		public static ?string $upload_url = '';
67
-
68
-		/**
69
-		 * Set when Redux is run as a plugin.
70
-		 *
71
-		 * @var bool
72
-		 */
73
-		public static bool $is_plugin = true;
74
-
75
-		/**
76
-		 * Indicated in_theme or in_plugin.
77
-		 *
78
-		 * @var string
79
-		 */
80
-		public static string $installed = '';
81
-
82
-		/**
83
-		 * Set when Redux is run as a plugin.
84
-		 *
85
-		 * @var bool
86
-		 */
87
-		public static bool $as_plugin = false;
88
-
89
-		/**
90
-		 * Set when Redux is embedded within a theme.
91
-		 *
92
-		 * @var bool
93
-		 */
94
-		public static bool $in_theme = false;
95
-
96
-		/**
97
-		 * Pointer to an updated Google fonts array.
98
-		 *
99
-		 * @var array|null
100
-		 */
101
-		public static ?array $updated_google_fonts = array();
102
-
103
-		/**
104
-		 * List of files calling Redux.
105
-		 *
106
-		 * @var array|null
107
-		 */
108
-		public static ?array $callers = array();
109
-
110
-		/**
111
-		 * Pointer to _SERVER global.
112
-		 *
113
-		 * @var array|null
114
-		 */
115
-		public static ?array $server = array();
116
-
117
-		/**
118
-		 * Field folding information for localization.
119
-		 *
120
-		 * @var null|array
121
-		 */
122
-		public static ?array $required = array();
123
-
124
-		/**
125
-		 * Field child-folding information for localization.
126
-		 *
127
-		 * @var null|array
128
-		 */
129
-		public static ?array $required_child = array();
130
-
131
-		/**
132
-		 * Array of fields to be folded.
133
-		 *
134
-		 * @var array|null
135
-		 */
136
-		public static ?array $folds = array();
137
-
138
-		/**
139
-		 * Array of fields that didn't pass the fold dependency test and are hidden.
140
-		 *
141
-		 * @var null|array
142
-		 */
143
-		public static ?array $fields_hidden = array();
144
-
145
-		/**
146
-		 * Values to generate google font CSS.
147
-		 *
148
-		 * @var null|array
149
-		 */
150
-		public static ?array $typography = array();
151
-
152
-		/**
153
-		 * Validation ran flag.
154
-		 *
155
-		 * @var bool
156
-		 */
157
-		public static bool $validation_ran = false;
158
-
159
-		/**
160
-		 * No output flag.
161
-		 *
162
-		 * @var bool
163
-		 */
164
-		public static bool $no_output = false;
165
-
166
-		/**
167
-		 * Array of fonts used by the panel for localization.
168
-		 *
169
-		 * @var null|array
170
-		 */
171
-		public static ?array $fonts = array();
172
-
173
-		/**
174
-		 * Array of Google fonts used by the panel for localization.
175
-		 *
176
-		 * @var null|array
177
-		 */
178
-		public static ?array $google_array = array();
179
-
180
-		/**
181
-		 * Array of various font groups used within the typography field.
182
-		 *
183
-		 * @var null|array
184
-		 */
185
-		public static ?array $font_groups = array();
186
-
187
-		/**
188
-		 * File system object used for I/O file operations.  Done the WordPress way.
189
-		 *
190
-		 * @var null|object
191
-		 */
192
-		public static ?object $filesystem;
193
-
194
-		/**
195
-		 * Pointer to the third party fixes class.
196
-		 *
197
-		 * @var Redux_ThirdParty_Fixes
198
-		 */
199
-		public static Redux_ThirdParty_Fixes $third_party_fixes;
200
-
201
-		/**
202
-		 * Redux Welcome screen object.
203
-		 *
204
-		 * @var Redux_Welcome
205
-		 */
206
-		public static Redux_Welcome $welcome;
207
-
208
-		/**
209
-		 * Creates instance of class.
210
-		 *
211
-		 * @return Redux_Core
212
-		 * @throws Exception Comment.
213
-		 */
214
-		public static function instance(): ?Redux_Core {
215
-			if ( ! self::$instance ) {
216
-				self::$instance = new self();
217
-
218
-				self::$instance->includes();
219
-				self::$instance->init();
220
-				self::$instance->hooks();
221
-
222
-				add_action( 'plugins_loaded', array( 'Redux_Core', 'plugins_loaded' ) );
223
-			}
224
-
225
-			return self::$instance;
226
-		}
227
-
228
-		/**
229
-		 * Things to run after pluggable.php had loaded.
230
-		 */
231
-		public static function plugins_loaded() {}
232
-
233
-		/**
234
-		 * Class init.
235
-		 */
236
-		private function init() {
237
-			self::$server = array(
238
-				'SERVER_SOFTWARE' => '',
239
-				'REMOTE_ADDR'     => Redux_Helpers::is_local_host() ? '127.0.0.1' : '',
240
-				'HTTP_USER_AGENT' => '',
241
-				'HTTP_HOST'       => '',
242
-				'REQUEST_URI'     => '',
243
-			);
244
-
245
-			// phpcs:disable WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
246
-			if ( ! empty( $_SERVER['SERVER_SOFTWARE'] ) ) {
247
-				self::$server['SERVER_SOFTWARE'] = sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) );
248
-			}
249
-			if ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
250
-				self::$server['REMOTE_ADDR'] = sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) );
251
-			}
252
-			if ( ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
253
-				self::$server['HTTP_USER_AGENT'] = sanitize_text_field( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) );
254
-			}
255
-			if ( ! empty( $_SERVER['HTTP_HOST'] ) ) {
256
-				self::$server['HTTP_HOST'] = sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) );
257
-			}
258
-			if ( ! empty( $_SERVER['REQUEST_URI'] ) ) {
259
-				self::$server['REQUEST_URI'] = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) );
260
-			}
261
-
262
-			// phpcs:enable
263
-
264
-			self::$dir = trailingslashit( wp_normalize_path( dirname( realpath( __FILE__ ) ) ) );
265
-
266
-			Redux_Functions_Ex::generator();
267
-
268
-			if ( defined( 'REDUX_PLUGIN_FILE' ) ) {
269
-				$plugin_info = Redux_Functions_Ex::is_inside_plugin( REDUX_PLUGIN_FILE );
270
-			}
271
-
272
-			$plugin_info = Redux_Functions_Ex::is_inside_plugin( __FILE__ );
273
-
274
-			if ( false !== $plugin_info ) {
275
-				self::$installed = class_exists( 'Redux_Framework_Plugin' ) ? 'plugin' : 'in_plugin';
276
-				self::$is_plugin = class_exists( 'Redux_Framework_Plugin' );
277
-				self::$as_plugin = true;
278
-				self::$url       = trailingslashit( dirname( $plugin_info['url'] ) );
279
-			} else {
280
-				$theme_info = Redux_Functions_Ex::is_inside_theme( __FILE__ );
281
-				if ( false !== $theme_info ) {
282
-					self::$url       = trailingslashit( dirname( $theme_info['url'] ) );
283
-					self::$in_theme  = true;
284
-					self::$installed = 'in_theme';
285
-				}
286
-			}
287
-
288
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
289
-			self::$url = apply_filters( 'redux/url', self::$url );
290
-
291
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
292
-			self::$dir = apply_filters( 'redux/dir', self::$dir );
293
-
294
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
295
-			self::$is_plugin = apply_filters( 'redux/is_plugin', self::$is_plugin );
296
-
297
-			if ( ! function_exists( 'current_time' ) ) {
298
-				require_once ABSPATH . '/wp-includes/functions.php';
299
-			}
300
-
301
-			$upload_dir       = wp_upload_dir();
302
-			self::$upload_dir = $upload_dir['basedir'] . '/redux/';
303
-			self::$upload_url = str_replace( array( 'https://', 'http://' ), '//', $upload_dir['baseurl'] . '/redux/' );
304
-
305
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
306
-			self::$upload_dir = apply_filters( 'redux/upload_dir', self::$upload_dir );
307
-
308
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
309
-			self::$upload_url = apply_filters( 'redux/upload_url', self::$upload_url );
310
-		}
311
-
312
-		/**
313
-		 * Code to execute on a framework __construct.
314
-		 *
315
-		 * @param ReduxFramework $redux Pointer to ReduxFramework object.
316
-		 */
317
-		public static function core_construct( ReduxFramework $redux ) {
318
-			self::$third_party_fixes = new Redux_ThirdParty_Fixes( $redux );
319
-
320
-			Redux_ThemeCheck::get_instance();
321
-		}
322
-
323
-		/**
324
-		 * Autoregister run.
325
-		 *
326
-		 * @throws Exception Comment.
327
-		 */
328
-		private function includes() {
329
-			if ( is_admin() ) {
330
-				if ( class_exists( 'Redux_Pro' ) && isset( Redux_Pro::$dir ) ) {
331
-					echo '<div class="error"><p>' . sprintf( esc_html__( 'Redux has detected the Redux Pro plugin is enabled. All featured of Redux Pro are now part of the entire Redux plugin and is no longer required. Please disable the Redux Pro plugin to avoid potential conflicts.', 'redux-framework' ), '<code></code>' ) . '</p></div>';
332
-				}
333
-			}
334
-
335
-			require_once __DIR__ . '/inc/classes/class-redux-path.php';
336
-			require_once __DIR__ . '/inc/classes/class-redux-functions-ex.php';
337
-			require_once __DIR__ . '/inc/classes/class-redux-helpers.php';
338
-			require_once __DIR__ . '/inc/classes/class-redux-instances.php';
339
-
340
-			Redux_Functions_Ex::register_class_path( 'Redux', __DIR__ . '/inc/classes' );
341
-			Redux_Functions_Ex::register_class_path( 'Redux', __DIR__ . '/inc/welcome' );
342
-
343
-			spl_autoload_register( array( $this, 'register_classes' ) );
344
-
345
-			self::$welcome = new Redux_Welcome();
346
-
347
-			add_filter( 'debug_information', array( $this, 'add_debug_info' ) );
348
-		}
349
-
350
-		/**
351
-		 * Add debug info for the WP Site Health screen.
352
-		 *
353
-		 * @param array $debug_info Debug data.
354
-		 *
355
-		 * @return array
356
-		 * @throws ReflectionException Exception.
357
-		 */
358
-		public function add_debug_info( array $debug_info ): array {
359
-
360
-			// Get browser data.
361
-			if ( ! class_exists( 'ReduxBrowser' ) ) {
362
-				require_once self::$dir . 'inc/lib/browser.php';
363
-			}
364
-
365
-			$browser = new ReduxBrowser();
366
-
367
-			$browser_data = array(
368
-				'Agent'    => $browser->getUserAgent(),
369
-				'Browser'  => $browser->getBrowser(),
370
-				'Version'  => $browser->getVersion(),
371
-				'Platform' => $browser->getPlatform(),
372
-			);
373
-
374
-			// Set Redux dir permission results to Site Health screen.
375
-			$debug_info['wp-filesystem']['fields'][] = array(
376
-				'label' => esc_html__( 'The Redux upload directory', 'redux-framework' ),
377
-				'value' => wp_is_writable( self::$upload_dir ) ? 'Writable' : 'Not writable',
378
-			);
379
-
380
-			// Set Redux plugin results to Site Health screen.
381
-			$debug_info['redux-framework'] = array(
382
-				'label'       => esc_html__( 'Redux Framework', 'redux-framework' ),
383
-				'description' => esc_html__( 'Debug information specific to Redux Framework.', 'redux-framework' ),
384
-				'fields'      => array(
385
-					'version'        => array(
386
-						'label' => esc_html__( 'Version', 'redux-framework' ),
387
-						'value' => self::$version,
388
-					),
389
-					'installation'   => array(
390
-						'label' => esc_html__( 'Installation', 'redux-framework' ),
391
-						'value' => self::$installed,
392
-					),
393
-					'data directory' => array(
394
-						'label' => esc_html__( 'Data directory', 'redux-framework' ),
395
-						'value' => self::$dir,
396
-					),
397
-					'browser'        => array(
398
-						'label' => esc_html__( 'Browser', 'redux-framework' ),
399
-						'value' => $browser_data,
400
-					),
401
-				),
402
-			);
403
-
404
-			$redux = Redux::all_instances();
405
-
406
-			$extensions = array();
407
-
408
-			if ( ! empty( $redux ) && is_array( $redux ) ) {
409
-				foreach ( $redux as $inst => $data ) {
410
-					Redux::init( $inst );
411
-
412
-					$inst_name = ucwords( str_replace( array( '_', '-' ), ' ', $inst ) );
413
-					$args      = $data->args;
414
-
415
-					$ext = Redux::get_extensions( $inst );
416
-					if ( ! empty( $ext ) && is_array( $ext ) ) {
417
-						ksort( $ext );
418
-
419
-						foreach ( $ext as $name => $arr ) {
420
-							$ver = $arr['version'];
421
-
422
-							$ex = esc_html( ucwords( str_replace( array( '_', '-' ), ' ', $name ) ) );
423
-
424
-							$extensions[ $ex ] = esc_html( $ver );
425
-						}
426
-					}
427
-
428
-					// Output Redux instances.
429
-					$debug_info[ 'redux-instance-' . $inst ] = array(
430
-						// translators: %s = Instance name.
431
-						'label'       => sprintf( esc_html__( 'Redux Instance: %s', 'redux-framework' ), $inst_name ),
432
-						// translators: %s = Instance name w/ HTML.
433
-						'description' => sprintf( esc_html__( 'Debug information for the %s Redux instance.', 'redux-framework' ), '<code>' . $inst . '</code>' ),
434
-						'fields'      => array(
435
-							'opt_name'         => array(
436
-								'label' => esc_html( 'opt_name' ),
437
-								'value' => $args['opt_name'],
438
-							),
439
-							'global_variable'  => array(
440
-								'label' => esc_html( 'global_variable' ),
441
-								'value' => $args['global_variable'],
442
-							),
443
-							'dev_mode'         => array(
444
-								'label' => esc_html( 'dev_mode' ),
445
-								'value' => $args['dev_mode'] ? 'true' : 'false',
446
-							),
447
-							'ajax_save'        => array(
448
-								'label' => esc_html( 'ajax_save' ),
449
-								'value' => $args['ajax_save'] ? 'true' : 'false',
450
-							),
451
-							'page_slug'        => array(
452
-								'label' => esc_html( 'page_slug' ),
453
-								'value' => $args['page_slug'],
454
-							),
455
-							'page_permissions' => array(
456
-								'label' => esc_html( 'page_permissions' ),
457
-								'value' => $args['page_permissions'],
458
-							),
459
-							'menu_type'        => array(
460
-								'label' => esc_html( 'menu_type' ),
461
-								'value' => $args['menu_type'],
462
-							),
463
-							'page_parent'      => array(
464
-								'label' => esc_html( 'page_parent' ),
465
-								'value' => $args['page_parent'],
466
-							),
467
-							'compiler'         => array(
468
-								'label' => esc_html( 'compiler' ),
469
-								'value' => $args['compiler'] ? 'true' : 'false',
470
-							),
471
-							'output'           => array(
472
-								'label' => esc_html( 'output' ),
473
-								'value' => $args['output'] ? 'true' : 'false',
474
-							),
475
-							'output_tag'       => array(
476
-								'label' => esc_html( 'output_tag' ),
477
-								'value' => $args['output_tag'] ? 'true' : 'false',
478
-							),
479
-							'templates_path'   => array(
480
-								'label' => esc_html( 'templates_path' ),
481
-								'value' => $args['templates_path'],
482
-							),
483
-							'extensions'       => array(
484
-								'label' => esc_html( 'extensions' ),
485
-								'value' => $extensions,
486
-							),
487
-						),
488
-					);
489
-				}
490
-			}
491
-
492
-			return $debug_info;
493
-		}
494
-
495
-		/**
496
-		 * Register callback for autoload.
497
-		 *
498
-		 * @param string $class_name name of class.
499
-		 */
500
-		public function register_classes( string $class_name ) {
501
-			$class_name_test = self::strtolower( $class_name );
502
-
503
-			if ( strpos( $class_name_test, 'redux' ) === false ) {
504
-				return;
505
-			}
506
-
507
-			if ( ! class_exists( 'Redux_Functions_Ex' ) ) {
508
-				require_once Redux_Path::get_path( '/inc/classes/class-redux-functions-ex.php' );
509
-			}
510
-
511
-			if ( ! class_exists( $class_name ) ) {
512
-				// Backward compatibility for extensions sucks!
513
-				if ( 'Redux_Instances' === $class_name ) {
514
-					require_once Redux_Path::get_path( '/inc/classes/class-redux-instances.php' );
515
-					require_once Redux_Path::get_path( '/inc/lib/redux-instances.php' );
516
-
517
-					return;
518
-				}
519
-
520
-				// Load Redux APIs.
521
-				if ( 'Redux' === $class_name ) {
522
-					require_once Redux_Path::get_path( '/inc/classes/class-redux-api.php' );
523
-
524
-					return;
525
-				}
526
-
527
-				// Redux extra theme checks.
528
-				if ( 'Redux_ThemeCheck' === $class_name ) {
529
-					require_once Redux_Path::get_path( '/inc/themecheck/class-redux-themecheck.php' );
530
-
531
-					return;
532
-				}
533
-
534
-				if ( 'Redux_Welcome' === $class_name ) {
535
-					require_once Redux_Path::get_path( '/inc/welcome/class-redux-welcome.php' );
536
-
537
-					return;
538
-				}
539
-
540
-				$mappings = array(
541
-					'ReduxFrameworkInstances'  => 'Redux_Instances',
542
-					'reduxCorePanel'           => 'Redux_Panel',
543
-					'reduxCoreEnqueue'         => 'Redux_Enqueue',
544
-					'Redux_Abstract_Extension' => 'Redux_Extension_Abstract',
545
-				);
546
-				$alias    = false;
547
-				if ( isset( $mappings[ $class_name ] ) ) {
548
-					$alias      = $class_name;
549
-					$class_name = $mappings[ $class_name ];
550
-				}
551
-
552
-				// Everything else.
553
-				$file = 'class.' . $class_name_test . '.php';
554
-
555
-				$class_path = Redux_Path::get_path( '/inc/classes/' . $file );
556
-
557
-				if ( ! file_exists( $class_path ) ) {
558
-					$class_file_name = str_replace( '_', '-', $class_name );
559
-					$file            = 'class-' . $class_name_test . '.php';
560
-					$class_path      = Redux_Path::get_path( '/inc/classes/' . $file );
561
-				}
562
-
563
-				if ( file_exists( $class_path ) && ! class_exists( $class_name ) ) {
564
-					require_once $class_path;
565
-				}
566
-				if ( class_exists( $class_name ) && ! empty( $alias ) && ! class_exists( $alias ) ) {
567
-					class_alias( $class_name, $alias );
568
-				}
569
-			}
570
-
571
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
572
-			do_action( 'redux/core/includes', $this );
573
-		}
574
-
575
-		/**
576
-		 * Hooks to run on instance creation.
577
-		 */
578
-		private function hooks() {
579
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
580
-			do_action( 'redux/core/hooks', $this );
581
-		}
582
-
583
-		/**
584
-		 * Action to run on WordPress heartbeat.
585
-		 *
586
-		 * @return bool
587
-		 */
588
-		public static function is_heartbeat(): bool {
589
-			// Disregard WP AJAX 'heartbeat' call.  Why waste resources?
590
-			if ( isset( $_POST ) && isset( $_POST['_nonce'] ) && wp_verify_nonce( sanitize_key( wp_unslash( $_POST['_nonce'] ) ), 'heartbeat-nonce' ) ) {
591
-
592
-				if ( isset( $_POST['action'] ) && 'heartbeat' === sanitize_text_field( wp_unslash( $_POST['action'] ) ) ) {
593
-
594
-					// Hook, for purists.
595
-					if ( has_action( 'redux/ajax/heartbeat' ) ) {
596
-						// phpcs:ignore WordPress.NamingConventions.ValidHookName
597
-						do_action( 'redux/ajax/heartbeat' );
598
-					}
599
-
600
-					return true;
601
-				}
602
-
603
-				return false;
604
-			}
605
-
606
-			// Buh bye!
607
-			return false;
608
-		}
609
-
610
-		/**
611
-		 * Helper method to check for mb_strtolower or to use the standard strtolower.
612
-		 *
613
-		 * @param string|null $str String to make lowercase.
614
-		 *
615
-		 * @return string|null
616
-		 */
617
-		public static function strtolower( ?string $str ): string {
618
-			if ( function_exists( 'mb_strtolower' ) && function_exists( 'mb_detect_encoding' ) ) {
619
-				return mb_strtolower( $str, mb_detect_encoding( $str ) );
620
-			} else {
621
-				return strtolower( $str );
622
-			}
623
-		}
624
-	}
625
-
626
-	/*
14
+    /**
15
+     * Class Redux_Core
16
+     */
17
+    class Redux_Core {
18
+
19
+        /**
20
+         * Class instance.
21
+         *
22
+         * @var null|Redux_Core
23
+         */
24
+        public static ?Redux_Core $instance = null;
25
+
26
+        /**
27
+         * Project version
28
+         *
29
+         * @var string
30
+         */
31
+        public static string $version;
32
+
33
+        /**
34
+         * Project directory.
35
+         *
36
+         * @var string.
37
+         */
38
+        public static string $dir;
39
+
40
+        /**
41
+         * Project URL.
42
+         *
43
+         * @var string.
44
+         */
45
+        public static string $url;
46
+
47
+        /**
48
+         * Base directory path.
49
+         *
50
+         * @var string
51
+         */
52
+        public static string $redux_path;
53
+
54
+        /**
55
+         * Absolute direction path to WordPress upload directory.
56
+         *
57
+         * @var string
58
+         */
59
+        public static string $upload_dir = '';
60
+
61
+        /**
62
+         * Full URL to WordPress upload directory.
63
+         *
64
+         * @var null|string
65
+         */
66
+        public static ?string $upload_url = '';
67
+
68
+        /**
69
+         * Set when Redux is run as a plugin.
70
+         *
71
+         * @var bool
72
+         */
73
+        public static bool $is_plugin = true;
74
+
75
+        /**
76
+         * Indicated in_theme or in_plugin.
77
+         *
78
+         * @var string
79
+         */
80
+        public static string $installed = '';
81
+
82
+        /**
83
+         * Set when Redux is run as a plugin.
84
+         *
85
+         * @var bool
86
+         */
87
+        public static bool $as_plugin = false;
88
+
89
+        /**
90
+         * Set when Redux is embedded within a theme.
91
+         *
92
+         * @var bool
93
+         */
94
+        public static bool $in_theme = false;
95
+
96
+        /**
97
+         * Pointer to an updated Google fonts array.
98
+         *
99
+         * @var array|null
100
+         */
101
+        public static ?array $updated_google_fonts = array();
102
+
103
+        /**
104
+         * List of files calling Redux.
105
+         *
106
+         * @var array|null
107
+         */
108
+        public static ?array $callers = array();
109
+
110
+        /**
111
+         * Pointer to _SERVER global.
112
+         *
113
+         * @var array|null
114
+         */
115
+        public static ?array $server = array();
116
+
117
+        /**
118
+         * Field folding information for localization.
119
+         *
120
+         * @var null|array
121
+         */
122
+        public static ?array $required = array();
123
+
124
+        /**
125
+         * Field child-folding information for localization.
126
+         *
127
+         * @var null|array
128
+         */
129
+        public static ?array $required_child = array();
130
+
131
+        /**
132
+         * Array of fields to be folded.
133
+         *
134
+         * @var array|null
135
+         */
136
+        public static ?array $folds = array();
137
+
138
+        /**
139
+         * Array of fields that didn't pass the fold dependency test and are hidden.
140
+         *
141
+         * @var null|array
142
+         */
143
+        public static ?array $fields_hidden = array();
144
+
145
+        /**
146
+         * Values to generate google font CSS.
147
+         *
148
+         * @var null|array
149
+         */
150
+        public static ?array $typography = array();
151
+
152
+        /**
153
+         * Validation ran flag.
154
+         *
155
+         * @var bool
156
+         */
157
+        public static bool $validation_ran = false;
158
+
159
+        /**
160
+         * No output flag.
161
+         *
162
+         * @var bool
163
+         */
164
+        public static bool $no_output = false;
165
+
166
+        /**
167
+         * Array of fonts used by the panel for localization.
168
+         *
169
+         * @var null|array
170
+         */
171
+        public static ?array $fonts = array();
172
+
173
+        /**
174
+         * Array of Google fonts used by the panel for localization.
175
+         *
176
+         * @var null|array
177
+         */
178
+        public static ?array $google_array = array();
179
+
180
+        /**
181
+         * Array of various font groups used within the typography field.
182
+         *
183
+         * @var null|array
184
+         */
185
+        public static ?array $font_groups = array();
186
+
187
+        /**
188
+         * File system object used for I/O file operations.  Done the WordPress way.
189
+         *
190
+         * @var null|object
191
+         */
192
+        public static ?object $filesystem;
193
+
194
+        /**
195
+         * Pointer to the third party fixes class.
196
+         *
197
+         * @var Redux_ThirdParty_Fixes
198
+         */
199
+        public static Redux_ThirdParty_Fixes $third_party_fixes;
200
+
201
+        /**
202
+         * Redux Welcome screen object.
203
+         *
204
+         * @var Redux_Welcome
205
+         */
206
+        public static Redux_Welcome $welcome;
207
+
208
+        /**
209
+         * Creates instance of class.
210
+         *
211
+         * @return Redux_Core
212
+         * @throws Exception Comment.
213
+         */
214
+        public static function instance(): ?Redux_Core {
215
+            if ( ! self::$instance ) {
216
+                self::$instance = new self();
217
+
218
+                self::$instance->includes();
219
+                self::$instance->init();
220
+                self::$instance->hooks();
221
+
222
+                add_action( 'plugins_loaded', array( 'Redux_Core', 'plugins_loaded' ) );
223
+            }
224
+
225
+            return self::$instance;
226
+        }
227
+
228
+        /**
229
+         * Things to run after pluggable.php had loaded.
230
+         */
231
+        public static function plugins_loaded() {}
232
+
233
+        /**
234
+         * Class init.
235
+         */
236
+        private function init() {
237
+            self::$server = array(
238
+                'SERVER_SOFTWARE' => '',
239
+                'REMOTE_ADDR'     => Redux_Helpers::is_local_host() ? '127.0.0.1' : '',
240
+                'HTTP_USER_AGENT' => '',
241
+                'HTTP_HOST'       => '',
242
+                'REQUEST_URI'     => '',
243
+            );
244
+
245
+            // phpcs:disable WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
246
+            if ( ! empty( $_SERVER['SERVER_SOFTWARE'] ) ) {
247
+                self::$server['SERVER_SOFTWARE'] = sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) );
248
+            }
249
+            if ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
250
+                self::$server['REMOTE_ADDR'] = sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) );
251
+            }
252
+            if ( ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
253
+                self::$server['HTTP_USER_AGENT'] = sanitize_text_field( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) );
254
+            }
255
+            if ( ! empty( $_SERVER['HTTP_HOST'] ) ) {
256
+                self::$server['HTTP_HOST'] = sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) );
257
+            }
258
+            if ( ! empty( $_SERVER['REQUEST_URI'] ) ) {
259
+                self::$server['REQUEST_URI'] = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) );
260
+            }
261
+
262
+            // phpcs:enable
263
+
264
+            self::$dir = trailingslashit( wp_normalize_path( dirname( realpath( __FILE__ ) ) ) );
265
+
266
+            Redux_Functions_Ex::generator();
267
+
268
+            if ( defined( 'REDUX_PLUGIN_FILE' ) ) {
269
+                $plugin_info = Redux_Functions_Ex::is_inside_plugin( REDUX_PLUGIN_FILE );
270
+            }
271
+
272
+            $plugin_info = Redux_Functions_Ex::is_inside_plugin( __FILE__ );
273
+
274
+            if ( false !== $plugin_info ) {
275
+                self::$installed = class_exists( 'Redux_Framework_Plugin' ) ? 'plugin' : 'in_plugin';
276
+                self::$is_plugin = class_exists( 'Redux_Framework_Plugin' );
277
+                self::$as_plugin = true;
278
+                self::$url       = trailingslashit( dirname( $plugin_info['url'] ) );
279
+            } else {
280
+                $theme_info = Redux_Functions_Ex::is_inside_theme( __FILE__ );
281
+                if ( false !== $theme_info ) {
282
+                    self::$url       = trailingslashit( dirname( $theme_info['url'] ) );
283
+                    self::$in_theme  = true;
284
+                    self::$installed = 'in_theme';
285
+                }
286
+            }
287
+
288
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
289
+            self::$url = apply_filters( 'redux/url', self::$url );
290
+
291
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
292
+            self::$dir = apply_filters( 'redux/dir', self::$dir );
293
+
294
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
295
+            self::$is_plugin = apply_filters( 'redux/is_plugin', self::$is_plugin );
296
+
297
+            if ( ! function_exists( 'current_time' ) ) {
298
+                require_once ABSPATH . '/wp-includes/functions.php';
299
+            }
300
+
301
+            $upload_dir       = wp_upload_dir();
302
+            self::$upload_dir = $upload_dir['basedir'] . '/redux/';
303
+            self::$upload_url = str_replace( array( 'https://', 'http://' ), '//', $upload_dir['baseurl'] . '/redux/' );
304
+
305
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
306
+            self::$upload_dir = apply_filters( 'redux/upload_dir', self::$upload_dir );
307
+
308
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
309
+            self::$upload_url = apply_filters( 'redux/upload_url', self::$upload_url );
310
+        }
311
+
312
+        /**
313
+         * Code to execute on a framework __construct.
314
+         *
315
+         * @param ReduxFramework $redux Pointer to ReduxFramework object.
316
+         */
317
+        public static function core_construct( ReduxFramework $redux ) {
318
+            self::$third_party_fixes = new Redux_ThirdParty_Fixes( $redux );
319
+
320
+            Redux_ThemeCheck::get_instance();
321
+        }
322
+
323
+        /**
324
+         * Autoregister run.
325
+         *
326
+         * @throws Exception Comment.
327
+         */
328
+        private function includes() {
329
+            if ( is_admin() ) {
330
+                if ( class_exists( 'Redux_Pro' ) && isset( Redux_Pro::$dir ) ) {
331
+                    echo '<div class="error"><p>' . sprintf( esc_html__( 'Redux has detected the Redux Pro plugin is enabled. All featured of Redux Pro are now part of the entire Redux plugin and is no longer required. Please disable the Redux Pro plugin to avoid potential conflicts.', 'redux-framework' ), '<code></code>' ) . '</p></div>';
332
+                }
333
+            }
334
+
335
+            require_once __DIR__ . '/inc/classes/class-redux-path.php';
336
+            require_once __DIR__ . '/inc/classes/class-redux-functions-ex.php';
337
+            require_once __DIR__ . '/inc/classes/class-redux-helpers.php';
338
+            require_once __DIR__ . '/inc/classes/class-redux-instances.php';
339
+
340
+            Redux_Functions_Ex::register_class_path( 'Redux', __DIR__ . '/inc/classes' );
341
+            Redux_Functions_Ex::register_class_path( 'Redux', __DIR__ . '/inc/welcome' );
342
+
343
+            spl_autoload_register( array( $this, 'register_classes' ) );
344
+
345
+            self::$welcome = new Redux_Welcome();
346
+
347
+            add_filter( 'debug_information', array( $this, 'add_debug_info' ) );
348
+        }
349
+
350
+        /**
351
+         * Add debug info for the WP Site Health screen.
352
+         *
353
+         * @param array $debug_info Debug data.
354
+         *
355
+         * @return array
356
+         * @throws ReflectionException Exception.
357
+         */
358
+        public function add_debug_info( array $debug_info ): array {
359
+
360
+            // Get browser data.
361
+            if ( ! class_exists( 'ReduxBrowser' ) ) {
362
+                require_once self::$dir . 'inc/lib/browser.php';
363
+            }
364
+
365
+            $browser = new ReduxBrowser();
366
+
367
+            $browser_data = array(
368
+                'Agent'    => $browser->getUserAgent(),
369
+                'Browser'  => $browser->getBrowser(),
370
+                'Version'  => $browser->getVersion(),
371
+                'Platform' => $browser->getPlatform(),
372
+            );
373
+
374
+            // Set Redux dir permission results to Site Health screen.
375
+            $debug_info['wp-filesystem']['fields'][] = array(
376
+                'label' => esc_html__( 'The Redux upload directory', 'redux-framework' ),
377
+                'value' => wp_is_writable( self::$upload_dir ) ? 'Writable' : 'Not writable',
378
+            );
379
+
380
+            // Set Redux plugin results to Site Health screen.
381
+            $debug_info['redux-framework'] = array(
382
+                'label'       => esc_html__( 'Redux Framework', 'redux-framework' ),
383
+                'description' => esc_html__( 'Debug information specific to Redux Framework.', 'redux-framework' ),
384
+                'fields'      => array(
385
+                    'version'        => array(
386
+                        'label' => esc_html__( 'Version', 'redux-framework' ),
387
+                        'value' => self::$version,
388
+                    ),
389
+                    'installation'   => array(
390
+                        'label' => esc_html__( 'Installation', 'redux-framework' ),
391
+                        'value' => self::$installed,
392
+                    ),
393
+                    'data directory' => array(
394
+                        'label' => esc_html__( 'Data directory', 'redux-framework' ),
395
+                        'value' => self::$dir,
396
+                    ),
397
+                    'browser'        => array(
398
+                        'label' => esc_html__( 'Browser', 'redux-framework' ),
399
+                        'value' => $browser_data,
400
+                    ),
401
+                ),
402
+            );
403
+
404
+            $redux = Redux::all_instances();
405
+
406
+            $extensions = array();
407
+
408
+            if ( ! empty( $redux ) && is_array( $redux ) ) {
409
+                foreach ( $redux as $inst => $data ) {
410
+                    Redux::init( $inst );
411
+
412
+                    $inst_name = ucwords( str_replace( array( '_', '-' ), ' ', $inst ) );
413
+                    $args      = $data->args;
414
+
415
+                    $ext = Redux::get_extensions( $inst );
416
+                    if ( ! empty( $ext ) && is_array( $ext ) ) {
417
+                        ksort( $ext );
418
+
419
+                        foreach ( $ext as $name => $arr ) {
420
+                            $ver = $arr['version'];
421
+
422
+                            $ex = esc_html( ucwords( str_replace( array( '_', '-' ), ' ', $name ) ) );
423
+
424
+                            $extensions[ $ex ] = esc_html( $ver );
425
+                        }
426
+                    }
427
+
428
+                    // Output Redux instances.
429
+                    $debug_info[ 'redux-instance-' . $inst ] = array(
430
+                        // translators: %s = Instance name.
431
+                        'label'       => sprintf( esc_html__( 'Redux Instance: %s', 'redux-framework' ), $inst_name ),
432
+                        // translators: %s = Instance name w/ HTML.
433
+                        'description' => sprintf( esc_html__( 'Debug information for the %s Redux instance.', 'redux-framework' ), '<code>' . $inst . '</code>' ),
434
+                        'fields'      => array(
435
+                            'opt_name'         => array(
436
+                                'label' => esc_html( 'opt_name' ),
437
+                                'value' => $args['opt_name'],
438
+                            ),
439
+                            'global_variable'  => array(
440
+                                'label' => esc_html( 'global_variable' ),
441
+                                'value' => $args['global_variable'],
442
+                            ),
443
+                            'dev_mode'         => array(
444
+                                'label' => esc_html( 'dev_mode' ),
445
+                                'value' => $args['dev_mode'] ? 'true' : 'false',
446
+                            ),
447
+                            'ajax_save'        => array(
448
+                                'label' => esc_html( 'ajax_save' ),
449
+                                'value' => $args['ajax_save'] ? 'true' : 'false',
450
+                            ),
451
+                            'page_slug'        => array(
452
+                                'label' => esc_html( 'page_slug' ),
453
+                                'value' => $args['page_slug'],
454
+                            ),
455
+                            'page_permissions' => array(
456
+                                'label' => esc_html( 'page_permissions' ),
457
+                                'value' => $args['page_permissions'],
458
+                            ),
459
+                            'menu_type'        => array(
460
+                                'label' => esc_html( 'menu_type' ),
461
+                                'value' => $args['menu_type'],
462
+                            ),
463
+                            'page_parent'      => array(
464
+                                'label' => esc_html( 'page_parent' ),
465
+                                'value' => $args['page_parent'],
466
+                            ),
467
+                            'compiler'         => array(
468
+                                'label' => esc_html( 'compiler' ),
469
+                                'value' => $args['compiler'] ? 'true' : 'false',
470
+                            ),
471
+                            'output'           => array(
472
+                                'label' => esc_html( 'output' ),
473
+                                'value' => $args['output'] ? 'true' : 'false',
474
+                            ),
475
+                            'output_tag'       => array(
476
+                                'label' => esc_html( 'output_tag' ),
477
+                                'value' => $args['output_tag'] ? 'true' : 'false',
478
+                            ),
479
+                            'templates_path'   => array(
480
+                                'label' => esc_html( 'templates_path' ),
481
+                                'value' => $args['templates_path'],
482
+                            ),
483
+                            'extensions'       => array(
484
+                                'label' => esc_html( 'extensions' ),
485
+                                'value' => $extensions,
486
+                            ),
487
+                        ),
488
+                    );
489
+                }
490
+            }
491
+
492
+            return $debug_info;
493
+        }
494
+
495
+        /**
496
+         * Register callback for autoload.
497
+         *
498
+         * @param string $class_name name of class.
499
+         */
500
+        public function register_classes( string $class_name ) {
501
+            $class_name_test = self::strtolower( $class_name );
502
+
503
+            if ( strpos( $class_name_test, 'redux' ) === false ) {
504
+                return;
505
+            }
506
+
507
+            if ( ! class_exists( 'Redux_Functions_Ex' ) ) {
508
+                require_once Redux_Path::get_path( '/inc/classes/class-redux-functions-ex.php' );
509
+            }
510
+
511
+            if ( ! class_exists( $class_name ) ) {
512
+                // Backward compatibility for extensions sucks!
513
+                if ( 'Redux_Instances' === $class_name ) {
514
+                    require_once Redux_Path::get_path( '/inc/classes/class-redux-instances.php' );
515
+                    require_once Redux_Path::get_path( '/inc/lib/redux-instances.php' );
516
+
517
+                    return;
518
+                }
519
+
520
+                // Load Redux APIs.
521
+                if ( 'Redux' === $class_name ) {
522
+                    require_once Redux_Path::get_path( '/inc/classes/class-redux-api.php' );
523
+
524
+                    return;
525
+                }
526
+
527
+                // Redux extra theme checks.
528
+                if ( 'Redux_ThemeCheck' === $class_name ) {
529
+                    require_once Redux_Path::get_path( '/inc/themecheck/class-redux-themecheck.php' );
530
+
531
+                    return;
532
+                }
533
+
534
+                if ( 'Redux_Welcome' === $class_name ) {
535
+                    require_once Redux_Path::get_path( '/inc/welcome/class-redux-welcome.php' );
536
+
537
+                    return;
538
+                }
539
+
540
+                $mappings = array(
541
+                    'ReduxFrameworkInstances'  => 'Redux_Instances',
542
+                    'reduxCorePanel'           => 'Redux_Panel',
543
+                    'reduxCoreEnqueue'         => 'Redux_Enqueue',
544
+                    'Redux_Abstract_Extension' => 'Redux_Extension_Abstract',
545
+                );
546
+                $alias    = false;
547
+                if ( isset( $mappings[ $class_name ] ) ) {
548
+                    $alias      = $class_name;
549
+                    $class_name = $mappings[ $class_name ];
550
+                }
551
+
552
+                // Everything else.
553
+                $file = 'class.' . $class_name_test . '.php';
554
+
555
+                $class_path = Redux_Path::get_path( '/inc/classes/' . $file );
556
+
557
+                if ( ! file_exists( $class_path ) ) {
558
+                    $class_file_name = str_replace( '_', '-', $class_name );
559
+                    $file            = 'class-' . $class_name_test . '.php';
560
+                    $class_path      = Redux_Path::get_path( '/inc/classes/' . $file );
561
+                }
562
+
563
+                if ( file_exists( $class_path ) && ! class_exists( $class_name ) ) {
564
+                    require_once $class_path;
565
+                }
566
+                if ( class_exists( $class_name ) && ! empty( $alias ) && ! class_exists( $alias ) ) {
567
+                    class_alias( $class_name, $alias );
568
+                }
569
+            }
570
+
571
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
572
+            do_action( 'redux/core/includes', $this );
573
+        }
574
+
575
+        /**
576
+         * Hooks to run on instance creation.
577
+         */
578
+        private function hooks() {
579
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
580
+            do_action( 'redux/core/hooks', $this );
581
+        }
582
+
583
+        /**
584
+         * Action to run on WordPress heartbeat.
585
+         *
586
+         * @return bool
587
+         */
588
+        public static function is_heartbeat(): bool {
589
+            // Disregard WP AJAX 'heartbeat' call.  Why waste resources?
590
+            if ( isset( $_POST ) && isset( $_POST['_nonce'] ) && wp_verify_nonce( sanitize_key( wp_unslash( $_POST['_nonce'] ) ), 'heartbeat-nonce' ) ) {
591
+
592
+                if ( isset( $_POST['action'] ) && 'heartbeat' === sanitize_text_field( wp_unslash( $_POST['action'] ) ) ) {
593
+
594
+                    // Hook, for purists.
595
+                    if ( has_action( 'redux/ajax/heartbeat' ) ) {
596
+                        // phpcs:ignore WordPress.NamingConventions.ValidHookName
597
+                        do_action( 'redux/ajax/heartbeat' );
598
+                    }
599
+
600
+                    return true;
601
+                }
602
+
603
+                return false;
604
+            }
605
+
606
+            // Buh bye!
607
+            return false;
608
+        }
609
+
610
+        /**
611
+         * Helper method to check for mb_strtolower or to use the standard strtolower.
612
+         *
613
+         * @param string|null $str String to make lowercase.
614
+         *
615
+         * @return string|null
616
+         */
617
+        public static function strtolower( ?string $str ): string {
618
+            if ( function_exists( 'mb_strtolower' ) && function_exists( 'mb_detect_encoding' ) ) {
619
+                return mb_strtolower( $str, mb_detect_encoding( $str ) );
620
+            } else {
621
+                return strtolower( $str );
622
+            }
623
+        }
624
+    }
625
+
626
+    /*
627 627
 	 * Backwards comparability alias
628 628
 	 */
629
-	class_alias( 'Redux_Core', 'redux-core' );
629
+    class_alias( 'Redux_Core', 'redux-core' );
630 630
 }
Please login to merge, or discard this patch.
Spacing   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -98,56 +98,56 @@  discard block
 block discarded – undo
98 98
 		 *
99 99
 		 * @var array|null
100 100
 		 */
101
-		public static ?array $updated_google_fonts = array();
101
+		public static ? array $updated_google_fonts = array();
102 102
 
103 103
 		/**
104 104
 		 * List of files calling Redux.
105 105
 		 *
106 106
 		 * @var array|null
107 107
 		 */
108
-		public static ?array $callers = array();
108
+		public static ? array $callers = array();
109 109
 
110 110
 		/**
111 111
 		 * Pointer to _SERVER global.
112 112
 		 *
113 113
 		 * @var array|null
114 114
 		 */
115
-		public static ?array $server = array();
115
+		public static ? array $server = array();
116 116
 
117 117
 		/**
118 118
 		 * Field folding information for localization.
119 119
 		 *
120 120
 		 * @var null|array
121 121
 		 */
122
-		public static ?array $required = array();
122
+		public static ? array $required = array();
123 123
 
124 124
 		/**
125 125
 		 * Field child-folding information for localization.
126 126
 		 *
127 127
 		 * @var null|array
128 128
 		 */
129
-		public static ?array $required_child = array();
129
+		public static ? array $required_child = array();
130 130
 
131 131
 		/**
132 132
 		 * Array of fields to be folded.
133 133
 		 *
134 134
 		 * @var array|null
135 135
 		 */
136
-		public static ?array $folds = array();
136
+		public static ? array $folds = array();
137 137
 
138 138
 		/**
139 139
 		 * Array of fields that didn't pass the fold dependency test and are hidden.
140 140
 		 *
141 141
 		 * @var null|array
142 142
 		 */
143
-		public static ?array $fields_hidden = array();
143
+		public static ? array $fields_hidden = array();
144 144
 
145 145
 		/**
146 146
 		 * Values to generate google font CSS.
147 147
 		 *
148 148
 		 * @var null|array
149 149
 		 */
150
-		public static ?array $typography = array();
150
+		public static ? array $typography = array();
151 151
 
152 152
 		/**
153 153
 		 * Validation ran flag.
@@ -168,21 +168,21 @@  discard block
 block discarded – undo
168 168
 		 *
169 169
 		 * @var null|array
170 170
 		 */
171
-		public static ?array $fonts = array();
171
+		public static ? array $fonts = array();
172 172
 
173 173
 		/**
174 174
 		 * Array of Google fonts used by the panel for localization.
175 175
 		 *
176 176
 		 * @var null|array
177 177
 		 */
178
-		public static ?array $google_array = array();
178
+		public static ? array $google_array = array();
179 179
 
180 180
 		/**
181 181
 		 * Array of various font groups used within the typography field.
182 182
 		 *
183 183
 		 * @var null|array
184 184
 		 */
185
-		public static ?array $font_groups = array();
185
+		public static ? array $font_groups = array();
186 186
 
187 187
 		/**
188 188
 		 * File system object used for I/O file operations.  Done the WordPress way.
@@ -421,12 +421,12 @@  discard block
 block discarded – undo
421 421
 
422 422
 							$ex = esc_html( ucwords( str_replace( array( '_', '-' ), ' ', $name ) ) );
423 423
 
424
-							$extensions[ $ex ] = esc_html( $ver );
424
+							$extensions[$ex] = esc_html( $ver );
425 425
 						}
426 426
 					}
427 427
 
428 428
 					// Output Redux instances.
429
-					$debug_info[ 'redux-instance-' . $inst ] = array(
429
+					$debug_info['redux-instance-' . $inst] = array(
430 430
 						// translators: %s = Instance name.
431 431
 						'label'       => sprintf( esc_html__( 'Redux Instance: %s', 'redux-framework' ), $inst_name ),
432 432
 						// translators: %s = Instance name w/ HTML.
@@ -543,10 +543,10 @@  discard block
 block discarded – undo
543 543
 					'reduxCoreEnqueue'         => 'Redux_Enqueue',
544 544
 					'Redux_Abstract_Extension' => 'Redux_Extension_Abstract',
545 545
 				);
546
-				$alias    = false;
547
-				if ( isset( $mappings[ $class_name ] ) ) {
546
+				$alias = false;
547
+				if ( isset( $mappings[$class_name] ) ) {
548 548
 					$alias      = $class_name;
549
-					$class_name = $mappings[ $class_name ];
549
+					$class_name = $mappings[$class_name];
550 550
 				}
551 551
 
552 552
 				// Everything else.
Please login to merge, or discard this patch.
redux-core/inc/extensions/customizer/inc/class-redux-customizer-section.php 1 patch
Indentation   +155 added lines, -155 removed lines patch added patch discarded remove patch
@@ -15,108 +15,108 @@  discard block
 block discarded – undo
15 15
  */
16 16
 class Redux_Customizer_Section extends WP_Customize_Section {
17 17
 
18
-	/**
19
-	 * Type of this section.
20
-	 *
21
-	 * @since  4.1.0
22
-	 * @access public
23
-	 * @var string
24
-	 */
25
-	public $type = 'redux';
26
-
27
-	/**
28
-	 * Panel opt_name.
29
-	 *
30
-	 * @since  4.0.0
31
-	 * @access public
32
-	 * @var string
33
-	 */
34
-	public $opt_name = '';
35
-
36
-	/**
37
-	 * Section array.
38
-	 *
39
-	 * @var array|mixed
40
-	 */
41
-	public $section = array();
42
-
43
-	/**
44
-	 * Section array.
45
-	 *
46
-	 * @var string
47
-	 */
48
-	public string $wp_ver;
49
-
50
-	/**
51
-	 * Constructor.
52
-	 * Any supplied $args override class property defaults.
53
-	 *
54
-	 * @since 3.4.0
55
-	 *
56
-	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
57
-	 * @param string               $id      A specific ID of the section.
58
-	 * @param array                $args    Section arguments.
59
-	 */
60
-	public function __construct( $manager, $id, $args = array() ) {
61
-		global $wp_version;
62
-
63
-		parent::__construct( $manager, $id, $args );
64
-
65
-		// Redux addition.
66
-		if ( isset( $args['section'] ) ) {
67
-			$this->section     = $args['section'];
68
-			$this->description = $this->section['desc'] ?? '';
69
-			$this->opt_name    = $args['opt_name'] ?? '';
70
-		}
71
-
72
-		$version      = explode( '-', $wp_version );
73
-		$this->wp_ver = $version[0];
74
-	}
75
-
76
-	/**
77
-	 * WP < 4.3 Render
78
-	 */
79
-	protected function render() {
80
-		global $wp_version;
81
-		$version = explode( '-', $wp_version );
82
-		if ( version_compare( $version[0], '4.3', '<' ) ) {
83
-			$this->render_fallback();
84
-		}
85
-	}
86
-
87
-	/**
88
-	 * Render the section, and the controls that have been added to it.
89
-	 *
90
-	 * @since 3.4.0
91
-	 */
92
-	protected function render_fallback() {
93
-		$classes = 'accordion-section redux-section control-section control-section-' . $this->type;
94
-		?>
18
+    /**
19
+     * Type of this section.
20
+     *
21
+     * @since  4.1.0
22
+     * @access public
23
+     * @var string
24
+     */
25
+    public $type = 'redux';
26
+
27
+    /**
28
+     * Panel opt_name.
29
+     *
30
+     * @since  4.0.0
31
+     * @access public
32
+     * @var string
33
+     */
34
+    public $opt_name = '';
35
+
36
+    /**
37
+     * Section array.
38
+     *
39
+     * @var array|mixed
40
+     */
41
+    public $section = array();
42
+
43
+    /**
44
+     * Section array.
45
+     *
46
+     * @var string
47
+     */
48
+    public string $wp_ver;
49
+
50
+    /**
51
+     * Constructor.
52
+     * Any supplied $args override class property defaults.
53
+     *
54
+     * @since 3.4.0
55
+     *
56
+     * @param WP_Customize_Manager $manager Customizer bootstrap instance.
57
+     * @param string               $id      A specific ID of the section.
58
+     * @param array                $args    Section arguments.
59
+     */
60
+    public function __construct( $manager, $id, $args = array() ) {
61
+        global $wp_version;
62
+
63
+        parent::__construct( $manager, $id, $args );
64
+
65
+        // Redux addition.
66
+        if ( isset( $args['section'] ) ) {
67
+            $this->section     = $args['section'];
68
+            $this->description = $this->section['desc'] ?? '';
69
+            $this->opt_name    = $args['opt_name'] ?? '';
70
+        }
71
+
72
+        $version      = explode( '-', $wp_version );
73
+        $this->wp_ver = $version[0];
74
+    }
75
+
76
+    /**
77
+     * WP < 4.3 Render
78
+     */
79
+    protected function render() {
80
+        global $wp_version;
81
+        $version = explode( '-', $wp_version );
82
+        if ( version_compare( $version[0], '4.3', '<' ) ) {
83
+            $this->render_fallback();
84
+        }
85
+    }
86
+
87
+    /**
88
+     * Render the section, and the controls that have been added to it.
89
+     *
90
+     * @since 3.4.0
91
+     */
92
+    protected function render_fallback() {
93
+        $classes = 'accordion-section redux-section control-section control-section-' . $this->type;
94
+        ?>
95 95
 		<li id="accordion-section-<?php echo esc_attr( $this->id ); ?>" class="<?php echo esc_attr( $classes ); ?>">
96 96
 			<h3 class="accordion-section-title" tabindex="0">
97 97
 				<?php
98
-				echo wp_kses(
99
-					$this->title,
100
-					array(
101
-						'em'     => array(),
102
-						'i'      => array(),
103
-						'strong' => array(),
104
-						'span'   => array(
105
-							'class' => array(),
106
-							'style' => array(),
107
-						),
108
-					)
109
-				);
110
-				?>
98
+                echo wp_kses(
99
+                    $this->title,
100
+                    array(
101
+                        'em'     => array(),
102
+                        'i'      => array(),
103
+                        'strong' => array(),
104
+                        'span'   => array(
105
+                            'class' => array(),
106
+                            'style' => array(),
107
+                        ),
108
+                    )
109
+                );
110
+                ?>
111 111
 				<span class="screen-reader-text"><?php esc_attr_e( 'Press return or enter to expand', 'redux-framework' ); ?></span>
112 112
 			</h3>
113 113
 			<ul class="accordion-section-content redux-main">
114 114
 				<?php
115
-				if ( isset( $this->opt_name ) && isset( $this->section ) ) {
116
-					// phpcs:ignore WordPress.NamingConventions.ValidHookName
117
-					do_action( "redux/page/$this->opt_name/section/before", $this->section );
118
-				}
119
-				?>
115
+                if ( isset( $this->opt_name ) && isset( $this->section ) ) {
116
+                    // phpcs:ignore WordPress.NamingConventions.ValidHookName
117
+                    do_action( "redux/page/$this->opt_name/section/before", $this->section );
118
+                }
119
+                ?>
120 120
 				<?php if ( ! empty( $this->description ) ) { ?>
121 121
 					<li class="customize-section-description-container">
122 122
 						<p class="description customize-section-description legacy"><?php echo wp_kses_post( $this->description ); ?></p>
@@ -125,60 +125,60 @@  discard block
 block discarded – undo
125 125
 			</ul>
126 126
 		</li>
127 127
 		<?php
128
-	}
129
-
130
-
131
-	/**
132
-	 * Gather the parameters passed to client JavaScript via JSON.
133
-	 *
134
-	 * @since 4.1.0
135
-	 *
136
-	 * @return array The array to be exported to the client as JSON.
137
-	 */
138
-	public function json(): array {
139
-		$array = wp_array_slice_assoc(
140
-			parent::json(),
141
-			array(
142
-				'id',
143
-				'title',
144
-				'description',
145
-				'priority',
146
-				'panel',
147
-				'type',
148
-			)
149
-		);
150
-
151
-		$array['content']        = $this->get_content();
152
-		$array['active']         = $this->active();
153
-		$array['instanceNumber'] = $this->instance_number;
154
-
155
-		if ( $this->panel ) {
156
-			/* translators: &#9656; is the unicode right-pointing triangle, and %s is the section title in the Customizer */
157
-			$array['customizeAction'] = sprintf( __( 'Customizing &#9656; %s', 'redux-framework' ), esc_html( $this->manager->get_panel( $this->panel )->title ) );
158
-		} else {
159
-			$array['customizeAction'] = __( 'Customizing', 'redux-framework' );
160
-		}
161
-
162
-		// BEGIN Redux Additions.
163
-		$array['width'] = $this->section['customizer_width'] ?? '';
164
-		$array['icon']  = ( isset( $this->section['icon'] ) && ! empty( $this->section['icon'] ) ) ? $this->section['icon'] : 'hide';
165
-
166
-		$array['opt_name'] = $this->opt_name;
167
-
168
-		return $array;
169
-	}
170
-
171
-	/**
172
-	 * An Underscore (JS) template for rendering this section.
173
-	 * Class variables for this section class are available in the `data` JS object;
174
-	 * export custom variables by overriding {@see WP_Customize_Section::json()}.
175
-	 *
176
-	 * @see   WP_Customize_Section::print_template()
177
-	 * @since 4.3.0
178
-	 */
179
-	protected function render_template() {
180
-
181
-		?>
128
+    }
129
+
130
+
131
+    /**
132
+     * Gather the parameters passed to client JavaScript via JSON.
133
+     *
134
+     * @since 4.1.0
135
+     *
136
+     * @return array The array to be exported to the client as JSON.
137
+     */
138
+    public function json(): array {
139
+        $array = wp_array_slice_assoc(
140
+            parent::json(),
141
+            array(
142
+                'id',
143
+                'title',
144
+                'description',
145
+                'priority',
146
+                'panel',
147
+                'type',
148
+            )
149
+        );
150
+
151
+        $array['content']        = $this->get_content();
152
+        $array['active']         = $this->active();
153
+        $array['instanceNumber'] = $this->instance_number;
154
+
155
+        if ( $this->panel ) {
156
+            /* translators: &#9656; is the unicode right-pointing triangle, and %s is the section title in the Customizer */
157
+            $array['customizeAction'] = sprintf( __( 'Customizing &#9656; %s', 'redux-framework' ), esc_html( $this->manager->get_panel( $this->panel )->title ) );
158
+        } else {
159
+            $array['customizeAction'] = __( 'Customizing', 'redux-framework' );
160
+        }
161
+
162
+        // BEGIN Redux Additions.
163
+        $array['width'] = $this->section['customizer_width'] ?? '';
164
+        $array['icon']  = ( isset( $this->section['icon'] ) && ! empty( $this->section['icon'] ) ) ? $this->section['icon'] : 'hide';
165
+
166
+        $array['opt_name'] = $this->opt_name;
167
+
168
+        return $array;
169
+    }
170
+
171
+    /**
172
+     * An Underscore (JS) template for rendering this section.
173
+     * Class variables for this section class are available in the `data` JS object;
174
+     * export custom variables by overriding {@see WP_Customize_Section::json()}.
175
+     *
176
+     * @see   WP_Customize_Section::print_template()
177
+     * @since 4.3.0
178
+     */
179
+    protected function render_template() {
180
+
181
+        ?>
182 182
 		<li id="accordion-section-{{ data.id }}"
183 183
 			class="redux-standalone-section redux-customizer-opt-name redux-section accordion-section control-section control-section-{{ data.type }}"
184 184
 			data-opt-name="{{ data.opt_name }}"
@@ -210,14 +210,14 @@  discard block
 block discarded – undo
210 210
 					<p class="description customize-section-description">{{{ data.description }}}</p>
211 211
 					<# } #>
212 212
 					<?php
213
-					if ( isset( $this->opt_name ) && isset( $this->section ) ) {
214
-						// phpcs:ignore WordPress.NamingConventions.ValidHookName
215
-						do_action( "redux/page/$this->opt_name/section/before", $this->section );
216
-					}
217
-					?>
213
+                    if ( isset( $this->opt_name ) && isset( $this->section ) ) {
214
+                        // phpcs:ignore WordPress.NamingConventions.ValidHookName
215
+                        do_action( "redux/page/$this->opt_name/section/before", $this->section );
216
+                    }
217
+                    ?>
218 218
 				</li>
219 219
 			</ul>
220 220
 		</li>
221 221
 		<?php
222
-	}
222
+    }
223 223
 }
Please login to merge, or discard this patch.
redux-core/inc/extensions/customizer/inc/class-redux-customizer-panel.php 1 patch
Indentation   +141 added lines, -141 removed lines patch added patch discarded remove patch
@@ -19,83 +19,83 @@  discard block
 block discarded – undo
19 19
  */
20 20
 class Redux_Customizer_Panel extends WP_Customize_Panel {
21 21
 
22
-	/**
23
-	 * Type of this panel.
24
-	 *
25
-	 * @since  4.0.0
26
-	 * @access public
27
-	 * @var string
28
-	 */
29
-	public $type = 'redux';
22
+    /**
23
+     * Type of this panel.
24
+     *
25
+     * @since  4.0.0
26
+     * @access public
27
+     * @var string
28
+     */
29
+    public $type = 'redux';
30 30
 
31
-	/**
32
-	 * Panel opt_name.
33
-	 *
34
-	 * @since  4.0.0
35
-	 * @access public
36
-	 * @var string
37
-	 */
38
-	public $opt_name = '';
31
+    /**
32
+     * Panel opt_name.
33
+     *
34
+     * @since  4.0.0
35
+     * @access public
36
+     * @var string
37
+     */
38
+    public $opt_name = '';
39 39
 
40
-	/**
41
-	 * Section array.
42
-	 *
43
-	 * @var array|mixed
44
-	 */
45
-	public $section = array();
40
+    /**
41
+     * Section array.
42
+     *
43
+     * @var array|mixed
44
+     */
45
+    public $section = array();
46 46
 
47
-	/**
48
-	 * Section array.
49
-	 *
50
-	 * @var string
51
-	 */
52
-	public string $wp_ver;
47
+    /**
48
+     * Section array.
49
+     *
50
+     * @var string
51
+     */
52
+    public string $wp_ver;
53 53
 
54
-	/**
55
-	 * Constructor.
56
-	 * Any supplied $args override class property defaults.
57
-	 *
58
-	 * @since 4.0.0
59
-	 *
60
-	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
61
-	 * @param string               $id      A specific ID for the panel.
62
-	 * @param array                $args    Panel arguments.
63
-	 */
64
-	public function __construct( $manager, $id, $args = array() ) {
65
-		global $wp_version;
54
+    /**
55
+     * Constructor.
56
+     * Any supplied $args override class property defaults.
57
+     *
58
+     * @since 4.0.0
59
+     *
60
+     * @param WP_Customize_Manager $manager Customizer bootstrap instance.
61
+     * @param string               $id      A specific ID for the panel.
62
+     * @param array                $args    Panel arguments.
63
+     */
64
+    public function __construct( $manager, $id, $args = array() ) {
65
+        global $wp_version;
66 66
 
67
-		parent::__construct( $manager, $id, $args );
67
+        parent::__construct( $manager, $id, $args );
68 68
 
69
-		$version      = explode( '-', $wp_version );
70
-		$this->wp_ver = $version[0];
69
+        $version      = explode( '-', $wp_version );
70
+        $this->wp_ver = $version[0];
71 71
 
72
-		// Redux addition.
73
-		if ( isset( $args['section'] ) ) {
74
-			$this->section     = $args['section'];
75
-			$this->description = $this->section['desc'] ?? '';
76
-			$this->opt_name    = $args['opt_name'] ?? '';
77
-		}
78
-	}
72
+        // Redux addition.
73
+        if ( isset( $args['section'] ) ) {
74
+            $this->section     = $args['section'];
75
+            $this->description = $this->section['desc'] ?? '';
76
+            $this->opt_name    = $args['opt_name'] ?? '';
77
+        }
78
+    }
79 79
 
80
-	/**
81
-	 * WP < 4.3 Render
82
-	 *
83
-	 * @since
84
-	 * @access protected
85
-	 */
86
-	protected function render() {
87
-		if ( version_compare( $this->wp_ver, '4.3', '<' ) ) {
88
-			$this->render_fallback();
89
-		}
90
-	}
80
+    /**
81
+     * WP < 4.3 Render
82
+     *
83
+     * @since
84
+     * @access protected
85
+     */
86
+    protected function render() {
87
+        if ( version_compare( $this->wp_ver, '4.3', '<' ) ) {
88
+            $this->render_fallback();
89
+        }
90
+    }
91 91
 
92
-	/**
93
-	 * Render.
94
-	 */
95
-	protected function render_fallback() {
96
-		$classes = 'accordion-section redux-main redux-panel control-section control-panel control-panel-' . esc_attr( $this->type );
92
+    /**
93
+     * Render.
94
+     */
95
+    protected function render_fallback() {
96
+        $classes = 'accordion-section redux-main redux-panel control-section control-panel control-panel-' . esc_attr( $this->type );
97 97
 
98
-		?>
98
+        ?>
99 99
 		<li id="accordion-panel-<?php echo esc_attr( $this->id ); ?>" class="<?php echo esc_attr( $classes ); ?>"
100 100
 			data-width="<?php echo isset( $this->section['customizer_width'] ) ? esc_attr( $this->section['customizer_width'] ) : ''; ?>">
101 101
 			<h3 class="accordion-section-title" tabindex="0">
@@ -103,19 +103,19 @@  discard block
 block discarded – undo
103 103
 					<i class="<?php echo esc_attr( $this->section['icon'] ); ?>"></i>
104 104
 				<?php endif; ?>
105 105
 				<?php
106
-				echo wp_kses(
107
-					$this->title,
108
-					array(
109
-						'em'     => array(),
110
-						'i'      => array(),
111
-						'strong' => array(),
112
-						'span'   => array(
113
-							'class' => array(),
114
-							'style' => array(),
115
-						),
116
-					)
117
-				);
118
-				?>
106
+                echo wp_kses(
107
+                    $this->title,
108
+                    array(
109
+                        'em'     => array(),
110
+                        'i'      => array(),
111
+                        'strong' => array(),
112
+                        'span'   => array(
113
+                            'class' => array(),
114
+                            'style' => array(),
115
+                        ),
116
+                    )
117
+                );
118
+                ?>
119 119
 				<span class="screen-reader-text"><?php esc_html_e( 'Press return or enter to open this panel', 'redux-framework' ); ?></span>
120 120
 			</h3>
121 121
 			<ul class="accordion-sub-container control-panel-content">
@@ -125,22 +125,22 @@  discard block
 block discarded – undo
125 125
 			</ul>
126 126
 		</li>
127 127
 		<?php
128
-	}
128
+    }
129 129
 
130
-	/**
131
-	 * Render the sections that have been added to the panel.
132
-	 *
133
-	 * @since  4.1.0
134
-	 * @access protected
135
-	 */
136
-	protected function render_content() {
137
-		?>
130
+    /**
131
+     * Render the sections that have been added to the panel.
132
+     *
133
+     * @since  4.1.0
134
+     * @access protected
135
+     */
136
+    protected function render_content() {
137
+        ?>
138 138
 		<li class="panel-meta accordion-section redux-panel redux-panel-meta control-section
139 139
 		<?php
140
-		if ( empty( $this->description ) ) {
141
-			echo ' cannot-expand';
142
-		}
143
-		?>
140
+        if ( empty( $this->description ) ) {
141
+            echo ' cannot-expand';
142
+        }
143
+        ?>
144 144
 		">
145 145
 			<div class="accordion-section-title" tabindex="0">
146 146
 				<span class="preview-notice">
@@ -155,47 +155,47 @@  discard block
 block discarded – undo
155 155
 			<?php } ?>
156 156
 		</li>
157 157
 		<?php
158
-	}
158
+    }
159 159
 
160
-	/**
161
-	 * JSON.
162
-	 *
163
-	 * @return array
164
-	 */
165
-	public function json(): array {
166
-		$array = wp_array_slice_assoc(
167
-			parent::json(),
168
-			array(
169
-				'id',
170
-				'title',
171
-				'description',
172
-				'priority',
173
-				'type',
174
-			)
175
-		);
160
+    /**
161
+     * JSON.
162
+     *
163
+     * @return array
164
+     */
165
+    public function json(): array {
166
+        $array = wp_array_slice_assoc(
167
+            parent::json(),
168
+            array(
169
+                'id',
170
+                'title',
171
+                'description',
172
+                'priority',
173
+                'type',
174
+            )
175
+        );
176 176
 
177
-		$array['content']        = $this->get_content();
178
-		$array['active']         = $this->active();
179
-		$array['instanceNumber'] = $this->instance_number;
177
+        $array['content']        = $this->get_content();
178
+        $array['active']         = $this->active();
179
+        $array['instanceNumber'] = $this->instance_number;
180 180
 
181
-		// BEGIN Redux Additions.
182
-		$array['width'] = $this->section['customizer_width'] ?? '';
183
-		$array['icon']  = ( isset( $this->section['icon'] ) && ! empty( $this->section['icon'] ) ) ? $this->section['icon'] : 'hide';
181
+        // BEGIN Redux Additions.
182
+        $array['width'] = $this->section['customizer_width'] ?? '';
183
+        $array['icon']  = ( isset( $this->section['icon'] ) && ! empty( $this->section['icon'] ) ) ? $this->section['icon'] : 'hide';
184 184
 
185
-		$array['opt_name'] = $this->opt_name;
186
-		return $array;
187
-	}
185
+        $array['opt_name'] = $this->opt_name;
186
+        return $array;
187
+    }
188 188
 
189
-	/**
190
-	 * An Underscore (JS) template for this panel's content (but not its container).
191
-	 * Class variables for this panel class are available in the `data` JS object;
192
-	 * export custom variables by overriding {@see WP_Customize_Panel::json()}.
193
-	 *
194
-	 * @see   WP_Customize_Panel::print_template()
195
-	 * @since 4.3.0
196
-	 */
197
-	protected function content_template() {
198
-		?>
189
+    /**
190
+     * An Underscore (JS) template for this panel's content (but not its container).
191
+     * Class variables for this panel class are available in the `data` JS object;
192
+     * export custom variables by overriding {@see WP_Customize_Panel::json()}.
193
+     *
194
+     * @see   WP_Customize_Panel::print_template()
195
+     * @since 4.3.0
196
+     */
197
+    protected function content_template() {
198
+        ?>
199 199
 		<li
200 200
 			class="panel-meta customize-info redux-customizer-opt-name redux-panel accordion-section <# if ( ! data.description ) { #> cannot-expand<# } #>"
201 201
 			data-opt-name="{{{ data.opt_name }}}">
@@ -223,18 +223,18 @@  discard block
 block discarded – undo
223 223
 			<# } #>
224 224
 		</li>
225 225
 		<?php
226
-	}
226
+    }
227 227
 
228
-	/**
229
-	 * An Underscore (JS) template for rendering this panel's container.
230
-	 * Class variables for this panel class are available in the `data` JS object;
231
-	 * export custom variables by overriding {@see WP_Customize_Panel::json()}.
232
-	 *
233
-	 * @see   WP_Customize_Panel::print_template()
234
-	 * @since 4.3.0
235
-	 */
236
-	protected function render_template() {
237
-		?>
228
+    /**
229
+     * An Underscore (JS) template for rendering this panel's container.
230
+     * Class variables for this panel class are available in the `data` JS object;
231
+     * export custom variables by overriding {@see WP_Customize_Panel::json()}.
232
+     *
233
+     * @see   WP_Customize_Panel::print_template()
234
+     * @since 4.3.0
235
+     */
236
+    protected function render_template() {
237
+        ?>
238 238
 		<li id="accordion-panel-{{ data.id }}"
239 239
 			class="accordion-section redux-panel control-section control-panel control-panel-{{ data.type }}"
240 240
 			data-width="{{ data.width }}">
@@ -252,5 +252,5 @@  discard block
 block discarded – undo
252 252
 			<ul class="accordion-sub-container control-panel-content"></ul>
253 253
 		</li>
254 254
 		<?php
255
-	}
255
+    }
256 256
 }
Please login to merge, or discard this patch.
redux-core/inc/lib/font-awesome-6-free.php 3 patches
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -1,1 +1,1 @@
 block discarded – undo
1
-<?php
/**
 * Redux Icon Select Font Awesome 6 Free icon array.
 *
 * @package Redux
 * @author  Kevin Provance <[email protected]>
 */

defined( 'ABSPATH' ) || exit;

if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {

	/**
	 * Array of free Font Awesome 6 icons.
	 *
	 * @return array
	 */
	function redux_icon_select_fa_6_free(): array {
		return array( 'fas fa-0', 'fas fa-1', 'fas fa-2', 'fas fa-3', 'fas fa-4', 'fas fa-5', 'fas fa-6', 'fas fa-7', 'fas fa-8', 'fas fa-9', 'fab fa-42-group', 'fab fa-500px', 'fas fa-a', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-address-book', 'far fa-fas fa-address-book', 'fas fa-address-card', 'far fa-fas fa-address-card', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fas fa-anchor', 'fas fa-anchor-circle-check', 'fas fa-anchor-circle-exclamation', 'fas fa-anchor-circle-xmark', 'fas fa-anchor-lock', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angles-down', 'fas fa-angles-left', 'fas fa-angles-right', 'fas fa-angles-up', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fas fa-apple-whole', 'fas fa-archway', 'fas fa-arrow-down', 'fas fa-arrow-down-1-9', 'fas fa-arrow-down-9-1', 'fas fa-arrow-down-a-z', 'fas fa-arrow-down-long', 'fas fa-arrow-down-short-wide', 'fas fa-arrow-down-up-across-line', 'fas fa-arrow-down-up-lock', 'fas fa-arrow-down-wide-short', 'fas fa-arrow-down-z-a', 'fas fa-arrow-left', 'fas fa-arrow-left-long', 'fas fa-arrow-pointer', 'fas fa-arrow-right', 'fas fa-arrow-right-arrow-left', 'fas fa-arrow-right-from-bracket', 'fas fa-arrow-right-long', 'fas fa-arrow-right-to-bracket', 'fas fa-arrow-right-to-city', 'fas fa-arrow-rotate-left', 'fas fa-arrow-rotate-right', 'fas fa-arrow-trend-down', 'fas fa-arrow-trend-up', 'fas fa-arrow-turn-down', 'fas fa-arrow-turn-up', 'fas fa-arrow-up', 'fas fa-arrow-up-1-9', 'fas fa-arrow-up-9-1', 'fas fa-arrow-up-a-z', 'fas fa-arrow-up-from-bracket', 'fas fa-arrow-up-from-ground-water', 'fas fa-arrow-up-from-water-pump', 'fas fa-arrow-up-long', 'fas fa-arrow-up-right-dots', 'fas fa-arrow-up-right-from-square', 'fas fa-arrow-up-short-wide', 'fas fa-arrow-up-wide-short', 'fas fa-arrow-up-z-a', 'fas fa-arrows-down-to-line', 'fas fa-arrows-down-to-people', 'fas fa-arrows-left-right', 'fas fa-arrows-left-right-to-line', 'fas fa-arrows-rotate', 'fas fa-arrows-spin', 'fas fa-arrows-split-up-and-left', 'fas fa-arrows-to-circle', 'fas fa-arrows-to-dot', 'fas fa-arrows-to-eye', 'fas fa-arrows-turn-right', 'fas fa-arrows-turn-to-dots', 'fas fa-arrows-up-down', 'fas fa-arrows-up-down-left-right', 'fas fa-arrows-up-to-line', 'fab fa-artstation', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fab fa-atlassian', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fas fa-austral-sign', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-b', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backward', 'fas fa-backward-fast', 'fas fa-backward-step', 'fas fa-bacon', 'fas fa-bacteria', 'fas fa-bacterium', 'fas fa-bag-shopping', 'fas fa-bahai', 'fas fa-baht-sign', 'fas fa-ban', 'fas fa-ban-smoking', 'fas fa-bandage', 'fab fa-bandcamp', 'fas fa-bangladeshi-taka-sign', 'fas fa-barcode', 'fas fa-bars', 'fas fa-bars-progress', 'fas fa-bars-staggered', 'fas fa-baseball', 'fas fa-baseball-bat-ball', 'fas fa-basket-shopping', 'fas fa-basketball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fab fa-battle-net', 'fas fa-bed', 'fas fa-bed-pulse', 'fas fa-beer-mug-empty', 'fab fa-behance', 'fas fa-bell', 'far fa-fas fa-bell', 'fas fa-bell-concierge', 'fas fa-bell-slash', 'far fa-fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bicycle', 'fab fa-bilibili', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-biohazard', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fas fa-bitcoin-sign', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blog', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluesky', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bolt-lightning', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-atlas', 'fas fa-book-bible', 'fas fa-book-bookmark', 'fas fa-book-journal-whills', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-open-reader', 'fas fa-book-quran', 'fas fa-book-skull', 'fas fa-book-tanakh', 'fas fa-bookmark', 'far fa-fas fa-bookmark', 'fab fa-bootstrap', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-top-left', 'fas fa-bore-hole', 'fab fa-bots', 'fas fa-bottle-droplet', 'fas fa-bottle-water', 'fas fa-bowl-food', 'fas fa-bowl-rice', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-archive', 'fas fa-box-open', 'fas fa-box-tissue', 'fas fa-boxes-packing', 'fas fa-boxes-stacked', 'fas fa-braille', 'fas fa-brain', 'fab fa-brave', 'fab fa-brave-reverse', 'fas fa-brazilian-real-sign', 'fas fa-bread-slice', 'fas fa-bridge', 'fas fa-bridge-circle-check', 'fas fa-bridge-circle-exclamation', 'fas fa-bridge-circle-xmark', 'fas fa-bridge-lock', 'fas fa-bridge-water', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broom', 'fas fa-broom-ball', 'fas fa-brush', 'fab fa-btc', 'fas fa-bucket', 'fab fa-buffer', 'fas fa-bug', 'fas fa-bug-slash', 'fas fa-bugs', 'fas fa-building', 'far fa-fas fa-building', 'fas fa-building-circle-arrow-right', 'fas fa-building-circle-check', 'fas fa-building-circle-exclamation', 'fas fa-building-circle-xmark', 'fas fa-building-columns', 'fas fa-building-flag', 'fas fa-building-lock', 'fas fa-building-ngo', 'fas fa-building-shield', 'fas fa-building-un', 'fas fa-building-user', 'fas fa-building-wheat', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burger', 'fab fa-buromobelexperte', 'fas fa-burst', 'fas fa-bus', 'fas fa-bus-simple', 'fas fa-business-time', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fas fa-c', 'fas fa-cable-car', 'fas fa-cake-candles', 'fas fa-calculator', 'fas fa-calendar', 'far fa-fas fa-calendar', 'fas fa-calendar-check', 'far fa-fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-days', 'far fa-fas fa-calendar-days', 'fas fa-calendar-minus', 'far fa-fas fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-fas fa-calendar-plus', 'fas fa-calendar-week', 'fas fa-calendar-xmark', 'far fa-fas fa-calendar-xmark', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-camera-rotate', 'fas fa-campground', 'fab fa-canadian-maple-leaf', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-battery', 'fas fa-car-burst', 'fas fa-car-on', 'fas fa-car-rear', 'fas fa-car-side', 'fas fa-car-tunnel', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-flatbed', 'fas fa-cart-flatbed-suitcase', 'fas fa-cart-plus', 'fas fa-cart-shopping', 'fas fa-cash-register', 'fas fa-cat', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fas fa-cedi-sign', 'fas fa-cent-sign', 'fab fa-centercode', 'fab fa-centos', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-user', 'fas fa-champagne-glasses', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-fas fa-chart-bar', 'fas fa-chart-column', 'fas fa-chart-diagram', 'fas fa-chart-gantt', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-chart-simple', 'fas fa-check', 'fas fa-check-double', 'fas fa-check-to-slot', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'far fa-fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'far fa-fas fa-chess-king', 'fas fa-chess-knight', 'far fa-fas fa-chess-knight', 'fas fa-chess-pawn', 'far fa-fas fa-chess-pawn', 'fas fa-chess-queen', 'far fa-fas fa-chess-queen', 'fas fa-chess-rook', 'far fa-fas fa-chess-rook', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-child-combatant', 'fas fa-child-dress', 'fas fa-child-reaching', 'fas fa-children', 'fab fa-chrome', 'fab fa-chromecast', 'fas fa-church', 'fas fa-circle', 'far fa-fas fa-circle', 'fas fa-circle-arrow-down', 'fas fa-circle-arrow-left', 'fas fa-circle-arrow-right', 'fas fa-circle-arrow-up', 'fas fa-circle-check', 'far fa-fas fa-circle-check', 'fas fa-circle-chevron-down', 'fas fa-circle-chevron-left', 'fas fa-circle-chevron-right', 'fas fa-circle-chevron-up', 'fas fa-circle-dollar-to-slot', 'fas fa-circle-dot', 'far fa-fas fa-circle-dot', 'fas fa-circle-down', 'far fa-fas fa-circle-down', 'fas fa-circle-exclamation', 'fas fa-circle-h', 'fas fa-circle-half-stroke', 'fas fa-circle-info', 'fas fa-circle-left', 'far fa-fas fa-circle-left', 'fas fa-circle-minus', 'fas fa-circle-nodes', 'fas fa-circle-notch', 'fas fa-circle-pause', 'far fa-fas fa-circle-pause', 'fas fa-circle-play', 'far fa-fas fa-circle-play', 'fas fa-circle-plus', 'fas fa-circle-question', 'far fa-fas fa-circle-question', 'fas fa-circle-radiation', 'fas fa-circle-right', 'far fa-fas fa-circle-right', 'fas fa-circle-stop', 'far fa-fas fa-circle-stop', 'fas fa-circle-up', 'far fa-fas fa-circle-up', 'fas fa-circle-user', 'far fa-fas fa-circle-user', 'fas fa-circle-xmark', 'far fa-fas fa-circle-xmark', 'fas fa-city', 'fas fa-clapperboard', 'fas fa-clipboard', 'far fa-fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clipboard-question', 'fas fa-clipboard-user', 'fas fa-clock', 'far fa-fas fa-clock', 'fas fa-clock-rotate-left', 'fas fa-clone', 'far fa-fas fa-clone', 'fas fa-closed-captioning', 'far fa-fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-arrow-down', 'fas fa-cloud-arrow-up', 'fas fa-cloud-bolt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-showers-water', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fab fa-cloudflare', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-clover', 'fab fa-cmplid', 'fas fa-code', 'fas fa-code-branch', 'fas fa-code-commit', 'fas fa-code-compare', 'fas fa-code-fork', 'fas fa-code-merge', 'fas fa-code-pull-request', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coins', 'fas fa-colon-sign', 'fas fa-comment', 'far fa-fas fa-comment', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-nodes', 'fas fa-comment-slash', 'fas fa-comment-sms', 'fas fa-comments', 'far fa-fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-fas fa-compass', 'fas fa-compass-drafting', 'fas fa-compress', 'fas fa-computer', 'fas fa-computer-mouse', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-fas fa-copy', 'fas fa-copyright', 'far fa-fas fa-copyright', 'fab fa-cotton-bureau', 'fas fa-couch', 'fas fa-cow', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fas fa-credit-card', 'far fa-fas fa-credit-card', 'fab fa-critical-role', 'fas fa-crop', 'fas fa-crop-simple', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cruzeiro-sign', 'fab fa-css', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cubes-stacked', 'fab fa-cuttlefish', 'fas fa-d', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dart-lang', 'fab fa-dashcube', 'fas fa-database', 'fab fa-debian', 'fab fa-deezer', 'fas fa-delete-left', 'fab fa-delicious', 'fas fa-democrat', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-dev', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fab fa-dhl', 'fas fa-diagram-next', 'fas fa-diagram-predecessor', 'fas fa-diagram-project', 'fas fa-diagram-successor', 'fas fa-diamond', 'fas fa-diamond-turn-right', 'fab fa-diaspora', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fas fa-disease', 'fas fa-display', 'fas fa-divide', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dong-sign', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dove', 'fas fa-down-left-and-up-right-to-center', 'fas fa-down-long', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-dragon', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dropbox', 'fas fa-droplet', 'fas fa-droplet-slash', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fab fa-drupal', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fab fa-dyalog', 'fas fa-e', 'fas fa-ear-deaf', 'fas fa-ear-listen', 'fab fa-earlybirds', 'fas fa-earth-africa', 'fas fa-earth-americas', 'fas fa-earth-asia', 'fas fa-earth-europe', 'fas fa-earth-oceania', 'fab fa-ebay', 'fab fa-edge', 'fab fa-edge-legacy', 'fas fa-egg', 'fas fa-eject', 'fab fa-elementor', 'fas fa-elevator', 'fas fa-ellipsis', 'fas fa-ellipsis-vertical', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-fas fa-envelope', 'fas fa-envelope-circle-check', 'fas fa-envelope-open', 'far fa-fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelopes-bulk', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fas fa-ethernet', 'fab fa-etsy', 'fas fa-euro-sign', 'fab fa-evernote', 'fas fa-exclamation', 'fas fa-expand', 'fab fa-expeditedssl', 'fas fa-explosion', 'fas fa-eye', 'far fa-fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-low-vision', 'fas fa-eye-slash', 'far fa-fas fa-eye-slash', 'fas fa-f', 'fas fa-face-angry', 'far fa-fas fa-face-angry', 'fas fa-face-dizzy', 'far fa-fas fa-face-dizzy', 'fas fa-face-flushed', 'far fa-fas fa-face-flushed', 'fas fa-face-frown', 'far fa-fas fa-face-frown', 'fas fa-face-frown-open', 'far fa-fas fa-face-frown-open', 'fas fa-face-grimace', 'far fa-fas fa-face-grimace', 'fas fa-face-grin', 'far fa-fas fa-face-grin', 'fas fa-face-grin-beam', 'far fa-fas fa-face-grin-beam', 'fas fa-face-grin-beam-sweat', 'far fa-fas fa-face-grin-beam-sweat', 'fas fa-face-grin-hearts', 'far fa-fas fa-face-grin-hearts', 'fas fa-face-grin-squint', 'far fa-fas fa-face-grin-squint', 'fas fa-face-grin-squint-tears', 'far fa-fas fa-face-grin-squint-tears', 'fas fa-face-grin-stars', 'far fa-fas fa-face-grin-stars', 'fas fa-face-grin-tears', 'far fa-fas fa-face-grin-tears', 'fas fa-face-grin-tongue', 'far fa-fas fa-face-grin-tongue', 'fas fa-face-grin-tongue-squint', 'far fa-fas fa-face-grin-tongue-squint', 'fas fa-face-grin-tongue-wink', 'far fa-fas fa-face-grin-tongue-wink', 'fas fa-face-grin-wide', 'far fa-fas fa-face-grin-wide', 'fas fa-face-grin-wink', 'far fa-fas fa-face-grin-wink', 'fas fa-face-kiss', 'far fa-fas fa-face-kiss', 'fas fa-face-kiss-beam', 'far fa-fas fa-face-kiss-beam', 'fas fa-face-kiss-wink-heart', 'far fa-fas fa-face-kiss-wink-heart', 'fas fa-face-laugh', 'far fa-fas fa-face-laugh', 'fas fa-face-laugh-beam', 'far fa-fas fa-face-laugh-beam', 'fas fa-face-laugh-squint', 'far fa-fas fa-face-laugh-squint', 'fas fa-face-laugh-wink', 'far fa-fas fa-face-laugh-wink', 'fas fa-face-meh', 'far fa-fas fa-face-meh', 'fas fa-face-meh-blank', 'far fa-fas fa-face-meh-blank', 'fas fa-face-rolling-eyes', 'far fa-fas fa-face-rolling-eyes', 'fas fa-face-sad-cry', 'far fa-fas fa-face-sad-cry', 'fas fa-face-sad-tear', 'far fa-fas fa-face-sad-tear', 'fas fa-face-smile', 'far fa-fas fa-face-smile', 'fas fa-face-smile-beam', 'far fa-fas fa-face-smile-beam', 'fas fa-face-smile-wink', 'far fa-fas fa-face-smile-wink', 'fas fa-face-surprise', 'far fa-fas fa-face-surprise', 'fas fa-face-tired', 'far fa-fas fa-face-tired', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fas fa-fan', 'fab fa-fantasy-flight-games', 'fas fa-faucet', 'fas fa-faucet-drip', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-pointed', 'fab fa-fedex', 'fab fa-fedora', 'fas fa-ferry', 'fab fa-figma', 'fas fa-file', 'far fa-fas fa-file', 'fas fa-file-arrow-down', 'fas fa-file-arrow-up', 'fas fa-file-audio', 'far fa-fas fa-file-audio', 'fas fa-file-circle-check', 'fas fa-file-circle-exclamation', 'fas fa-file-circle-minus', 'fas fa-file-circle-plus', 'fas fa-file-circle-question', 'fas fa-file-circle-xmark', 'fas fa-file-code', 'far fa-fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-excel', 'far fa-fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-fragment', 'fas fa-file-half-dashed', 'fas fa-file-image', 'far fa-fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-lines', 'far fa-fas fa-file-lines', 'fas fa-file-medical', 'fas fa-file-pdf', 'far fa-fas fa-file-pdf', 'fas fa-file-pen', 'fas fa-file-powerpoint', 'far fa-fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-shield', 'fas fa-file-signature', 'fas fa-file-video', 'far fa-fas fa-file-video', 'fas fa-file-waveform', 'fas fa-file-word', 'far fa-fas fa-file-word', 'fas fa-file-zipper', 'far fa-fas fa-file-zipper', 'fab fa-files-pinwheel', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-filter-circle-dollar', 'fas fa-filter-circle-xmark', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-burner', 'fas fa-fire-extinguisher', 'fas fa-fire-flame-curved', 'fas fa-fire-flame-simple', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-fish-fins', 'fas fa-flag', 'far fa-fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flask-vial', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-floppy-disk', 'far fa-fas fa-floppy-disk', 'fas fa-florin-sign', 'fab fa-flutter', 'fab fa-fly', 'fas fa-folder', 'far fa-fas fa-folder', 'fas fa-folder-closed', 'far fa-fas fa-folder-closed', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-folder-tree', 'fas fa-font', 'fas fa-font-awesome', 'far fa-fas fa-font-awesome', 'fab fa-far fa-fas fa-font-awesome', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fas fa-forward-fast', 'fas fa-forward-step', 'fab fa-foursquare', 'fas fa-franc-sign', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fab fa-fulcrum', 'fas fa-futbol', 'far fa-fas fa-futbol', 'fas fa-g', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gauge', 'fas fa-gauge-high', 'fas fa-gauge-simple', 'fas fa-gauge-simple-high', 'fas fa-gavel', 'fas fa-gear', 'fas fa-gears', 'fas fa-gem', 'far fa-fas fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fab fa-git', 'fab fa-git-alt', 'fab fa-github', 'fab fa-github-alt', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-water', 'fas fa-glass-water-droplet', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fab fa-gofore', 'fab fa-golang', 'fas fa-golf-ball-tee', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-pay', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-scholar', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grip', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fas fa-group-arrows-rotate', 'fab fa-grunt', 'fas fa-guarani-sign', 'fab fa-guilded', 'fas fa-guitar', 'fab fa-gulp', 'fas fa-gun', 'fas fa-h', 'fab fa-hacker-news', 'fab fa-hackerrank', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand', 'far fa-fas fa-hand', 'fas fa-hand-back-fist', 'far fa-fas fa-hand-back-fist', 'fas fa-hand-dots', 'fas fa-hand-fist', 'fas fa-hand-holding', 'fas fa-hand-holding-dollar', 'fas fa-hand-holding-droplet', 'fas fa-hand-holding-hand', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-medical', 'fas fa-hand-lizard', 'far fa-fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-peace', 'far fa-fas fa-hand-peace', 'fas fa-hand-point-down', 'far fa-fas fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-fas fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-fas fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-fas fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-fas fa-hand-pointer', 'fas fa-hand-scissors', 'far fa-fas fa-hand-scissors', 'fas fa-hand-sparkles', 'fas fa-hand-spock', 'far fa-fas fa-hand-spock', 'fas fa-handcuffs', 'fas fa-hands', 'fas fa-hands-asl-interpreting', 'fas fa-hands-bound', 'fas fa-hands-bubbles', 'fas fa-hands-clapping', 'fas fa-hands-holding', 'fas fa-hands-holding-child', 'fas fa-hands-holding-circle', 'fas fa-hands-praying', 'fas fa-handshake', 'far fa-fas fa-handshake', 'fas fa-handshake-angle', 'fas fa-handshake-simple', 'fas fa-handshake-simple-slash', 'fas fa-handshake-slash', 'fas fa-hanukiah', 'fas fa-hard-drive', 'far fa-fas fa-hard-drive', 'fab fa-hashnode', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-head-side-cough', 'fas fa-head-side-cough-slash', 'fas fa-head-side-mask', 'fas fa-head-side-virus', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-simple', 'fas fa-headset', 'fas fa-heart', 'far fa-fas fa-heart', 'fas fa-heart-circle-bolt', 'fas fa-heart-circle-check', 'fas fa-heart-circle-exclamation', 'fas fa-heart-circle-minus', 'fas fa-heart-circle-plus', 'fas fa-heart-circle-xmark', 'fas fa-heart-crack', 'fas fa-heart-pulse', 'fas fa-helicopter', 'fas fa-helicopter-symbol', 'fas fa-helmet-safety', 'fas fa-helmet-un', 'fas fa-hexagon-nodes', 'fas fa-hexagon-nodes-bolt', 'fas fa-highlighter', 'fas fa-hill-avalanche', 'fas fa-hill-rockslide', 'fas fa-hippo', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hive', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'far fa-fas fa-hospital', 'fas fa-hospital-user', 'fas fa-hot-tub-person', 'fas fa-hotdog', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'far fa-fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house', 'fas fa-house-chimney', 'fas fa-house-chimney-crack', 'fas fa-house-chimney-medical', 'fas fa-house-chimney-user', 'fas fa-house-chimney-window', 'fas fa-house-circle-check', 'fas fa-house-circle-exclamation', 'fas fa-house-circle-xmark', 'fas fa-house-crack', 'fas fa-house-fire', 'fas fa-house-flag', 'fas fa-house-flood-water', 'fas fa-house-flood-water-circle-arrow-right', 'fas fa-house-laptop', 'fas fa-house-lock', 'fas fa-house-medical', 'fas fa-house-medical-circle-check', 'fas fa-house-medical-circle-exclamation', 'fas fa-house-medical-circle-xmark', 'fas fa-house-medical-flag', 'fas fa-house-signal', 'fas fa-house-tsunami', 'fas fa-house-user', 'fab fa-houzz', 'fas fa-hryvnia-sign', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-hurricane', 'fas fa-i', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'far fa-fas fa-id-badge', 'fas fa-id-card', 'far fa-fas fa-id-card', 'fas fa-id-card-clip', 'fab fa-ideal', 'fas fa-igloo', 'fas fa-image', 'far fa-fas fa-image', 'fas fa-image-portrait', 'fas fa-images', 'far fa-fas fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-indian-rupee-sign', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fab fa-instagram', 'fab fa-instalod', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fas fa-j', 'fas fa-jar', 'fas fa-jar-wheat', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fas fa-jet-fighter', 'fas fa-jet-fighter-up', 'fab fa-jira', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fab fa-js', 'fab fa-jsfiddle', 'fas fa-jug-detergent', 'fab fa-jxl', 'fas fa-k', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-fas fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kip-sign', 'fas fa-kit-medical', 'fas fa-kitchen-set', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-l', 'fas fa-land-mine-on', 'fas fa-landmark', 'fas fa-landmark-dome', 'fas fa-landmark-flag', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-file', 'fas fa-laptop-medical', 'fab fa-laravel', 'fas fa-lari-sign', 'fab fa-lastfm', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-left-long', 'fas fa-left-right', 'fas fa-lemon', 'far fa-fas fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fab fa-letterboxd', 'fas fa-life-ring', 'far fa-fas fa-life-ring', 'fas fa-lightbulb', 'far fa-fas fa-lightbulb', 'fab fa-line', 'fas fa-lines-leaning', 'fas fa-link', 'fas fa-link-slash', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-check', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-litecoin-sign', 'fas fa-location-arrow', 'fas fa-location-crosshairs', 'fas fa-location-dot', 'fas fa-location-pin', 'fas fa-location-pin-lock', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-locust', 'fas fa-lungs', 'fas fa-lungs-virus', 'fab fa-lyft', 'fas fa-m', 'fab fa-magento', 'fas fa-magnet', 'fas fa-magnifying-glass', 'fas fa-magnifying-glass-arrow-right', 'fas fa-magnifying-glass-chart', 'fas fa-magnifying-glass-dollar', 'fas fa-magnifying-glass-location', 'fas fa-magnifying-glass-minus', 'fas fa-magnifying-glass-plus', 'fab fa-mailchimp', 'fas fa-manat-sign', 'fab fa-mandalorian', 'fas fa-map', 'far fa-fas fa-map', 'fas fa-map-location', 'fas fa-map-location-dot', 'fas fa-map-pin', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-and-venus', 'fas fa-mars-and-venus-burst', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-right', 'fas fa-mars-stroke-up', 'fas fa-martini-glass', 'fas fa-martini-glass-citrus', 'fas fa-martini-glass-empty', 'fas fa-mask', 'fas fa-mask-face', 'fas fa-mask-ventilator', 'fas fa-masks-theater', 'fab fa-mastodon', 'fas fa-mattress-pillow', 'fab fa-maxcdn', 'fas fa-maximize', 'fab fa-mdb', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-memory', 'fab fa-mendeley', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-message', 'far fa-fas fa-message', 'fab fa-meta', 'fas fa-meteor', 'fab fa-microblog', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-lines', 'fas fa-microphone-lines-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-mill-sign', 'fas fa-minimize', 'fab fa-mintbit', 'fas fa-minus', 'fas fa-mitten', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-button', 'fas fa-mobile-retro', 'fas fa-mobile-screen', 'fas fa-mobile-screen-button', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-1', 'far fa-fas fa-money-bill-1', 'fas fa-money-bill-1-wave', 'fas fa-money-bill-transfer', 'fas fa-money-bill-trend-up', 'fas fa-money-bill-wave', 'fas fa-money-bill-wheat', 'fas fa-money-bills', 'fas fa-money-check', 'fas fa-money-check-dollar', 'fas fa-monument', 'fas fa-moon', 'far fa-fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-mosquito', 'fas fa-mosquito-net', 'fas fa-motorcycle', 'fas fa-mound', 'fas fa-mountain', 'fas fa-mountain-city', 'fas fa-mountain-sun', 'fas fa-mug-hot', 'fas fa-mug-saucer', 'fas fa-music', 'fas fa-n', 'fas fa-naira-sign', 'fab fa-napster', 'fab fa-neos', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-fas fa-newspaper', 'fab fa-nfc-directional', 'fab fa-nfc-symbol', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notdef', 'fas fa-note-sticky', 'far fa-fas fa-note-sticky', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-o', 'fas fa-object-group', 'far fa-fas fa-object-group', 'fas fa-object-ungroup', 'far fa-fas fa-object-ungroup', 'fab fa-octopus-deploy', 'fab fa-odnoklassniki', 'fab fa-odysee', 'fas fa-oil-can', 'fas fa-oil-well', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opensuse', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fas fa-otter', 'fas fa-outdent', 'fas fa-p', 'fab fa-padlet', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-pager', 'fas fa-paint-roller', 'fas fa-paintbrush', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-panorama', 'fas fa-paper-plane', 'far fa-fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-passport', 'fas fa-paste', 'far fa-fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-clip', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-ruler', 'fas fa-pen-to-square', 'far fa-fas fa-pen-to-square', 'fas fa-pencil', 'fas fa-people-arrows', 'fas fa-people-carry-box', 'fas fa-people-group', 'fas fa-people-line', 'fas fa-people-pulling', 'fas fa-people-robbery', 'fas fa-people-roof', 'fas fa-pepper-hot', 'fab fa-perbyte', 'fas fa-percent', 'fab fa-periscope', 'fas fa-person', 'fas fa-person-arrow-down-to-line', 'fas fa-person-arrow-up-from-line', 'fas fa-person-biking', 'fas fa-person-booth', 'fas fa-person-breastfeeding', 'fas fa-person-burst', 'fas fa-person-cane', 'fas fa-person-chalkboard', 'fas fa-person-circle-check', 'fas fa-person-circle-exclamation', 'fas fa-person-circle-minus', 'fas fa-person-circle-plus', 'fas fa-person-circle-question', 'fas fa-person-circle-xmark', 'fas fa-person-digging', 'fas fa-person-dots-from-line', 'fas fa-person-dress', 'fas fa-person-dress-burst', 'fas fa-person-drowning', 'fas fa-person-falling', 'fas fa-person-falling-burst', 'fas fa-person-half-dress', 'fas fa-person-harassing', 'fas fa-person-hiking', 'fas fa-person-military-pointing', 'fas fa-person-military-rifle', 'fas fa-person-military-to-person', 'fas fa-person-praying', 'fas fa-person-pregnant', 'fas fa-person-rays', 'fas fa-person-rifle', 'fas fa-person-running', 'fas fa-person-shelter', 'fas fa-person-skating', 'fas fa-person-skiing', 'fas fa-person-skiing-nordic', 'fas fa-person-snowboarding', 'fas fa-person-swimming', 'fas fa-person-through-window', 'fas fa-person-walking', 'fas fa-person-walking-arrow-loop-left', 'fas fa-person-walking-arrow-right', 'fas fa-person-walking-dashed-line-arrow-right', 'fas fa-person-walking-luggage', 'fas fa-person-walking-with-cane', 'fas fa-peseta-sign', 'fas fa-peso-sign', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-flip', 'fas fa-phone-slash', 'fas fa-phone-volume', 'fas fa-photo-film', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pix', 'fab fa-pixiv', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-circle-check', 'fas fa-plane-circle-exclamation', 'fas fa-plane-circle-xmark', 'fas fa-plane-departure', 'fas fa-plane-lock', 'fas fa-plane-slash', 'fas fa-plane-up', 'fas fa-plant-wilt', 'fas fa-plate-wheat', 'fas fa-play', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plug-circle-bolt', 'fas fa-plug-circle-check', 'fas fa-plug-circle-exclamation', 'fas fa-plug-circle-minus', 'fas fa-plug-circle-plus', 'fas fa-plug-circle-xmark', 'fas fa-plus', 'fas fa-plus-minus', 'fas fa-podcast', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-power-off', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-medical', 'fas fa-print', 'fab fa-product-hunt', 'fas fa-pump-medical', 'fas fa-pump-soap', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fas fa-q', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-r', 'fab fa-r-project', 'fas fa-radiation', 'fas fa-radio', 'fas fa-rainbow', 'fas fa-ranking-star', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-rectangle-ad', 'fas fa-rectangle-list', 'far fa-fas fa-rectangle-list', 'fas fa-rectangle-xmark', 'far fa-fas fa-rectangle-xmark', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-redhat', 'fas fa-registered', 'far fa-fas fa-registered', 'fab fa-renren', 'fas fa-repeat', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fas fa-republican', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-restroom', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-right-from-bracket', 'fas fa-right-left', 'fas fa-right-long', 'fas fa-right-to-bracket', 'fas fa-ring', 'fas fa-road', 'fas fa-road-barrier', 'fas fa-road-bridge', 'fas fa-road-circle-check', 'fas fa-road-circle-exclamation', 'fas fa-road-circle-xmark', 'fas fa-road-lock', 'fas fa-road-spikes', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-rotate', 'fas fa-rotate-left', 'fas fa-rotate-right', 'fas fa-route', 'fas fa-rss', 'fas fa-ruble-sign', 'fas fa-rug', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-rupiah-sign', 'fab fa-rust', 'fas fa-s', 'fas fa-sack-dollar', 'fas fa-sack-xmark', 'fab fa-safari', 'fas fa-sailboat', 'fab fa-salesforce', 'fab fa-sass', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-scale-balanced', 'fas fa-scale-unbalanced', 'fas fa-scale-unbalanced-flip', 'fab fa-schlix', 'fas fa-school', 'fas fa-school-circle-check', 'fas fa-school-circle-exclamation', 'fas fa-school-circle-xmark', 'fas fa-school-flag', 'fas fa-school-lock', 'fas fa-scissors', 'fab fa-screenpal', 'fas fa-screwdriver', 'fas fa-screwdriver-wrench', 'fab fa-scribd', 'fas fa-scroll', 'fas fa-scroll-torah', 'fas fa-sd-card', 'fab fa-searchengin', 'fas fa-section', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-from-square', 'far fa-fas fa-share-from-square', 'fas fa-share-nodes', 'fas fa-sheet-plastic', 'fas fa-shekel-sign', 'fas fa-shield', 'fas fa-shield-cat', 'fas fa-shield-dog', 'fas fa-shield-halved', 'fas fa-shield-heart', 'fas fa-shield-virus', 'fas fa-ship', 'fas fa-shirt', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fab fa-shoelace', 'fas fa-shop', 'fas fa-shop-lock', 'fas fa-shop-slash', 'fab fa-shopify', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shrimp', 'fas fa-shuffle', 'fas fa-shuttle-space', 'fas fa-sign-hanging', 'fas fa-signal', 'fab fa-signal-messenger', 'fas fa-signature', 'fas fa-signs-post', 'fas fa-sim-card', 'fab fa-simplybuilt', 'fas fa-sink', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fab fa-sitrox', 'fab fa-sketch', 'fas fa-skull', 'fas fa-skull-crossbones', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders', 'fab fa-slideshare', 'fas fa-smog', 'fas fa-smoking', 'fab fa-snapchat', 'fas fa-snowflake', 'far fa-fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-soap', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-down', 'fas fa-sort-up', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fas fa-spa', 'fab fa-space-awesome', 'fas fa-spaghetti-monster-flying', 'fab fa-speakap', 'fab fa-speaker-deck', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spoon', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-spray-can-sparkles', 'fas fa-square', 'far fa-fas fa-square', 'fas fa-square-arrow-up-right', 'fab fa-square-behance', 'fas fa-square-binary', 'fab fa-square-bluesky', 'fas fa-square-caret-down', 'far fa-fas fa-square-caret-down', 'fas fa-square-caret-left', 'far fa-fas fa-square-caret-left', 'fas fa-square-caret-right', 'far fa-fas fa-square-caret-right', 'fas fa-square-caret-up', 'far fa-fas fa-square-caret-up', 'fas fa-square-check', 'far fa-fas fa-square-check', 'fab fa-square-dribbble', 'fas fa-square-envelope', 'fab fa-square-facebook', 'fab fa-square-font-awesome', 'fab fa-square-font-awesome-stroke', 'fas fa-square-full', 'far fa-fas fa-square-full', 'fab fa-square-git', 'fab fa-square-github', 'fab fa-square-gitlab', 'fab fa-square-google-plus', 'fas fa-square-h', 'fab fa-square-hacker-news', 'fab fa-square-instagram', 'fab fa-square-js', 'fab fa-square-lastfm', 'fab fa-square-letterboxd', 'fas fa-square-minus', 'far fa-fas fa-square-minus', 'fas fa-square-nfi', 'fab fa-square-odnoklassniki', 'fas fa-square-parking', 'fas fa-square-pen', 'fas fa-square-person-confined', 'fas fa-square-phone', 'fas fa-square-phone-flip', 'fab fa-square-pied-piper', 'fab fa-square-pinterest', 'fas fa-square-plus', 'far fa-fas fa-square-plus', 'fas fa-square-poll-horizontal', 'fas fa-square-poll-vertical', 'fab fa-square-reddit', 'fas fa-square-root-variable', 'fas fa-square-rss', 'fas fa-square-share-nodes', 'fab fa-square-snapchat', 'fab fa-square-steam', 'fab fa-square-threads', 'fab fa-square-tumblr', 'fab fa-square-twitter', 'fas fa-square-up-right', 'fab fa-square-upwork', 'fab fa-square-viadeo', 'fab fa-square-vimeo', 'fas fa-square-virus', 'fab fa-square-web-awesome', 'fab fa-square-web-awesome-stroke', 'fab fa-square-whatsapp', 'fab fa-square-x-twitter', 'fab fa-square-xing', 'fas fa-square-xmark', 'fab fa-square-youtube', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fas fa-staff-snake', 'fas fa-stairs', 'fas fa-stamp', 'fas fa-stapler', 'fas fa-star', 'far fa-fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-fas fa-star-half', 'fas fa-star-half-stroke', 'far fa-fas fa-star-half-stroke', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-symbol', 'fas fa-sterling-sign', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-stop', 'fas fa-stopwatch', 'fas fa-stopwatch-20', 'fas fa-store', 'fas fa-store-slash', 'fab fa-strava', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-stubber', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-suitcase', 'fas fa-suitcase-medical', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-fas fa-sun', 'fas fa-sun-plant-wilt', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fab fa-suse', 'fas fa-swatchbook', 'fab fa-swift', 'fab fa-symfony', 'fas fa-synagogue', 'fas fa-syringe', 'fas fa-t', 'fas fa-table', 'fas fa-table-cells', 'fas fa-table-cells-column-lock', 'fas fa-table-cells-large', 'fas fa-table-cells-row-lock', 'fas fa-table-cells-row-unlock', 'fas fa-table-columns', 'fas fa-table-list', 'fas fa-table-tennis-paddle-ball', 'fas fa-tablet', 'fas fa-tablet-button', 'fas fa-tablet-screen-button', 'fas fa-tablets', 'fas fa-tachograph-digital', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tarp', 'fas fa-tarp-droplet', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fas fa-temperature-arrow-down', 'fas fa-temperature-arrow-up', 'fas fa-temperature-empty', 'fas fa-temperature-full', 'fas fa-temperature-half', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-temperature-quarter', 'fas fa-temperature-three-quarters', 'fab fa-tencent-weibo', 'fas fa-tenge-sign', 'fas fa-tent', 'fas fa-tent-arrow-down-to-line', 'fas fa-tent-arrow-left-right', 'fas fa-tent-arrow-turn-left', 'fas fa-tent-arrows-down', 'fas fa-tents', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-slash', 'fas fa-text-width', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fab fa-think-peaks', 'fab fa-threads', 'fas fa-thumbs-down', 'far fa-fas fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-thumbtack-slash', 'fas fa-ticket', 'fas fa-ticket-simple', 'fab fa-tiktok', 'fas fa-timeline', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toilet-paper-slash', 'fas fa-toilet-portable', 'fas fa-toilets-portable', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torii-gate', 'fas fa-tornado', 'fas fa-tower-broadcast', 'fas fa-tower-cell', 'fas fa-tower-observation', 'fas fa-tractor', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-train-subway', 'fas fa-train-tram', 'fas fa-transgender', 'fas fa-trash', 'fas fa-trash-arrow-up', 'fas fa-trash-can', 'far fa-fas fa-trash-can', 'fas fa-trash-can-arrow-up', 'fas fa-tree', 'fas fa-tree-city', 'fab fa-trello', 'fas fa-triangle-exclamation', 'fas fa-trophy', 'fas fa-trowel', 'fas fa-trowel-bricks', 'fas fa-truck', 'fas fa-truck-arrow-right', 'fas fa-truck-droplet', 'fas fa-truck-fast', 'fas fa-truck-field', 'fas fa-truck-field-un', 'fas fa-truck-front', 'fas fa-truck-medical', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-truck-plane', 'fas fa-truck-ramp-box', 'fas fa-tty', 'fab fa-tumblr', 'fas fa-turkish-lira-sign', 'fas fa-turn-down', 'fas fa-turn-up', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-typo3', 'fas fa-u', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fab fa-uncharted', 'fas fa-underline', 'fab fa-uniregistry', 'fab fa-unity', 'fas fa-universal-access', 'fas fa-unlock', 'fas fa-unlock-keyhole', 'fab fa-unsplash', 'fab fa-untappd', 'fas fa-up-down', 'fas fa-up-down-left-right', 'fas fa-up-long', 'fas fa-up-right-and-down-left-from-center', 'fas fa-up-right-from-square', 'fas fa-upload', 'fab fa-ups', 'fab fa-upwork', 'fab fa-usb', 'fas fa-user', 'far fa-fas fa-user', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-clock', 'fas fa-user-doctor', 'fas fa-user-gear', 'fas fa-user-graduate', 'fas fa-user-group', 'fas fa-user-injured', 'fas fa-user-large', 'fas fa-user-large-slash', 'fas fa-user-lock', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-pen', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-xmark', 'fas fa-users', 'fas fa-users-between-lines', 'fas fa-users-gear', 'fas fa-users-line', 'fas fa-users-rays', 'fas fa-users-rectangle', 'fas fa-users-slash', 'fas fa-users-viewfinder', 'fab fa-usps', 'fab fa-ussunnah', 'fas fa-utensils', 'fas fa-v', 'fab fa-vaadin', 'fas fa-van-shuttle', 'fas fa-vault', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vest', 'fas fa-vest-patches', 'fab fa-viacoin', 'fab fa-viadeo', 'fas fa-vial', 'fas fa-vial-circle-check', 'fas fa-vial-virus', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-v', 'fab fa-vine', 'fas fa-virus', 'fas fa-virus-covid', 'fas fa-virus-covid-slash', 'fas fa-virus-slash', 'fas fa-viruses', 'fab fa-vk', 'fab fa-vnv', 'fas fa-voicemail', 'fas fa-volcano', 'fas fa-volleyball', 'fas fa-volume-high', 'fas fa-volume-low', 'fas fa-volume-off', 'fas fa-volume-xmark', 'fas fa-vr-cardboard', 'fab fa-vuejs', 'fas fa-w', 'fas fa-walkie-talkie', 'fas fa-wallet', 'fas fa-wand-magic', 'fas fa-wand-magic-sparkles', 'fas fa-wand-sparkles', 'fas fa-warehouse', 'fab fa-watchman-monitoring', 'fas fa-water', 'fas fa-water-ladder', 'fas fa-wave-square', 'fab fa-waze', 'fas fa-web-awesome', 'fab fa-fas fa-web-awesome', 'fab fa-webflow', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight-hanging', 'fas fa-weight-scale', 'fab fa-weixin', 'fab fa-whatsapp', 'fas fa-wheat-awn', 'fas fa-wheat-awn-circle-exclamation', 'fas fa-wheelchair', 'fas fa-wheelchair-move', 'fas fa-whiskey-glass', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-wind', 'fas fa-window-maximize', 'far fa-fas fa-window-maximize', 'fas fa-window-minimize', 'far fa-fas fa-window-minimize', 'fas fa-window-restore', 'far fa-fas fa-window-restore', 'fab fa-windows', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-empty', 'fab fa-wirsindhandwerk', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wodu', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fas fa-worm', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fas fa-wrench', 'fas fa-x', 'fas fa-x-ray', 'fab fa-x-twitter', 'fab fa-xbox', 'fab fa-xing', 'fas fa-xmark', 'fas fa-xmarks-lines', 'fas fa-y', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fas fa-z', 'fab fa-zhihu' );
	}
}
2 1
\ No newline at end of file
2
+<?php
/**
 * Redux Icon Select Font Awesome 6 Free icon array.
 *
 * @package Redux
 * @author  Kevin Provance <[email protected]>
 */

   defined( 'ABSPATH' ) || exit;

if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {

	/**
	 * Array of free Font Awesome 6 icons.
	 *
	 * @return array
	 */
    function redux_icon_select_fa_6_free(): array {
		return array( 'fas fa-0', 'fas fa-1', 'fas fa-2', 'fas fa-3', 'fas fa-4', 'fas fa-5', 'fas fa-6', 'fas fa-7', 'fas fa-8', 'fas fa-9', 'fab fa-42-group', 'fab fa-500px', 'fas fa-a', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-address-book', 'far fa-fas fa-address-book', 'fas fa-address-card', 'far fa-fas fa-address-card', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fas fa-anchor', 'fas fa-anchor-circle-check', 'fas fa-anchor-circle-exclamation', 'fas fa-anchor-circle-xmark', 'fas fa-anchor-lock', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angles-down', 'fas fa-angles-left', 'fas fa-angles-right', 'fas fa-angles-up', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fas fa-apple-whole', 'fas fa-archway', 'fas fa-arrow-down', 'fas fa-arrow-down-1-9', 'fas fa-arrow-down-9-1', 'fas fa-arrow-down-a-z', 'fas fa-arrow-down-long', 'fas fa-arrow-down-short-wide', 'fas fa-arrow-down-up-across-line', 'fas fa-arrow-down-up-lock', 'fas fa-arrow-down-wide-short', 'fas fa-arrow-down-z-a', 'fas fa-arrow-left', 'fas fa-arrow-left-long', 'fas fa-arrow-pointer', 'fas fa-arrow-right', 'fas fa-arrow-right-arrow-left', 'fas fa-arrow-right-from-bracket', 'fas fa-arrow-right-long', 'fas fa-arrow-right-to-bracket', 'fas fa-arrow-right-to-city', 'fas fa-arrow-rotate-left', 'fas fa-arrow-rotate-right', 'fas fa-arrow-trend-down', 'fas fa-arrow-trend-up', 'fas fa-arrow-turn-down', 'fas fa-arrow-turn-up', 'fas fa-arrow-up', 'fas fa-arrow-up-1-9', 'fas fa-arrow-up-9-1', 'fas fa-arrow-up-a-z', 'fas fa-arrow-up-from-bracket', 'fas fa-arrow-up-from-ground-water', 'fas fa-arrow-up-from-water-pump', 'fas fa-arrow-up-long', 'fas fa-arrow-up-right-dots', 'fas fa-arrow-up-right-from-square', 'fas fa-arrow-up-short-wide', 'fas fa-arrow-up-wide-short', 'fas fa-arrow-up-z-a', 'fas fa-arrows-down-to-line', 'fas fa-arrows-down-to-people', 'fas fa-arrows-left-right', 'fas fa-arrows-left-right-to-line', 'fas fa-arrows-rotate', 'fas fa-arrows-spin', 'fas fa-arrows-split-up-and-left', 'fas fa-arrows-to-circle', 'fas fa-arrows-to-dot', 'fas fa-arrows-to-eye', 'fas fa-arrows-turn-right', 'fas fa-arrows-turn-to-dots', 'fas fa-arrows-up-down', 'fas fa-arrows-up-down-left-right', 'fas fa-arrows-up-to-line', 'fab fa-artstation', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fab fa-atlassian', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fas fa-austral-sign', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-b', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backward', 'fas fa-backward-fast', 'fas fa-backward-step', 'fas fa-bacon', 'fas fa-bacteria', 'fas fa-bacterium', 'fas fa-bag-shopping', 'fas fa-bahai', 'fas fa-baht-sign', 'fas fa-ban', 'fas fa-ban-smoking', 'fas fa-bandage', 'fab fa-bandcamp', 'fas fa-bangladeshi-taka-sign', 'fas fa-barcode', 'fas fa-bars', 'fas fa-bars-progress', 'fas fa-bars-staggered', 'fas fa-baseball', 'fas fa-baseball-bat-ball', 'fas fa-basket-shopping', 'fas fa-basketball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fab fa-battle-net', 'fas fa-bed', 'fas fa-bed-pulse', 'fas fa-beer-mug-empty', 'fab fa-behance', 'fas fa-bell', 'far fa-fas fa-bell', 'fas fa-bell-concierge', 'fas fa-bell-slash', 'far fa-fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bicycle', 'fab fa-bilibili', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-biohazard', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fas fa-bitcoin-sign', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blog', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluesky', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bolt-lightning', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-atlas', 'fas fa-book-bible', 'fas fa-book-bookmark', 'fas fa-book-journal-whills', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-open-reader', 'fas fa-book-quran', 'fas fa-book-skull', 'fas fa-book-tanakh', 'fas fa-bookmark', 'far fa-fas fa-bookmark', 'fab fa-bootstrap', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-top-left', 'fas fa-bore-hole', 'fab fa-bots', 'fas fa-bottle-droplet', 'fas fa-bottle-water', 'fas fa-bowl-food', 'fas fa-bowl-rice', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-archive', 'fas fa-box-open', 'fas fa-box-tissue', 'fas fa-boxes-packing', 'fas fa-boxes-stacked', 'fas fa-braille', 'fas fa-brain', 'fab fa-brave', 'fab fa-brave-reverse', 'fas fa-brazilian-real-sign', 'fas fa-bread-slice', 'fas fa-bridge', 'fas fa-bridge-circle-check', 'fas fa-bridge-circle-exclamation', 'fas fa-bridge-circle-xmark', 'fas fa-bridge-lock', 'fas fa-bridge-water', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broom', 'fas fa-broom-ball', 'fas fa-brush', 'fab fa-btc', 'fas fa-bucket', 'fab fa-buffer', 'fas fa-bug', 'fas fa-bug-slash', 'fas fa-bugs', 'fas fa-building', 'far fa-fas fa-building', 'fas fa-building-circle-arrow-right', 'fas fa-building-circle-check', 'fas fa-building-circle-exclamation', 'fas fa-building-circle-xmark', 'fas fa-building-columns', 'fas fa-building-flag', 'fas fa-building-lock', 'fas fa-building-ngo', 'fas fa-building-shield', 'fas fa-building-un', 'fas fa-building-user', 'fas fa-building-wheat', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burger', 'fab fa-buromobelexperte', 'fas fa-burst', 'fas fa-bus', 'fas fa-bus-simple', 'fas fa-business-time', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fas fa-c', 'fas fa-cable-car', 'fas fa-cake-candles', 'fas fa-calculator', 'fas fa-calendar', 'far fa-fas fa-calendar', 'fas fa-calendar-check', 'far fa-fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-days', 'far fa-fas fa-calendar-days', 'fas fa-calendar-minus', 'far fa-fas fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-fas fa-calendar-plus', 'fas fa-calendar-week', 'fas fa-calendar-xmark', 'far fa-fas fa-calendar-xmark', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-camera-rotate', 'fas fa-campground', 'fab fa-canadian-maple-leaf', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-battery', 'fas fa-car-burst', 'fas fa-car-on', 'fas fa-car-rear', 'fas fa-car-side', 'fas fa-car-tunnel', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-flatbed', 'fas fa-cart-flatbed-suitcase', 'fas fa-cart-plus', 'fas fa-cart-shopping', 'fas fa-cash-register', 'fas fa-cat', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fas fa-cedi-sign', 'fas fa-cent-sign', 'fab fa-centercode', 'fab fa-centos', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-user', 'fas fa-champagne-glasses', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-fas fa-chart-bar', 'fas fa-chart-column', 'fas fa-chart-diagram', 'fas fa-chart-gantt', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-chart-simple', 'fas fa-check', 'fas fa-check-double', 'fas fa-check-to-slot', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'far fa-fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'far fa-fas fa-chess-king', 'fas fa-chess-knight', 'far fa-fas fa-chess-knight', 'fas fa-chess-pawn', 'far fa-fas fa-chess-pawn', 'fas fa-chess-queen', 'far fa-fas fa-chess-queen', 'fas fa-chess-rook', 'far fa-fas fa-chess-rook', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-child-combatant', 'fas fa-child-dress', 'fas fa-child-reaching', 'fas fa-children', 'fab fa-chrome', 'fab fa-chromecast', 'fas fa-church', 'fas fa-circle', 'far fa-fas fa-circle', 'fas fa-circle-arrow-down', 'fas fa-circle-arrow-left', 'fas fa-circle-arrow-right', 'fas fa-circle-arrow-up', 'fas fa-circle-check', 'far fa-fas fa-circle-check', 'fas fa-circle-chevron-down', 'fas fa-circle-chevron-left', 'fas fa-circle-chevron-right', 'fas fa-circle-chevron-up', 'fas fa-circle-dollar-to-slot', 'fas fa-circle-dot', 'far fa-fas fa-circle-dot', 'fas fa-circle-down', 'far fa-fas fa-circle-down', 'fas fa-circle-exclamation', 'fas fa-circle-h', 'fas fa-circle-half-stroke', 'fas fa-circle-info', 'fas fa-circle-left', 'far fa-fas fa-circle-left', 'fas fa-circle-minus', 'fas fa-circle-nodes', 'fas fa-circle-notch', 'fas fa-circle-pause', 'far fa-fas fa-circle-pause', 'fas fa-circle-play', 'far fa-fas fa-circle-play', 'fas fa-circle-plus', 'fas fa-circle-question', 'far fa-fas fa-circle-question', 'fas fa-circle-radiation', 'fas fa-circle-right', 'far fa-fas fa-circle-right', 'fas fa-circle-stop', 'far fa-fas fa-circle-stop', 'fas fa-circle-up', 'far fa-fas fa-circle-up', 'fas fa-circle-user', 'far fa-fas fa-circle-user', 'fas fa-circle-xmark', 'far fa-fas fa-circle-xmark', 'fas fa-city', 'fas fa-clapperboard', 'fas fa-clipboard', 'far fa-fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clipboard-question', 'fas fa-clipboard-user', 'fas fa-clock', 'far fa-fas fa-clock', 'fas fa-clock-rotate-left', 'fas fa-clone', 'far fa-fas fa-clone', 'fas fa-closed-captioning', 'far fa-fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-arrow-down', 'fas fa-cloud-arrow-up', 'fas fa-cloud-bolt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-showers-water', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fab fa-cloudflare', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-clover', 'fab fa-cmplid', 'fas fa-code', 'fas fa-code-branch', 'fas fa-code-commit', 'fas fa-code-compare', 'fas fa-code-fork', 'fas fa-code-merge', 'fas fa-code-pull-request', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coins', 'fas fa-colon-sign', 'fas fa-comment', 'far fa-fas fa-comment', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-nodes', 'fas fa-comment-slash', 'fas fa-comment-sms', 'fas fa-comments', 'far fa-fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-fas fa-compass', 'fas fa-compass-drafting', 'fas fa-compress', 'fas fa-computer', 'fas fa-computer-mouse', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-fas fa-copy', 'fas fa-copyright', 'far fa-fas fa-copyright', 'fab fa-cotton-bureau', 'fas fa-couch', 'fas fa-cow', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fas fa-credit-card', 'far fa-fas fa-credit-card', 'fab fa-critical-role', 'fas fa-crop', 'fas fa-crop-simple', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cruzeiro-sign', 'fab fa-css', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cubes-stacked', 'fab fa-cuttlefish', 'fas fa-d', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dart-lang', 'fab fa-dashcube', 'fas fa-database', 'fab fa-debian', 'fab fa-deezer', 'fas fa-delete-left', 'fab fa-delicious', 'fas fa-democrat', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-dev', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fab fa-dhl', 'fas fa-diagram-next', 'fas fa-diagram-predecessor', 'fas fa-diagram-project', 'fas fa-diagram-successor', 'fas fa-diamond', 'fas fa-diamond-turn-right', 'fab fa-diaspora', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fas fa-disease', 'fas fa-display', 'fas fa-divide', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dong-sign', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dove', 'fas fa-down-left-and-up-right-to-center', 'fas fa-down-long', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-dragon', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dropbox', 'fas fa-droplet', 'fas fa-droplet-slash', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fab fa-drupal', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fab fa-dyalog', 'fas fa-e', 'fas fa-ear-deaf', 'fas fa-ear-listen', 'fab fa-earlybirds', 'fas fa-earth-africa', 'fas fa-earth-americas', 'fas fa-earth-asia', 'fas fa-earth-europe', 'fas fa-earth-oceania', 'fab fa-ebay', 'fab fa-edge', 'fab fa-edge-legacy', 'fas fa-egg', 'fas fa-eject', 'fab fa-elementor', 'fas fa-elevator', 'fas fa-ellipsis', 'fas fa-ellipsis-vertical', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-fas fa-envelope', 'fas fa-envelope-circle-check', 'fas fa-envelope-open', 'far fa-fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelopes-bulk', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fas fa-ethernet', 'fab fa-etsy', 'fas fa-euro-sign', 'fab fa-evernote', 'fas fa-exclamation', 'fas fa-expand', 'fab fa-expeditedssl', 'fas fa-explosion', 'fas fa-eye', 'far fa-fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-low-vision', 'fas fa-eye-slash', 'far fa-fas fa-eye-slash', 'fas fa-f', 'fas fa-face-angry', 'far fa-fas fa-face-angry', 'fas fa-face-dizzy', 'far fa-fas fa-face-dizzy', 'fas fa-face-flushed', 'far fa-fas fa-face-flushed', 'fas fa-face-frown', 'far fa-fas fa-face-frown', 'fas fa-face-frown-open', 'far fa-fas fa-face-frown-open', 'fas fa-face-grimace', 'far fa-fas fa-face-grimace', 'fas fa-face-grin', 'far fa-fas fa-face-grin', 'fas fa-face-grin-beam', 'far fa-fas fa-face-grin-beam', 'fas fa-face-grin-beam-sweat', 'far fa-fas fa-face-grin-beam-sweat', 'fas fa-face-grin-hearts', 'far fa-fas fa-face-grin-hearts', 'fas fa-face-grin-squint', 'far fa-fas fa-face-grin-squint', 'fas fa-face-grin-squint-tears', 'far fa-fas fa-face-grin-squint-tears', 'fas fa-face-grin-stars', 'far fa-fas fa-face-grin-stars', 'fas fa-face-grin-tears', 'far fa-fas fa-face-grin-tears', 'fas fa-face-grin-tongue', 'far fa-fas fa-face-grin-tongue', 'fas fa-face-grin-tongue-squint', 'far fa-fas fa-face-grin-tongue-squint', 'fas fa-face-grin-tongue-wink', 'far fa-fas fa-face-grin-tongue-wink', 'fas fa-face-grin-wide', 'far fa-fas fa-face-grin-wide', 'fas fa-face-grin-wink', 'far fa-fas fa-face-grin-wink', 'fas fa-face-kiss', 'far fa-fas fa-face-kiss', 'fas fa-face-kiss-beam', 'far fa-fas fa-face-kiss-beam', 'fas fa-face-kiss-wink-heart', 'far fa-fas fa-face-kiss-wink-heart', 'fas fa-face-laugh', 'far fa-fas fa-face-laugh', 'fas fa-face-laugh-beam', 'far fa-fas fa-face-laugh-beam', 'fas fa-face-laugh-squint', 'far fa-fas fa-face-laugh-squint', 'fas fa-face-laugh-wink', 'far fa-fas fa-face-laugh-wink', 'fas fa-face-meh', 'far fa-fas fa-face-meh', 'fas fa-face-meh-blank', 'far fa-fas fa-face-meh-blank', 'fas fa-face-rolling-eyes', 'far fa-fas fa-face-rolling-eyes', 'fas fa-face-sad-cry', 'far fa-fas fa-face-sad-cry', 'fas fa-face-sad-tear', 'far fa-fas fa-face-sad-tear', 'fas fa-face-smile', 'far fa-fas fa-face-smile', 'fas fa-face-smile-beam', 'far fa-fas fa-face-smile-beam', 'fas fa-face-smile-wink', 'far fa-fas fa-face-smile-wink', 'fas fa-face-surprise', 'far fa-fas fa-face-surprise', 'fas fa-face-tired', 'far fa-fas fa-face-tired', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fas fa-fan', 'fab fa-fantasy-flight-games', 'fas fa-faucet', 'fas fa-faucet-drip', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-pointed', 'fab fa-fedex', 'fab fa-fedora', 'fas fa-ferry', 'fab fa-figma', 'fas fa-file', 'far fa-fas fa-file', 'fas fa-file-arrow-down', 'fas fa-file-arrow-up', 'fas fa-file-audio', 'far fa-fas fa-file-audio', 'fas fa-file-circle-check', 'fas fa-file-circle-exclamation', 'fas fa-file-circle-minus', 'fas fa-file-circle-plus', 'fas fa-file-circle-question', 'fas fa-file-circle-xmark', 'fas fa-file-code', 'far fa-fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-excel', 'far fa-fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-fragment', 'fas fa-file-half-dashed', 'fas fa-file-image', 'far fa-fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-lines', 'far fa-fas fa-file-lines', 'fas fa-file-medical', 'fas fa-file-pdf', 'far fa-fas fa-file-pdf', 'fas fa-file-pen', 'fas fa-file-powerpoint', 'far fa-fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-shield', 'fas fa-file-signature', 'fas fa-file-video', 'far fa-fas fa-file-video', 'fas fa-file-waveform', 'fas fa-file-word', 'far fa-fas fa-file-word', 'fas fa-file-zipper', 'far fa-fas fa-file-zipper', 'fab fa-files-pinwheel', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-filter-circle-dollar', 'fas fa-filter-circle-xmark', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-burner', 'fas fa-fire-extinguisher', 'fas fa-fire-flame-curved', 'fas fa-fire-flame-simple', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-fish-fins', 'fas fa-flag', 'far fa-fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flask-vial', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-floppy-disk', 'far fa-fas fa-floppy-disk', 'fas fa-florin-sign', 'fab fa-flutter', 'fab fa-fly', 'fas fa-folder', 'far fa-fas fa-folder', 'fas fa-folder-closed', 'far fa-fas fa-folder-closed', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-folder-tree', 'fas fa-font', 'fas fa-font-awesome', 'far fa-fas fa-font-awesome', 'fab fa-far fa-fas fa-font-awesome', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fas fa-forward-fast', 'fas fa-forward-step', 'fab fa-foursquare', 'fas fa-franc-sign', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fab fa-fulcrum', 'fas fa-futbol', 'far fa-fas fa-futbol', 'fas fa-g', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gauge', 'fas fa-gauge-high', 'fas fa-gauge-simple', 'fas fa-gauge-simple-high', 'fas fa-gavel', 'fas fa-gear', 'fas fa-gears', 'fas fa-gem', 'far fa-fas fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fab fa-git', 'fab fa-git-alt', 'fab fa-github', 'fab fa-github-alt', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-water', 'fas fa-glass-water-droplet', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fab fa-gofore', 'fab fa-golang', 'fas fa-golf-ball-tee', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-pay', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-scholar', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grip', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fas fa-group-arrows-rotate', 'fab fa-grunt', 'fas fa-guarani-sign', 'fab fa-guilded', 'fas fa-guitar', 'fab fa-gulp', 'fas fa-gun', 'fas fa-h', 'fab fa-hacker-news', 'fab fa-hackerrank', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand', 'far fa-fas fa-hand', 'fas fa-hand-back-fist', 'far fa-fas fa-hand-back-fist', 'fas fa-hand-dots', 'fas fa-hand-fist', 'fas fa-hand-holding', 'fas fa-hand-holding-dollar', 'fas fa-hand-holding-droplet', 'fas fa-hand-holding-hand', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-medical', 'fas fa-hand-lizard', 'far fa-fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-peace', 'far fa-fas fa-hand-peace', 'fas fa-hand-point-down', 'far fa-fas fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-fas fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-fas fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-fas fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-fas fa-hand-pointer', 'fas fa-hand-scissors', 'far fa-fas fa-hand-scissors', 'fas fa-hand-sparkles', 'fas fa-hand-spock', 'far fa-fas fa-hand-spock', 'fas fa-handcuffs', 'fas fa-hands', 'fas fa-hands-asl-interpreting', 'fas fa-hands-bound', 'fas fa-hands-bubbles', 'fas fa-hands-clapping', 'fas fa-hands-holding', 'fas fa-hands-holding-child', 'fas fa-hands-holding-circle', 'fas fa-hands-praying', 'fas fa-handshake', 'far fa-fas fa-handshake', 'fas fa-handshake-angle', 'fas fa-handshake-simple', 'fas fa-handshake-simple-slash', 'fas fa-handshake-slash', 'fas fa-hanukiah', 'fas fa-hard-drive', 'far fa-fas fa-hard-drive', 'fab fa-hashnode', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-head-side-cough', 'fas fa-head-side-cough-slash', 'fas fa-head-side-mask', 'fas fa-head-side-virus', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-simple', 'fas fa-headset', 'fas fa-heart', 'far fa-fas fa-heart', 'fas fa-heart-circle-bolt', 'fas fa-heart-circle-check', 'fas fa-heart-circle-exclamation', 'fas fa-heart-circle-minus', 'fas fa-heart-circle-plus', 'fas fa-heart-circle-xmark', 'fas fa-heart-crack', 'fas fa-heart-pulse', 'fas fa-helicopter', 'fas fa-helicopter-symbol', 'fas fa-helmet-safety', 'fas fa-helmet-un', 'fas fa-hexagon-nodes', 'fas fa-hexagon-nodes-bolt', 'fas fa-highlighter', 'fas fa-hill-avalanche', 'fas fa-hill-rockslide', 'fas fa-hippo', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hive', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'far fa-fas fa-hospital', 'fas fa-hospital-user', 'fas fa-hot-tub-person', 'fas fa-hotdog', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'far fa-fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house', 'fas fa-house-chimney', 'fas fa-house-chimney-crack', 'fas fa-house-chimney-medical', 'fas fa-house-chimney-user', 'fas fa-house-chimney-window', 'fas fa-house-circle-check', 'fas fa-house-circle-exclamation', 'fas fa-house-circle-xmark', 'fas fa-house-crack', 'fas fa-house-fire', 'fas fa-house-flag', 'fas fa-house-flood-water', 'fas fa-house-flood-water-circle-arrow-right', 'fas fa-house-laptop', 'fas fa-house-lock', 'fas fa-house-medical', 'fas fa-house-medical-circle-check', 'fas fa-house-medical-circle-exclamation', 'fas fa-house-medical-circle-xmark', 'fas fa-house-medical-flag', 'fas fa-house-signal', 'fas fa-house-tsunami', 'fas fa-house-user', 'fab fa-houzz', 'fas fa-hryvnia-sign', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-hurricane', 'fas fa-i', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'far fa-fas fa-id-badge', 'fas fa-id-card', 'far fa-fas fa-id-card', 'fas fa-id-card-clip', 'fab fa-ideal', 'fas fa-igloo', 'fas fa-image', 'far fa-fas fa-image', 'fas fa-image-portrait', 'fas fa-images', 'far fa-fas fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-indian-rupee-sign', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fab fa-instagram', 'fab fa-instalod', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fas fa-j', 'fas fa-jar', 'fas fa-jar-wheat', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fas fa-jet-fighter', 'fas fa-jet-fighter-up', 'fab fa-jira', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fab fa-js', 'fab fa-jsfiddle', 'fas fa-jug-detergent', 'fab fa-jxl', 'fas fa-k', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-fas fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kip-sign', 'fas fa-kit-medical', 'fas fa-kitchen-set', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-l', 'fas fa-land-mine-on', 'fas fa-landmark', 'fas fa-landmark-dome', 'fas fa-landmark-flag', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-file', 'fas fa-laptop-medical', 'fab fa-laravel', 'fas fa-lari-sign', 'fab fa-lastfm', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-left-long', 'fas fa-left-right', 'fas fa-lemon', 'far fa-fas fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fab fa-letterboxd', 'fas fa-life-ring', 'far fa-fas fa-life-ring', 'fas fa-lightbulb', 'far fa-fas fa-lightbulb', 'fab fa-line', 'fas fa-lines-leaning', 'fas fa-link', 'fas fa-link-slash', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-check', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-litecoin-sign', 'fas fa-location-arrow', 'fas fa-location-crosshairs', 'fas fa-location-dot', 'fas fa-location-pin', 'fas fa-location-pin-lock', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-locust', 'fas fa-lungs', 'fas fa-lungs-virus', 'fab fa-lyft', 'fas fa-m', 'fab fa-magento', 'fas fa-magnet', 'fas fa-magnifying-glass', 'fas fa-magnifying-glass-arrow-right', 'fas fa-magnifying-glass-chart', 'fas fa-magnifying-glass-dollar', 'fas fa-magnifying-glass-location', 'fas fa-magnifying-glass-minus', 'fas fa-magnifying-glass-plus', 'fab fa-mailchimp', 'fas fa-manat-sign', 'fab fa-mandalorian', 'fas fa-map', 'far fa-fas fa-map', 'fas fa-map-location', 'fas fa-map-location-dot', 'fas fa-map-pin', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-and-venus', 'fas fa-mars-and-venus-burst', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-right', 'fas fa-mars-stroke-up', 'fas fa-martini-glass', 'fas fa-martini-glass-citrus', 'fas fa-martini-glass-empty', 'fas fa-mask', 'fas fa-mask-face', 'fas fa-mask-ventilator', 'fas fa-masks-theater', 'fab fa-mastodon', 'fas fa-mattress-pillow', 'fab fa-maxcdn', 'fas fa-maximize', 'fab fa-mdb', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-memory', 'fab fa-mendeley', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-message', 'far fa-fas fa-message', 'fab fa-meta', 'fas fa-meteor', 'fab fa-microblog', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-lines', 'fas fa-microphone-lines-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-mill-sign', 'fas fa-minimize', 'fab fa-mintbit', 'fas fa-minus', 'fas fa-mitten', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-button', 'fas fa-mobile-retro', 'fas fa-mobile-screen', 'fas fa-mobile-screen-button', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-1', 'far fa-fas fa-money-bill-1', 'fas fa-money-bill-1-wave', 'fas fa-money-bill-transfer', 'fas fa-money-bill-trend-up', 'fas fa-money-bill-wave', 'fas fa-money-bill-wheat', 'fas fa-money-bills', 'fas fa-money-check', 'fas fa-money-check-dollar', 'fas fa-monument', 'fas fa-moon', 'far fa-fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-mosquito', 'fas fa-mosquito-net', 'fas fa-motorcycle', 'fas fa-mound', 'fas fa-mountain', 'fas fa-mountain-city', 'fas fa-mountain-sun', 'fas fa-mug-hot', 'fas fa-mug-saucer', 'fas fa-music', 'fas fa-n', 'fas fa-naira-sign', 'fab fa-napster', 'fab fa-neos', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-fas fa-newspaper', 'fab fa-nfc-directional', 'fab fa-nfc-symbol', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notdef', 'fas fa-note-sticky', 'far fa-fas fa-note-sticky', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-o', 'fas fa-object-group', 'far fa-fas fa-object-group', 'fas fa-object-ungroup', 'far fa-fas fa-object-ungroup', 'fab fa-octopus-deploy', 'fab fa-odnoklassniki', 'fab fa-odysee', 'fas fa-oil-can', 'fas fa-oil-well', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opensuse', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fas fa-otter', 'fas fa-outdent', 'fas fa-p', 'fab fa-padlet', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-pager', 'fas fa-paint-roller', 'fas fa-paintbrush', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-panorama', 'fas fa-paper-plane', 'far fa-fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-passport', 'fas fa-paste', 'far fa-fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-clip', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-ruler', 'fas fa-pen-to-square', 'far fa-fas fa-pen-to-square', 'fas fa-pencil', 'fas fa-people-arrows', 'fas fa-people-carry-box', 'fas fa-people-group', 'fas fa-people-line', 'fas fa-people-pulling', 'fas fa-people-robbery', 'fas fa-people-roof', 'fas fa-pepper-hot', 'fab fa-perbyte', 'fas fa-percent', 'fab fa-periscope', 'fas fa-person', 'fas fa-person-arrow-down-to-line', 'fas fa-person-arrow-up-from-line', 'fas fa-person-biking', 'fas fa-person-booth', 'fas fa-person-breastfeeding', 'fas fa-person-burst', 'fas fa-person-cane', 'fas fa-person-chalkboard', 'fas fa-person-circle-check', 'fas fa-person-circle-exclamation', 'fas fa-person-circle-minus', 'fas fa-person-circle-plus', 'fas fa-person-circle-question', 'fas fa-person-circle-xmark', 'fas fa-person-digging', 'fas fa-person-dots-from-line', 'fas fa-person-dress', 'fas fa-person-dress-burst', 'fas fa-person-drowning', 'fas fa-person-falling', 'fas fa-person-falling-burst', 'fas fa-person-half-dress', 'fas fa-person-harassing', 'fas fa-person-hiking', 'fas fa-person-military-pointing', 'fas fa-person-military-rifle', 'fas fa-person-military-to-person', 'fas fa-person-praying', 'fas fa-person-pregnant', 'fas fa-person-rays', 'fas fa-person-rifle', 'fas fa-person-running', 'fas fa-person-shelter', 'fas fa-person-skating', 'fas fa-person-skiing', 'fas fa-person-skiing-nordic', 'fas fa-person-snowboarding', 'fas fa-person-swimming', 'fas fa-person-through-window', 'fas fa-person-walking', 'fas fa-person-walking-arrow-loop-left', 'fas fa-person-walking-arrow-right', 'fas fa-person-walking-dashed-line-arrow-right', 'fas fa-person-walking-luggage', 'fas fa-person-walking-with-cane', 'fas fa-peseta-sign', 'fas fa-peso-sign', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-flip', 'fas fa-phone-slash', 'fas fa-phone-volume', 'fas fa-photo-film', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pix', 'fab fa-pixiv', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-circle-check', 'fas fa-plane-circle-exclamation', 'fas fa-plane-circle-xmark', 'fas fa-plane-departure', 'fas fa-plane-lock', 'fas fa-plane-slash', 'fas fa-plane-up', 'fas fa-plant-wilt', 'fas fa-plate-wheat', 'fas fa-play', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plug-circle-bolt', 'fas fa-plug-circle-check', 'fas fa-plug-circle-exclamation', 'fas fa-plug-circle-minus', 'fas fa-plug-circle-plus', 'fas fa-plug-circle-xmark', 'fas fa-plus', 'fas fa-plus-minus', 'fas fa-podcast', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-power-off', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-medical', 'fas fa-print', 'fab fa-product-hunt', 'fas fa-pump-medical', 'fas fa-pump-soap', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fas fa-q', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-r', 'fab fa-r-project', 'fas fa-radiation', 'fas fa-radio', 'fas fa-rainbow', 'fas fa-ranking-star', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-rectangle-ad', 'fas fa-rectangle-list', 'far fa-fas fa-rectangle-list', 'fas fa-rectangle-xmark', 'far fa-fas fa-rectangle-xmark', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-redhat', 'fas fa-registered', 'far fa-fas fa-registered', 'fab fa-renren', 'fas fa-repeat', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fas fa-republican', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-restroom', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-right-from-bracket', 'fas fa-right-left', 'fas fa-right-long', 'fas fa-right-to-bracket', 'fas fa-ring', 'fas fa-road', 'fas fa-road-barrier', 'fas fa-road-bridge', 'fas fa-road-circle-check', 'fas fa-road-circle-exclamation', 'fas fa-road-circle-xmark', 'fas fa-road-lock', 'fas fa-road-spikes', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-rotate', 'fas fa-rotate-left', 'fas fa-rotate-right', 'fas fa-route', 'fas fa-rss', 'fas fa-ruble-sign', 'fas fa-rug', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-rupiah-sign', 'fab fa-rust', 'fas fa-s', 'fas fa-sack-dollar', 'fas fa-sack-xmark', 'fab fa-safari', 'fas fa-sailboat', 'fab fa-salesforce', 'fab fa-sass', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-scale-balanced', 'fas fa-scale-unbalanced', 'fas fa-scale-unbalanced-flip', 'fab fa-schlix', 'fas fa-school', 'fas fa-school-circle-check', 'fas fa-school-circle-exclamation', 'fas fa-school-circle-xmark', 'fas fa-school-flag', 'fas fa-school-lock', 'fas fa-scissors', 'fab fa-screenpal', 'fas fa-screwdriver', 'fas fa-screwdriver-wrench', 'fab fa-scribd', 'fas fa-scroll', 'fas fa-scroll-torah', 'fas fa-sd-card', 'fab fa-searchengin', 'fas fa-section', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-from-square', 'far fa-fas fa-share-from-square', 'fas fa-share-nodes', 'fas fa-sheet-plastic', 'fas fa-shekel-sign', 'fas fa-shield', 'fas fa-shield-cat', 'fas fa-shield-dog', 'fas fa-shield-halved', 'fas fa-shield-heart', 'fas fa-shield-virus', 'fas fa-ship', 'fas fa-shirt', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fab fa-shoelace', 'fas fa-shop', 'fas fa-shop-lock', 'fas fa-shop-slash', 'fab fa-shopify', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shrimp', 'fas fa-shuffle', 'fas fa-shuttle-space', 'fas fa-sign-hanging', 'fas fa-signal', 'fab fa-signal-messenger', 'fas fa-signature', 'fas fa-signs-post', 'fas fa-sim-card', 'fab fa-simplybuilt', 'fas fa-sink', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fab fa-sitrox', 'fab fa-sketch', 'fas fa-skull', 'fas fa-skull-crossbones', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders', 'fab fa-slideshare', 'fas fa-smog', 'fas fa-smoking', 'fab fa-snapchat', 'fas fa-snowflake', 'far fa-fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-soap', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-down', 'fas fa-sort-up', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fas fa-spa', 'fab fa-space-awesome', 'fas fa-spaghetti-monster-flying', 'fab fa-speakap', 'fab fa-speaker-deck', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spoon', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-spray-can-sparkles', 'fas fa-square', 'far fa-fas fa-square', 'fas fa-square-arrow-up-right', 'fab fa-square-behance', 'fas fa-square-binary', 'fab fa-square-bluesky', 'fas fa-square-caret-down', 'far fa-fas fa-square-caret-down', 'fas fa-square-caret-left', 'far fa-fas fa-square-caret-left', 'fas fa-square-caret-right', 'far fa-fas fa-square-caret-right', 'fas fa-square-caret-up', 'far fa-fas fa-square-caret-up', 'fas fa-square-check', 'far fa-fas fa-square-check', 'fab fa-square-dribbble', 'fas fa-square-envelope', 'fab fa-square-facebook', 'fab fa-square-font-awesome', 'fab fa-square-font-awesome-stroke', 'fas fa-square-full', 'far fa-fas fa-square-full', 'fab fa-square-git', 'fab fa-square-github', 'fab fa-square-gitlab', 'fab fa-square-google-plus', 'fas fa-square-h', 'fab fa-square-hacker-news', 'fab fa-square-instagram', 'fab fa-square-js', 'fab fa-square-lastfm', 'fab fa-square-letterboxd', 'fas fa-square-minus', 'far fa-fas fa-square-minus', 'fas fa-square-nfi', 'fab fa-square-odnoklassniki', 'fas fa-square-parking', 'fas fa-square-pen', 'fas fa-square-person-confined', 'fas fa-square-phone', 'fas fa-square-phone-flip', 'fab fa-square-pied-piper', 'fab fa-square-pinterest', 'fas fa-square-plus', 'far fa-fas fa-square-plus', 'fas fa-square-poll-horizontal', 'fas fa-square-poll-vertical', 'fab fa-square-reddit', 'fas fa-square-root-variable', 'fas fa-square-rss', 'fas fa-square-share-nodes', 'fab fa-square-snapchat', 'fab fa-square-steam', 'fab fa-square-threads', 'fab fa-square-tumblr', 'fab fa-square-twitter', 'fas fa-square-up-right', 'fab fa-square-upwork', 'fab fa-square-viadeo', 'fab fa-square-vimeo', 'fas fa-square-virus', 'fab fa-square-web-awesome', 'fab fa-square-web-awesome-stroke', 'fab fa-square-whatsapp', 'fab fa-square-x-twitter', 'fab fa-square-xing', 'fas fa-square-xmark', 'fab fa-square-youtube', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fas fa-staff-snake', 'fas fa-stairs', 'fas fa-stamp', 'fas fa-stapler', 'fas fa-star', 'far fa-fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-fas fa-star-half', 'fas fa-star-half-stroke', 'far fa-fas fa-star-half-stroke', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-symbol', 'fas fa-sterling-sign', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-stop', 'fas fa-stopwatch', 'fas fa-stopwatch-20', 'fas fa-store', 'fas fa-store-slash', 'fab fa-strava', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-stubber', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-suitcase', 'fas fa-suitcase-medical', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-fas fa-sun', 'fas fa-sun-plant-wilt', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fab fa-suse', 'fas fa-swatchbook', 'fab fa-swift', 'fab fa-symfony', 'fas fa-synagogue', 'fas fa-syringe', 'fas fa-t', 'fas fa-table', 'fas fa-table-cells', 'fas fa-table-cells-column-lock', 'fas fa-table-cells-large', 'fas fa-table-cells-row-lock', 'fas fa-table-cells-row-unlock', 'fas fa-table-columns', 'fas fa-table-list', 'fas fa-table-tennis-paddle-ball', 'fas fa-tablet', 'fas fa-tablet-button', 'fas fa-tablet-screen-button', 'fas fa-tablets', 'fas fa-tachograph-digital', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tarp', 'fas fa-tarp-droplet', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fas fa-temperature-arrow-down', 'fas fa-temperature-arrow-up', 'fas fa-temperature-empty', 'fas fa-temperature-full', 'fas fa-temperature-half', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-temperature-quarter', 'fas fa-temperature-three-quarters', 'fab fa-tencent-weibo', 'fas fa-tenge-sign', 'fas fa-tent', 'fas fa-tent-arrow-down-to-line', 'fas fa-tent-arrow-left-right', 'fas fa-tent-arrow-turn-left', 'fas fa-tent-arrows-down', 'fas fa-tents', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-slash', 'fas fa-text-width', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fab fa-think-peaks', 'fab fa-threads', 'fas fa-thumbs-down', 'far fa-fas fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-thumbtack-slash', 'fas fa-ticket', 'fas fa-ticket-simple', 'fab fa-tiktok', 'fas fa-timeline', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toilet-paper-slash', 'fas fa-toilet-portable', 'fas fa-toilets-portable', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torii-gate', 'fas fa-tornado', 'fas fa-tower-broadcast', 'fas fa-tower-cell', 'fas fa-tower-observation', 'fas fa-tractor', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-train-subway', 'fas fa-train-tram', 'fas fa-transgender', 'fas fa-trash', 'fas fa-trash-arrow-up', 'fas fa-trash-can', 'far fa-fas fa-trash-can', 'fas fa-trash-can-arrow-up', 'fas fa-tree', 'fas fa-tree-city', 'fab fa-trello', 'fas fa-triangle-exclamation', 'fas fa-trophy', 'fas fa-trowel', 'fas fa-trowel-bricks', 'fas fa-truck', 'fas fa-truck-arrow-right', 'fas fa-truck-droplet', 'fas fa-truck-fast', 'fas fa-truck-field', 'fas fa-truck-field-un', 'fas fa-truck-front', 'fas fa-truck-medical', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-truck-plane', 'fas fa-truck-ramp-box', 'fas fa-tty', 'fab fa-tumblr', 'fas fa-turkish-lira-sign', 'fas fa-turn-down', 'fas fa-turn-up', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-typo3', 'fas fa-u', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fab fa-uncharted', 'fas fa-underline', 'fab fa-uniregistry', 'fab fa-unity', 'fas fa-universal-access', 'fas fa-unlock', 'fas fa-unlock-keyhole', 'fab fa-unsplash', 'fab fa-untappd', 'fas fa-up-down', 'fas fa-up-down-left-right', 'fas fa-up-long', 'fas fa-up-right-and-down-left-from-center', 'fas fa-up-right-from-square', 'fas fa-upload', 'fab fa-ups', 'fab fa-upwork', 'fab fa-usb', 'fas fa-user', 'far fa-fas fa-user', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-clock', 'fas fa-user-doctor', 'fas fa-user-gear', 'fas fa-user-graduate', 'fas fa-user-group', 'fas fa-user-injured', 'fas fa-user-large', 'fas fa-user-large-slash', 'fas fa-user-lock', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-pen', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-xmark', 'fas fa-users', 'fas fa-users-between-lines', 'fas fa-users-gear', 'fas fa-users-line', 'fas fa-users-rays', 'fas fa-users-rectangle', 'fas fa-users-slash', 'fas fa-users-viewfinder', 'fab fa-usps', 'fab fa-ussunnah', 'fas fa-utensils', 'fas fa-v', 'fab fa-vaadin', 'fas fa-van-shuttle', 'fas fa-vault', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vest', 'fas fa-vest-patches', 'fab fa-viacoin', 'fab fa-viadeo', 'fas fa-vial', 'fas fa-vial-circle-check', 'fas fa-vial-virus', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-v', 'fab fa-vine', 'fas fa-virus', 'fas fa-virus-covid', 'fas fa-virus-covid-slash', 'fas fa-virus-slash', 'fas fa-viruses', 'fab fa-vk', 'fab fa-vnv', 'fas fa-voicemail', 'fas fa-volcano', 'fas fa-volleyball', 'fas fa-volume-high', 'fas fa-volume-low', 'fas fa-volume-off', 'fas fa-volume-xmark', 'fas fa-vr-cardboard', 'fab fa-vuejs', 'fas fa-w', 'fas fa-walkie-talkie', 'fas fa-wallet', 'fas fa-wand-magic', 'fas fa-wand-magic-sparkles', 'fas fa-wand-sparkles', 'fas fa-warehouse', 'fab fa-watchman-monitoring', 'fas fa-water', 'fas fa-water-ladder', 'fas fa-wave-square', 'fab fa-waze', 'fas fa-web-awesome', 'fab fa-fas fa-web-awesome', 'fab fa-webflow', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight-hanging', 'fas fa-weight-scale', 'fab fa-weixin', 'fab fa-whatsapp', 'fas fa-wheat-awn', 'fas fa-wheat-awn-circle-exclamation', 'fas fa-wheelchair', 'fas fa-wheelchair-move', 'fas fa-whiskey-glass', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-wind', 'fas fa-window-maximize', 'far fa-fas fa-window-maximize', 'fas fa-window-minimize', 'far fa-fas fa-window-minimize', 'fas fa-window-restore', 'far fa-fas fa-window-restore', 'fab fa-windows', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-empty', 'fab fa-wirsindhandwerk', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wodu', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fas fa-worm', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fas fa-wrench', 'fas fa-x', 'fas fa-x-ray', 'fab fa-x-twitter', 'fab fa-xbox', 'fab fa-xing', 'fas fa-xmark', 'fas fa-xmarks-lines', 'fas fa-y', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fas fa-z', 'fab fa-zhihu' );
	}
}
3 3
\ No newline at end of file
Please login to merge, or discard this patch.
Switch Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -1,1 +1,1 @@
 block discarded – undo
1
-<?php
/**
 * Redux Icon Select Font Awesome 6 Free icon array.
 *
 * @package Redux
 * @author  Kevin Provance <[email protected]>
 */

defined( 'ABSPATH' ) || exit;

if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {

	/**
	 * Array of free Font Awesome 6 icons.
	 *
	 * @return array
	 */
	function redux_icon_select_fa_6_free(): array {
		return array( 'fas fa-0', 'fas fa-1', 'fas fa-2', 'fas fa-3', 'fas fa-4', 'fas fa-5', 'fas fa-6', 'fas fa-7', 'fas fa-8', 'fas fa-9', 'fab fa-42-group', 'fab fa-500px', 'fas fa-a', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-address-book', 'far fa-fas fa-address-book', 'fas fa-address-card', 'far fa-fas fa-address-card', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fas fa-anchor', 'fas fa-anchor-circle-check', 'fas fa-anchor-circle-exclamation', 'fas fa-anchor-circle-xmark', 'fas fa-anchor-lock', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angles-down', 'fas fa-angles-left', 'fas fa-angles-right', 'fas fa-angles-up', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fas fa-apple-whole', 'fas fa-archway', 'fas fa-arrow-down', 'fas fa-arrow-down-1-9', 'fas fa-arrow-down-9-1', 'fas fa-arrow-down-a-z', 'fas fa-arrow-down-long', 'fas fa-arrow-down-short-wide', 'fas fa-arrow-down-up-across-line', 'fas fa-arrow-down-up-lock', 'fas fa-arrow-down-wide-short', 'fas fa-arrow-down-z-a', 'fas fa-arrow-left', 'fas fa-arrow-left-long', 'fas fa-arrow-pointer', 'fas fa-arrow-right', 'fas fa-arrow-right-arrow-left', 'fas fa-arrow-right-from-bracket', 'fas fa-arrow-right-long', 'fas fa-arrow-right-to-bracket', 'fas fa-arrow-right-to-city', 'fas fa-arrow-rotate-left', 'fas fa-arrow-rotate-right', 'fas fa-arrow-trend-down', 'fas fa-arrow-trend-up', 'fas fa-arrow-turn-down', 'fas fa-arrow-turn-up', 'fas fa-arrow-up', 'fas fa-arrow-up-1-9', 'fas fa-arrow-up-9-1', 'fas fa-arrow-up-a-z', 'fas fa-arrow-up-from-bracket', 'fas fa-arrow-up-from-ground-water', 'fas fa-arrow-up-from-water-pump', 'fas fa-arrow-up-long', 'fas fa-arrow-up-right-dots', 'fas fa-arrow-up-right-from-square', 'fas fa-arrow-up-short-wide', 'fas fa-arrow-up-wide-short', 'fas fa-arrow-up-z-a', 'fas fa-arrows-down-to-line', 'fas fa-arrows-down-to-people', 'fas fa-arrows-left-right', 'fas fa-arrows-left-right-to-line', 'fas fa-arrows-rotate', 'fas fa-arrows-spin', 'fas fa-arrows-split-up-and-left', 'fas fa-arrows-to-circle', 'fas fa-arrows-to-dot', 'fas fa-arrows-to-eye', 'fas fa-arrows-turn-right', 'fas fa-arrows-turn-to-dots', 'fas fa-arrows-up-down', 'fas fa-arrows-up-down-left-right', 'fas fa-arrows-up-to-line', 'fab fa-artstation', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fab fa-atlassian', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fas fa-austral-sign', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-b', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backward', 'fas fa-backward-fast', 'fas fa-backward-step', 'fas fa-bacon', 'fas fa-bacteria', 'fas fa-bacterium', 'fas fa-bag-shopping', 'fas fa-bahai', 'fas fa-baht-sign', 'fas fa-ban', 'fas fa-ban-smoking', 'fas fa-bandage', 'fab fa-bandcamp', 'fas fa-bangladeshi-taka-sign', 'fas fa-barcode', 'fas fa-bars', 'fas fa-bars-progress', 'fas fa-bars-staggered', 'fas fa-baseball', 'fas fa-baseball-bat-ball', 'fas fa-basket-shopping', 'fas fa-basketball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fab fa-battle-net', 'fas fa-bed', 'fas fa-bed-pulse', 'fas fa-beer-mug-empty', 'fab fa-behance', 'fas fa-bell', 'far fa-fas fa-bell', 'fas fa-bell-concierge', 'fas fa-bell-slash', 'far fa-fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bicycle', 'fab fa-bilibili', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-biohazard', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fas fa-bitcoin-sign', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blog', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluesky', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bolt-lightning', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-atlas', 'fas fa-book-bible', 'fas fa-book-bookmark', 'fas fa-book-journal-whills', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-open-reader', 'fas fa-book-quran', 'fas fa-book-skull', 'fas fa-book-tanakh', 'fas fa-bookmark', 'far fa-fas fa-bookmark', 'fab fa-bootstrap', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-top-left', 'fas fa-bore-hole', 'fab fa-bots', 'fas fa-bottle-droplet', 'fas fa-bottle-water', 'fas fa-bowl-food', 'fas fa-bowl-rice', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-archive', 'fas fa-box-open', 'fas fa-box-tissue', 'fas fa-boxes-packing', 'fas fa-boxes-stacked', 'fas fa-braille', 'fas fa-brain', 'fab fa-brave', 'fab fa-brave-reverse', 'fas fa-brazilian-real-sign', 'fas fa-bread-slice', 'fas fa-bridge', 'fas fa-bridge-circle-check', 'fas fa-bridge-circle-exclamation', 'fas fa-bridge-circle-xmark', 'fas fa-bridge-lock', 'fas fa-bridge-water', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broom', 'fas fa-broom-ball', 'fas fa-brush', 'fab fa-btc', 'fas fa-bucket', 'fab fa-buffer', 'fas fa-bug', 'fas fa-bug-slash', 'fas fa-bugs', 'fas fa-building', 'far fa-fas fa-building', 'fas fa-building-circle-arrow-right', 'fas fa-building-circle-check', 'fas fa-building-circle-exclamation', 'fas fa-building-circle-xmark', 'fas fa-building-columns', 'fas fa-building-flag', 'fas fa-building-lock', 'fas fa-building-ngo', 'fas fa-building-shield', 'fas fa-building-un', 'fas fa-building-user', 'fas fa-building-wheat', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burger', 'fab fa-buromobelexperte', 'fas fa-burst', 'fas fa-bus', 'fas fa-bus-simple', 'fas fa-business-time', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fas fa-c', 'fas fa-cable-car', 'fas fa-cake-candles', 'fas fa-calculator', 'fas fa-calendar', 'far fa-fas fa-calendar', 'fas fa-calendar-check', 'far fa-fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-days', 'far fa-fas fa-calendar-days', 'fas fa-calendar-minus', 'far fa-fas fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-fas fa-calendar-plus', 'fas fa-calendar-week', 'fas fa-calendar-xmark', 'far fa-fas fa-calendar-xmark', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-camera-rotate', 'fas fa-campground', 'fab fa-canadian-maple-leaf', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-battery', 'fas fa-car-burst', 'fas fa-car-on', 'fas fa-car-rear', 'fas fa-car-side', 'fas fa-car-tunnel', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-flatbed', 'fas fa-cart-flatbed-suitcase', 'fas fa-cart-plus', 'fas fa-cart-shopping', 'fas fa-cash-register', 'fas fa-cat', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fas fa-cedi-sign', 'fas fa-cent-sign', 'fab fa-centercode', 'fab fa-centos', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-user', 'fas fa-champagne-glasses', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-fas fa-chart-bar', 'fas fa-chart-column', 'fas fa-chart-diagram', 'fas fa-chart-gantt', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-chart-simple', 'fas fa-check', 'fas fa-check-double', 'fas fa-check-to-slot', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'far fa-fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'far fa-fas fa-chess-king', 'fas fa-chess-knight', 'far fa-fas fa-chess-knight', 'fas fa-chess-pawn', 'far fa-fas fa-chess-pawn', 'fas fa-chess-queen', 'far fa-fas fa-chess-queen', 'fas fa-chess-rook', 'far fa-fas fa-chess-rook', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-child-combatant', 'fas fa-child-dress', 'fas fa-child-reaching', 'fas fa-children', 'fab fa-chrome', 'fab fa-chromecast', 'fas fa-church', 'fas fa-circle', 'far fa-fas fa-circle', 'fas fa-circle-arrow-down', 'fas fa-circle-arrow-left', 'fas fa-circle-arrow-right', 'fas fa-circle-arrow-up', 'fas fa-circle-check', 'far fa-fas fa-circle-check', 'fas fa-circle-chevron-down', 'fas fa-circle-chevron-left', 'fas fa-circle-chevron-right', 'fas fa-circle-chevron-up', 'fas fa-circle-dollar-to-slot', 'fas fa-circle-dot', 'far fa-fas fa-circle-dot', 'fas fa-circle-down', 'far fa-fas fa-circle-down', 'fas fa-circle-exclamation', 'fas fa-circle-h', 'fas fa-circle-half-stroke', 'fas fa-circle-info', 'fas fa-circle-left', 'far fa-fas fa-circle-left', 'fas fa-circle-minus', 'fas fa-circle-nodes', 'fas fa-circle-notch', 'fas fa-circle-pause', 'far fa-fas fa-circle-pause', 'fas fa-circle-play', 'far fa-fas fa-circle-play', 'fas fa-circle-plus', 'fas fa-circle-question', 'far fa-fas fa-circle-question', 'fas fa-circle-radiation', 'fas fa-circle-right', 'far fa-fas fa-circle-right', 'fas fa-circle-stop', 'far fa-fas fa-circle-stop', 'fas fa-circle-up', 'far fa-fas fa-circle-up', 'fas fa-circle-user', 'far fa-fas fa-circle-user', 'fas fa-circle-xmark', 'far fa-fas fa-circle-xmark', 'fas fa-city', 'fas fa-clapperboard', 'fas fa-clipboard', 'far fa-fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clipboard-question', 'fas fa-clipboard-user', 'fas fa-clock', 'far fa-fas fa-clock', 'fas fa-clock-rotate-left', 'fas fa-clone', 'far fa-fas fa-clone', 'fas fa-closed-captioning', 'far fa-fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-arrow-down', 'fas fa-cloud-arrow-up', 'fas fa-cloud-bolt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-showers-water', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fab fa-cloudflare', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-clover', 'fab fa-cmplid', 'fas fa-code', 'fas fa-code-branch', 'fas fa-code-commit', 'fas fa-code-compare', 'fas fa-code-fork', 'fas fa-code-merge', 'fas fa-code-pull-request', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coins', 'fas fa-colon-sign', 'fas fa-comment', 'far fa-fas fa-comment', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-nodes', 'fas fa-comment-slash', 'fas fa-comment-sms', 'fas fa-comments', 'far fa-fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-fas fa-compass', 'fas fa-compass-drafting', 'fas fa-compress', 'fas fa-computer', 'fas fa-computer-mouse', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-fas fa-copy', 'fas fa-copyright', 'far fa-fas fa-copyright', 'fab fa-cotton-bureau', 'fas fa-couch', 'fas fa-cow', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fas fa-credit-card', 'far fa-fas fa-credit-card', 'fab fa-critical-role', 'fas fa-crop', 'fas fa-crop-simple', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cruzeiro-sign', 'fab fa-css', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cubes-stacked', 'fab fa-cuttlefish', 'fas fa-d', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dart-lang', 'fab fa-dashcube', 'fas fa-database', 'fab fa-debian', 'fab fa-deezer', 'fas fa-delete-left', 'fab fa-delicious', 'fas fa-democrat', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-dev', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fab fa-dhl', 'fas fa-diagram-next', 'fas fa-diagram-predecessor', 'fas fa-diagram-project', 'fas fa-diagram-successor', 'fas fa-diamond', 'fas fa-diamond-turn-right', 'fab fa-diaspora', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fas fa-disease', 'fas fa-display', 'fas fa-divide', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dong-sign', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dove', 'fas fa-down-left-and-up-right-to-center', 'fas fa-down-long', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-dragon', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dropbox', 'fas fa-droplet', 'fas fa-droplet-slash', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fab fa-drupal', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fab fa-dyalog', 'fas fa-e', 'fas fa-ear-deaf', 'fas fa-ear-listen', 'fab fa-earlybirds', 'fas fa-earth-africa', 'fas fa-earth-americas', 'fas fa-earth-asia', 'fas fa-earth-europe', 'fas fa-earth-oceania', 'fab fa-ebay', 'fab fa-edge', 'fab fa-edge-legacy', 'fas fa-egg', 'fas fa-eject', 'fab fa-elementor', 'fas fa-elevator', 'fas fa-ellipsis', 'fas fa-ellipsis-vertical', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-fas fa-envelope', 'fas fa-envelope-circle-check', 'fas fa-envelope-open', 'far fa-fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelopes-bulk', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fas fa-ethernet', 'fab fa-etsy', 'fas fa-euro-sign', 'fab fa-evernote', 'fas fa-exclamation', 'fas fa-expand', 'fab fa-expeditedssl', 'fas fa-explosion', 'fas fa-eye', 'far fa-fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-low-vision', 'fas fa-eye-slash', 'far fa-fas fa-eye-slash', 'fas fa-f', 'fas fa-face-angry', 'far fa-fas fa-face-angry', 'fas fa-face-dizzy', 'far fa-fas fa-face-dizzy', 'fas fa-face-flushed', 'far fa-fas fa-face-flushed', 'fas fa-face-frown', 'far fa-fas fa-face-frown', 'fas fa-face-frown-open', 'far fa-fas fa-face-frown-open', 'fas fa-face-grimace', 'far fa-fas fa-face-grimace', 'fas fa-face-grin', 'far fa-fas fa-face-grin', 'fas fa-face-grin-beam', 'far fa-fas fa-face-grin-beam', 'fas fa-face-grin-beam-sweat', 'far fa-fas fa-face-grin-beam-sweat', 'fas fa-face-grin-hearts', 'far fa-fas fa-face-grin-hearts', 'fas fa-face-grin-squint', 'far fa-fas fa-face-grin-squint', 'fas fa-face-grin-squint-tears', 'far fa-fas fa-face-grin-squint-tears', 'fas fa-face-grin-stars', 'far fa-fas fa-face-grin-stars', 'fas fa-face-grin-tears', 'far fa-fas fa-face-grin-tears', 'fas fa-face-grin-tongue', 'far fa-fas fa-face-grin-tongue', 'fas fa-face-grin-tongue-squint', 'far fa-fas fa-face-grin-tongue-squint', 'fas fa-face-grin-tongue-wink', 'far fa-fas fa-face-grin-tongue-wink', 'fas fa-face-grin-wide', 'far fa-fas fa-face-grin-wide', 'fas fa-face-grin-wink', 'far fa-fas fa-face-grin-wink', 'fas fa-face-kiss', 'far fa-fas fa-face-kiss', 'fas fa-face-kiss-beam', 'far fa-fas fa-face-kiss-beam', 'fas fa-face-kiss-wink-heart', 'far fa-fas fa-face-kiss-wink-heart', 'fas fa-face-laugh', 'far fa-fas fa-face-laugh', 'fas fa-face-laugh-beam', 'far fa-fas fa-face-laugh-beam', 'fas fa-face-laugh-squint', 'far fa-fas fa-face-laugh-squint', 'fas fa-face-laugh-wink', 'far fa-fas fa-face-laugh-wink', 'fas fa-face-meh', 'far fa-fas fa-face-meh', 'fas fa-face-meh-blank', 'far fa-fas fa-face-meh-blank', 'fas fa-face-rolling-eyes', 'far fa-fas fa-face-rolling-eyes', 'fas fa-face-sad-cry', 'far fa-fas fa-face-sad-cry', 'fas fa-face-sad-tear', 'far fa-fas fa-face-sad-tear', 'fas fa-face-smile', 'far fa-fas fa-face-smile', 'fas fa-face-smile-beam', 'far fa-fas fa-face-smile-beam', 'fas fa-face-smile-wink', 'far fa-fas fa-face-smile-wink', 'fas fa-face-surprise', 'far fa-fas fa-face-surprise', 'fas fa-face-tired', 'far fa-fas fa-face-tired', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fas fa-fan', 'fab fa-fantasy-flight-games', 'fas fa-faucet', 'fas fa-faucet-drip', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-pointed', 'fab fa-fedex', 'fab fa-fedora', 'fas fa-ferry', 'fab fa-figma', 'fas fa-file', 'far fa-fas fa-file', 'fas fa-file-arrow-down', 'fas fa-file-arrow-up', 'fas fa-file-audio', 'far fa-fas fa-file-audio', 'fas fa-file-circle-check', 'fas fa-file-circle-exclamation', 'fas fa-file-circle-minus', 'fas fa-file-circle-plus', 'fas fa-file-circle-question', 'fas fa-file-circle-xmark', 'fas fa-file-code', 'far fa-fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-excel', 'far fa-fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-fragment', 'fas fa-file-half-dashed', 'fas fa-file-image', 'far fa-fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-lines', 'far fa-fas fa-file-lines', 'fas fa-file-medical', 'fas fa-file-pdf', 'far fa-fas fa-file-pdf', 'fas fa-file-pen', 'fas fa-file-powerpoint', 'far fa-fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-shield', 'fas fa-file-signature', 'fas fa-file-video', 'far fa-fas fa-file-video', 'fas fa-file-waveform', 'fas fa-file-word', 'far fa-fas fa-file-word', 'fas fa-file-zipper', 'far fa-fas fa-file-zipper', 'fab fa-files-pinwheel', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-filter-circle-dollar', 'fas fa-filter-circle-xmark', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-burner', 'fas fa-fire-extinguisher', 'fas fa-fire-flame-curved', 'fas fa-fire-flame-simple', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-fish-fins', 'fas fa-flag', 'far fa-fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flask-vial', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-floppy-disk', 'far fa-fas fa-floppy-disk', 'fas fa-florin-sign', 'fab fa-flutter', 'fab fa-fly', 'fas fa-folder', 'far fa-fas fa-folder', 'fas fa-folder-closed', 'far fa-fas fa-folder-closed', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-folder-tree', 'fas fa-font', 'fas fa-font-awesome', 'far fa-fas fa-font-awesome', 'fab fa-far fa-fas fa-font-awesome', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fas fa-forward-fast', 'fas fa-forward-step', 'fab fa-foursquare', 'fas fa-franc-sign', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fab fa-fulcrum', 'fas fa-futbol', 'far fa-fas fa-futbol', 'fas fa-g', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gauge', 'fas fa-gauge-high', 'fas fa-gauge-simple', 'fas fa-gauge-simple-high', 'fas fa-gavel', 'fas fa-gear', 'fas fa-gears', 'fas fa-gem', 'far fa-fas fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fab fa-git', 'fab fa-git-alt', 'fab fa-github', 'fab fa-github-alt', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-water', 'fas fa-glass-water-droplet', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fab fa-gofore', 'fab fa-golang', 'fas fa-golf-ball-tee', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-pay', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-scholar', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grip', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fas fa-group-arrows-rotate', 'fab fa-grunt', 'fas fa-guarani-sign', 'fab fa-guilded', 'fas fa-guitar', 'fab fa-gulp', 'fas fa-gun', 'fas fa-h', 'fab fa-hacker-news', 'fab fa-hackerrank', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand', 'far fa-fas fa-hand', 'fas fa-hand-back-fist', 'far fa-fas fa-hand-back-fist', 'fas fa-hand-dots', 'fas fa-hand-fist', 'fas fa-hand-holding', 'fas fa-hand-holding-dollar', 'fas fa-hand-holding-droplet', 'fas fa-hand-holding-hand', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-medical', 'fas fa-hand-lizard', 'far fa-fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-peace', 'far fa-fas fa-hand-peace', 'fas fa-hand-point-down', 'far fa-fas fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-fas fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-fas fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-fas fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-fas fa-hand-pointer', 'fas fa-hand-scissors', 'far fa-fas fa-hand-scissors', 'fas fa-hand-sparkles', 'fas fa-hand-spock', 'far fa-fas fa-hand-spock', 'fas fa-handcuffs', 'fas fa-hands', 'fas fa-hands-asl-interpreting', 'fas fa-hands-bound', 'fas fa-hands-bubbles', 'fas fa-hands-clapping', 'fas fa-hands-holding', 'fas fa-hands-holding-child', 'fas fa-hands-holding-circle', 'fas fa-hands-praying', 'fas fa-handshake', 'far fa-fas fa-handshake', 'fas fa-handshake-angle', 'fas fa-handshake-simple', 'fas fa-handshake-simple-slash', 'fas fa-handshake-slash', 'fas fa-hanukiah', 'fas fa-hard-drive', 'far fa-fas fa-hard-drive', 'fab fa-hashnode', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-head-side-cough', 'fas fa-head-side-cough-slash', 'fas fa-head-side-mask', 'fas fa-head-side-virus', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-simple', 'fas fa-headset', 'fas fa-heart', 'far fa-fas fa-heart', 'fas fa-heart-circle-bolt', 'fas fa-heart-circle-check', 'fas fa-heart-circle-exclamation', 'fas fa-heart-circle-minus', 'fas fa-heart-circle-plus', 'fas fa-heart-circle-xmark', 'fas fa-heart-crack', 'fas fa-heart-pulse', 'fas fa-helicopter', 'fas fa-helicopter-symbol', 'fas fa-helmet-safety', 'fas fa-helmet-un', 'fas fa-hexagon-nodes', 'fas fa-hexagon-nodes-bolt', 'fas fa-highlighter', 'fas fa-hill-avalanche', 'fas fa-hill-rockslide', 'fas fa-hippo', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hive', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'far fa-fas fa-hospital', 'fas fa-hospital-user', 'fas fa-hot-tub-person', 'fas fa-hotdog', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'far fa-fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house', 'fas fa-house-chimney', 'fas fa-house-chimney-crack', 'fas fa-house-chimney-medical', 'fas fa-house-chimney-user', 'fas fa-house-chimney-window', 'fas fa-house-circle-check', 'fas fa-house-circle-exclamation', 'fas fa-house-circle-xmark', 'fas fa-house-crack', 'fas fa-house-fire', 'fas fa-house-flag', 'fas fa-house-flood-water', 'fas fa-house-flood-water-circle-arrow-right', 'fas fa-house-laptop', 'fas fa-house-lock', 'fas fa-house-medical', 'fas fa-house-medical-circle-check', 'fas fa-house-medical-circle-exclamation', 'fas fa-house-medical-circle-xmark', 'fas fa-house-medical-flag', 'fas fa-house-signal', 'fas fa-house-tsunami', 'fas fa-house-user', 'fab fa-houzz', 'fas fa-hryvnia-sign', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-hurricane', 'fas fa-i', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'far fa-fas fa-id-badge', 'fas fa-id-card', 'far fa-fas fa-id-card', 'fas fa-id-card-clip', 'fab fa-ideal', 'fas fa-igloo', 'fas fa-image', 'far fa-fas fa-image', 'fas fa-image-portrait', 'fas fa-images', 'far fa-fas fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-indian-rupee-sign', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fab fa-instagram', 'fab fa-instalod', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fas fa-j', 'fas fa-jar', 'fas fa-jar-wheat', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fas fa-jet-fighter', 'fas fa-jet-fighter-up', 'fab fa-jira', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fab fa-js', 'fab fa-jsfiddle', 'fas fa-jug-detergent', 'fab fa-jxl', 'fas fa-k', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-fas fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kip-sign', 'fas fa-kit-medical', 'fas fa-kitchen-set', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-l', 'fas fa-land-mine-on', 'fas fa-landmark', 'fas fa-landmark-dome', 'fas fa-landmark-flag', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-file', 'fas fa-laptop-medical', 'fab fa-laravel', 'fas fa-lari-sign', 'fab fa-lastfm', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-left-long', 'fas fa-left-right', 'fas fa-lemon', 'far fa-fas fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fab fa-letterboxd', 'fas fa-life-ring', 'far fa-fas fa-life-ring', 'fas fa-lightbulb', 'far fa-fas fa-lightbulb', 'fab fa-line', 'fas fa-lines-leaning', 'fas fa-link', 'fas fa-link-slash', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-check', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-litecoin-sign', 'fas fa-location-arrow', 'fas fa-location-crosshairs', 'fas fa-location-dot', 'fas fa-location-pin', 'fas fa-location-pin-lock', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-locust', 'fas fa-lungs', 'fas fa-lungs-virus', 'fab fa-lyft', 'fas fa-m', 'fab fa-magento', 'fas fa-magnet', 'fas fa-magnifying-glass', 'fas fa-magnifying-glass-arrow-right', 'fas fa-magnifying-glass-chart', 'fas fa-magnifying-glass-dollar', 'fas fa-magnifying-glass-location', 'fas fa-magnifying-glass-minus', 'fas fa-magnifying-glass-plus', 'fab fa-mailchimp', 'fas fa-manat-sign', 'fab fa-mandalorian', 'fas fa-map', 'far fa-fas fa-map', 'fas fa-map-location', 'fas fa-map-location-dot', 'fas fa-map-pin', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-and-venus', 'fas fa-mars-and-venus-burst', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-right', 'fas fa-mars-stroke-up', 'fas fa-martini-glass', 'fas fa-martini-glass-citrus', 'fas fa-martini-glass-empty', 'fas fa-mask', 'fas fa-mask-face', 'fas fa-mask-ventilator', 'fas fa-masks-theater', 'fab fa-mastodon', 'fas fa-mattress-pillow', 'fab fa-maxcdn', 'fas fa-maximize', 'fab fa-mdb', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-memory', 'fab fa-mendeley', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-message', 'far fa-fas fa-message', 'fab fa-meta', 'fas fa-meteor', 'fab fa-microblog', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-lines', 'fas fa-microphone-lines-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-mill-sign', 'fas fa-minimize', 'fab fa-mintbit', 'fas fa-minus', 'fas fa-mitten', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-button', 'fas fa-mobile-retro', 'fas fa-mobile-screen', 'fas fa-mobile-screen-button', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-1', 'far fa-fas fa-money-bill-1', 'fas fa-money-bill-1-wave', 'fas fa-money-bill-transfer', 'fas fa-money-bill-trend-up', 'fas fa-money-bill-wave', 'fas fa-money-bill-wheat', 'fas fa-money-bills', 'fas fa-money-check', 'fas fa-money-check-dollar', 'fas fa-monument', 'fas fa-moon', 'far fa-fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-mosquito', 'fas fa-mosquito-net', 'fas fa-motorcycle', 'fas fa-mound', 'fas fa-mountain', 'fas fa-mountain-city', 'fas fa-mountain-sun', 'fas fa-mug-hot', 'fas fa-mug-saucer', 'fas fa-music', 'fas fa-n', 'fas fa-naira-sign', 'fab fa-napster', 'fab fa-neos', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-fas fa-newspaper', 'fab fa-nfc-directional', 'fab fa-nfc-symbol', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notdef', 'fas fa-note-sticky', 'far fa-fas fa-note-sticky', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-o', 'fas fa-object-group', 'far fa-fas fa-object-group', 'fas fa-object-ungroup', 'far fa-fas fa-object-ungroup', 'fab fa-octopus-deploy', 'fab fa-odnoklassniki', 'fab fa-odysee', 'fas fa-oil-can', 'fas fa-oil-well', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opensuse', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fas fa-otter', 'fas fa-outdent', 'fas fa-p', 'fab fa-padlet', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-pager', 'fas fa-paint-roller', 'fas fa-paintbrush', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-panorama', 'fas fa-paper-plane', 'far fa-fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-passport', 'fas fa-paste', 'far fa-fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-clip', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-ruler', 'fas fa-pen-to-square', 'far fa-fas fa-pen-to-square', 'fas fa-pencil', 'fas fa-people-arrows', 'fas fa-people-carry-box', 'fas fa-people-group', 'fas fa-people-line', 'fas fa-people-pulling', 'fas fa-people-robbery', 'fas fa-people-roof', 'fas fa-pepper-hot', 'fab fa-perbyte', 'fas fa-percent', 'fab fa-periscope', 'fas fa-person', 'fas fa-person-arrow-down-to-line', 'fas fa-person-arrow-up-from-line', 'fas fa-person-biking', 'fas fa-person-booth', 'fas fa-person-breastfeeding', 'fas fa-person-burst', 'fas fa-person-cane', 'fas fa-person-chalkboard', 'fas fa-person-circle-check', 'fas fa-person-circle-exclamation', 'fas fa-person-circle-minus', 'fas fa-person-circle-plus', 'fas fa-person-circle-question', 'fas fa-person-circle-xmark', 'fas fa-person-digging', 'fas fa-person-dots-from-line', 'fas fa-person-dress', 'fas fa-person-dress-burst', 'fas fa-person-drowning', 'fas fa-person-falling', 'fas fa-person-falling-burst', 'fas fa-person-half-dress', 'fas fa-person-harassing', 'fas fa-person-hiking', 'fas fa-person-military-pointing', 'fas fa-person-military-rifle', 'fas fa-person-military-to-person', 'fas fa-person-praying', 'fas fa-person-pregnant', 'fas fa-person-rays', 'fas fa-person-rifle', 'fas fa-person-running', 'fas fa-person-shelter', 'fas fa-person-skating', 'fas fa-person-skiing', 'fas fa-person-skiing-nordic', 'fas fa-person-snowboarding', 'fas fa-person-swimming', 'fas fa-person-through-window', 'fas fa-person-walking', 'fas fa-person-walking-arrow-loop-left', 'fas fa-person-walking-arrow-right', 'fas fa-person-walking-dashed-line-arrow-right', 'fas fa-person-walking-luggage', 'fas fa-person-walking-with-cane', 'fas fa-peseta-sign', 'fas fa-peso-sign', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-flip', 'fas fa-phone-slash', 'fas fa-phone-volume', 'fas fa-photo-film', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pix', 'fab fa-pixiv', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-circle-check', 'fas fa-plane-circle-exclamation', 'fas fa-plane-circle-xmark', 'fas fa-plane-departure', 'fas fa-plane-lock', 'fas fa-plane-slash', 'fas fa-plane-up', 'fas fa-plant-wilt', 'fas fa-plate-wheat', 'fas fa-play', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plug-circle-bolt', 'fas fa-plug-circle-check', 'fas fa-plug-circle-exclamation', 'fas fa-plug-circle-minus', 'fas fa-plug-circle-plus', 'fas fa-plug-circle-xmark', 'fas fa-plus', 'fas fa-plus-minus', 'fas fa-podcast', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-power-off', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-medical', 'fas fa-print', 'fab fa-product-hunt', 'fas fa-pump-medical', 'fas fa-pump-soap', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fas fa-q', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-r', 'fab fa-r-project', 'fas fa-radiation', 'fas fa-radio', 'fas fa-rainbow', 'fas fa-ranking-star', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-rectangle-ad', 'fas fa-rectangle-list', 'far fa-fas fa-rectangle-list', 'fas fa-rectangle-xmark', 'far fa-fas fa-rectangle-xmark', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-redhat', 'fas fa-registered', 'far fa-fas fa-registered', 'fab fa-renren', 'fas fa-repeat', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fas fa-republican', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-restroom', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-right-from-bracket', 'fas fa-right-left', 'fas fa-right-long', 'fas fa-right-to-bracket', 'fas fa-ring', 'fas fa-road', 'fas fa-road-barrier', 'fas fa-road-bridge', 'fas fa-road-circle-check', 'fas fa-road-circle-exclamation', 'fas fa-road-circle-xmark', 'fas fa-road-lock', 'fas fa-road-spikes', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-rotate', 'fas fa-rotate-left', 'fas fa-rotate-right', 'fas fa-route', 'fas fa-rss', 'fas fa-ruble-sign', 'fas fa-rug', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-rupiah-sign', 'fab fa-rust', 'fas fa-s', 'fas fa-sack-dollar', 'fas fa-sack-xmark', 'fab fa-safari', 'fas fa-sailboat', 'fab fa-salesforce', 'fab fa-sass', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-scale-balanced', 'fas fa-scale-unbalanced', 'fas fa-scale-unbalanced-flip', 'fab fa-schlix', 'fas fa-school', 'fas fa-school-circle-check', 'fas fa-school-circle-exclamation', 'fas fa-school-circle-xmark', 'fas fa-school-flag', 'fas fa-school-lock', 'fas fa-scissors', 'fab fa-screenpal', 'fas fa-screwdriver', 'fas fa-screwdriver-wrench', 'fab fa-scribd', 'fas fa-scroll', 'fas fa-scroll-torah', 'fas fa-sd-card', 'fab fa-searchengin', 'fas fa-section', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-from-square', 'far fa-fas fa-share-from-square', 'fas fa-share-nodes', 'fas fa-sheet-plastic', 'fas fa-shekel-sign', 'fas fa-shield', 'fas fa-shield-cat', 'fas fa-shield-dog', 'fas fa-shield-halved', 'fas fa-shield-heart', 'fas fa-shield-virus', 'fas fa-ship', 'fas fa-shirt', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fab fa-shoelace', 'fas fa-shop', 'fas fa-shop-lock', 'fas fa-shop-slash', 'fab fa-shopify', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shrimp', 'fas fa-shuffle', 'fas fa-shuttle-space', 'fas fa-sign-hanging', 'fas fa-signal', 'fab fa-signal-messenger', 'fas fa-signature', 'fas fa-signs-post', 'fas fa-sim-card', 'fab fa-simplybuilt', 'fas fa-sink', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fab fa-sitrox', 'fab fa-sketch', 'fas fa-skull', 'fas fa-skull-crossbones', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders', 'fab fa-slideshare', 'fas fa-smog', 'fas fa-smoking', 'fab fa-snapchat', 'fas fa-snowflake', 'far fa-fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-soap', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-down', 'fas fa-sort-up', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fas fa-spa', 'fab fa-space-awesome', 'fas fa-spaghetti-monster-flying', 'fab fa-speakap', 'fab fa-speaker-deck', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spoon', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-spray-can-sparkles', 'fas fa-square', 'far fa-fas fa-square', 'fas fa-square-arrow-up-right', 'fab fa-square-behance', 'fas fa-square-binary', 'fab fa-square-bluesky', 'fas fa-square-caret-down', 'far fa-fas fa-square-caret-down', 'fas fa-square-caret-left', 'far fa-fas fa-square-caret-left', 'fas fa-square-caret-right', 'far fa-fas fa-square-caret-right', 'fas fa-square-caret-up', 'far fa-fas fa-square-caret-up', 'fas fa-square-check', 'far fa-fas fa-square-check', 'fab fa-square-dribbble', 'fas fa-square-envelope', 'fab fa-square-facebook', 'fab fa-square-font-awesome', 'fab fa-square-font-awesome-stroke', 'fas fa-square-full', 'far fa-fas fa-square-full', 'fab fa-square-git', 'fab fa-square-github', 'fab fa-square-gitlab', 'fab fa-square-google-plus', 'fas fa-square-h', 'fab fa-square-hacker-news', 'fab fa-square-instagram', 'fab fa-square-js', 'fab fa-square-lastfm', 'fab fa-square-letterboxd', 'fas fa-square-minus', 'far fa-fas fa-square-minus', 'fas fa-square-nfi', 'fab fa-square-odnoklassniki', 'fas fa-square-parking', 'fas fa-square-pen', 'fas fa-square-person-confined', 'fas fa-square-phone', 'fas fa-square-phone-flip', 'fab fa-square-pied-piper', 'fab fa-square-pinterest', 'fas fa-square-plus', 'far fa-fas fa-square-plus', 'fas fa-square-poll-horizontal', 'fas fa-square-poll-vertical', 'fab fa-square-reddit', 'fas fa-square-root-variable', 'fas fa-square-rss', 'fas fa-square-share-nodes', 'fab fa-square-snapchat', 'fab fa-square-steam', 'fab fa-square-threads', 'fab fa-square-tumblr', 'fab fa-square-twitter', 'fas fa-square-up-right', 'fab fa-square-upwork', 'fab fa-square-viadeo', 'fab fa-square-vimeo', 'fas fa-square-virus', 'fab fa-square-web-awesome', 'fab fa-square-web-awesome-stroke', 'fab fa-square-whatsapp', 'fab fa-square-x-twitter', 'fab fa-square-xing', 'fas fa-square-xmark', 'fab fa-square-youtube', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fas fa-staff-snake', 'fas fa-stairs', 'fas fa-stamp', 'fas fa-stapler', 'fas fa-star', 'far fa-fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-fas fa-star-half', 'fas fa-star-half-stroke', 'far fa-fas fa-star-half-stroke', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-symbol', 'fas fa-sterling-sign', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-stop', 'fas fa-stopwatch', 'fas fa-stopwatch-20', 'fas fa-store', 'fas fa-store-slash', 'fab fa-strava', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-stubber', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-suitcase', 'fas fa-suitcase-medical', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-fas fa-sun', 'fas fa-sun-plant-wilt', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fab fa-suse', 'fas fa-swatchbook', 'fab fa-swift', 'fab fa-symfony', 'fas fa-synagogue', 'fas fa-syringe', 'fas fa-t', 'fas fa-table', 'fas fa-table-cells', 'fas fa-table-cells-column-lock', 'fas fa-table-cells-large', 'fas fa-table-cells-row-lock', 'fas fa-table-cells-row-unlock', 'fas fa-table-columns', 'fas fa-table-list', 'fas fa-table-tennis-paddle-ball', 'fas fa-tablet', 'fas fa-tablet-button', 'fas fa-tablet-screen-button', 'fas fa-tablets', 'fas fa-tachograph-digital', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tarp', 'fas fa-tarp-droplet', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fas fa-temperature-arrow-down', 'fas fa-temperature-arrow-up', 'fas fa-temperature-empty', 'fas fa-temperature-full', 'fas fa-temperature-half', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-temperature-quarter', 'fas fa-temperature-three-quarters', 'fab fa-tencent-weibo', 'fas fa-tenge-sign', 'fas fa-tent', 'fas fa-tent-arrow-down-to-line', 'fas fa-tent-arrow-left-right', 'fas fa-tent-arrow-turn-left', 'fas fa-tent-arrows-down', 'fas fa-tents', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-slash', 'fas fa-text-width', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fab fa-think-peaks', 'fab fa-threads', 'fas fa-thumbs-down', 'far fa-fas fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-thumbtack-slash', 'fas fa-ticket', 'fas fa-ticket-simple', 'fab fa-tiktok', 'fas fa-timeline', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toilet-paper-slash', 'fas fa-toilet-portable', 'fas fa-toilets-portable', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torii-gate', 'fas fa-tornado', 'fas fa-tower-broadcast', 'fas fa-tower-cell', 'fas fa-tower-observation', 'fas fa-tractor', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-train-subway', 'fas fa-train-tram', 'fas fa-transgender', 'fas fa-trash', 'fas fa-trash-arrow-up', 'fas fa-trash-can', 'far fa-fas fa-trash-can', 'fas fa-trash-can-arrow-up', 'fas fa-tree', 'fas fa-tree-city', 'fab fa-trello', 'fas fa-triangle-exclamation', 'fas fa-trophy', 'fas fa-trowel', 'fas fa-trowel-bricks', 'fas fa-truck', 'fas fa-truck-arrow-right', 'fas fa-truck-droplet', 'fas fa-truck-fast', 'fas fa-truck-field', 'fas fa-truck-field-un', 'fas fa-truck-front', 'fas fa-truck-medical', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-truck-plane', 'fas fa-truck-ramp-box', 'fas fa-tty', 'fab fa-tumblr', 'fas fa-turkish-lira-sign', 'fas fa-turn-down', 'fas fa-turn-up', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-typo3', 'fas fa-u', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fab fa-uncharted', 'fas fa-underline', 'fab fa-uniregistry', 'fab fa-unity', 'fas fa-universal-access', 'fas fa-unlock', 'fas fa-unlock-keyhole', 'fab fa-unsplash', 'fab fa-untappd', 'fas fa-up-down', 'fas fa-up-down-left-right', 'fas fa-up-long', 'fas fa-up-right-and-down-left-from-center', 'fas fa-up-right-from-square', 'fas fa-upload', 'fab fa-ups', 'fab fa-upwork', 'fab fa-usb', 'fas fa-user', 'far fa-fas fa-user', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-clock', 'fas fa-user-doctor', 'fas fa-user-gear', 'fas fa-user-graduate', 'fas fa-user-group', 'fas fa-user-injured', 'fas fa-user-large', 'fas fa-user-large-slash', 'fas fa-user-lock', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-pen', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-xmark', 'fas fa-users', 'fas fa-users-between-lines', 'fas fa-users-gear', 'fas fa-users-line', 'fas fa-users-rays', 'fas fa-users-rectangle', 'fas fa-users-slash', 'fas fa-users-viewfinder', 'fab fa-usps', 'fab fa-ussunnah', 'fas fa-utensils', 'fas fa-v', 'fab fa-vaadin', 'fas fa-van-shuttle', 'fas fa-vault', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vest', 'fas fa-vest-patches', 'fab fa-viacoin', 'fab fa-viadeo', 'fas fa-vial', 'fas fa-vial-circle-check', 'fas fa-vial-virus', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-v', 'fab fa-vine', 'fas fa-virus', 'fas fa-virus-covid', 'fas fa-virus-covid-slash', 'fas fa-virus-slash', 'fas fa-viruses', 'fab fa-vk', 'fab fa-vnv', 'fas fa-voicemail', 'fas fa-volcano', 'fas fa-volleyball', 'fas fa-volume-high', 'fas fa-volume-low', 'fas fa-volume-off', 'fas fa-volume-xmark', 'fas fa-vr-cardboard', 'fab fa-vuejs', 'fas fa-w', 'fas fa-walkie-talkie', 'fas fa-wallet', 'fas fa-wand-magic', 'fas fa-wand-magic-sparkles', 'fas fa-wand-sparkles', 'fas fa-warehouse', 'fab fa-watchman-monitoring', 'fas fa-water', 'fas fa-water-ladder', 'fas fa-wave-square', 'fab fa-waze', 'fas fa-web-awesome', 'fab fa-fas fa-web-awesome', 'fab fa-webflow', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight-hanging', 'fas fa-weight-scale', 'fab fa-weixin', 'fab fa-whatsapp', 'fas fa-wheat-awn', 'fas fa-wheat-awn-circle-exclamation', 'fas fa-wheelchair', 'fas fa-wheelchair-move', 'fas fa-whiskey-glass', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-wind', 'fas fa-window-maximize', 'far fa-fas fa-window-maximize', 'fas fa-window-minimize', 'far fa-fas fa-window-minimize', 'fas fa-window-restore', 'far fa-fas fa-window-restore', 'fab fa-windows', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-empty', 'fab fa-wirsindhandwerk', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wodu', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fas fa-worm', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fas fa-wrench', 'fas fa-x', 'fas fa-x-ray', 'fab fa-x-twitter', 'fab fa-xbox', 'fab fa-xing', 'fas fa-xmark', 'fas fa-xmarks-lines', 'fas fa-y', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fas fa-z', 'fab fa-zhihu' );
	}
}
2 1
\ No newline at end of file
2
+<?php
/**
 * Redux Icon Select Font Awesome 6 Free icon array.
 *
 * @package Redux
 * @author  Kevin Provance <[email protected]>
 */

defined( 'ABSPATH' ) || exit;

if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {

	/**
	 * Array of free Font Awesome 6 icons.
	 *
	 * @return array
	 */
	function redux_icon_select_fa_6_free(): array {
		return array( 'fas fa-0', 'fas fa-1', 'fas fa-2', 'fas fa-3', 'fas fa-4', 'fas fa-5', 'fas fa-6', 'fas fa-7', 'fas fa-8', 'fas fa-9', 'fab fa-42-group', 'fab fa-500px', 'fas fa-a', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-address-book', 'far fa-fas fa-address-book', 'fas fa-address-card', 'far fa-fas fa-address-card', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fas fa-anchor', 'fas fa-anchor-circle-check', 'fas fa-anchor-circle-exclamation', 'fas fa-anchor-circle-xmark', 'fas fa-anchor-lock', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angles-down', 'fas fa-angles-left', 'fas fa-angles-right', 'fas fa-angles-up', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fas fa-apple-whole', 'fas fa-archway', 'fas fa-arrow-down', 'fas fa-arrow-down-1-9', 'fas fa-arrow-down-9-1', 'fas fa-arrow-down-a-z', 'fas fa-arrow-down-long', 'fas fa-arrow-down-short-wide', 'fas fa-arrow-down-up-across-line', 'fas fa-arrow-down-up-lock', 'fas fa-arrow-down-wide-short', 'fas fa-arrow-down-z-a', 'fas fa-arrow-left', 'fas fa-arrow-left-long', 'fas fa-arrow-pointer', 'fas fa-arrow-right', 'fas fa-arrow-right-arrow-left', 'fas fa-arrow-right-from-bracket', 'fas fa-arrow-right-long', 'fas fa-arrow-right-to-bracket', 'fas fa-arrow-right-to-city', 'fas fa-arrow-rotate-left', 'fas fa-arrow-rotate-right', 'fas fa-arrow-trend-down', 'fas fa-arrow-trend-up', 'fas fa-arrow-turn-down', 'fas fa-arrow-turn-up', 'fas fa-arrow-up', 'fas fa-arrow-up-1-9', 'fas fa-arrow-up-9-1', 'fas fa-arrow-up-a-z', 'fas fa-arrow-up-from-bracket', 'fas fa-arrow-up-from-ground-water', 'fas fa-arrow-up-from-water-pump', 'fas fa-arrow-up-long', 'fas fa-arrow-up-right-dots', 'fas fa-arrow-up-right-from-square', 'fas fa-arrow-up-short-wide', 'fas fa-arrow-up-wide-short', 'fas fa-arrow-up-z-a', 'fas fa-arrows-down-to-line', 'fas fa-arrows-down-to-people', 'fas fa-arrows-left-right', 'fas fa-arrows-left-right-to-line', 'fas fa-arrows-rotate', 'fas fa-arrows-spin', 'fas fa-arrows-split-up-and-left', 'fas fa-arrows-to-circle', 'fas fa-arrows-to-dot', 'fas fa-arrows-to-eye', 'fas fa-arrows-turn-right', 'fas fa-arrows-turn-to-dots', 'fas fa-arrows-up-down', 'fas fa-arrows-up-down-left-right', 'fas fa-arrows-up-to-line', 'fab fa-artstation', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fab fa-atlassian', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fas fa-austral-sign', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-b', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backward', 'fas fa-backward-fast', 'fas fa-backward-step', 'fas fa-bacon', 'fas fa-bacteria', 'fas fa-bacterium', 'fas fa-bag-shopping', 'fas fa-bahai', 'fas fa-baht-sign', 'fas fa-ban', 'fas fa-ban-smoking', 'fas fa-bandage', 'fab fa-bandcamp', 'fas fa-bangladeshi-taka-sign', 'fas fa-barcode', 'fas fa-bars', 'fas fa-bars-progress', 'fas fa-bars-staggered', 'fas fa-baseball', 'fas fa-baseball-bat-ball', 'fas fa-basket-shopping', 'fas fa-basketball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fab fa-battle-net', 'fas fa-bed', 'fas fa-bed-pulse', 'fas fa-beer-mug-empty', 'fab fa-behance', 'fas fa-bell', 'far fa-fas fa-bell', 'fas fa-bell-concierge', 'fas fa-bell-slash', 'far fa-fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bicycle', 'fab fa-bilibili', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-biohazard', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fas fa-bitcoin-sign', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blog', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluesky', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bolt-lightning', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-atlas', 'fas fa-book-bible', 'fas fa-book-bookmark', 'fas fa-book-journal-whills', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-open-reader', 'fas fa-book-quran', 'fas fa-book-skull', 'fas fa-book-tanakh', 'fas fa-bookmark', 'far fa-fas fa-bookmark', 'fab fa-bootstrap', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-top-left', 'fas fa-bore-hole', 'fab fa-bots', 'fas fa-bottle-droplet', 'fas fa-bottle-water', 'fas fa-bowl-food', 'fas fa-bowl-rice', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-archive', 'fas fa-box-open', 'fas fa-box-tissue', 'fas fa-boxes-packing', 'fas fa-boxes-stacked', 'fas fa-braille', 'fas fa-brain', 'fab fa-brave', 'fab fa-brave-reverse', 'fas fa-brazilian-real-sign', 'fas fa-bread-slice', 'fas fa-bridge', 'fas fa-bridge-circle-check', 'fas fa-bridge-circle-exclamation', 'fas fa-bridge-circle-xmark', 'fas fa-bridge-lock', 'fas fa-bridge-water', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broom', 'fas fa-broom-ball', 'fas fa-brush', 'fab fa-btc', 'fas fa-bucket', 'fab fa-buffer', 'fas fa-bug', 'fas fa-bug-slash', 'fas fa-bugs', 'fas fa-building', 'far fa-fas fa-building', 'fas fa-building-circle-arrow-right', 'fas fa-building-circle-check', 'fas fa-building-circle-exclamation', 'fas fa-building-circle-xmark', 'fas fa-building-columns', 'fas fa-building-flag', 'fas fa-building-lock', 'fas fa-building-ngo', 'fas fa-building-shield', 'fas fa-building-un', 'fas fa-building-user', 'fas fa-building-wheat', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burger', 'fab fa-buromobelexperte', 'fas fa-burst', 'fas fa-bus', 'fas fa-bus-simple', 'fas fa-business-time', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fas fa-c', 'fas fa-cable-car', 'fas fa-cake-candles', 'fas fa-calculator', 'fas fa-calendar', 'far fa-fas fa-calendar', 'fas fa-calendar-check', 'far fa-fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-days', 'far fa-fas fa-calendar-days', 'fas fa-calendar-minus', 'far fa-fas fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-fas fa-calendar-plus', 'fas fa-calendar-week', 'fas fa-calendar-xmark', 'far fa-fas fa-calendar-xmark', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-camera-rotate', 'fas fa-campground', 'fab fa-canadian-maple-leaf', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-battery', 'fas fa-car-burst', 'fas fa-car-on', 'fas fa-car-rear', 'fas fa-car-side', 'fas fa-car-tunnel', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-flatbed', 'fas fa-cart-flatbed-suitcase', 'fas fa-cart-plus', 'fas fa-cart-shopping', 'fas fa-cash-register', 'fas fa-cat', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fas fa-cedi-sign', 'fas fa-cent-sign', 'fab fa-centercode', 'fab fa-centos', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-user', 'fas fa-champagne-glasses', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-fas fa-chart-bar', 'fas fa-chart-column', 'fas fa-chart-diagram', 'fas fa-chart-gantt', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-chart-simple', 'fas fa-check', 'fas fa-check-double', 'fas fa-check-to-slot', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'far fa-fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'far fa-fas fa-chess-king', 'fas fa-chess-knight', 'far fa-fas fa-chess-knight', 'fas fa-chess-pawn', 'far fa-fas fa-chess-pawn', 'fas fa-chess-queen', 'far fa-fas fa-chess-queen', 'fas fa-chess-rook', 'far fa-fas fa-chess-rook', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-child-combatant', 'fas fa-child-dress', 'fas fa-child-reaching', 'fas fa-children', 'fab fa-chrome', 'fab fa-chromecast', 'fas fa-church', 'fas fa-circle', 'far fa-fas fa-circle', 'fas fa-circle-arrow-down', 'fas fa-circle-arrow-left', 'fas fa-circle-arrow-right', 'fas fa-circle-arrow-up', 'fas fa-circle-check', 'far fa-fas fa-circle-check', 'fas fa-circle-chevron-down', 'fas fa-circle-chevron-left', 'fas fa-circle-chevron-right', 'fas fa-circle-chevron-up', 'fas fa-circle-dollar-to-slot', 'fas fa-circle-dot', 'far fa-fas fa-circle-dot', 'fas fa-circle-down', 'far fa-fas fa-circle-down', 'fas fa-circle-exclamation', 'fas fa-circle-h', 'fas fa-circle-half-stroke', 'fas fa-circle-info', 'fas fa-circle-left', 'far fa-fas fa-circle-left', 'fas fa-circle-minus', 'fas fa-circle-nodes', 'fas fa-circle-notch', 'fas fa-circle-pause', 'far fa-fas fa-circle-pause', 'fas fa-circle-play', 'far fa-fas fa-circle-play', 'fas fa-circle-plus', 'fas fa-circle-question', 'far fa-fas fa-circle-question', 'fas fa-circle-radiation', 'fas fa-circle-right', 'far fa-fas fa-circle-right', 'fas fa-circle-stop', 'far fa-fas fa-circle-stop', 'fas fa-circle-up', 'far fa-fas fa-circle-up', 'fas fa-circle-user', 'far fa-fas fa-circle-user', 'fas fa-circle-xmark', 'far fa-fas fa-circle-xmark', 'fas fa-city', 'fas fa-clapperboard', 'fas fa-clipboard', 'far fa-fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clipboard-question', 'fas fa-clipboard-user', 'fas fa-clock', 'far fa-fas fa-clock', 'fas fa-clock-rotate-left', 'fas fa-clone', 'far fa-fas fa-clone', 'fas fa-closed-captioning', 'far fa-fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-arrow-down', 'fas fa-cloud-arrow-up', 'fas fa-cloud-bolt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-showers-water', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fab fa-cloudflare', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-clover', 'fab fa-cmplid', 'fas fa-code', 'fas fa-code-branch', 'fas fa-code-commit', 'fas fa-code-compare', 'fas fa-code-fork', 'fas fa-code-merge', 'fas fa-code-pull-request', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coins', 'fas fa-colon-sign', 'fas fa-comment', 'far fa-fas fa-comment', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-nodes', 'fas fa-comment-slash', 'fas fa-comment-sms', 'fas fa-comments', 'far fa-fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-fas fa-compass', 'fas fa-compass-drafting', 'fas fa-compress', 'fas fa-computer', 'fas fa-computer-mouse', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-fas fa-copy', 'fas fa-copyright', 'far fa-fas fa-copyright', 'fab fa-cotton-bureau', 'fas fa-couch', 'fas fa-cow', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fas fa-credit-card', 'far fa-fas fa-credit-card', 'fab fa-critical-role', 'fas fa-crop', 'fas fa-crop-simple', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cruzeiro-sign', 'fab fa-css', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cubes-stacked', 'fab fa-cuttlefish', 'fas fa-d', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dart-lang', 'fab fa-dashcube', 'fas fa-database', 'fab fa-debian', 'fab fa-deezer', 'fas fa-delete-left', 'fab fa-delicious', 'fas fa-democrat', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-dev', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fab fa-dhl', 'fas fa-diagram-next', 'fas fa-diagram-predecessor', 'fas fa-diagram-project', 'fas fa-diagram-successor', 'fas fa-diamond', 'fas fa-diamond-turn-right', 'fab fa-diaspora', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fas fa-disease', 'fas fa-display', 'fas fa-divide', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dong-sign', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dove', 'fas fa-down-left-and-up-right-to-center', 'fas fa-down-long', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-dragon', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dropbox', 'fas fa-droplet', 'fas fa-droplet-slash', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fab fa-drupal', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fab fa-dyalog', 'fas fa-e', 'fas fa-ear-deaf', 'fas fa-ear-listen', 'fab fa-earlybirds', 'fas fa-earth-africa', 'fas fa-earth-americas', 'fas fa-earth-asia', 'fas fa-earth-europe', 'fas fa-earth-oceania', 'fab fa-ebay', 'fab fa-edge', 'fab fa-edge-legacy', 'fas fa-egg', 'fas fa-eject', 'fab fa-elementor', 'fas fa-elevator', 'fas fa-ellipsis', 'fas fa-ellipsis-vertical', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-fas fa-envelope', 'fas fa-envelope-circle-check', 'fas fa-envelope-open', 'far fa-fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelopes-bulk', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fas fa-ethernet', 'fab fa-etsy', 'fas fa-euro-sign', 'fab fa-evernote', 'fas fa-exclamation', 'fas fa-expand', 'fab fa-expeditedssl', 'fas fa-explosion', 'fas fa-eye', 'far fa-fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-low-vision', 'fas fa-eye-slash', 'far fa-fas fa-eye-slash', 'fas fa-f', 'fas fa-face-angry', 'far fa-fas fa-face-angry', 'fas fa-face-dizzy', 'far fa-fas fa-face-dizzy', 'fas fa-face-flushed', 'far fa-fas fa-face-flushed', 'fas fa-face-frown', 'far fa-fas fa-face-frown', 'fas fa-face-frown-open', 'far fa-fas fa-face-frown-open', 'fas fa-face-grimace', 'far fa-fas fa-face-grimace', 'fas fa-face-grin', 'far fa-fas fa-face-grin', 'fas fa-face-grin-beam', 'far fa-fas fa-face-grin-beam', 'fas fa-face-grin-beam-sweat', 'far fa-fas fa-face-grin-beam-sweat', 'fas fa-face-grin-hearts', 'far fa-fas fa-face-grin-hearts', 'fas fa-face-grin-squint', 'far fa-fas fa-face-grin-squint', 'fas fa-face-grin-squint-tears', 'far fa-fas fa-face-grin-squint-tears', 'fas fa-face-grin-stars', 'far fa-fas fa-face-grin-stars', 'fas fa-face-grin-tears', 'far fa-fas fa-face-grin-tears', 'fas fa-face-grin-tongue', 'far fa-fas fa-face-grin-tongue', 'fas fa-face-grin-tongue-squint', 'far fa-fas fa-face-grin-tongue-squint', 'fas fa-face-grin-tongue-wink', 'far fa-fas fa-face-grin-tongue-wink', 'fas fa-face-grin-wide', 'far fa-fas fa-face-grin-wide', 'fas fa-face-grin-wink', 'far fa-fas fa-face-grin-wink', 'fas fa-face-kiss', 'far fa-fas fa-face-kiss', 'fas fa-face-kiss-beam', 'far fa-fas fa-face-kiss-beam', 'fas fa-face-kiss-wink-heart', 'far fa-fas fa-face-kiss-wink-heart', 'fas fa-face-laugh', 'far fa-fas fa-face-laugh', 'fas fa-face-laugh-beam', 'far fa-fas fa-face-laugh-beam', 'fas fa-face-laugh-squint', 'far fa-fas fa-face-laugh-squint', 'fas fa-face-laugh-wink', 'far fa-fas fa-face-laugh-wink', 'fas fa-face-meh', 'far fa-fas fa-face-meh', 'fas fa-face-meh-blank', 'far fa-fas fa-face-meh-blank', 'fas fa-face-rolling-eyes', 'far fa-fas fa-face-rolling-eyes', 'fas fa-face-sad-cry', 'far fa-fas fa-face-sad-cry', 'fas fa-face-sad-tear', 'far fa-fas fa-face-sad-tear', 'fas fa-face-smile', 'far fa-fas fa-face-smile', 'fas fa-face-smile-beam', 'far fa-fas fa-face-smile-beam', 'fas fa-face-smile-wink', 'far fa-fas fa-face-smile-wink', 'fas fa-face-surprise', 'far fa-fas fa-face-surprise', 'fas fa-face-tired', 'far fa-fas fa-face-tired', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fas fa-fan', 'fab fa-fantasy-flight-games', 'fas fa-faucet', 'fas fa-faucet-drip', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-pointed', 'fab fa-fedex', 'fab fa-fedora', 'fas fa-ferry', 'fab fa-figma', 'fas fa-file', 'far fa-fas fa-file', 'fas fa-file-arrow-down', 'fas fa-file-arrow-up', 'fas fa-file-audio', 'far fa-fas fa-file-audio', 'fas fa-file-circle-check', 'fas fa-file-circle-exclamation', 'fas fa-file-circle-minus', 'fas fa-file-circle-plus', 'fas fa-file-circle-question', 'fas fa-file-circle-xmark', 'fas fa-file-code', 'far fa-fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-excel', 'far fa-fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-fragment', 'fas fa-file-half-dashed', 'fas fa-file-image', 'far fa-fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-lines', 'far fa-fas fa-file-lines', 'fas fa-file-medical', 'fas fa-file-pdf', 'far fa-fas fa-file-pdf', 'fas fa-file-pen', 'fas fa-file-powerpoint', 'far fa-fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-shield', 'fas fa-file-signature', 'fas fa-file-video', 'far fa-fas fa-file-video', 'fas fa-file-waveform', 'fas fa-file-word', 'far fa-fas fa-file-word', 'fas fa-file-zipper', 'far fa-fas fa-file-zipper', 'fab fa-files-pinwheel', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-filter-circle-dollar', 'fas fa-filter-circle-xmark', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-burner', 'fas fa-fire-extinguisher', 'fas fa-fire-flame-curved', 'fas fa-fire-flame-simple', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-fish-fins', 'fas fa-flag', 'far fa-fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flask-vial', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-floppy-disk', 'far fa-fas fa-floppy-disk', 'fas fa-florin-sign', 'fab fa-flutter', 'fab fa-fly', 'fas fa-folder', 'far fa-fas fa-folder', 'fas fa-folder-closed', 'far fa-fas fa-folder-closed', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-folder-tree', 'fas fa-font', 'fas fa-font-awesome', 'far fa-fas fa-font-awesome', 'fab fa-far fa-fas fa-font-awesome', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fas fa-forward-fast', 'fas fa-forward-step', 'fab fa-foursquare', 'fas fa-franc-sign', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fab fa-fulcrum', 'fas fa-futbol', 'far fa-fas fa-futbol', 'fas fa-g', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gauge', 'fas fa-gauge-high', 'fas fa-gauge-simple', 'fas fa-gauge-simple-high', 'fas fa-gavel', 'fas fa-gear', 'fas fa-gears', 'fas fa-gem', 'far fa-fas fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fab fa-git', 'fab fa-git-alt', 'fab fa-github', 'fab fa-github-alt', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-water', 'fas fa-glass-water-droplet', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fab fa-gofore', 'fab fa-golang', 'fas fa-golf-ball-tee', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-pay', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-scholar', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grip', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fas fa-group-arrows-rotate', 'fab fa-grunt', 'fas fa-guarani-sign', 'fab fa-guilded', 'fas fa-guitar', 'fab fa-gulp', 'fas fa-gun', 'fas fa-h', 'fab fa-hacker-news', 'fab fa-hackerrank', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand', 'far fa-fas fa-hand', 'fas fa-hand-back-fist', 'far fa-fas fa-hand-back-fist', 'fas fa-hand-dots', 'fas fa-hand-fist', 'fas fa-hand-holding', 'fas fa-hand-holding-dollar', 'fas fa-hand-holding-droplet', 'fas fa-hand-holding-hand', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-medical', 'fas fa-hand-lizard', 'far fa-fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-peace', 'far fa-fas fa-hand-peace', 'fas fa-hand-point-down', 'far fa-fas fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-fas fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-fas fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-fas fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-fas fa-hand-pointer', 'fas fa-hand-scissors', 'far fa-fas fa-hand-scissors', 'fas fa-hand-sparkles', 'fas fa-hand-spock', 'far fa-fas fa-hand-spock', 'fas fa-handcuffs', 'fas fa-hands', 'fas fa-hands-asl-interpreting', 'fas fa-hands-bound', 'fas fa-hands-bubbles', 'fas fa-hands-clapping', 'fas fa-hands-holding', 'fas fa-hands-holding-child', 'fas fa-hands-holding-circle', 'fas fa-hands-praying', 'fas fa-handshake', 'far fa-fas fa-handshake', 'fas fa-handshake-angle', 'fas fa-handshake-simple', 'fas fa-handshake-simple-slash', 'fas fa-handshake-slash', 'fas fa-hanukiah', 'fas fa-hard-drive', 'far fa-fas fa-hard-drive', 'fab fa-hashnode', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-head-side-cough', 'fas fa-head-side-cough-slash', 'fas fa-head-side-mask', 'fas fa-head-side-virus', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-simple', 'fas fa-headset', 'fas fa-heart', 'far fa-fas fa-heart', 'fas fa-heart-circle-bolt', 'fas fa-heart-circle-check', 'fas fa-heart-circle-exclamation', 'fas fa-heart-circle-minus', 'fas fa-heart-circle-plus', 'fas fa-heart-circle-xmark', 'fas fa-heart-crack', 'fas fa-heart-pulse', 'fas fa-helicopter', 'fas fa-helicopter-symbol', 'fas fa-helmet-safety', 'fas fa-helmet-un', 'fas fa-hexagon-nodes', 'fas fa-hexagon-nodes-bolt', 'fas fa-highlighter', 'fas fa-hill-avalanche', 'fas fa-hill-rockslide', 'fas fa-hippo', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hive', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'far fa-fas fa-hospital', 'fas fa-hospital-user', 'fas fa-hot-tub-person', 'fas fa-hotdog', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'far fa-fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house', 'fas fa-house-chimney', 'fas fa-house-chimney-crack', 'fas fa-house-chimney-medical', 'fas fa-house-chimney-user', 'fas fa-house-chimney-window', 'fas fa-house-circle-check', 'fas fa-house-circle-exclamation', 'fas fa-house-circle-xmark', 'fas fa-house-crack', 'fas fa-house-fire', 'fas fa-house-flag', 'fas fa-house-flood-water', 'fas fa-house-flood-water-circle-arrow-right', 'fas fa-house-laptop', 'fas fa-house-lock', 'fas fa-house-medical', 'fas fa-house-medical-circle-check', 'fas fa-house-medical-circle-exclamation', 'fas fa-house-medical-circle-xmark', 'fas fa-house-medical-flag', 'fas fa-house-signal', 'fas fa-house-tsunami', 'fas fa-house-user', 'fab fa-houzz', 'fas fa-hryvnia-sign', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-hurricane', 'fas fa-i', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'far fa-fas fa-id-badge', 'fas fa-id-card', 'far fa-fas fa-id-card', 'fas fa-id-card-clip', 'fab fa-ideal', 'fas fa-igloo', 'fas fa-image', 'far fa-fas fa-image', 'fas fa-image-portrait', 'fas fa-images', 'far fa-fas fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-indian-rupee-sign', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fab fa-instagram', 'fab fa-instalod', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fas fa-j', 'fas fa-jar', 'fas fa-jar-wheat', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fas fa-jet-fighter', 'fas fa-jet-fighter-up', 'fab fa-jira', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fab fa-js', 'fab fa-jsfiddle', 'fas fa-jug-detergent', 'fab fa-jxl', 'fas fa-k', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-fas fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kip-sign', 'fas fa-kit-medical', 'fas fa-kitchen-set', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-l', 'fas fa-land-mine-on', 'fas fa-landmark', 'fas fa-landmark-dome', 'fas fa-landmark-flag', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-file', 'fas fa-laptop-medical', 'fab fa-laravel', 'fas fa-lari-sign', 'fab fa-lastfm', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-left-long', 'fas fa-left-right', 'fas fa-lemon', 'far fa-fas fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fab fa-letterboxd', 'fas fa-life-ring', 'far fa-fas fa-life-ring', 'fas fa-lightbulb', 'far fa-fas fa-lightbulb', 'fab fa-line', 'fas fa-lines-leaning', 'fas fa-link', 'fas fa-link-slash', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-check', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-litecoin-sign', 'fas fa-location-arrow', 'fas fa-location-crosshairs', 'fas fa-location-dot', 'fas fa-location-pin', 'fas fa-location-pin-lock', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-locust', 'fas fa-lungs', 'fas fa-lungs-virus', 'fab fa-lyft', 'fas fa-m', 'fab fa-magento', 'fas fa-magnet', 'fas fa-magnifying-glass', 'fas fa-magnifying-glass-arrow-right', 'fas fa-magnifying-glass-chart', 'fas fa-magnifying-glass-dollar', 'fas fa-magnifying-glass-location', 'fas fa-magnifying-glass-minus', 'fas fa-magnifying-glass-plus', 'fab fa-mailchimp', 'fas fa-manat-sign', 'fab fa-mandalorian', 'fas fa-map', 'far fa-fas fa-map', 'fas fa-map-location', 'fas fa-map-location-dot', 'fas fa-map-pin', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-and-venus', 'fas fa-mars-and-venus-burst', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-right', 'fas fa-mars-stroke-up', 'fas fa-martini-glass', 'fas fa-martini-glass-citrus', 'fas fa-martini-glass-empty', 'fas fa-mask', 'fas fa-mask-face', 'fas fa-mask-ventilator', 'fas fa-masks-theater', 'fab fa-mastodon', 'fas fa-mattress-pillow', 'fab fa-maxcdn', 'fas fa-maximize', 'fab fa-mdb', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-memory', 'fab fa-mendeley', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-message', 'far fa-fas fa-message', 'fab fa-meta', 'fas fa-meteor', 'fab fa-microblog', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-lines', 'fas fa-microphone-lines-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-mill-sign', 'fas fa-minimize', 'fab fa-mintbit', 'fas fa-minus', 'fas fa-mitten', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-button', 'fas fa-mobile-retro', 'fas fa-mobile-screen', 'fas fa-mobile-screen-button', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-1', 'far fa-fas fa-money-bill-1', 'fas fa-money-bill-1-wave', 'fas fa-money-bill-transfer', 'fas fa-money-bill-trend-up', 'fas fa-money-bill-wave', 'fas fa-money-bill-wheat', 'fas fa-money-bills', 'fas fa-money-check', 'fas fa-money-check-dollar', 'fas fa-monument', 'fas fa-moon', 'far fa-fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-mosquito', 'fas fa-mosquito-net', 'fas fa-motorcycle', 'fas fa-mound', 'fas fa-mountain', 'fas fa-mountain-city', 'fas fa-mountain-sun', 'fas fa-mug-hot', 'fas fa-mug-saucer', 'fas fa-music', 'fas fa-n', 'fas fa-naira-sign', 'fab fa-napster', 'fab fa-neos', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-fas fa-newspaper', 'fab fa-nfc-directional', 'fab fa-nfc-symbol', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notdef', 'fas fa-note-sticky', 'far fa-fas fa-note-sticky', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-o', 'fas fa-object-group', 'far fa-fas fa-object-group', 'fas fa-object-ungroup', 'far fa-fas fa-object-ungroup', 'fab fa-octopus-deploy', 'fab fa-odnoklassniki', 'fab fa-odysee', 'fas fa-oil-can', 'fas fa-oil-well', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opensuse', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fas fa-otter', 'fas fa-outdent', 'fas fa-p', 'fab fa-padlet', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-pager', 'fas fa-paint-roller', 'fas fa-paintbrush', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-panorama', 'fas fa-paper-plane', 'far fa-fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-passport', 'fas fa-paste', 'far fa-fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-clip', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-ruler', 'fas fa-pen-to-square', 'far fa-fas fa-pen-to-square', 'fas fa-pencil', 'fas fa-people-arrows', 'fas fa-people-carry-box', 'fas fa-people-group', 'fas fa-people-line', 'fas fa-people-pulling', 'fas fa-people-robbery', 'fas fa-people-roof', 'fas fa-pepper-hot', 'fab fa-perbyte', 'fas fa-percent', 'fab fa-periscope', 'fas fa-person', 'fas fa-person-arrow-down-to-line', 'fas fa-person-arrow-up-from-line', 'fas fa-person-biking', 'fas fa-person-booth', 'fas fa-person-breastfeeding', 'fas fa-person-burst', 'fas fa-person-cane', 'fas fa-person-chalkboard', 'fas fa-person-circle-check', 'fas fa-person-circle-exclamation', 'fas fa-person-circle-minus', 'fas fa-person-circle-plus', 'fas fa-person-circle-question', 'fas fa-person-circle-xmark', 'fas fa-person-digging', 'fas fa-person-dots-from-line', 'fas fa-person-dress', 'fas fa-person-dress-burst', 'fas fa-person-drowning', 'fas fa-person-falling', 'fas fa-person-falling-burst', 'fas fa-person-half-dress', 'fas fa-person-harassing', 'fas fa-person-hiking', 'fas fa-person-military-pointing', 'fas fa-person-military-rifle', 'fas fa-person-military-to-person', 'fas fa-person-praying', 'fas fa-person-pregnant', 'fas fa-person-rays', 'fas fa-person-rifle', 'fas fa-person-running', 'fas fa-person-shelter', 'fas fa-person-skating', 'fas fa-person-skiing', 'fas fa-person-skiing-nordic', 'fas fa-person-snowboarding', 'fas fa-person-swimming', 'fas fa-person-through-window', 'fas fa-person-walking', 'fas fa-person-walking-arrow-loop-left', 'fas fa-person-walking-arrow-right', 'fas fa-person-walking-dashed-line-arrow-right', 'fas fa-person-walking-luggage', 'fas fa-person-walking-with-cane', 'fas fa-peseta-sign', 'fas fa-peso-sign', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-flip', 'fas fa-phone-slash', 'fas fa-phone-volume', 'fas fa-photo-film', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pix', 'fab fa-pixiv', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-circle-check', 'fas fa-plane-circle-exclamation', 'fas fa-plane-circle-xmark', 'fas fa-plane-departure', 'fas fa-plane-lock', 'fas fa-plane-slash', 'fas fa-plane-up', 'fas fa-plant-wilt', 'fas fa-plate-wheat', 'fas fa-play', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plug-circle-bolt', 'fas fa-plug-circle-check', 'fas fa-plug-circle-exclamation', 'fas fa-plug-circle-minus', 'fas fa-plug-circle-plus', 'fas fa-plug-circle-xmark', 'fas fa-plus', 'fas fa-plus-minus', 'fas fa-podcast', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-power-off', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-medical', 'fas fa-print', 'fab fa-product-hunt', 'fas fa-pump-medical', 'fas fa-pump-soap', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fas fa-q', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-r', 'fab fa-r-project', 'fas fa-radiation', 'fas fa-radio', 'fas fa-rainbow', 'fas fa-ranking-star', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-rectangle-ad', 'fas fa-rectangle-list', 'far fa-fas fa-rectangle-list', 'fas fa-rectangle-xmark', 'far fa-fas fa-rectangle-xmark', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-redhat', 'fas fa-registered', 'far fa-fas fa-registered', 'fab fa-renren', 'fas fa-repeat', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fas fa-republican', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-restroom', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-right-from-bracket', 'fas fa-right-left', 'fas fa-right-long', 'fas fa-right-to-bracket', 'fas fa-ring', 'fas fa-road', 'fas fa-road-barrier', 'fas fa-road-bridge', 'fas fa-road-circle-check', 'fas fa-road-circle-exclamation', 'fas fa-road-circle-xmark', 'fas fa-road-lock', 'fas fa-road-spikes', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-rotate', 'fas fa-rotate-left', 'fas fa-rotate-right', 'fas fa-route', 'fas fa-rss', 'fas fa-ruble-sign', 'fas fa-rug', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-rupiah-sign', 'fab fa-rust', 'fas fa-s', 'fas fa-sack-dollar', 'fas fa-sack-xmark', 'fab fa-safari', 'fas fa-sailboat', 'fab fa-salesforce', 'fab fa-sass', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-scale-balanced', 'fas fa-scale-unbalanced', 'fas fa-scale-unbalanced-flip', 'fab fa-schlix', 'fas fa-school', 'fas fa-school-circle-check', 'fas fa-school-circle-exclamation', 'fas fa-school-circle-xmark', 'fas fa-school-flag', 'fas fa-school-lock', 'fas fa-scissors', 'fab fa-screenpal', 'fas fa-screwdriver', 'fas fa-screwdriver-wrench', 'fab fa-scribd', 'fas fa-scroll', 'fas fa-scroll-torah', 'fas fa-sd-card', 'fab fa-searchengin', 'fas fa-section', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-from-square', 'far fa-fas fa-share-from-square', 'fas fa-share-nodes', 'fas fa-sheet-plastic', 'fas fa-shekel-sign', 'fas fa-shield', 'fas fa-shield-cat', 'fas fa-shield-dog', 'fas fa-shield-halved', 'fas fa-shield-heart', 'fas fa-shield-virus', 'fas fa-ship', 'fas fa-shirt', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fab fa-shoelace', 'fas fa-shop', 'fas fa-shop-lock', 'fas fa-shop-slash', 'fab fa-shopify', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shrimp', 'fas fa-shuffle', 'fas fa-shuttle-space', 'fas fa-sign-hanging', 'fas fa-signal', 'fab fa-signal-messenger', 'fas fa-signature', 'fas fa-signs-post', 'fas fa-sim-card', 'fab fa-simplybuilt', 'fas fa-sink', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fab fa-sitrox', 'fab fa-sketch', 'fas fa-skull', 'fas fa-skull-crossbones', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders', 'fab fa-slideshare', 'fas fa-smog', 'fas fa-smoking', 'fab fa-snapchat', 'fas fa-snowflake', 'far fa-fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-soap', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-down', 'fas fa-sort-up', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fas fa-spa', 'fab fa-space-awesome', 'fas fa-spaghetti-monster-flying', 'fab fa-speakap', 'fab fa-speaker-deck', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spoon', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-spray-can-sparkles', 'fas fa-square', 'far fa-fas fa-square', 'fas fa-square-arrow-up-right', 'fab fa-square-behance', 'fas fa-square-binary', 'fab fa-square-bluesky', 'fas fa-square-caret-down', 'far fa-fas fa-square-caret-down', 'fas fa-square-caret-left', 'far fa-fas fa-square-caret-left', 'fas fa-square-caret-right', 'far fa-fas fa-square-caret-right', 'fas fa-square-caret-up', 'far fa-fas fa-square-caret-up', 'fas fa-square-check', 'far fa-fas fa-square-check', 'fab fa-square-dribbble', 'fas fa-square-envelope', 'fab fa-square-facebook', 'fab fa-square-font-awesome', 'fab fa-square-font-awesome-stroke', 'fas fa-square-full', 'far fa-fas fa-square-full', 'fab fa-square-git', 'fab fa-square-github', 'fab fa-square-gitlab', 'fab fa-square-google-plus', 'fas fa-square-h', 'fab fa-square-hacker-news', 'fab fa-square-instagram', 'fab fa-square-js', 'fab fa-square-lastfm', 'fab fa-square-letterboxd', 'fas fa-square-minus', 'far fa-fas fa-square-minus', 'fas fa-square-nfi', 'fab fa-square-odnoklassniki', 'fas fa-square-parking', 'fas fa-square-pen', 'fas fa-square-person-confined', 'fas fa-square-phone', 'fas fa-square-phone-flip', 'fab fa-square-pied-piper', 'fab fa-square-pinterest', 'fas fa-square-plus', 'far fa-fas fa-square-plus', 'fas fa-square-poll-horizontal', 'fas fa-square-poll-vertical', 'fab fa-square-reddit', 'fas fa-square-root-variable', 'fas fa-square-rss', 'fas fa-square-share-nodes', 'fab fa-square-snapchat', 'fab fa-square-steam', 'fab fa-square-threads', 'fab fa-square-tumblr', 'fab fa-square-twitter', 'fas fa-square-up-right', 'fab fa-square-upwork', 'fab fa-square-viadeo', 'fab fa-square-vimeo', 'fas fa-square-virus', 'fab fa-square-web-awesome', 'fab fa-square-web-awesome-stroke', 'fab fa-square-whatsapp', 'fab fa-square-x-twitter', 'fab fa-square-xing', 'fas fa-square-xmark', 'fab fa-square-youtube', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fas fa-staff-snake', 'fas fa-stairs', 'fas fa-stamp', 'fas fa-stapler', 'fas fa-star', 'far fa-fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-fas fa-star-half', 'fas fa-star-half-stroke', 'far fa-fas fa-star-half-stroke', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-symbol', 'fas fa-sterling-sign', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-stop', 'fas fa-stopwatch', 'fas fa-stopwatch-20', 'fas fa-store', 'fas fa-store-slash', 'fab fa-strava', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-stubber', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-suitcase', 'fas fa-suitcase-medical', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-fas fa-sun', 'fas fa-sun-plant-wilt', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fab fa-suse', 'fas fa-swatchbook', 'fab fa-swift', 'fab fa-symfony', 'fas fa-synagogue', 'fas fa-syringe', 'fas fa-t', 'fas fa-table', 'fas fa-table-cells', 'fas fa-table-cells-column-lock', 'fas fa-table-cells-large', 'fas fa-table-cells-row-lock', 'fas fa-table-cells-row-unlock', 'fas fa-table-columns', 'fas fa-table-list', 'fas fa-table-tennis-paddle-ball', 'fas fa-tablet', 'fas fa-tablet-button', 'fas fa-tablet-screen-button', 'fas fa-tablets', 'fas fa-tachograph-digital', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tarp', 'fas fa-tarp-droplet', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fas fa-temperature-arrow-down', 'fas fa-temperature-arrow-up', 'fas fa-temperature-empty', 'fas fa-temperature-full', 'fas fa-temperature-half', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-temperature-quarter', 'fas fa-temperature-three-quarters', 'fab fa-tencent-weibo', 'fas fa-tenge-sign', 'fas fa-tent', 'fas fa-tent-arrow-down-to-line', 'fas fa-tent-arrow-left-right', 'fas fa-tent-arrow-turn-left', 'fas fa-tent-arrows-down', 'fas fa-tents', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-slash', 'fas fa-text-width', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fab fa-think-peaks', 'fab fa-threads', 'fas fa-thumbs-down', 'far fa-fas fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-thumbtack-slash', 'fas fa-ticket', 'fas fa-ticket-simple', 'fab fa-tiktok', 'fas fa-timeline', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toilet-paper-slash', 'fas fa-toilet-portable', 'fas fa-toilets-portable', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torii-gate', 'fas fa-tornado', 'fas fa-tower-broadcast', 'fas fa-tower-cell', 'fas fa-tower-observation', 'fas fa-tractor', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-train-subway', 'fas fa-train-tram', 'fas fa-transgender', 'fas fa-trash', 'fas fa-trash-arrow-up', 'fas fa-trash-can', 'far fa-fas fa-trash-can', 'fas fa-trash-can-arrow-up', 'fas fa-tree', 'fas fa-tree-city', 'fab fa-trello', 'fas fa-triangle-exclamation', 'fas fa-trophy', 'fas fa-trowel', 'fas fa-trowel-bricks', 'fas fa-truck', 'fas fa-truck-arrow-right', 'fas fa-truck-droplet', 'fas fa-truck-fast', 'fas fa-truck-field', 'fas fa-truck-field-un', 'fas fa-truck-front', 'fas fa-truck-medical', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-truck-plane', 'fas fa-truck-ramp-box', 'fas fa-tty', 'fab fa-tumblr', 'fas fa-turkish-lira-sign', 'fas fa-turn-down', 'fas fa-turn-up', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-typo3', 'fas fa-u', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fab fa-uncharted', 'fas fa-underline', 'fab fa-uniregistry', 'fab fa-unity', 'fas fa-universal-access', 'fas fa-unlock', 'fas fa-unlock-keyhole', 'fab fa-unsplash', 'fab fa-untappd', 'fas fa-up-down', 'fas fa-up-down-left-right', 'fas fa-up-long', 'fas fa-up-right-and-down-left-from-center', 'fas fa-up-right-from-square', 'fas fa-upload', 'fab fa-ups', 'fab fa-upwork', 'fab fa-usb', 'fas fa-user', 'far fa-fas fa-user', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-clock', 'fas fa-user-doctor', 'fas fa-user-gear', 'fas fa-user-graduate', 'fas fa-user-group', 'fas fa-user-injured', 'fas fa-user-large', 'fas fa-user-large-slash', 'fas fa-user-lock', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-pen', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-xmark', 'fas fa-users', 'fas fa-users-between-lines', 'fas fa-users-gear', 'fas fa-users-line', 'fas fa-users-rays', 'fas fa-users-rectangle', 'fas fa-users-slash', 'fas fa-users-viewfinder', 'fab fa-usps', 'fab fa-ussunnah', 'fas fa-utensils', 'fas fa-v', 'fab fa-vaadin', 'fas fa-van-shuttle', 'fas fa-vault', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vest', 'fas fa-vest-patches', 'fab fa-viacoin', 'fab fa-viadeo', 'fas fa-vial', 'fas fa-vial-circle-check', 'fas fa-vial-virus', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-v', 'fab fa-vine', 'fas fa-virus', 'fas fa-virus-covid', 'fas fa-virus-covid-slash', 'fas fa-virus-slash', 'fas fa-viruses', 'fab fa-vk', 'fab fa-vnv', 'fas fa-voicemail', 'fas fa-volcano', 'fas fa-volleyball', 'fas fa-volume-high', 'fas fa-volume-low', 'fas fa-volume-off', 'fas fa-volume-xmark', 'fas fa-vr-cardboard', 'fab fa-vuejs', 'fas fa-w', 'fas fa-walkie-talkie', 'fas fa-wallet', 'fas fa-wand-magic', 'fas fa-wand-magic-sparkles', 'fas fa-wand-sparkles', 'fas fa-warehouse', 'fab fa-watchman-monitoring', 'fas fa-water', 'fas fa-water-ladder', 'fas fa-wave-square', 'fab fa-waze', 'fas fa-web-awesome', 'fab fa-fas fa-web-awesome', 'fab fa-webflow', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight-hanging', 'fas fa-weight-scale', 'fab fa-weixin', 'fab fa-whatsapp', 'fas fa-wheat-awn', 'fas fa-wheat-awn-circle-exclamation', 'fas fa-wheelchair', 'fas fa-wheelchair-move', 'fas fa-whiskey-glass', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-wind', 'fas fa-window-maximize', 'far fa-fas fa-window-maximize', 'fas fa-window-minimize', 'far fa-fas fa-window-minimize', 'fas fa-window-restore', 'far fa-fas fa-window-restore', 'fab fa-windows', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-empty', 'fab fa-wirsindhandwerk', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wodu', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fas fa-worm', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fas fa-wrench', 'fas fa-x', 'fas fa-x-ray', 'fab fa-x-twitter', 'fab fa-xbox', 'fab fa-xing', 'fas fa-xmark', 'fas fa-xmarks-lines', 'fas fa-y', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fas fa-z', 'fab fa-zhihu' );
	}

}
3 3
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -1,1 +1,1 @@
 block discarded – undo
1
-<?php
/**
 * Redux Icon Select Font Awesome 6 Free icon array.
 *
 * @package Redux
 * @author  Kevin Provance <[email protected]>
 */

defined( 'ABSPATH' ) || exit;

if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {

	/**
	 * Array of free Font Awesome 6 icons.
	 *
	 * @return array
	 */
	function redux_icon_select_fa_6_free(): array {
		return array( 'fas fa-0', 'fas fa-1', 'fas fa-2', 'fas fa-3', 'fas fa-4', 'fas fa-5', 'fas fa-6', 'fas fa-7', 'fas fa-8', 'fas fa-9', 'fab fa-42-group', 'fab fa-500px', 'fas fa-a', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-address-book', 'far fa-fas fa-address-book', 'fas fa-address-card', 'far fa-fas fa-address-card', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fas fa-anchor', 'fas fa-anchor-circle-check', 'fas fa-anchor-circle-exclamation', 'fas fa-anchor-circle-xmark', 'fas fa-anchor-lock', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angles-down', 'fas fa-angles-left', 'fas fa-angles-right', 'fas fa-angles-up', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fas fa-apple-whole', 'fas fa-archway', 'fas fa-arrow-down', 'fas fa-arrow-down-1-9', 'fas fa-arrow-down-9-1', 'fas fa-arrow-down-a-z', 'fas fa-arrow-down-long', 'fas fa-arrow-down-short-wide', 'fas fa-arrow-down-up-across-line', 'fas fa-arrow-down-up-lock', 'fas fa-arrow-down-wide-short', 'fas fa-arrow-down-z-a', 'fas fa-arrow-left', 'fas fa-arrow-left-long', 'fas fa-arrow-pointer', 'fas fa-arrow-right', 'fas fa-arrow-right-arrow-left', 'fas fa-arrow-right-from-bracket', 'fas fa-arrow-right-long', 'fas fa-arrow-right-to-bracket', 'fas fa-arrow-right-to-city', 'fas fa-arrow-rotate-left', 'fas fa-arrow-rotate-right', 'fas fa-arrow-trend-down', 'fas fa-arrow-trend-up', 'fas fa-arrow-turn-down', 'fas fa-arrow-turn-up', 'fas fa-arrow-up', 'fas fa-arrow-up-1-9', 'fas fa-arrow-up-9-1', 'fas fa-arrow-up-a-z', 'fas fa-arrow-up-from-bracket', 'fas fa-arrow-up-from-ground-water', 'fas fa-arrow-up-from-water-pump', 'fas fa-arrow-up-long', 'fas fa-arrow-up-right-dots', 'fas fa-arrow-up-right-from-square', 'fas fa-arrow-up-short-wide', 'fas fa-arrow-up-wide-short', 'fas fa-arrow-up-z-a', 'fas fa-arrows-down-to-line', 'fas fa-arrows-down-to-people', 'fas fa-arrows-left-right', 'fas fa-arrows-left-right-to-line', 'fas fa-arrows-rotate', 'fas fa-arrows-spin', 'fas fa-arrows-split-up-and-left', 'fas fa-arrows-to-circle', 'fas fa-arrows-to-dot', 'fas fa-arrows-to-eye', 'fas fa-arrows-turn-right', 'fas fa-arrows-turn-to-dots', 'fas fa-arrows-up-down', 'fas fa-arrows-up-down-left-right', 'fas fa-arrows-up-to-line', 'fab fa-artstation', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fab fa-atlassian', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fas fa-austral-sign', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-b', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backward', 'fas fa-backward-fast', 'fas fa-backward-step', 'fas fa-bacon', 'fas fa-bacteria', 'fas fa-bacterium', 'fas fa-bag-shopping', 'fas fa-bahai', 'fas fa-baht-sign', 'fas fa-ban', 'fas fa-ban-smoking', 'fas fa-bandage', 'fab fa-bandcamp', 'fas fa-bangladeshi-taka-sign', 'fas fa-barcode', 'fas fa-bars', 'fas fa-bars-progress', 'fas fa-bars-staggered', 'fas fa-baseball', 'fas fa-baseball-bat-ball', 'fas fa-basket-shopping', 'fas fa-basketball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fab fa-battle-net', 'fas fa-bed', 'fas fa-bed-pulse', 'fas fa-beer-mug-empty', 'fab fa-behance', 'fas fa-bell', 'far fa-fas fa-bell', 'fas fa-bell-concierge', 'fas fa-bell-slash', 'far fa-fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bicycle', 'fab fa-bilibili', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-biohazard', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fas fa-bitcoin-sign', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blog', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluesky', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bolt-lightning', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-atlas', 'fas fa-book-bible', 'fas fa-book-bookmark', 'fas fa-book-journal-whills', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-open-reader', 'fas fa-book-quran', 'fas fa-book-skull', 'fas fa-book-tanakh', 'fas fa-bookmark', 'far fa-fas fa-bookmark', 'fab fa-bootstrap', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-top-left', 'fas fa-bore-hole', 'fab fa-bots', 'fas fa-bottle-droplet', 'fas fa-bottle-water', 'fas fa-bowl-food', 'fas fa-bowl-rice', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-archive', 'fas fa-box-open', 'fas fa-box-tissue', 'fas fa-boxes-packing', 'fas fa-boxes-stacked', 'fas fa-braille', 'fas fa-brain', 'fab fa-brave', 'fab fa-brave-reverse', 'fas fa-brazilian-real-sign', 'fas fa-bread-slice', 'fas fa-bridge', 'fas fa-bridge-circle-check', 'fas fa-bridge-circle-exclamation', 'fas fa-bridge-circle-xmark', 'fas fa-bridge-lock', 'fas fa-bridge-water', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broom', 'fas fa-broom-ball', 'fas fa-brush', 'fab fa-btc', 'fas fa-bucket', 'fab fa-buffer', 'fas fa-bug', 'fas fa-bug-slash', 'fas fa-bugs', 'fas fa-building', 'far fa-fas fa-building', 'fas fa-building-circle-arrow-right', 'fas fa-building-circle-check', 'fas fa-building-circle-exclamation', 'fas fa-building-circle-xmark', 'fas fa-building-columns', 'fas fa-building-flag', 'fas fa-building-lock', 'fas fa-building-ngo', 'fas fa-building-shield', 'fas fa-building-un', 'fas fa-building-user', 'fas fa-building-wheat', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burger', 'fab fa-buromobelexperte', 'fas fa-burst', 'fas fa-bus', 'fas fa-bus-simple', 'fas fa-business-time', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fas fa-c', 'fas fa-cable-car', 'fas fa-cake-candles', 'fas fa-calculator', 'fas fa-calendar', 'far fa-fas fa-calendar', 'fas fa-calendar-check', 'far fa-fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-days', 'far fa-fas fa-calendar-days', 'fas fa-calendar-minus', 'far fa-fas fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-fas fa-calendar-plus', 'fas fa-calendar-week', 'fas fa-calendar-xmark', 'far fa-fas fa-calendar-xmark', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-camera-rotate', 'fas fa-campground', 'fab fa-canadian-maple-leaf', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-battery', 'fas fa-car-burst', 'fas fa-car-on', 'fas fa-car-rear', 'fas fa-car-side', 'fas fa-car-tunnel', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-flatbed', 'fas fa-cart-flatbed-suitcase', 'fas fa-cart-plus', 'fas fa-cart-shopping', 'fas fa-cash-register', 'fas fa-cat', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fas fa-cedi-sign', 'fas fa-cent-sign', 'fab fa-centercode', 'fab fa-centos', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-user', 'fas fa-champagne-glasses', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-fas fa-chart-bar', 'fas fa-chart-column', 'fas fa-chart-diagram', 'fas fa-chart-gantt', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-chart-simple', 'fas fa-check', 'fas fa-check-double', 'fas fa-check-to-slot', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'far fa-fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'far fa-fas fa-chess-king', 'fas fa-chess-knight', 'far fa-fas fa-chess-knight', 'fas fa-chess-pawn', 'far fa-fas fa-chess-pawn', 'fas fa-chess-queen', 'far fa-fas fa-chess-queen', 'fas fa-chess-rook', 'far fa-fas fa-chess-rook', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-child-combatant', 'fas fa-child-dress', 'fas fa-child-reaching', 'fas fa-children', 'fab fa-chrome', 'fab fa-chromecast', 'fas fa-church', 'fas fa-circle', 'far fa-fas fa-circle', 'fas fa-circle-arrow-down', 'fas fa-circle-arrow-left', 'fas fa-circle-arrow-right', 'fas fa-circle-arrow-up', 'fas fa-circle-check', 'far fa-fas fa-circle-check', 'fas fa-circle-chevron-down', 'fas fa-circle-chevron-left', 'fas fa-circle-chevron-right', 'fas fa-circle-chevron-up', 'fas fa-circle-dollar-to-slot', 'fas fa-circle-dot', 'far fa-fas fa-circle-dot', 'fas fa-circle-down', 'far fa-fas fa-circle-down', 'fas fa-circle-exclamation', 'fas fa-circle-h', 'fas fa-circle-half-stroke', 'fas fa-circle-info', 'fas fa-circle-left', 'far fa-fas fa-circle-left', 'fas fa-circle-minus', 'fas fa-circle-nodes', 'fas fa-circle-notch', 'fas fa-circle-pause', 'far fa-fas fa-circle-pause', 'fas fa-circle-play', 'far fa-fas fa-circle-play', 'fas fa-circle-plus', 'fas fa-circle-question', 'far fa-fas fa-circle-question', 'fas fa-circle-radiation', 'fas fa-circle-right', 'far fa-fas fa-circle-right', 'fas fa-circle-stop', 'far fa-fas fa-circle-stop', 'fas fa-circle-up', 'far fa-fas fa-circle-up', 'fas fa-circle-user', 'far fa-fas fa-circle-user', 'fas fa-circle-xmark', 'far fa-fas fa-circle-xmark', 'fas fa-city', 'fas fa-clapperboard', 'fas fa-clipboard', 'far fa-fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clipboard-question', 'fas fa-clipboard-user', 'fas fa-clock', 'far fa-fas fa-clock', 'fas fa-clock-rotate-left', 'fas fa-clone', 'far fa-fas fa-clone', 'fas fa-closed-captioning', 'far fa-fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-arrow-down', 'fas fa-cloud-arrow-up', 'fas fa-cloud-bolt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-showers-water', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fab fa-cloudflare', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-clover', 'fab fa-cmplid', 'fas fa-code', 'fas fa-code-branch', 'fas fa-code-commit', 'fas fa-code-compare', 'fas fa-code-fork', 'fas fa-code-merge', 'fas fa-code-pull-request', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coins', 'fas fa-colon-sign', 'fas fa-comment', 'far fa-fas fa-comment', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-nodes', 'fas fa-comment-slash', 'fas fa-comment-sms', 'fas fa-comments', 'far fa-fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-fas fa-compass', 'fas fa-compass-drafting', 'fas fa-compress', 'fas fa-computer', 'fas fa-computer-mouse', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-fas fa-copy', 'fas fa-copyright', 'far fa-fas fa-copyright', 'fab fa-cotton-bureau', 'fas fa-couch', 'fas fa-cow', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fas fa-credit-card', 'far fa-fas fa-credit-card', 'fab fa-critical-role', 'fas fa-crop', 'fas fa-crop-simple', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cruzeiro-sign', 'fab fa-css', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cubes-stacked', 'fab fa-cuttlefish', 'fas fa-d', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dart-lang', 'fab fa-dashcube', 'fas fa-database', 'fab fa-debian', 'fab fa-deezer', 'fas fa-delete-left', 'fab fa-delicious', 'fas fa-democrat', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-dev', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fab fa-dhl', 'fas fa-diagram-next', 'fas fa-diagram-predecessor', 'fas fa-diagram-project', 'fas fa-diagram-successor', 'fas fa-diamond', 'fas fa-diamond-turn-right', 'fab fa-diaspora', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fas fa-disease', 'fas fa-display', 'fas fa-divide', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dong-sign', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dove', 'fas fa-down-left-and-up-right-to-center', 'fas fa-down-long', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-dragon', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dropbox', 'fas fa-droplet', 'fas fa-droplet-slash', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fab fa-drupal', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fab fa-dyalog', 'fas fa-e', 'fas fa-ear-deaf', 'fas fa-ear-listen', 'fab fa-earlybirds', 'fas fa-earth-africa', 'fas fa-earth-americas', 'fas fa-earth-asia', 'fas fa-earth-europe', 'fas fa-earth-oceania', 'fab fa-ebay', 'fab fa-edge', 'fab fa-edge-legacy', 'fas fa-egg', 'fas fa-eject', 'fab fa-elementor', 'fas fa-elevator', 'fas fa-ellipsis', 'fas fa-ellipsis-vertical', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-fas fa-envelope', 'fas fa-envelope-circle-check', 'fas fa-envelope-open', 'far fa-fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelopes-bulk', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fas fa-ethernet', 'fab fa-etsy', 'fas fa-euro-sign', 'fab fa-evernote', 'fas fa-exclamation', 'fas fa-expand', 'fab fa-expeditedssl', 'fas fa-explosion', 'fas fa-eye', 'far fa-fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-low-vision', 'fas fa-eye-slash', 'far fa-fas fa-eye-slash', 'fas fa-f', 'fas fa-face-angry', 'far fa-fas fa-face-angry', 'fas fa-face-dizzy', 'far fa-fas fa-face-dizzy', 'fas fa-face-flushed', 'far fa-fas fa-face-flushed', 'fas fa-face-frown', 'far fa-fas fa-face-frown', 'fas fa-face-frown-open', 'far fa-fas fa-face-frown-open', 'fas fa-face-grimace', 'far fa-fas fa-face-grimace', 'fas fa-face-grin', 'far fa-fas fa-face-grin', 'fas fa-face-grin-beam', 'far fa-fas fa-face-grin-beam', 'fas fa-face-grin-beam-sweat', 'far fa-fas fa-face-grin-beam-sweat', 'fas fa-face-grin-hearts', 'far fa-fas fa-face-grin-hearts', 'fas fa-face-grin-squint', 'far fa-fas fa-face-grin-squint', 'fas fa-face-grin-squint-tears', 'far fa-fas fa-face-grin-squint-tears', 'fas fa-face-grin-stars', 'far fa-fas fa-face-grin-stars', 'fas fa-face-grin-tears', 'far fa-fas fa-face-grin-tears', 'fas fa-face-grin-tongue', 'far fa-fas fa-face-grin-tongue', 'fas fa-face-grin-tongue-squint', 'far fa-fas fa-face-grin-tongue-squint', 'fas fa-face-grin-tongue-wink', 'far fa-fas fa-face-grin-tongue-wink', 'fas fa-face-grin-wide', 'far fa-fas fa-face-grin-wide', 'fas fa-face-grin-wink', 'far fa-fas fa-face-grin-wink', 'fas fa-face-kiss', 'far fa-fas fa-face-kiss', 'fas fa-face-kiss-beam', 'far fa-fas fa-face-kiss-beam', 'fas fa-face-kiss-wink-heart', 'far fa-fas fa-face-kiss-wink-heart', 'fas fa-face-laugh', 'far fa-fas fa-face-laugh', 'fas fa-face-laugh-beam', 'far fa-fas fa-face-laugh-beam', 'fas fa-face-laugh-squint', 'far fa-fas fa-face-laugh-squint', 'fas fa-face-laugh-wink', 'far fa-fas fa-face-laugh-wink', 'fas fa-face-meh', 'far fa-fas fa-face-meh', 'fas fa-face-meh-blank', 'far fa-fas fa-face-meh-blank', 'fas fa-face-rolling-eyes', 'far fa-fas fa-face-rolling-eyes', 'fas fa-face-sad-cry', 'far fa-fas fa-face-sad-cry', 'fas fa-face-sad-tear', 'far fa-fas fa-face-sad-tear', 'fas fa-face-smile', 'far fa-fas fa-face-smile', 'fas fa-face-smile-beam', 'far fa-fas fa-face-smile-beam', 'fas fa-face-smile-wink', 'far fa-fas fa-face-smile-wink', 'fas fa-face-surprise', 'far fa-fas fa-face-surprise', 'fas fa-face-tired', 'far fa-fas fa-face-tired', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fas fa-fan', 'fab fa-fantasy-flight-games', 'fas fa-faucet', 'fas fa-faucet-drip', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-pointed', 'fab fa-fedex', 'fab fa-fedora', 'fas fa-ferry', 'fab fa-figma', 'fas fa-file', 'far fa-fas fa-file', 'fas fa-file-arrow-down', 'fas fa-file-arrow-up', 'fas fa-file-audio', 'far fa-fas fa-file-audio', 'fas fa-file-circle-check', 'fas fa-file-circle-exclamation', 'fas fa-file-circle-minus', 'fas fa-file-circle-plus', 'fas fa-file-circle-question', 'fas fa-file-circle-xmark', 'fas fa-file-code', 'far fa-fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-excel', 'far fa-fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-fragment', 'fas fa-file-half-dashed', 'fas fa-file-image', 'far fa-fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-lines', 'far fa-fas fa-file-lines', 'fas fa-file-medical', 'fas fa-file-pdf', 'far fa-fas fa-file-pdf', 'fas fa-file-pen', 'fas fa-file-powerpoint', 'far fa-fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-shield', 'fas fa-file-signature', 'fas fa-file-video', 'far fa-fas fa-file-video', 'fas fa-file-waveform', 'fas fa-file-word', 'far fa-fas fa-file-word', 'fas fa-file-zipper', 'far fa-fas fa-file-zipper', 'fab fa-files-pinwheel', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-filter-circle-dollar', 'fas fa-filter-circle-xmark', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-burner', 'fas fa-fire-extinguisher', 'fas fa-fire-flame-curved', 'fas fa-fire-flame-simple', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-fish-fins', 'fas fa-flag', 'far fa-fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flask-vial', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-floppy-disk', 'far fa-fas fa-floppy-disk', 'fas fa-florin-sign', 'fab fa-flutter', 'fab fa-fly', 'fas fa-folder', 'far fa-fas fa-folder', 'fas fa-folder-closed', 'far fa-fas fa-folder-closed', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-folder-tree', 'fas fa-font', 'fas fa-font-awesome', 'far fa-fas fa-font-awesome', 'fab fa-far fa-fas fa-font-awesome', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fas fa-forward-fast', 'fas fa-forward-step', 'fab fa-foursquare', 'fas fa-franc-sign', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fab fa-fulcrum', 'fas fa-futbol', 'far fa-fas fa-futbol', 'fas fa-g', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gauge', 'fas fa-gauge-high', 'fas fa-gauge-simple', 'fas fa-gauge-simple-high', 'fas fa-gavel', 'fas fa-gear', 'fas fa-gears', 'fas fa-gem', 'far fa-fas fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fab fa-git', 'fab fa-git-alt', 'fab fa-github', 'fab fa-github-alt', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-water', 'fas fa-glass-water-droplet', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fab fa-gofore', 'fab fa-golang', 'fas fa-golf-ball-tee', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-pay', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-scholar', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grip', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fas fa-group-arrows-rotate', 'fab fa-grunt', 'fas fa-guarani-sign', 'fab fa-guilded', 'fas fa-guitar', 'fab fa-gulp', 'fas fa-gun', 'fas fa-h', 'fab fa-hacker-news', 'fab fa-hackerrank', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand', 'far fa-fas fa-hand', 'fas fa-hand-back-fist', 'far fa-fas fa-hand-back-fist', 'fas fa-hand-dots', 'fas fa-hand-fist', 'fas fa-hand-holding', 'fas fa-hand-holding-dollar', 'fas fa-hand-holding-droplet', 'fas fa-hand-holding-hand', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-medical', 'fas fa-hand-lizard', 'far fa-fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-peace', 'far fa-fas fa-hand-peace', 'fas fa-hand-point-down', 'far fa-fas fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-fas fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-fas fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-fas fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-fas fa-hand-pointer', 'fas fa-hand-scissors', 'far fa-fas fa-hand-scissors', 'fas fa-hand-sparkles', 'fas fa-hand-spock', 'far fa-fas fa-hand-spock', 'fas fa-handcuffs', 'fas fa-hands', 'fas fa-hands-asl-interpreting', 'fas fa-hands-bound', 'fas fa-hands-bubbles', 'fas fa-hands-clapping', 'fas fa-hands-holding', 'fas fa-hands-holding-child', 'fas fa-hands-holding-circle', 'fas fa-hands-praying', 'fas fa-handshake', 'far fa-fas fa-handshake', 'fas fa-handshake-angle', 'fas fa-handshake-simple', 'fas fa-handshake-simple-slash', 'fas fa-handshake-slash', 'fas fa-hanukiah', 'fas fa-hard-drive', 'far fa-fas fa-hard-drive', 'fab fa-hashnode', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-head-side-cough', 'fas fa-head-side-cough-slash', 'fas fa-head-side-mask', 'fas fa-head-side-virus', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-simple', 'fas fa-headset', 'fas fa-heart', 'far fa-fas fa-heart', 'fas fa-heart-circle-bolt', 'fas fa-heart-circle-check', 'fas fa-heart-circle-exclamation', 'fas fa-heart-circle-minus', 'fas fa-heart-circle-plus', 'fas fa-heart-circle-xmark', 'fas fa-heart-crack', 'fas fa-heart-pulse', 'fas fa-helicopter', 'fas fa-helicopter-symbol', 'fas fa-helmet-safety', 'fas fa-helmet-un', 'fas fa-hexagon-nodes', 'fas fa-hexagon-nodes-bolt', 'fas fa-highlighter', 'fas fa-hill-avalanche', 'fas fa-hill-rockslide', 'fas fa-hippo', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hive', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'far fa-fas fa-hospital', 'fas fa-hospital-user', 'fas fa-hot-tub-person', 'fas fa-hotdog', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'far fa-fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house', 'fas fa-house-chimney', 'fas fa-house-chimney-crack', 'fas fa-house-chimney-medical', 'fas fa-house-chimney-user', 'fas fa-house-chimney-window', 'fas fa-house-circle-check', 'fas fa-house-circle-exclamation', 'fas fa-house-circle-xmark', 'fas fa-house-crack', 'fas fa-house-fire', 'fas fa-house-flag', 'fas fa-house-flood-water', 'fas fa-house-flood-water-circle-arrow-right', 'fas fa-house-laptop', 'fas fa-house-lock', 'fas fa-house-medical', 'fas fa-house-medical-circle-check', 'fas fa-house-medical-circle-exclamation', 'fas fa-house-medical-circle-xmark', 'fas fa-house-medical-flag', 'fas fa-house-signal', 'fas fa-house-tsunami', 'fas fa-house-user', 'fab fa-houzz', 'fas fa-hryvnia-sign', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-hurricane', 'fas fa-i', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'far fa-fas fa-id-badge', 'fas fa-id-card', 'far fa-fas fa-id-card', 'fas fa-id-card-clip', 'fab fa-ideal', 'fas fa-igloo', 'fas fa-image', 'far fa-fas fa-image', 'fas fa-image-portrait', 'fas fa-images', 'far fa-fas fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-indian-rupee-sign', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fab fa-instagram', 'fab fa-instalod', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fas fa-j', 'fas fa-jar', 'fas fa-jar-wheat', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fas fa-jet-fighter', 'fas fa-jet-fighter-up', 'fab fa-jira', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fab fa-js', 'fab fa-jsfiddle', 'fas fa-jug-detergent', 'fab fa-jxl', 'fas fa-k', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-fas fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kip-sign', 'fas fa-kit-medical', 'fas fa-kitchen-set', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-l', 'fas fa-land-mine-on', 'fas fa-landmark', 'fas fa-landmark-dome', 'fas fa-landmark-flag', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-file', 'fas fa-laptop-medical', 'fab fa-laravel', 'fas fa-lari-sign', 'fab fa-lastfm', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-left-long', 'fas fa-left-right', 'fas fa-lemon', 'far fa-fas fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fab fa-letterboxd', 'fas fa-life-ring', 'far fa-fas fa-life-ring', 'fas fa-lightbulb', 'far fa-fas fa-lightbulb', 'fab fa-line', 'fas fa-lines-leaning', 'fas fa-link', 'fas fa-link-slash', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-check', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-litecoin-sign', 'fas fa-location-arrow', 'fas fa-location-crosshairs', 'fas fa-location-dot', 'fas fa-location-pin', 'fas fa-location-pin-lock', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-locust', 'fas fa-lungs', 'fas fa-lungs-virus', 'fab fa-lyft', 'fas fa-m', 'fab fa-magento', 'fas fa-magnet', 'fas fa-magnifying-glass', 'fas fa-magnifying-glass-arrow-right', 'fas fa-magnifying-glass-chart', 'fas fa-magnifying-glass-dollar', 'fas fa-magnifying-glass-location', 'fas fa-magnifying-glass-minus', 'fas fa-magnifying-glass-plus', 'fab fa-mailchimp', 'fas fa-manat-sign', 'fab fa-mandalorian', 'fas fa-map', 'far fa-fas fa-map', 'fas fa-map-location', 'fas fa-map-location-dot', 'fas fa-map-pin', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-and-venus', 'fas fa-mars-and-venus-burst', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-right', 'fas fa-mars-stroke-up', 'fas fa-martini-glass', 'fas fa-martini-glass-citrus', 'fas fa-martini-glass-empty', 'fas fa-mask', 'fas fa-mask-face', 'fas fa-mask-ventilator', 'fas fa-masks-theater', 'fab fa-mastodon', 'fas fa-mattress-pillow', 'fab fa-maxcdn', 'fas fa-maximize', 'fab fa-mdb', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-memory', 'fab fa-mendeley', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-message', 'far fa-fas fa-message', 'fab fa-meta', 'fas fa-meteor', 'fab fa-microblog', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-lines', 'fas fa-microphone-lines-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-mill-sign', 'fas fa-minimize', 'fab fa-mintbit', 'fas fa-minus', 'fas fa-mitten', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-button', 'fas fa-mobile-retro', 'fas fa-mobile-screen', 'fas fa-mobile-screen-button', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-1', 'far fa-fas fa-money-bill-1', 'fas fa-money-bill-1-wave', 'fas fa-money-bill-transfer', 'fas fa-money-bill-trend-up', 'fas fa-money-bill-wave', 'fas fa-money-bill-wheat', 'fas fa-money-bills', 'fas fa-money-check', 'fas fa-money-check-dollar', 'fas fa-monument', 'fas fa-moon', 'far fa-fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-mosquito', 'fas fa-mosquito-net', 'fas fa-motorcycle', 'fas fa-mound', 'fas fa-mountain', 'fas fa-mountain-city', 'fas fa-mountain-sun', 'fas fa-mug-hot', 'fas fa-mug-saucer', 'fas fa-music', 'fas fa-n', 'fas fa-naira-sign', 'fab fa-napster', 'fab fa-neos', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-fas fa-newspaper', 'fab fa-nfc-directional', 'fab fa-nfc-symbol', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notdef', 'fas fa-note-sticky', 'far fa-fas fa-note-sticky', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-o', 'fas fa-object-group', 'far fa-fas fa-object-group', 'fas fa-object-ungroup', 'far fa-fas fa-object-ungroup', 'fab fa-octopus-deploy', 'fab fa-odnoklassniki', 'fab fa-odysee', 'fas fa-oil-can', 'fas fa-oil-well', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opensuse', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fas fa-otter', 'fas fa-outdent', 'fas fa-p', 'fab fa-padlet', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-pager', 'fas fa-paint-roller', 'fas fa-paintbrush', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-panorama', 'fas fa-paper-plane', 'far fa-fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-passport', 'fas fa-paste', 'far fa-fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-clip', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-ruler', 'fas fa-pen-to-square', 'far fa-fas fa-pen-to-square', 'fas fa-pencil', 'fas fa-people-arrows', 'fas fa-people-carry-box', 'fas fa-people-group', 'fas fa-people-line', 'fas fa-people-pulling', 'fas fa-people-robbery', 'fas fa-people-roof', 'fas fa-pepper-hot', 'fab fa-perbyte', 'fas fa-percent', 'fab fa-periscope', 'fas fa-person', 'fas fa-person-arrow-down-to-line', 'fas fa-person-arrow-up-from-line', 'fas fa-person-biking', 'fas fa-person-booth', 'fas fa-person-breastfeeding', 'fas fa-person-burst', 'fas fa-person-cane', 'fas fa-person-chalkboard', 'fas fa-person-circle-check', 'fas fa-person-circle-exclamation', 'fas fa-person-circle-minus', 'fas fa-person-circle-plus', 'fas fa-person-circle-question', 'fas fa-person-circle-xmark', 'fas fa-person-digging', 'fas fa-person-dots-from-line', 'fas fa-person-dress', 'fas fa-person-dress-burst', 'fas fa-person-drowning', 'fas fa-person-falling', 'fas fa-person-falling-burst', 'fas fa-person-half-dress', 'fas fa-person-harassing', 'fas fa-person-hiking', 'fas fa-person-military-pointing', 'fas fa-person-military-rifle', 'fas fa-person-military-to-person', 'fas fa-person-praying', 'fas fa-person-pregnant', 'fas fa-person-rays', 'fas fa-person-rifle', 'fas fa-person-running', 'fas fa-person-shelter', 'fas fa-person-skating', 'fas fa-person-skiing', 'fas fa-person-skiing-nordic', 'fas fa-person-snowboarding', 'fas fa-person-swimming', 'fas fa-person-through-window', 'fas fa-person-walking', 'fas fa-person-walking-arrow-loop-left', 'fas fa-person-walking-arrow-right', 'fas fa-person-walking-dashed-line-arrow-right', 'fas fa-person-walking-luggage', 'fas fa-person-walking-with-cane', 'fas fa-peseta-sign', 'fas fa-peso-sign', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-flip', 'fas fa-phone-slash', 'fas fa-phone-volume', 'fas fa-photo-film', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pix', 'fab fa-pixiv', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-circle-check', 'fas fa-plane-circle-exclamation', 'fas fa-plane-circle-xmark', 'fas fa-plane-departure', 'fas fa-plane-lock', 'fas fa-plane-slash', 'fas fa-plane-up', 'fas fa-plant-wilt', 'fas fa-plate-wheat', 'fas fa-play', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plug-circle-bolt', 'fas fa-plug-circle-check', 'fas fa-plug-circle-exclamation', 'fas fa-plug-circle-minus', 'fas fa-plug-circle-plus', 'fas fa-plug-circle-xmark', 'fas fa-plus', 'fas fa-plus-minus', 'fas fa-podcast', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-power-off', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-medical', 'fas fa-print', 'fab fa-product-hunt', 'fas fa-pump-medical', 'fas fa-pump-soap', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fas fa-q', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-r', 'fab fa-r-project', 'fas fa-radiation', 'fas fa-radio', 'fas fa-rainbow', 'fas fa-ranking-star', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-rectangle-ad', 'fas fa-rectangle-list', 'far fa-fas fa-rectangle-list', 'fas fa-rectangle-xmark', 'far fa-fas fa-rectangle-xmark', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-redhat', 'fas fa-registered', 'far fa-fas fa-registered', 'fab fa-renren', 'fas fa-repeat', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fas fa-republican', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-restroom', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-right-from-bracket', 'fas fa-right-left', 'fas fa-right-long', 'fas fa-right-to-bracket', 'fas fa-ring', 'fas fa-road', 'fas fa-road-barrier', 'fas fa-road-bridge', 'fas fa-road-circle-check', 'fas fa-road-circle-exclamation', 'fas fa-road-circle-xmark', 'fas fa-road-lock', 'fas fa-road-spikes', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-rotate', 'fas fa-rotate-left', 'fas fa-rotate-right', 'fas fa-route', 'fas fa-rss', 'fas fa-ruble-sign', 'fas fa-rug', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-rupiah-sign', 'fab fa-rust', 'fas fa-s', 'fas fa-sack-dollar', 'fas fa-sack-xmark', 'fab fa-safari', 'fas fa-sailboat', 'fab fa-salesforce', 'fab fa-sass', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-scale-balanced', 'fas fa-scale-unbalanced', 'fas fa-scale-unbalanced-flip', 'fab fa-schlix', 'fas fa-school', 'fas fa-school-circle-check', 'fas fa-school-circle-exclamation', 'fas fa-school-circle-xmark', 'fas fa-school-flag', 'fas fa-school-lock', 'fas fa-scissors', 'fab fa-screenpal', 'fas fa-screwdriver', 'fas fa-screwdriver-wrench', 'fab fa-scribd', 'fas fa-scroll', 'fas fa-scroll-torah', 'fas fa-sd-card', 'fab fa-searchengin', 'fas fa-section', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-from-square', 'far fa-fas fa-share-from-square', 'fas fa-share-nodes', 'fas fa-sheet-plastic', 'fas fa-shekel-sign', 'fas fa-shield', 'fas fa-shield-cat', 'fas fa-shield-dog', 'fas fa-shield-halved', 'fas fa-shield-heart', 'fas fa-shield-virus', 'fas fa-ship', 'fas fa-shirt', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fab fa-shoelace', 'fas fa-shop', 'fas fa-shop-lock', 'fas fa-shop-slash', 'fab fa-shopify', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shrimp', 'fas fa-shuffle', 'fas fa-shuttle-space', 'fas fa-sign-hanging', 'fas fa-signal', 'fab fa-signal-messenger', 'fas fa-signature', 'fas fa-signs-post', 'fas fa-sim-card', 'fab fa-simplybuilt', 'fas fa-sink', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fab fa-sitrox', 'fab fa-sketch', 'fas fa-skull', 'fas fa-skull-crossbones', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders', 'fab fa-slideshare', 'fas fa-smog', 'fas fa-smoking', 'fab fa-snapchat', 'fas fa-snowflake', 'far fa-fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-soap', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-down', 'fas fa-sort-up', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fas fa-spa', 'fab fa-space-awesome', 'fas fa-spaghetti-monster-flying', 'fab fa-speakap', 'fab fa-speaker-deck', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spoon', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-spray-can-sparkles', 'fas fa-square', 'far fa-fas fa-square', 'fas fa-square-arrow-up-right', 'fab fa-square-behance', 'fas fa-square-binary', 'fab fa-square-bluesky', 'fas fa-square-caret-down', 'far fa-fas fa-square-caret-down', 'fas fa-square-caret-left', 'far fa-fas fa-square-caret-left', 'fas fa-square-caret-right', 'far fa-fas fa-square-caret-right', 'fas fa-square-caret-up', 'far fa-fas fa-square-caret-up', 'fas fa-square-check', 'far fa-fas fa-square-check', 'fab fa-square-dribbble', 'fas fa-square-envelope', 'fab fa-square-facebook', 'fab fa-square-font-awesome', 'fab fa-square-font-awesome-stroke', 'fas fa-square-full', 'far fa-fas fa-square-full', 'fab fa-square-git', 'fab fa-square-github', 'fab fa-square-gitlab', 'fab fa-square-google-plus', 'fas fa-square-h', 'fab fa-square-hacker-news', 'fab fa-square-instagram', 'fab fa-square-js', 'fab fa-square-lastfm', 'fab fa-square-letterboxd', 'fas fa-square-minus', 'far fa-fas fa-square-minus', 'fas fa-square-nfi', 'fab fa-square-odnoklassniki', 'fas fa-square-parking', 'fas fa-square-pen', 'fas fa-square-person-confined', 'fas fa-square-phone', 'fas fa-square-phone-flip', 'fab fa-square-pied-piper', 'fab fa-square-pinterest', 'fas fa-square-plus', 'far fa-fas fa-square-plus', 'fas fa-square-poll-horizontal', 'fas fa-square-poll-vertical', 'fab fa-square-reddit', 'fas fa-square-root-variable', 'fas fa-square-rss', 'fas fa-square-share-nodes', 'fab fa-square-snapchat', 'fab fa-square-steam', 'fab fa-square-threads', 'fab fa-square-tumblr', 'fab fa-square-twitter', 'fas fa-square-up-right', 'fab fa-square-upwork', 'fab fa-square-viadeo', 'fab fa-square-vimeo', 'fas fa-square-virus', 'fab fa-square-web-awesome', 'fab fa-square-web-awesome-stroke', 'fab fa-square-whatsapp', 'fab fa-square-x-twitter', 'fab fa-square-xing', 'fas fa-square-xmark', 'fab fa-square-youtube', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fas fa-staff-snake', 'fas fa-stairs', 'fas fa-stamp', 'fas fa-stapler', 'fas fa-star', 'far fa-fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-fas fa-star-half', 'fas fa-star-half-stroke', 'far fa-fas fa-star-half-stroke', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-symbol', 'fas fa-sterling-sign', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-stop', 'fas fa-stopwatch', 'fas fa-stopwatch-20', 'fas fa-store', 'fas fa-store-slash', 'fab fa-strava', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-stubber', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-suitcase', 'fas fa-suitcase-medical', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-fas fa-sun', 'fas fa-sun-plant-wilt', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fab fa-suse', 'fas fa-swatchbook', 'fab fa-swift', 'fab fa-symfony', 'fas fa-synagogue', 'fas fa-syringe', 'fas fa-t', 'fas fa-table', 'fas fa-table-cells', 'fas fa-table-cells-column-lock', 'fas fa-table-cells-large', 'fas fa-table-cells-row-lock', 'fas fa-table-cells-row-unlock', 'fas fa-table-columns', 'fas fa-table-list', 'fas fa-table-tennis-paddle-ball', 'fas fa-tablet', 'fas fa-tablet-button', 'fas fa-tablet-screen-button', 'fas fa-tablets', 'fas fa-tachograph-digital', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tarp', 'fas fa-tarp-droplet', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fas fa-temperature-arrow-down', 'fas fa-temperature-arrow-up', 'fas fa-temperature-empty', 'fas fa-temperature-full', 'fas fa-temperature-half', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-temperature-quarter', 'fas fa-temperature-three-quarters', 'fab fa-tencent-weibo', 'fas fa-tenge-sign', 'fas fa-tent', 'fas fa-tent-arrow-down-to-line', 'fas fa-tent-arrow-left-right', 'fas fa-tent-arrow-turn-left', 'fas fa-tent-arrows-down', 'fas fa-tents', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-slash', 'fas fa-text-width', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fab fa-think-peaks', 'fab fa-threads', 'fas fa-thumbs-down', 'far fa-fas fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-thumbtack-slash', 'fas fa-ticket', 'fas fa-ticket-simple', 'fab fa-tiktok', 'fas fa-timeline', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toilet-paper-slash', 'fas fa-toilet-portable', 'fas fa-toilets-portable', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torii-gate', 'fas fa-tornado', 'fas fa-tower-broadcast', 'fas fa-tower-cell', 'fas fa-tower-observation', 'fas fa-tractor', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-train-subway', 'fas fa-train-tram', 'fas fa-transgender', 'fas fa-trash', 'fas fa-trash-arrow-up', 'fas fa-trash-can', 'far fa-fas fa-trash-can', 'fas fa-trash-can-arrow-up', 'fas fa-tree', 'fas fa-tree-city', 'fab fa-trello', 'fas fa-triangle-exclamation', 'fas fa-trophy', 'fas fa-trowel', 'fas fa-trowel-bricks', 'fas fa-truck', 'fas fa-truck-arrow-right', 'fas fa-truck-droplet', 'fas fa-truck-fast', 'fas fa-truck-field', 'fas fa-truck-field-un', 'fas fa-truck-front', 'fas fa-truck-medical', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-truck-plane', 'fas fa-truck-ramp-box', 'fas fa-tty', 'fab fa-tumblr', 'fas fa-turkish-lira-sign', 'fas fa-turn-down', 'fas fa-turn-up', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-typo3', 'fas fa-u', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fab fa-uncharted', 'fas fa-underline', 'fab fa-uniregistry', 'fab fa-unity', 'fas fa-universal-access', 'fas fa-unlock', 'fas fa-unlock-keyhole', 'fab fa-unsplash', 'fab fa-untappd', 'fas fa-up-down', 'fas fa-up-down-left-right', 'fas fa-up-long', 'fas fa-up-right-and-down-left-from-center', 'fas fa-up-right-from-square', 'fas fa-upload', 'fab fa-ups', 'fab fa-upwork', 'fab fa-usb', 'fas fa-user', 'far fa-fas fa-user', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-clock', 'fas fa-user-doctor', 'fas fa-user-gear', 'fas fa-user-graduate', 'fas fa-user-group', 'fas fa-user-injured', 'fas fa-user-large', 'fas fa-user-large-slash', 'fas fa-user-lock', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-pen', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-xmark', 'fas fa-users', 'fas fa-users-between-lines', 'fas fa-users-gear', 'fas fa-users-line', 'fas fa-users-rays', 'fas fa-users-rectangle', 'fas fa-users-slash', 'fas fa-users-viewfinder', 'fab fa-usps', 'fab fa-ussunnah', 'fas fa-utensils', 'fas fa-v', 'fab fa-vaadin', 'fas fa-van-shuttle', 'fas fa-vault', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vest', 'fas fa-vest-patches', 'fab fa-viacoin', 'fab fa-viadeo', 'fas fa-vial', 'fas fa-vial-circle-check', 'fas fa-vial-virus', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-v', 'fab fa-vine', 'fas fa-virus', 'fas fa-virus-covid', 'fas fa-virus-covid-slash', 'fas fa-virus-slash', 'fas fa-viruses', 'fab fa-vk', 'fab fa-vnv', 'fas fa-voicemail', 'fas fa-volcano', 'fas fa-volleyball', 'fas fa-volume-high', 'fas fa-volume-low', 'fas fa-volume-off', 'fas fa-volume-xmark', 'fas fa-vr-cardboard', 'fab fa-vuejs', 'fas fa-w', 'fas fa-walkie-talkie', 'fas fa-wallet', 'fas fa-wand-magic', 'fas fa-wand-magic-sparkles', 'fas fa-wand-sparkles', 'fas fa-warehouse', 'fab fa-watchman-monitoring', 'fas fa-water', 'fas fa-water-ladder', 'fas fa-wave-square', 'fab fa-waze', 'fas fa-web-awesome', 'fab fa-fas fa-web-awesome', 'fab fa-webflow', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight-hanging', 'fas fa-weight-scale', 'fab fa-weixin', 'fab fa-whatsapp', 'fas fa-wheat-awn', 'fas fa-wheat-awn-circle-exclamation', 'fas fa-wheelchair', 'fas fa-wheelchair-move', 'fas fa-whiskey-glass', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-wind', 'fas fa-window-maximize', 'far fa-fas fa-window-maximize', 'fas fa-window-minimize', 'far fa-fas fa-window-minimize', 'fas fa-window-restore', 'far fa-fas fa-window-restore', 'fab fa-windows', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-empty', 'fab fa-wirsindhandwerk', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wodu', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fas fa-worm', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fas fa-wrench', 'fas fa-x', 'fas fa-x-ray', 'fab fa-x-twitter', 'fab fa-xbox', 'fab fa-xing', 'fas fa-xmark', 'fas fa-xmarks-lines', 'fas fa-y', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fas fa-z', 'fab fa-zhihu' );
	}
}
2 1
\ No newline at end of file
2
+<?php
/**
 * Redux Icon Select Font Awesome 6 Free icon array.
 *
 * @package Redux
 * @author  Kevin Provance <[email protected]>
 */

defined( 'ABSPATH' ) || exit;

if ( ! function_exists( 'redux_icon_select_fa_6_free' ) ) {

	/**
	 * Array of free Font Awesome 6 icons.
	 *
	 * @return array
	 */
	function redux_icon_select_fa_6_free(): array {
		return array( 'fas fa-0', 'fas fa-1', 'fas fa-2', 'fas fa-3', 'fas fa-4', 'fas fa-5', 'fas fa-6', 'fas fa-7', 'fas fa-8', 'fas fa-9', 'fab fa-42-group', 'fab fa-500px', 'fas fa-a', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-address-book', 'far fa-fas fa-address-book', 'fas fa-address-card', 'far fa-fas fa-address-card', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fab fa-airbnb', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fab fa-amazon', 'fab fa-amazon-pay', 'fab fa-amilia', 'fas fa-anchor', 'fas fa-anchor-circle-check', 'fas fa-anchor-circle-exclamation', 'fas fa-anchor-circle-xmark', 'fas fa-anchor-lock', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angles-down', 'fas fa-angles-left', 'fas fa-angles-right', 'fas fa-angles-up', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fab fa-apple-pay', 'fas fa-apple-whole', 'fas fa-archway', 'fas fa-arrow-down', 'fas fa-arrow-down-1-9', 'fas fa-arrow-down-9-1', 'fas fa-arrow-down-a-z', 'fas fa-arrow-down-long', 'fas fa-arrow-down-short-wide', 'fas fa-arrow-down-up-across-line', 'fas fa-arrow-down-up-lock', 'fas fa-arrow-down-wide-short', 'fas fa-arrow-down-z-a', 'fas fa-arrow-left', 'fas fa-arrow-left-long', 'fas fa-arrow-pointer', 'fas fa-arrow-right', 'fas fa-arrow-right-arrow-left', 'fas fa-arrow-right-from-bracket', 'fas fa-arrow-right-long', 'fas fa-arrow-right-to-bracket', 'fas fa-arrow-right-to-city', 'fas fa-arrow-rotate-left', 'fas fa-arrow-rotate-right', 'fas fa-arrow-trend-down', 'fas fa-arrow-trend-up', 'fas fa-arrow-turn-down', 'fas fa-arrow-turn-up', 'fas fa-arrow-up', 'fas fa-arrow-up-1-9', 'fas fa-arrow-up-9-1', 'fas fa-arrow-up-a-z', 'fas fa-arrow-up-from-bracket', 'fas fa-arrow-up-from-ground-water', 'fas fa-arrow-up-from-water-pump', 'fas fa-arrow-up-long', 'fas fa-arrow-up-right-dots', 'fas fa-arrow-up-right-from-square', 'fas fa-arrow-up-short-wide', 'fas fa-arrow-up-wide-short', 'fas fa-arrow-up-z-a', 'fas fa-arrows-down-to-line', 'fas fa-arrows-down-to-people', 'fas fa-arrows-left-right', 'fas fa-arrows-left-right-to-line', 'fas fa-arrows-rotate', 'fas fa-arrows-spin', 'fas fa-arrows-split-up-and-left', 'fas fa-arrows-to-circle', 'fas fa-arrows-to-dot', 'fas fa-arrows-to-eye', 'fas fa-arrows-turn-right', 'fas fa-arrows-turn-to-dots', 'fas fa-arrows-up-down', 'fas fa-arrows-up-down-left-right', 'fas fa-arrows-up-to-line', 'fab fa-artstation', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fab fa-atlassian', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fas fa-austral-sign', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-b', 'fas fa-baby', 'fas fa-baby-carriage', 'fas fa-backward', 'fas fa-backward-fast', 'fas fa-backward-step', 'fas fa-bacon', 'fas fa-bacteria', 'fas fa-bacterium', 'fas fa-bag-shopping', 'fas fa-bahai', 'fas fa-baht-sign', 'fas fa-ban', 'fas fa-ban-smoking', 'fas fa-bandage', 'fab fa-bandcamp', 'fas fa-bangladeshi-taka-sign', 'fas fa-barcode', 'fas fa-bars', 'fas fa-bars-progress', 'fas fa-bars-staggered', 'fas fa-baseball', 'fas fa-baseball-bat-ball', 'fas fa-basket-shopping', 'fas fa-basketball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fab fa-battle-net', 'fas fa-bed', 'fas fa-bed-pulse', 'fas fa-beer-mug-empty', 'fab fa-behance', 'fas fa-bell', 'far fa-fas fa-bell', 'fas fa-bell-concierge', 'fas fa-bell-slash', 'far fa-fas fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bicycle', 'fab fa-bilibili', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-biohazard', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fas fa-bitcoin-sign', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blender-phone', 'fas fa-blog', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluesky', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bolt-lightning', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-atlas', 'fas fa-book-bible', 'fas fa-book-bookmark', 'fas fa-book-journal-whills', 'fas fa-book-medical', 'fas fa-book-open', 'fas fa-book-open-reader', 'fas fa-book-quran', 'fas fa-book-skull', 'fas fa-book-tanakh', 'fas fa-bookmark', 'far fa-fas fa-bookmark', 'fab fa-bootstrap', 'fas fa-border-all', 'fas fa-border-none', 'fas fa-border-top-left', 'fas fa-bore-hole', 'fab fa-bots', 'fas fa-bottle-droplet', 'fas fa-bottle-water', 'fas fa-bowl-food', 'fas fa-bowl-rice', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-archive', 'fas fa-box-open', 'fas fa-box-tissue', 'fas fa-boxes-packing', 'fas fa-boxes-stacked', 'fas fa-braille', 'fas fa-brain', 'fab fa-brave', 'fab fa-brave-reverse', 'fas fa-brazilian-real-sign', 'fas fa-bread-slice', 'fas fa-bridge', 'fas fa-bridge-circle-check', 'fas fa-bridge-circle-exclamation', 'fas fa-bridge-circle-xmark', 'fas fa-bridge-lock', 'fas fa-bridge-water', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broom', 'fas fa-broom-ball', 'fas fa-brush', 'fab fa-btc', 'fas fa-bucket', 'fab fa-buffer', 'fas fa-bug', 'fas fa-bug-slash', 'fas fa-bugs', 'fas fa-building', 'far fa-fas fa-building', 'fas fa-building-circle-arrow-right', 'fas fa-building-circle-check', 'fas fa-building-circle-exclamation', 'fas fa-building-circle-xmark', 'fas fa-building-columns', 'fas fa-building-flag', 'fas fa-building-lock', 'fas fa-building-ngo', 'fas fa-building-shield', 'fas fa-building-un', 'fas fa-building-user', 'fas fa-building-wheat', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burger', 'fab fa-buromobelexperte', 'fas fa-burst', 'fas fa-bus', 'fas fa-bus-simple', 'fas fa-business-time', 'fab fa-buy-n-large', 'fab fa-buysellads', 'fas fa-c', 'fas fa-cable-car', 'fas fa-cake-candles', 'fas fa-calculator', 'fas fa-calendar', 'far fa-fas fa-calendar', 'fas fa-calendar-check', 'far fa-fas fa-calendar-check', 'fas fa-calendar-day', 'fas fa-calendar-days', 'far fa-fas fa-calendar-days', 'fas fa-calendar-minus', 'far fa-fas fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-fas fa-calendar-plus', 'fas fa-calendar-week', 'fas fa-calendar-xmark', 'far fa-fas fa-calendar-xmark', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-camera-rotate', 'fas fa-campground', 'fab fa-canadian-maple-leaf', 'fas fa-candy-cane', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-battery', 'fas fa-car-burst', 'fas fa-car-on', 'fas fa-car-rear', 'fas fa-car-side', 'fas fa-car-tunnel', 'fas fa-caravan', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-up', 'fas fa-carrot', 'fas fa-cart-arrow-down', 'fas fa-cart-flatbed', 'fas fa-cart-flatbed-suitcase', 'fas fa-cart-plus', 'fas fa-cart-shopping', 'fas fa-cash-register', 'fas fa-cat', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fas fa-cedi-sign', 'fas fa-cent-sign', 'fab fa-centercode', 'fab fa-centos', 'fas fa-certificate', 'fas fa-chair', 'fas fa-chalkboard', 'fas fa-chalkboard-user', 'fas fa-champagne-glasses', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-fas fa-chart-bar', 'fas fa-chart-column', 'fas fa-chart-diagram', 'fas fa-chart-gantt', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-chart-simple', 'fas fa-check', 'fas fa-check-double', 'fas fa-check-to-slot', 'fas fa-cheese', 'fas fa-chess', 'fas fa-chess-bishop', 'far fa-fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'far fa-fas fa-chess-king', 'fas fa-chess-knight', 'far fa-fas fa-chess-knight', 'fas fa-chess-pawn', 'far fa-fas fa-chess-pawn', 'fas fa-chess-queen', 'far fa-fas fa-chess-queen', 'fas fa-chess-rook', 'far fa-fas fa-chess-rook', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fas fa-child-combatant', 'fas fa-child-dress', 'fas fa-child-reaching', 'fas fa-children', 'fab fa-chrome', 'fab fa-chromecast', 'fas fa-church', 'fas fa-circle', 'far fa-fas fa-circle', 'fas fa-circle-arrow-down', 'fas fa-circle-arrow-left', 'fas fa-circle-arrow-right', 'fas fa-circle-arrow-up', 'fas fa-circle-check', 'far fa-fas fa-circle-check', 'fas fa-circle-chevron-down', 'fas fa-circle-chevron-left', 'fas fa-circle-chevron-right', 'fas fa-circle-chevron-up', 'fas fa-circle-dollar-to-slot', 'fas fa-circle-dot', 'far fa-fas fa-circle-dot', 'fas fa-circle-down', 'far fa-fas fa-circle-down', 'fas fa-circle-exclamation', 'fas fa-circle-h', 'fas fa-circle-half-stroke', 'fas fa-circle-info', 'fas fa-circle-left', 'far fa-fas fa-circle-left', 'fas fa-circle-minus', 'fas fa-circle-nodes', 'fas fa-circle-notch', 'fas fa-circle-pause', 'far fa-fas fa-circle-pause', 'fas fa-circle-play', 'far fa-fas fa-circle-play', 'fas fa-circle-plus', 'fas fa-circle-question', 'far fa-fas fa-circle-question', 'fas fa-circle-radiation', 'fas fa-circle-right', 'far fa-fas fa-circle-right', 'fas fa-circle-stop', 'far fa-fas fa-circle-stop', 'fas fa-circle-up', 'far fa-fas fa-circle-up', 'fas fa-circle-user', 'far fa-fas fa-circle-user', 'fas fa-circle-xmark', 'far fa-fas fa-circle-xmark', 'fas fa-city', 'fas fa-clapperboard', 'fas fa-clipboard', 'far fa-fas fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clipboard-question', 'fas fa-clipboard-user', 'fas fa-clock', 'far fa-fas fa-clock', 'fas fa-clock-rotate-left', 'fas fa-clone', 'far fa-fas fa-clone', 'fas fa-closed-captioning', 'far fa-fas fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-arrow-down', 'fas fa-cloud-arrow-up', 'fas fa-cloud-bolt', 'fas fa-cloud-meatball', 'fas fa-cloud-moon', 'fas fa-cloud-moon-rain', 'fas fa-cloud-rain', 'fas fa-cloud-showers-heavy', 'fas fa-cloud-showers-water', 'fas fa-cloud-sun', 'fas fa-cloud-sun-rain', 'fab fa-cloudflare', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-clover', 'fab fa-cmplid', 'fas fa-code', 'fas fa-code-branch', 'fas fa-code-commit', 'fas fa-code-compare', 'fas fa-code-fork', 'fas fa-code-merge', 'fas fa-code-pull-request', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coins', 'fas fa-colon-sign', 'fas fa-comment', 'far fa-fas fa-comment', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-fas fa-comment-dots', 'fas fa-comment-medical', 'fas fa-comment-nodes', 'fas fa-comment-slash', 'fas fa-comment-sms', 'fas fa-comments', 'far fa-fas fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-fas fa-compass', 'fas fa-compass-drafting', 'fas fa-compress', 'fas fa-computer', 'fas fa-computer-mouse', 'fab fa-confluence', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-fas fa-copy', 'fas fa-copyright', 'far fa-fas fa-copyright', 'fab fa-cotton-bureau', 'fas fa-couch', 'fas fa-cow', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fab fa-creative-commons-zero', 'fas fa-credit-card', 'far fa-fas fa-credit-card', 'fab fa-critical-role', 'fas fa-crop', 'fas fa-crop-simple', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fas fa-crutch', 'fas fa-cruzeiro-sign', 'fab fa-css', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cubes-stacked', 'fab fa-cuttlefish', 'fas fa-d', 'fab fa-d-and-d', 'fab fa-d-and-d-beyond', 'fab fa-dailymotion', 'fab fa-dart-lang', 'fab fa-dashcube', 'fas fa-database', 'fab fa-debian', 'fab fa-deezer', 'fas fa-delete-left', 'fab fa-delicious', 'fas fa-democrat', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-dev', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fab fa-dhl', 'fas fa-diagram-next', 'fas fa-diagram-predecessor', 'fas fa-diagram-project', 'fas fa-diagram-successor', 'fas fa-diamond', 'fas fa-diamond-turn-right', 'fab fa-diaspora', 'fas fa-dice', 'fas fa-dice-d20', 'fas fa-dice-d6', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fab fa-discord', 'fab fa-discourse', 'fas fa-disease', 'fas fa-display', 'fas fa-divide', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dog', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dong-sign', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dove', 'fas fa-down-left-and-up-right-to-center', 'fas fa-down-long', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-dragon', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dropbox', 'fas fa-droplet', 'fas fa-droplet-slash', 'fas fa-drum', 'fas fa-drum-steelpan', 'fas fa-drumstick-bite', 'fab fa-drupal', 'fas fa-dumbbell', 'fas fa-dumpster', 'fas fa-dumpster-fire', 'fas fa-dungeon', 'fab fa-dyalog', 'fas fa-e', 'fas fa-ear-deaf', 'fas fa-ear-listen', 'fab fa-earlybirds', 'fas fa-earth-africa', 'fas fa-earth-americas', 'fas fa-earth-asia', 'fas fa-earth-europe', 'fas fa-earth-oceania', 'fab fa-ebay', 'fab fa-edge', 'fab fa-edge-legacy', 'fas fa-egg', 'fas fa-eject', 'fab fa-elementor', 'fas fa-elevator', 'fas fa-ellipsis', 'fas fa-ellipsis-vertical', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-fas fa-envelope', 'fas fa-envelope-circle-check', 'fas fa-envelope-open', 'far fa-fas fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelopes-bulk', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fas fa-ethernet', 'fab fa-etsy', 'fas fa-euro-sign', 'fab fa-evernote', 'fas fa-exclamation', 'fas fa-expand', 'fab fa-expeditedssl', 'fas fa-explosion', 'fas fa-eye', 'far fa-fas fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-low-vision', 'fas fa-eye-slash', 'far fa-fas fa-eye-slash', 'fas fa-f', 'fas fa-face-angry', 'far fa-fas fa-face-angry', 'fas fa-face-dizzy', 'far fa-fas fa-face-dizzy', 'fas fa-face-flushed', 'far fa-fas fa-face-flushed', 'fas fa-face-frown', 'far fa-fas fa-face-frown', 'fas fa-face-frown-open', 'far fa-fas fa-face-frown-open', 'fas fa-face-grimace', 'far fa-fas fa-face-grimace', 'fas fa-face-grin', 'far fa-fas fa-face-grin', 'fas fa-face-grin-beam', 'far fa-fas fa-face-grin-beam', 'fas fa-face-grin-beam-sweat', 'far fa-fas fa-face-grin-beam-sweat', 'fas fa-face-grin-hearts', 'far fa-fas fa-face-grin-hearts', 'fas fa-face-grin-squint', 'far fa-fas fa-face-grin-squint', 'fas fa-face-grin-squint-tears', 'far fa-fas fa-face-grin-squint-tears', 'fas fa-face-grin-stars', 'far fa-fas fa-face-grin-stars', 'fas fa-face-grin-tears', 'far fa-fas fa-face-grin-tears', 'fas fa-face-grin-tongue', 'far fa-fas fa-face-grin-tongue', 'fas fa-face-grin-tongue-squint', 'far fa-fas fa-face-grin-tongue-squint', 'fas fa-face-grin-tongue-wink', 'far fa-fas fa-face-grin-tongue-wink', 'fas fa-face-grin-wide', 'far fa-fas fa-face-grin-wide', 'fas fa-face-grin-wink', 'far fa-fas fa-face-grin-wink', 'fas fa-face-kiss', 'far fa-fas fa-face-kiss', 'fas fa-face-kiss-beam', 'far fa-fas fa-face-kiss-beam', 'fas fa-face-kiss-wink-heart', 'far fa-fas fa-face-kiss-wink-heart', 'fas fa-face-laugh', 'far fa-fas fa-face-laugh', 'fas fa-face-laugh-beam', 'far fa-fas fa-face-laugh-beam', 'fas fa-face-laugh-squint', 'far fa-fas fa-face-laugh-squint', 'fas fa-face-laugh-wink', 'far fa-fas fa-face-laugh-wink', 'fas fa-face-meh', 'far fa-fas fa-face-meh', 'fas fa-face-meh-blank', 'far fa-fas fa-face-meh-blank', 'fas fa-face-rolling-eyes', 'far fa-fas fa-face-rolling-eyes', 'fas fa-face-sad-cry', 'far fa-fas fa-face-sad-cry', 'fas fa-face-sad-tear', 'far fa-fas fa-face-sad-tear', 'fas fa-face-smile', 'far fa-fas fa-face-smile', 'fas fa-face-smile-beam', 'far fa-fas fa-face-smile-beam', 'fas fa-face-smile-wink', 'far fa-fas fa-face-smile-wink', 'fas fa-face-surprise', 'far fa-fas fa-face-surprise', 'fas fa-face-tired', 'far fa-fas fa-face-tired', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fas fa-fan', 'fab fa-fantasy-flight-games', 'fas fa-faucet', 'fas fa-faucet-drip', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-pointed', 'fab fa-fedex', 'fab fa-fedora', 'fas fa-ferry', 'fab fa-figma', 'fas fa-file', 'far fa-fas fa-file', 'fas fa-file-arrow-down', 'fas fa-file-arrow-up', 'fas fa-file-audio', 'far fa-fas fa-file-audio', 'fas fa-file-circle-check', 'fas fa-file-circle-exclamation', 'fas fa-file-circle-minus', 'fas fa-file-circle-plus', 'fas fa-file-circle-question', 'fas fa-file-circle-xmark', 'fas fa-file-code', 'far fa-fas fa-file-code', 'fas fa-file-contract', 'fas fa-file-csv', 'fas fa-file-excel', 'far fa-fas fa-file-excel', 'fas fa-file-export', 'fas fa-file-fragment', 'fas fa-file-half-dashed', 'fas fa-file-image', 'far fa-fas fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-lines', 'far fa-fas fa-file-lines', 'fas fa-file-medical', 'fas fa-file-pdf', 'far fa-fas fa-file-pdf', 'fas fa-file-pen', 'fas fa-file-powerpoint', 'far fa-fas fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-shield', 'fas fa-file-signature', 'fas fa-file-video', 'far fa-fas fa-file-video', 'fas fa-file-waveform', 'fas fa-file-word', 'far fa-fas fa-file-word', 'fas fa-file-zipper', 'far fa-fas fa-file-zipper', 'fab fa-files-pinwheel', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-filter-circle-dollar', 'fas fa-filter-circle-xmark', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-burner', 'fas fa-fire-extinguisher', 'fas fa-fire-flame-curved', 'fas fa-fire-flame-simple', 'fab fa-firefox', 'fab fa-firefox-browser', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-fish-fins', 'fas fa-flag', 'far fa-fas fa-flag', 'fas fa-flag-checkered', 'fas fa-flag-usa', 'fas fa-flask', 'fas fa-flask-vial', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-floppy-disk', 'far fa-fas fa-floppy-disk', 'fas fa-florin-sign', 'fab fa-flutter', 'fab fa-fly', 'fas fa-folder', 'far fa-fas fa-folder', 'fas fa-folder-closed', 'far fa-fas fa-folder-closed', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-fas fa-folder-open', 'fas fa-folder-plus', 'fas fa-folder-tree', 'fas fa-font', 'fas fa-font-awesome', 'far fa-fas fa-font-awesome', 'fab fa-far fa-fas fa-font-awesome', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fas fa-forward-fast', 'fas fa-forward-step', 'fab fa-foursquare', 'fas fa-franc-sign', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fab fa-fulcrum', 'fas fa-futbol', 'far fa-fas fa-futbol', 'fas fa-g', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gauge', 'fas fa-gauge-high', 'fas fa-gauge-simple', 'fas fa-gauge-simple-high', 'fas fa-gavel', 'fas fa-gear', 'fas fa-gears', 'fas fa-gem', 'far fa-fas fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-ghost', 'fas fa-gift', 'fas fa-gifts', 'fab fa-git', 'fab fa-git-alt', 'fab fa-github', 'fab fa-github-alt', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-water', 'fas fa-glass-water-droplet', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fab fa-gofore', 'fab fa-golang', 'fas fa-golf-ball-tee', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-pay', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-scholar', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grip', 'fas fa-grip-lines', 'fas fa-grip-lines-vertical', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fas fa-group-arrows-rotate', 'fab fa-grunt', 'fas fa-guarani-sign', 'fab fa-guilded', 'fas fa-guitar', 'fab fa-gulp', 'fas fa-gun', 'fas fa-h', 'fab fa-hacker-news', 'fab fa-hackerrank', 'fas fa-hammer', 'fas fa-hamsa', 'fas fa-hand', 'far fa-fas fa-hand', 'fas fa-hand-back-fist', 'far fa-fas fa-hand-back-fist', 'fas fa-hand-dots', 'fas fa-hand-fist', 'fas fa-hand-holding', 'fas fa-hand-holding-dollar', 'fas fa-hand-holding-droplet', 'fas fa-hand-holding-hand', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-medical', 'fas fa-hand-lizard', 'far fa-fas fa-hand-lizard', 'fas fa-hand-middle-finger', 'fas fa-hand-peace', 'far fa-fas fa-hand-peace', 'fas fa-hand-point-down', 'far fa-fas fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-fas fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-fas fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-fas fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-fas fa-hand-pointer', 'fas fa-hand-scissors', 'far fa-fas fa-hand-scissors', 'fas fa-hand-sparkles', 'fas fa-hand-spock', 'far fa-fas fa-hand-spock', 'fas fa-handcuffs', 'fas fa-hands', 'fas fa-hands-asl-interpreting', 'fas fa-hands-bound', 'fas fa-hands-bubbles', 'fas fa-hands-clapping', 'fas fa-hands-holding', 'fas fa-hands-holding-child', 'fas fa-hands-holding-circle', 'fas fa-hands-praying', 'fas fa-handshake', 'far fa-fas fa-handshake', 'fas fa-handshake-angle', 'fas fa-handshake-simple', 'fas fa-handshake-simple-slash', 'fas fa-handshake-slash', 'fas fa-hanukiah', 'fas fa-hard-drive', 'far fa-fas fa-hard-drive', 'fab fa-hashnode', 'fas fa-hashtag', 'fas fa-hat-cowboy', 'fas fa-hat-cowboy-side', 'fas fa-hat-wizard', 'fas fa-head-side-cough', 'fas fa-head-side-cough-slash', 'fas fa-head-side-mask', 'fas fa-head-side-virus', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-simple', 'fas fa-headset', 'fas fa-heart', 'far fa-fas fa-heart', 'fas fa-heart-circle-bolt', 'fas fa-heart-circle-check', 'fas fa-heart-circle-exclamation', 'fas fa-heart-circle-minus', 'fas fa-heart-circle-plus', 'fas fa-heart-circle-xmark', 'fas fa-heart-crack', 'fas fa-heart-pulse', 'fas fa-helicopter', 'fas fa-helicopter-symbol', 'fas fa-helmet-safety', 'fas fa-helmet-un', 'fas fa-hexagon-nodes', 'fas fa-hexagon-nodes-bolt', 'fas fa-highlighter', 'fas fa-hill-avalanche', 'fas fa-hill-rockslide', 'fas fa-hippo', 'fab fa-hips', 'fab fa-hire-a-helper', 'fab fa-hive', 'fas fa-hockey-puck', 'fas fa-holly-berry', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-horse', 'fas fa-horse-head', 'fas fa-hospital', 'far fa-fas fa-hospital', 'fas fa-hospital-user', 'fas fa-hot-tub-person', 'fas fa-hotdog', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-fas fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'far fa-fas fa-hourglass-half', 'fas fa-hourglass-start', 'fas fa-house', 'fas fa-house-chimney', 'fas fa-house-chimney-crack', 'fas fa-house-chimney-medical', 'fas fa-house-chimney-user', 'fas fa-house-chimney-window', 'fas fa-house-circle-check', 'fas fa-house-circle-exclamation', 'fas fa-house-circle-xmark', 'fas fa-house-crack', 'fas fa-house-fire', 'fas fa-house-flag', 'fas fa-house-flood-water', 'fas fa-house-flood-water-circle-arrow-right', 'fas fa-house-laptop', 'fas fa-house-lock', 'fas fa-house-medical', 'fas fa-house-medical-circle-check', 'fas fa-house-medical-circle-exclamation', 'fas fa-house-medical-circle-xmark', 'fas fa-house-medical-flag', 'fas fa-house-signal', 'fas fa-house-tsunami', 'fas fa-house-user', 'fab fa-houzz', 'fas fa-hryvnia-sign', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-hurricane', 'fas fa-i', 'fas fa-i-cursor', 'fas fa-ice-cream', 'fas fa-icicles', 'fas fa-icons', 'fas fa-id-badge', 'far fa-fas fa-id-badge', 'fas fa-id-card', 'far fa-fas fa-id-card', 'fas fa-id-card-clip', 'fab fa-ideal', 'fas fa-igloo', 'fas fa-image', 'far fa-fas fa-image', 'fas fa-image-portrait', 'fas fa-images', 'far fa-fas fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-indian-rupee-sign', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fab fa-instagram', 'fab fa-instalod', 'fab fa-intercom', 'fab fa-internet-explorer', 'fab fa-invision', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itch-io', 'fab fa-itunes', 'fab fa-itunes-note', 'fas fa-j', 'fas fa-jar', 'fas fa-jar-wheat', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fas fa-jet-fighter', 'fas fa-jet-fighter-up', 'fab fa-jira', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fab fa-js', 'fab fa-jsfiddle', 'fas fa-jug-detergent', 'fab fa-jxl', 'fas fa-k', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-fas fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kip-sign', 'fas fa-kit-medical', 'fas fa-kitchen-set', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-l', 'fas fa-land-mine-on', 'fas fa-landmark', 'fas fa-landmark-dome', 'fas fa-landmark-flag', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fas fa-laptop-file', 'fas fa-laptop-medical', 'fab fa-laravel', 'fas fa-lari-sign', 'fab fa-lastfm', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-left-long', 'fas fa-left-right', 'fas fa-lemon', 'far fa-fas fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fab fa-letterboxd', 'fas fa-life-ring', 'far fa-fas fa-life-ring', 'fas fa-lightbulb', 'far fa-fas fa-lightbulb', 'fab fa-line', 'fas fa-lines-leaning', 'fas fa-link', 'fas fa-link-slash', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-check', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-litecoin-sign', 'fas fa-location-arrow', 'fas fa-location-crosshairs', 'fas fa-location-dot', 'fas fa-location-pin', 'fas fa-location-pin-lock', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-locust', 'fas fa-lungs', 'fas fa-lungs-virus', 'fab fa-lyft', 'fas fa-m', 'fab fa-magento', 'fas fa-magnet', 'fas fa-magnifying-glass', 'fas fa-magnifying-glass-arrow-right', 'fas fa-magnifying-glass-chart', 'fas fa-magnifying-glass-dollar', 'fas fa-magnifying-glass-location', 'fas fa-magnifying-glass-minus', 'fas fa-magnifying-glass-plus', 'fab fa-mailchimp', 'fas fa-manat-sign', 'fab fa-mandalorian', 'fas fa-map', 'far fa-fas fa-map', 'fas fa-map-location', 'fas fa-map-location-dot', 'fas fa-map-pin', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-and-venus', 'fas fa-mars-and-venus-burst', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-right', 'fas fa-mars-stroke-up', 'fas fa-martini-glass', 'fas fa-martini-glass-citrus', 'fas fa-martini-glass-empty', 'fas fa-mask', 'fas fa-mask-face', 'fas fa-mask-ventilator', 'fas fa-masks-theater', 'fab fa-mastodon', 'fas fa-mattress-pillow', 'fab fa-maxcdn', 'fas fa-maximize', 'fab fa-mdb', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-memory', 'fab fa-mendeley', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-message', 'far fa-fas fa-message', 'fab fa-meta', 'fas fa-meteor', 'fab fa-microblog', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-lines', 'fas fa-microphone-lines-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-mill-sign', 'fas fa-minimize', 'fab fa-mintbit', 'fas fa-minus', 'fas fa-mitten', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mixer', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-button', 'fas fa-mobile-retro', 'fas fa-mobile-screen', 'fas fa-mobile-screen-button', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-1', 'far fa-fas fa-money-bill-1', 'fas fa-money-bill-1-wave', 'fas fa-money-bill-transfer', 'fas fa-money-bill-trend-up', 'fas fa-money-bill-wave', 'fas fa-money-bill-wheat', 'fas fa-money-bills', 'fas fa-money-check', 'fas fa-money-check-dollar', 'fas fa-monument', 'fas fa-moon', 'far fa-fas fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-mosquito', 'fas fa-mosquito-net', 'fas fa-motorcycle', 'fas fa-mound', 'fas fa-mountain', 'fas fa-mountain-city', 'fas fa-mountain-sun', 'fas fa-mug-hot', 'fas fa-mug-saucer', 'fas fa-music', 'fas fa-n', 'fas fa-naira-sign', 'fab fa-napster', 'fab fa-neos', 'fas fa-network-wired', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-fas fa-newspaper', 'fab fa-nfc-directional', 'fab fa-nfc-symbol', 'fab fa-nimblr', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notdef', 'fas fa-note-sticky', 'far fa-fas fa-note-sticky', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-o', 'fas fa-object-group', 'far fa-fas fa-object-group', 'fas fa-object-ungroup', 'far fa-fas fa-object-ungroup', 'fab fa-octopus-deploy', 'fab fa-odnoklassniki', 'fab fa-odysee', 'fas fa-oil-can', 'fas fa-oil-well', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opensuse', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-orcid', 'fab fa-osi', 'fas fa-otter', 'fas fa-outdent', 'fas fa-p', 'fab fa-padlet', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-pager', 'fas fa-paint-roller', 'fas fa-paintbrush', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-panorama', 'fas fa-paper-plane', 'far fa-fas fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-passport', 'fas fa-paste', 'far fa-fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-clip', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-ruler', 'fas fa-pen-to-square', 'far fa-fas fa-pen-to-square', 'fas fa-pencil', 'fas fa-people-arrows', 'fas fa-people-carry-box', 'fas fa-people-group', 'fas fa-people-line', 'fas fa-people-pulling', 'fas fa-people-robbery', 'fas fa-people-roof', 'fas fa-pepper-hot', 'fab fa-perbyte', 'fas fa-percent', 'fab fa-periscope', 'fas fa-person', 'fas fa-person-arrow-down-to-line', 'fas fa-person-arrow-up-from-line', 'fas fa-person-biking', 'fas fa-person-booth', 'fas fa-person-breastfeeding', 'fas fa-person-burst', 'fas fa-person-cane', 'fas fa-person-chalkboard', 'fas fa-person-circle-check', 'fas fa-person-circle-exclamation', 'fas fa-person-circle-minus', 'fas fa-person-circle-plus', 'fas fa-person-circle-question', 'fas fa-person-circle-xmark', 'fas fa-person-digging', 'fas fa-person-dots-from-line', 'fas fa-person-dress', 'fas fa-person-dress-burst', 'fas fa-person-drowning', 'fas fa-person-falling', 'fas fa-person-falling-burst', 'fas fa-person-half-dress', 'fas fa-person-harassing', 'fas fa-person-hiking', 'fas fa-person-military-pointing', 'fas fa-person-military-rifle', 'fas fa-person-military-to-person', 'fas fa-person-praying', 'fas fa-person-pregnant', 'fas fa-person-rays', 'fas fa-person-rifle', 'fas fa-person-running', 'fas fa-person-shelter', 'fas fa-person-skating', 'fas fa-person-skiing', 'fas fa-person-skiing-nordic', 'fas fa-person-snowboarding', 'fas fa-person-swimming', 'fas fa-person-through-window', 'fas fa-person-walking', 'fas fa-person-walking-arrow-loop-left', 'fas fa-person-walking-arrow-right', 'fas fa-person-walking-dashed-line-arrow-right', 'fas fa-person-walking-luggage', 'fas fa-person-walking-with-cane', 'fas fa-peseta-sign', 'fas fa-peso-sign', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-flip', 'fas fa-phone-slash', 'fas fa-phone-volume', 'fas fa-photo-film', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pix', 'fab fa-pixiv', 'fas fa-pizza-slice', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-circle-check', 'fas fa-plane-circle-exclamation', 'fas fa-plane-circle-xmark', 'fas fa-plane-departure', 'fas fa-plane-lock', 'fas fa-plane-slash', 'fas fa-plane-up', 'fas fa-plant-wilt', 'fas fa-plate-wheat', 'fas fa-play', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plug-circle-bolt', 'fas fa-plug-circle-check', 'fas fa-plug-circle-exclamation', 'fas fa-plug-circle-minus', 'fas fa-plug-circle-plus', 'fas fa-plug-circle-xmark', 'fas fa-plus', 'fas fa-plus-minus', 'fas fa-podcast', 'fas fa-poo', 'fas fa-poo-storm', 'fas fa-poop', 'fas fa-power-off', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-medical', 'fas fa-print', 'fab fa-product-hunt', 'fas fa-pump-medical', 'fas fa-pump-soap', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fas fa-q', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-r', 'fab fa-r-project', 'fas fa-radiation', 'fas fa-radio', 'fas fa-rainbow', 'fas fa-ranking-star', 'fab fa-raspberry-pi', 'fab fa-ravelry', 'fab fa-react', 'fab fa-reacteurope', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-record-vinyl', 'fas fa-rectangle-ad', 'fas fa-rectangle-list', 'far fa-fas fa-rectangle-list', 'fas fa-rectangle-xmark', 'far fa-fas fa-rectangle-xmark', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-redhat', 'fas fa-registered', 'far fa-fas fa-registered', 'fab fa-renren', 'fas fa-repeat', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fas fa-republican', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-restroom', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-right-from-bracket', 'fas fa-right-left', 'fas fa-right-long', 'fas fa-right-to-bracket', 'fas fa-ring', 'fas fa-road', 'fas fa-road-barrier', 'fas fa-road-bridge', 'fas fa-road-circle-check', 'fas fa-road-circle-exclamation', 'fas fa-road-circle-xmark', 'fas fa-road-lock', 'fas fa-road-spikes', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-rotate', 'fas fa-rotate-left', 'fas fa-rotate-right', 'fas fa-route', 'fas fa-rss', 'fas fa-ruble-sign', 'fas fa-rug', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-rupiah-sign', 'fab fa-rust', 'fas fa-s', 'fas fa-sack-dollar', 'fas fa-sack-xmark', 'fab fa-safari', 'fas fa-sailboat', 'fab fa-salesforce', 'fab fa-sass', 'fas fa-satellite', 'fas fa-satellite-dish', 'fas fa-scale-balanced', 'fas fa-scale-unbalanced', 'fas fa-scale-unbalanced-flip', 'fab fa-schlix', 'fas fa-school', 'fas fa-school-circle-check', 'fas fa-school-circle-exclamation', 'fas fa-school-circle-xmark', 'fas fa-school-flag', 'fas fa-school-lock', 'fas fa-scissors', 'fab fa-screenpal', 'fas fa-screwdriver', 'fas fa-screwdriver-wrench', 'fab fa-scribd', 'fas fa-scroll', 'fas fa-scroll-torah', 'fas fa-sd-card', 'fab fa-searchengin', 'fas fa-section', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-from-square', 'far fa-fas fa-share-from-square', 'fas fa-share-nodes', 'fas fa-sheet-plastic', 'fas fa-shekel-sign', 'fas fa-shield', 'fas fa-shield-cat', 'fas fa-shield-dog', 'fas fa-shield-halved', 'fas fa-shield-heart', 'fas fa-shield-virus', 'fas fa-ship', 'fas fa-shirt', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fab fa-shoelace', 'fas fa-shop', 'fas fa-shop-lock', 'fas fa-shop-slash', 'fab fa-shopify', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shrimp', 'fas fa-shuffle', 'fas fa-shuttle-space', 'fas fa-sign-hanging', 'fas fa-signal', 'fab fa-signal-messenger', 'fas fa-signature', 'fas fa-signs-post', 'fas fa-sim-card', 'fab fa-simplybuilt', 'fas fa-sink', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fab fa-sitrox', 'fab fa-sketch', 'fas fa-skull', 'fas fa-skull-crossbones', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fas fa-slash', 'fas fa-sleigh', 'fas fa-sliders', 'fab fa-slideshare', 'fas fa-smog', 'fas fa-smoking', 'fab fa-snapchat', 'fas fa-snowflake', 'far fa-fas fa-snowflake', 'fas fa-snowman', 'fas fa-snowplow', 'fas fa-soap', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-down', 'fas fa-sort-up', 'fab fa-soundcloud', 'fab fa-sourcetree', 'fas fa-spa', 'fab fa-space-awesome', 'fas fa-spaghetti-monster-flying', 'fab fa-speakap', 'fab fa-speaker-deck', 'fas fa-spell-check', 'fas fa-spider', 'fas fa-spinner', 'fas fa-splotch', 'fas fa-spoon', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-spray-can-sparkles', 'fas fa-square', 'far fa-fas fa-square', 'fas fa-square-arrow-up-right', 'fab fa-square-behance', 'fas fa-square-binary', 'fab fa-square-bluesky', 'fas fa-square-caret-down', 'far fa-fas fa-square-caret-down', 'fas fa-square-caret-left', 'far fa-fas fa-square-caret-left', 'fas fa-square-caret-right', 'far fa-fas fa-square-caret-right', 'fas fa-square-caret-up', 'far fa-fas fa-square-caret-up', 'fas fa-square-check', 'far fa-fas fa-square-check', 'fab fa-square-dribbble', 'fas fa-square-envelope', 'fab fa-square-facebook', 'fab fa-square-font-awesome', 'fab fa-square-font-awesome-stroke', 'fas fa-square-full', 'far fa-fas fa-square-full', 'fab fa-square-git', 'fab fa-square-github', 'fab fa-square-gitlab', 'fab fa-square-google-plus', 'fas fa-square-h', 'fab fa-square-hacker-news', 'fab fa-square-instagram', 'fab fa-square-js', 'fab fa-square-lastfm', 'fab fa-square-letterboxd', 'fas fa-square-minus', 'far fa-fas fa-square-minus', 'fas fa-square-nfi', 'fab fa-square-odnoklassniki', 'fas fa-square-parking', 'fas fa-square-pen', 'fas fa-square-person-confined', 'fas fa-square-phone', 'fas fa-square-phone-flip', 'fab fa-square-pied-piper', 'fab fa-square-pinterest', 'fas fa-square-plus', 'far fa-fas fa-square-plus', 'fas fa-square-poll-horizontal', 'fas fa-square-poll-vertical', 'fab fa-square-reddit', 'fas fa-square-root-variable', 'fas fa-square-rss', 'fas fa-square-share-nodes', 'fab fa-square-snapchat', 'fab fa-square-steam', 'fab fa-square-threads', 'fab fa-square-tumblr', 'fab fa-square-twitter', 'fas fa-square-up-right', 'fab fa-square-upwork', 'fab fa-square-viadeo', 'fab fa-square-vimeo', 'fas fa-square-virus', 'fab fa-square-web-awesome', 'fab fa-square-web-awesome-stroke', 'fab fa-square-whatsapp', 'fab fa-square-x-twitter', 'fab fa-square-xing', 'fas fa-square-xmark', 'fab fa-square-youtube', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fab fa-stackpath', 'fas fa-staff-snake', 'fas fa-stairs', 'fas fa-stamp', 'fas fa-stapler', 'fas fa-star', 'far fa-fas fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-fas fa-star-half', 'fas fa-star-half-stroke', 'far fa-fas fa-star-half-stroke', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-symbol', 'fas fa-sterling-sign', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-stop', 'fas fa-stopwatch', 'fas fa-stopwatch-20', 'fas fa-store', 'fas fa-store-slash', 'fab fa-strava', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-stubber', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-suitcase', 'fas fa-suitcase-medical', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-fas fa-sun', 'fas fa-sun-plant-wilt', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fab fa-suse', 'fas fa-swatchbook', 'fab fa-swift', 'fab fa-symfony', 'fas fa-synagogue', 'fas fa-syringe', 'fas fa-t', 'fas fa-table', 'fas fa-table-cells', 'fas fa-table-cells-column-lock', 'fas fa-table-cells-large', 'fas fa-table-cells-row-lock', 'fas fa-table-cells-row-unlock', 'fas fa-table-columns', 'fas fa-table-list', 'fas fa-table-tennis-paddle-ball', 'fas fa-tablet', 'fas fa-tablet-button', 'fas fa-tablet-screen-button', 'fas fa-tablets', 'fas fa-tachograph-digital', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tarp', 'fas fa-tarp-droplet', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fas fa-temperature-arrow-down', 'fas fa-temperature-arrow-up', 'fas fa-temperature-empty', 'fas fa-temperature-full', 'fas fa-temperature-half', 'fas fa-temperature-high', 'fas fa-temperature-low', 'fas fa-temperature-quarter', 'fas fa-temperature-three-quarters', 'fab fa-tencent-weibo', 'fas fa-tenge-sign', 'fas fa-tent', 'fas fa-tent-arrow-down-to-line', 'fas fa-tent-arrow-left-right', 'fas fa-tent-arrow-turn-left', 'fas fa-tent-arrows-down', 'fas fa-tents', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-slash', 'fas fa-text-width', 'fab fa-the-red-yeti', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fab fa-think-peaks', 'fab fa-threads', 'fas fa-thumbs-down', 'far fa-fas fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-fas fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-thumbtack-slash', 'fas fa-ticket', 'fas fa-ticket-simple', 'fab fa-tiktok', 'fas fa-timeline', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toilet', 'fas fa-toilet-paper', 'fas fa-toilet-paper-slash', 'fas fa-toilet-portable', 'fas fa-toilets-portable', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torii-gate', 'fas fa-tornado', 'fas fa-tower-broadcast', 'fas fa-tower-cell', 'fas fa-tower-observation', 'fas fa-tractor', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-trailer', 'fas fa-train', 'fas fa-train-subway', 'fas fa-train-tram', 'fas fa-transgender', 'fas fa-trash', 'fas fa-trash-arrow-up', 'fas fa-trash-can', 'far fa-fas fa-trash-can', 'fas fa-trash-can-arrow-up', 'fas fa-tree', 'fas fa-tree-city', 'fab fa-trello', 'fas fa-triangle-exclamation', 'fas fa-trophy', 'fas fa-trowel', 'fas fa-trowel-bricks', 'fas fa-truck', 'fas fa-truck-arrow-right', 'fas fa-truck-droplet', 'fas fa-truck-fast', 'fas fa-truck-field', 'fas fa-truck-field-un', 'fas fa-truck-front', 'fas fa-truck-medical', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-truck-plane', 'fas fa-truck-ramp-box', 'fas fa-tty', 'fab fa-tumblr', 'fas fa-turkish-lira-sign', 'fas fa-turn-down', 'fas fa-turn-up', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-typo3', 'fas fa-u', 'fab fa-uber', 'fab fa-ubuntu', 'fab fa-uikit', 'fab fa-umbraco', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fab fa-uncharted', 'fas fa-underline', 'fab fa-uniregistry', 'fab fa-unity', 'fas fa-universal-access', 'fas fa-unlock', 'fas fa-unlock-keyhole', 'fab fa-unsplash', 'fab fa-untappd', 'fas fa-up-down', 'fas fa-up-down-left-right', 'fas fa-up-long', 'fas fa-up-right-and-down-left-from-center', 'fas fa-up-right-from-square', 'fas fa-upload', 'fab fa-ups', 'fab fa-upwork', 'fab fa-usb', 'fas fa-user', 'far fa-fas fa-user', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-clock', 'fas fa-user-doctor', 'fas fa-user-gear', 'fas fa-user-graduate', 'fas fa-user-group', 'fas fa-user-injured', 'fas fa-user-large', 'fas fa-user-large-slash', 'fas fa-user-lock', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-nurse', 'fas fa-user-pen', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-xmark', 'fas fa-users', 'fas fa-users-between-lines', 'fas fa-users-gear', 'fas fa-users-line', 'fas fa-users-rays', 'fas fa-users-rectangle', 'fas fa-users-slash', 'fas fa-users-viewfinder', 'fab fa-usps', 'fab fa-ussunnah', 'fas fa-utensils', 'fas fa-v', 'fab fa-vaadin', 'fas fa-van-shuttle', 'fas fa-vault', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fas fa-vest', 'fas fa-vest-patches', 'fab fa-viacoin', 'fab fa-viadeo', 'fas fa-vial', 'fas fa-vial-circle-check', 'fas fa-vial-virus', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-v', 'fab fa-vine', 'fas fa-virus', 'fas fa-virus-covid', 'fas fa-virus-covid-slash', 'fas fa-virus-slash', 'fas fa-viruses', 'fab fa-vk', 'fab fa-vnv', 'fas fa-voicemail', 'fas fa-volcano', 'fas fa-volleyball', 'fas fa-volume-high', 'fas fa-volume-low', 'fas fa-volume-off', 'fas fa-volume-xmark', 'fas fa-vr-cardboard', 'fab fa-vuejs', 'fas fa-w', 'fas fa-walkie-talkie', 'fas fa-wallet', 'fas fa-wand-magic', 'fas fa-wand-magic-sparkles', 'fas fa-wand-sparkles', 'fas fa-warehouse', 'fab fa-watchman-monitoring', 'fas fa-water', 'fas fa-water-ladder', 'fas fa-wave-square', 'fab fa-waze', 'fas fa-web-awesome', 'fab fa-fas fa-web-awesome', 'fab fa-webflow', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight-hanging', 'fas fa-weight-scale', 'fab fa-weixin', 'fab fa-whatsapp', 'fas fa-wheat-awn', 'fas fa-wheat-awn-circle-exclamation', 'fas fa-wheelchair', 'fas fa-wheelchair-move', 'fas fa-whiskey-glass', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-wind', 'fas fa-window-maximize', 'far fa-fas fa-window-maximize', 'fas fa-window-minimize', 'far fa-fas fa-window-minimize', 'fas fa-window-restore', 'far fa-fas fa-window-restore', 'fab fa-windows', 'fas fa-wine-bottle', 'fas fa-wine-glass', 'fas fa-wine-glass-empty', 'fab fa-wirsindhandwerk', 'fab fa-wix', 'fab fa-wizards-of-the-coast', 'fab fa-wodu', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fas fa-worm', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fab fa-wpressr', 'fas fa-wrench', 'fas fa-x', 'fas fa-x-ray', 'fab fa-x-twitter', 'fab fa-xbox', 'fab fa-xing', 'fas fa-xmark', 'fas fa-xmarks-lines', 'fas fa-y', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yammer', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yarn', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fas fa-z', 'fab fa-zhihu' ); }
}
3 3
\ No newline at end of file
Please login to merge, or discard this patch.
redux-core/inc/extensions/taxonomy/class-redux-taxonomy-api.php 2 patches
Indentation   +627 added lines, -627 removed lines patch added patch discarded remove patch
@@ -13,631 +13,631 @@
 block discarded – undo
13 13
 // Don't duplicate me!
14 14
 if ( ! class_exists( 'Redux_Taxonomy' ) ) {
15 15
 
16
-	/**
17
-	 * Redux Taxonomy API Class
18
-	 * Simple API for Redux Framework
19
-	 *
20
-	 * @since       1.0.0
21
-	 */
22
-	class Redux_Taxonomy {
23
-
24
-		/**
25
-		 * Terms array.
26
-		 *
27
-		 * @var array
28
-		 */
29
-		public static array $terms = array();
30
-
31
-		/**
32
-		 * Sections array.
33
-		 *
34
-		 * @var array
35
-		 */
36
-		public static array $sections = array();
37
-
38
-		/**
39
-		 * Fields array.
40
-		 *
41
-		 * @var array
42
-		 */
43
-		public static array $fields = array();
44
-
45
-		/**
46
-		 * Priority array.
47
-		 *
48
-		 * @var array
49
-		 */
50
-		public static array $priority = array();
51
-
52
-		/**
53
-		 * Errors array.
54
-		 *
55
-		 * @var array
56
-		 */
57
-		public static array $errors = array();
58
-
59
-		/**
60
-		 * Init array.
61
-		 *
62
-		 * @var array
63
-		 */
64
-		public static array $init = array();
65
-
66
-		/**
67
-		 * Args array.
68
-		 *
69
-		 * @var array
70
-		 */
71
-		public static array $args = array();
72
-
73
-		/**
74
-		 * Load.
75
-		 */
76
-		public static function load() {
77
-			add_action( 'init', array( 'Redux_Taxonomy', 'enqueue' ), 99 );
78
-		}
79
-
80
-		/**
81
-		 * Enqueue support files and fields.
82
-		 *
83
-		 * @throws ReflectionException Exception.
84
-		 */
85
-		public static function enqueue() {
86
-			global $pagenow;
87
-
88
-			// Check and run instances of Redux where the opt_name hasn't been run.
89
-			$pagenows = array( 'edit-tags.php', 'term.php' );
90
-
91
-			if ( ! empty( self::$sections ) && in_array( $pagenow, $pagenows, true ) ) {
92
-				$instances = Redux::all_instances();
93
-
94
-				foreach ( self::$fields as $opt_name => $fields ) {
95
-					if ( ! isset( $instances[ $opt_name ] ) ) {
96
-						Redux::set_args( $opt_name, array( 'menu_type' => 'hidden' ) );
97
-
98
-						Redux::set_sections(
99
-							$opt_name,
100
-							array(
101
-								array(
102
-									'id'     => 'EXTENSION_TAXONOMY_FAKE_ID' . $opt_name,
103
-									'fields' => $fields,
104
-									'title'  => 'N/A',
105
-								),
106
-							)
107
-						);
108
-
109
-						Redux::init( $opt_name );
110
-
111
-						$instances = ReduxFrameworkInstances::get_all_instances();
112
-					}
113
-
114
-					self::check_opt_name( $opt_name );
115
-
116
-					Redux::set_args( $opt_name, self::$args[ $opt_name ] );
117
-				}
118
-			}
119
-		}
120
-
121
-		/**
122
-		 * Construct Args.
123
-		 *
124
-		 * @param string $opt_name Panel opt_name.
125
-		 *
126
-		 * @return mixed
127
-		 */
128
-		public static function construct_args( string $opt_name ) {
129
-			$args             = self::$args[ $opt_name ];
130
-			$args['opt_name'] = $opt_name;
131
-
132
-			if ( ! isset( $args['menu_title'] ) ) {
133
-				$args['menu_title'] = ucfirst( $opt_name ) . ' Options';
134
-			}
135
-
136
-			if ( ! isset( $args['page_title'] ) ) {
137
-				$args['page_title'] = ucfirst( $opt_name ) . ' Options';
138
-			}
139
-
140
-			if ( ! isset( $args['page_slug'] ) ) {
141
-				$args['page_slug'] = $opt_name . '_options';
142
-			}
143
-
144
-			return $args;
145
-		}
146
-
147
-		/**
148
-		 * Construct Terms
149
-		 *
150
-		 * @param string $opt_name Panel opt_name.
151
-		 *
152
-		 * @return array
153
-		 */
154
-		public static function construct_terms( string $opt_name ): array {
155
-			$terms = array();
156
-
157
-			if ( ! isset( self::$terms[ $opt_name ] ) ) {
158
-				return $terms;
159
-			}
160
-
161
-			foreach ( self::$terms[ $opt_name ] as $term ) {
162
-				$term['sections'] = self::construct_sections( $opt_name, $term['id'] );
163
-				$terms[]          = $term;
164
-			}
165
-
166
-			ksort( $terms );
167
-
168
-			return $terms;
169
-		}
170
-
171
-		/**
172
-		 * Construct Sections.
173
-		 *
174
-		 * @param string $opt_name       Panel opt_name.
175
-		 * @param string $term_id        Term ID.
176
-		 *
177
-		 * @return array
178
-		 */
179
-		public static function construct_sections( string $opt_name, string $term_id ): array {
180
-			$sections = array();
181
-
182
-			if ( ! isset( self::$sections[ $opt_name ] ) ) {
183
-				return $sections;
184
-			}
185
-
186
-			foreach ( self::$sections[ $opt_name ] as $section_id => $section ) {
187
-				if ( $section['term_id'] === $term_id ) {
188
-					self::$sections[ $opt_name ][ $section_id ]['add_visibility'] = $section;
189
-
190
-					$p = $section['priority'];
191
-
192
-					while ( isset( $sections[ $p ] ) ) {
193
-						echo esc_html( $p++ );
194
-					}
195
-
196
-					$section['fields'] = self::construct_fields( $opt_name, $section_id );
197
-					$sections[ $p ]    = $section;
198
-				}
199
-			}
200
-
201
-			ksort( $sections );
202
-
203
-			return $sections;
204
-		}
205
-
206
-		/**
207
-		 * Construct Fields.
208
-		 *
209
-		 * @param string $opt_name       Panel opt_name.
210
-		 * @param string $section_id     Section ID.
211
-		 * @param bool   $permissions    Permissions.
212
-		 * @param bool   $add_visibility Add visibility.
213
-		 *
214
-		 * @return array
215
-		 */
216
-		public static function construct_fields( string $opt_name = '', string $section_id = '', bool $permissions = false, bool $add_visibility = false ): array {
217
-			$fields = array();
218
-
219
-			if ( ! isset( self::$fields[ $opt_name ] ) ) {
220
-				return $fields;
221
-			}
222
-
223
-			foreach ( self::$fields[ $opt_name ] as $key => $field ) {
224
-				// Nested permissions.
225
-				$field['permissions'] = $field['permissions'] ?? $permissions;
226
-
227
-				self::$fields[ $opt_name ][ $key ]['permissions'] = $field['permissions'];
228
-
229
-				// Nested add_visibility permissions.
230
-				$field['add_visibility'] = $field['add_visibility'] ?? $add_visibility;
231
-
232
-				self::$fields[ $opt_name ][ $key ]['add_visibility'] = $field['add_visibility'];
233
-
234
-				if ( $field['section_id'] === $section_id ) {
235
-					$p = $field['priority'];
236
-
237
-					while ( isset( $fields[ $p ] ) ) {
238
-						echo esc_html( $p++ );
239
-					}
240
-
241
-					$fields[ $p ] = $field;
242
-				}
243
-			}
244
-
245
-			ksort( $fields );
246
-
247
-			return $fields;
248
-		}
249
-
250
-		/**
251
-		 * Get Section.
252
-		 *
253
-		 * @param string $opt_name Panel opt_name.
254
-		 * @param string $id       ID.
255
-		 *
256
-		 * @return bool
257
-		 */
258
-		public static function get_section( string $opt_name = '', string $id = '' ): bool {
259
-			self::check_opt_name( $opt_name );
260
-
261
-			if ( ! empty( $opt_name ) && ! empty( $id ) ) {
262
-				if ( ! isset( self::$sections[ $opt_name ][ $id ] ) ) {
263
-					$id = strtolower( sanitize_html_class( $id ) );
264
-				}
265
-
266
-				return self::$sections[ $opt_name ][ $id ] ?? false;
267
-			}
268
-
269
-			return false;
270
-		}
271
-
272
-		/**
273
-		 * Set_section.
274
-		 *
275
-		 * @param string $opt_name Panel opt_name.
276
-		 * @param array  $section  Section array.
277
-		 */
278
-		public static function set_section( string $opt_name = '', array $section = array() ) {
279
-			self::check_opt_name( $opt_name );
280
-
281
-			if ( ! empty( $opt_name ) && is_array( $section ) && ! empty( $section ) ) {
282
-				if ( ! isset( $section['id'] ) ) {
283
-					if ( isset( $section['title'] ) ) {
284
-						$section['id'] = strtolower( sanitize_html_class( $section['title'] ) );
285
-					} else {
286
-						$section['id'] = 'section';
287
-					}
288
-
289
-					if ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
290
-						$orig = $section['id'];
291
-						$i    = 0;
292
-
293
-						while ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
294
-							$section['id'] = $orig . '_' . $i;
295
-						}
296
-					}
297
-				}
298
-
299
-				if ( ! isset( $section['priority'] ) ) {
300
-					$section['priority'] = self::get_priority( $opt_name, 'sections' );
301
-				}
302
-
303
-				if ( isset( $section['fields'] ) ) {
304
-					if ( ! empty( $section['fields'] ) && is_array( $section['fields'] ) ) {
305
-						if ( isset( $section['permissions'] ) || isset( $section['add_visibility'] ) ) {
306
-							foreach ( $section['fields'] as $key => $field ) {
307
-								if ( ! isset( $field['permissions'] ) && isset( $section['permissions'] ) ) {
308
-									$section['fields'][ $key ]['permissions'] = $section['permissions'];
309
-								}
310
-
311
-								if ( ! isset( $field['add_visibility'] ) && isset( $section['add_visibility'] ) ) {
312
-									$section['fields'][ $key ]['add_visibility'] = $section['add_visibility'];
313
-								}
314
-							}
315
-						}
316
-
317
-						self::process_fields_array( $opt_name, $section['id'], $section['fields'] );
318
-					}
319
-
320
-					unset( $section['fields'] );
321
-				}
322
-
323
-				self::$sections[ $opt_name ][ $section['id'] ] = $section;
324
-			} else {
325
-				self::$errors[ $opt_name ]['section']['empty'] = esc_html__( 'Unable to create a section due an empty section array or the section variable passed was not an array.', 'redux-framework' );
326
-			}
327
-		}
328
-
329
-		/**
330
-		 * Process Sections Array.
331
-		 *
332
-		 * @param string $opt_name Panel opt_name.
333
-		 * @param string $term_id  Term ID.
334
-		 * @param array  $sections Sections array.
335
-		 */
336
-		public static function process_sections_array( string $opt_name = '', string $term_id = '', array $sections = array() ) {
337
-			if ( ! empty( $opt_name ) && ! empty( $term_id ) && is_array( $sections ) && ! empty( $sections ) ) {
338
-				foreach ( $sections as $section ) {
339
-					if ( ! is_array( $section ) ) {
340
-						continue;
341
-					}
342
-
343
-					$section['term_id'] = $term_id;
344
-
345
-					if ( ! isset( $section['fields'] ) || ! is_array( $section['fields'] ) ) {
346
-						$section['fields'] = array();
347
-					}
348
-
349
-					self::set_section( $opt_name, $section );
350
-				}
351
-			}
352
-		}
353
-
354
-		/**
355
-		 * Process field array.
356
-		 *
357
-		 * @param string $opt_name   Panel opt_name.
358
-		 * @param string $section_id Section ID.
359
-		 * @param array  $fields     Fields array.
360
-		 */
361
-		public static function process_fields_array( string $opt_name = '', string $section_id = '', array $fields = array() ) {
362
-			if ( ! empty( $opt_name ) && ! empty( $section_id ) && is_array( $fields ) && ! empty( $fields ) ) {
363
-				foreach ( $fields as $field ) {
364
-					if ( ! is_array( $field ) ) {
365
-						continue;
366
-					}
367
-
368
-					$field['section_id'] = $section_id;
369
-
370
-					self::set_field( $opt_name, $field );
371
-				}
372
-			}
373
-		}
374
-
375
-		/**
376
-		 * Get field.
377
-		 *
378
-		 * @param string $opt_name Panel opt_name.
379
-		 * @param string $id       ID.
380
-		 *
381
-		 * @return bool
382
-		 */
383
-		public static function get_field( string $opt_name = '', string $id = '' ): bool {
384
-			self::check_opt_name( $opt_name );
385
-
386
-			if ( ! empty( $opt_name ) && ! empty( $id ) ) {
387
-				return self::$fields[ $opt_name ][ $id ] ?? false;
388
-			}
389
-
390
-			return false;
391
-		}
392
-
393
-		/**
394
-		 * Set field.
395
-		 *
396
-		 * @param string $opt_name Panel opt_name.
397
-		 * @param array  $field    Field array.
398
-		 */
399
-		public static function set_field( string $opt_name = '', array $field = array() ) {
400
-			self::check_opt_name( $opt_name );
401
-
402
-			if ( ! empty( $opt_name ) && is_array( $field ) && ! empty( $field ) ) {
403
-				if ( ! isset( $field['priority'] ) ) {
404
-					$field['priority'] = self::get_priority( $opt_name, 'fields' );
405
-				}
406
-
407
-				self::$fields[ $opt_name ][ $field['id'] ] = $field;
408
-			}
409
-		}
410
-
411
-		/**
412
-		 * Set args.
413
-		 *
414
-		 * @param string $opt_name Panel opt_name.
415
-		 * @param array  $args     Args array.
416
-		 */
417
-		public static function set_args( string $opt_name = '', array $args = array() ) {
418
-			self::check_opt_name( $opt_name );
419
-
420
-			if ( ! empty( $opt_name ) && is_array( $args ) && ! empty( $args ) ) {
421
-				self::$args[ $opt_name ] = self::$args[ $opt_name ] ?? array();
422
-				self::$args[ $opt_name ] = wp_parse_args( $args, self::$args[ $opt_name ] );
423
-			}
424
-		}
425
-
426
-		/**
427
-		 * Set term.
428
-		 *
429
-		 * @param string $opt_name Panel opt_name.
430
-		 * @param array  $term     Term array.
431
-		 */
432
-		public static function set_term( string $opt_name = '', array $term = array() ) {
433
-			self::check_opt_name( $opt_name );
434
-
435
-			if ( ! empty( $opt_name ) && is_array( $term ) && ! empty( $term ) ) {
436
-				if ( ! isset( $term['id'] ) ) {
437
-					if ( isset( $term['title'] ) ) {
438
-						$term['id'] = strtolower( sanitize_html_class( $term['title'] ) );
439
-					} else {
440
-						$term['id'] = 'term';
441
-					}
442
-
443
-					if ( isset( self::$terms[ $opt_name ][ $term['id'] ] ) ) {
444
-						$orig = $term['id'];
445
-						$i    = 0;
446
-
447
-						while ( isset( self::$terms[ $opt_name ][ $term['id'] ] ) ) {
448
-							$term['id'] = $orig . '_' . $i;
449
-						}
450
-					}
451
-				}
452
-
453
-				if ( isset( $term['sections'] ) ) {
454
-					if ( ! empty( $term['sections'] ) && is_array( $term['sections'] ) ) {
455
-						if ( isset( $term['permissions'] ) || isset( $term['add_visibility'] ) ) {
456
-							foreach ( $term['sections'] as $key => $section ) {
457
-								if ( ! isset( $section['permissions'] ) && isset( $term['permissions'] ) ) {
458
-									$term['sections'][ $key ]['permissions'] = $term['permissions'];
459
-								}
460
-
461
-								if ( ! isset( $section['add_visibility'] ) && isset( $term['add_visibility'] ) ) {
462
-									$term['sections'][ $key ]['add_visibility'] = $term['add_visibility'];
463
-								}
464
-							}
465
-						}
466
-
467
-						self::process_sections_array( $opt_name, $term['id'], $term['sections'] );
468
-					}
469
-
470
-					unset( $term['sections'] );
471
-				}
472
-
473
-				self::$terms[ $opt_name ][ $term['id'] ] = $term;
474
-			} else {
475
-				self::$errors[ $opt_name ]['term']['empty'] = esc_html__( 'Unable to create a term due an empty term array or the term variable passed was not an array.', 'redux-framework' );
476
-			}
477
-		}
478
-
479
-		/**
480
-		 * Get terms.
481
-		 *
482
-		 * @param string $opt_name Panel opt_name.
483
-		 *
484
-		 * @return mixed
485
-		 */
486
-		public static function get_terms( string $opt_name = '' ) {
487
-			self::check_opt_name( $opt_name );
488
-
489
-			if ( ! empty( $opt_name ) && ! empty( self::$terms[ $opt_name ] ) ) {
490
-				return self::$terms[ $opt_name ];
491
-			}
492
-
493
-			return false;
494
-		}
495
-
496
-		/**
497
-		 * Get priority.
498
-		 *
499
-		 * @param string $opt_name Panel opt_name.
500
-		 * @param string $type     Field type.
501
-		 *
502
-		 * @return mixed
503
-		 */
504
-		public static function get_priority( string $opt_name, string $type ) {
505
-			$priority                              = self::$priority[ $opt_name ][ $type ];
506
-			self::$priority[ $opt_name ][ $type ] += 1;
507
-
508
-			return $priority;
509
-		}
510
-
511
-		/**
512
-		 * Check opt_name.
513
-		 *
514
-		 * @param string $opt_name Panel opt_name.
515
-		 */
516
-		public static function check_opt_name( string $opt_name = '' ) {
517
-			if ( empty( $opt_name ) || is_array( $opt_name ) ) {
518
-				return;
519
-			}
520
-
521
-			if ( ! isset( self::$terms[ $opt_name ] ) ) {
522
-				self::$terms[ $opt_name ] = array();
523
-			}
524
-
525
-			if ( ! isset( self::$priority[ $opt_name ] ) ) {
526
-				self::$priority[ $opt_name ]['args'] = 1;
527
-			}
528
-
529
-			if ( ! isset( self::$sections[ $opt_name ] ) ) {
530
-				self::$sections[ $opt_name ]             = array();
531
-				self::$priority[ $opt_name ]['sections'] = 1;
532
-			}
533
-
534
-			if ( ! isset( self::$fields[ $opt_name ] ) ) {
535
-				self::$fields[ $opt_name ]             = array();
536
-				self::$priority[ $opt_name ]['fields'] = 1;
537
-			}
538
-
539
-			if ( ! isset( self::$errors[ $opt_name ] ) ) {
540
-				self::$errors[ $opt_name ] = array();
541
-			}
542
-
543
-			if ( ! isset( self::$init[ $opt_name ] ) ) {
544
-				self::$init[ $opt_name ] = false;
545
-			}
546
-
547
-			if ( ! isset( self::$args[ $opt_name ] ) ) {
548
-				self::$args[ $opt_name ] = false;
549
-			}
550
-		}
551
-
552
-		/**
553
-		 * Get field defaults.
554
-		 *
555
-		 * @param string $opt_name Panel opt_name.
556
-		 *
557
-		 * @return array|void
558
-		 */
559
-		public static function get_field_defaults( string $opt_name ) {
560
-			if ( empty( $opt_name ) ) {
561
-				return;
562
-			}
563
-
564
-			if ( ! isset( self::$fields[ $opt_name ] ) ) {
565
-				return array();
566
-			}
567
-
568
-			return array_map(
569
-				function ( $field ) {
570
-					return $field['default'] ?? '';
571
-				},
572
-				self::$fields[ $opt_name ]
573
-			);
574
-		}
575
-
576
-		/**
577
-		 * Get term meta.
578
-		 *
579
-		 * @param array $args Args array.
580
-		 *
581
-		 * @return array|mixed|string
582
-		 */
583
-		public static function get_term_meta( array $args = array() ) {
584
-			$default = array(
585
-				'key'      => '',
586
-				'opt_name' => '',
587
-				'taxonomy' => '',
588
-			);
589
-
590
-			$args = wp_parse_args( $args, $default );
591
-
592
-			// phpcs:ignore WordPress.PHP.DontExtract
593
-			extract( $args );
594
-
595
-			if ( empty( $taxonomy ) ) {
596
-				return array();
597
-			}
598
-
599
-			$single = ! empty( $key );
600
-
601
-			$meta = get_term_meta( $taxonomy, $key, $single );
602
-
603
-			// phpcs:ignore Generic.CodeAnalysis.EmptyStatement
604
-			if ( $single ) {
605
-				// Do nothing.
606
-			} elseif ( ! empty( $meta ) ) {
607
-				foreach ( $meta as $key => $value ) {
608
-					if ( is_array( $value ) ) {
609
-						$value = $value[0];
610
-					}
611
-
612
-					$meta[ $key ] = maybe_unserialize( $value );
613
-				}
614
-			}
615
-
616
-			if ( ! empty( $opt_name ) ) {
617
-				$defaults = self::get_field_defaults( $opt_name );
618
-
619
-				if ( $single ) {
620
-					$default_value = '';
621
-
622
-					if ( isset( $defaults[ $key ] ) ) {
623
-						$default_value = $defaults[ $key ];
624
-					}
625
-
626
-					if ( is_array( $meta ) ) {
627
-						if ( is_array( $default_value ) ) {
628
-							$meta = wp_parse_args( $meta, $default_value );
629
-						}
630
-					} elseif ( '' === $meta && '' !== $default_value ) {
631
-							$meta = $default_value;
632
-					}
633
-				} else {
634
-					$meta = wp_parse_args( $meta, $defaults );
635
-				}
636
-			}
637
-
638
-			return $meta;
639
-		}
640
-	}
641
-
642
-	Redux_Taxonomy::load();
16
+    /**
17
+     * Redux Taxonomy API Class
18
+     * Simple API for Redux Framework
19
+     *
20
+     * @since       1.0.0
21
+     */
22
+    class Redux_Taxonomy {
23
+
24
+        /**
25
+         * Terms array.
26
+         *
27
+         * @var array
28
+         */
29
+        public static array $terms = array();
30
+
31
+        /**
32
+         * Sections array.
33
+         *
34
+         * @var array
35
+         */
36
+        public static array $sections = array();
37
+
38
+        /**
39
+         * Fields array.
40
+         *
41
+         * @var array
42
+         */
43
+        public static array $fields = array();
44
+
45
+        /**
46
+         * Priority array.
47
+         *
48
+         * @var array
49
+         */
50
+        public static array $priority = array();
51
+
52
+        /**
53
+         * Errors array.
54
+         *
55
+         * @var array
56
+         */
57
+        public static array $errors = array();
58
+
59
+        /**
60
+         * Init array.
61
+         *
62
+         * @var array
63
+         */
64
+        public static array $init = array();
65
+
66
+        /**
67
+         * Args array.
68
+         *
69
+         * @var array
70
+         */
71
+        public static array $args = array();
72
+
73
+        /**
74
+         * Load.
75
+         */
76
+        public static function load() {
77
+            add_action( 'init', array( 'Redux_Taxonomy', 'enqueue' ), 99 );
78
+        }
79
+
80
+        /**
81
+         * Enqueue support files and fields.
82
+         *
83
+         * @throws ReflectionException Exception.
84
+         */
85
+        public static function enqueue() {
86
+            global $pagenow;
87
+
88
+            // Check and run instances of Redux where the opt_name hasn't been run.
89
+            $pagenows = array( 'edit-tags.php', 'term.php' );
90
+
91
+            if ( ! empty( self::$sections ) && in_array( $pagenow, $pagenows, true ) ) {
92
+                $instances = Redux::all_instances();
93
+
94
+                foreach ( self::$fields as $opt_name => $fields ) {
95
+                    if ( ! isset( $instances[ $opt_name ] ) ) {
96
+                        Redux::set_args( $opt_name, array( 'menu_type' => 'hidden' ) );
97
+
98
+                        Redux::set_sections(
99
+                            $opt_name,
100
+                            array(
101
+                                array(
102
+                                    'id'     => 'EXTENSION_TAXONOMY_FAKE_ID' . $opt_name,
103
+                                    'fields' => $fields,
104
+                                    'title'  => 'N/A',
105
+                                ),
106
+                            )
107
+                        );
108
+
109
+                        Redux::init( $opt_name );
110
+
111
+                        $instances = ReduxFrameworkInstances::get_all_instances();
112
+                    }
113
+
114
+                    self::check_opt_name( $opt_name );
115
+
116
+                    Redux::set_args( $opt_name, self::$args[ $opt_name ] );
117
+                }
118
+            }
119
+        }
120
+
121
+        /**
122
+         * Construct Args.
123
+         *
124
+         * @param string $opt_name Panel opt_name.
125
+         *
126
+         * @return mixed
127
+         */
128
+        public static function construct_args( string $opt_name ) {
129
+            $args             = self::$args[ $opt_name ];
130
+            $args['opt_name'] = $opt_name;
131
+
132
+            if ( ! isset( $args['menu_title'] ) ) {
133
+                $args['menu_title'] = ucfirst( $opt_name ) . ' Options';
134
+            }
135
+
136
+            if ( ! isset( $args['page_title'] ) ) {
137
+                $args['page_title'] = ucfirst( $opt_name ) . ' Options';
138
+            }
139
+
140
+            if ( ! isset( $args['page_slug'] ) ) {
141
+                $args['page_slug'] = $opt_name . '_options';
142
+            }
143
+
144
+            return $args;
145
+        }
146
+
147
+        /**
148
+         * Construct Terms
149
+         *
150
+         * @param string $opt_name Panel opt_name.
151
+         *
152
+         * @return array
153
+         */
154
+        public static function construct_terms( string $opt_name ): array {
155
+            $terms = array();
156
+
157
+            if ( ! isset( self::$terms[ $opt_name ] ) ) {
158
+                return $terms;
159
+            }
160
+
161
+            foreach ( self::$terms[ $opt_name ] as $term ) {
162
+                $term['sections'] = self::construct_sections( $opt_name, $term['id'] );
163
+                $terms[]          = $term;
164
+            }
165
+
166
+            ksort( $terms );
167
+
168
+            return $terms;
169
+        }
170
+
171
+        /**
172
+         * Construct Sections.
173
+         *
174
+         * @param string $opt_name       Panel opt_name.
175
+         * @param string $term_id        Term ID.
176
+         *
177
+         * @return array
178
+         */
179
+        public static function construct_sections( string $opt_name, string $term_id ): array {
180
+            $sections = array();
181
+
182
+            if ( ! isset( self::$sections[ $opt_name ] ) ) {
183
+                return $sections;
184
+            }
185
+
186
+            foreach ( self::$sections[ $opt_name ] as $section_id => $section ) {
187
+                if ( $section['term_id'] === $term_id ) {
188
+                    self::$sections[ $opt_name ][ $section_id ]['add_visibility'] = $section;
189
+
190
+                    $p = $section['priority'];
191
+
192
+                    while ( isset( $sections[ $p ] ) ) {
193
+                        echo esc_html( $p++ );
194
+                    }
195
+
196
+                    $section['fields'] = self::construct_fields( $opt_name, $section_id );
197
+                    $sections[ $p ]    = $section;
198
+                }
199
+            }
200
+
201
+            ksort( $sections );
202
+
203
+            return $sections;
204
+        }
205
+
206
+        /**
207
+         * Construct Fields.
208
+         *
209
+         * @param string $opt_name       Panel opt_name.
210
+         * @param string $section_id     Section ID.
211
+         * @param bool   $permissions    Permissions.
212
+         * @param bool   $add_visibility Add visibility.
213
+         *
214
+         * @return array
215
+         */
216
+        public static function construct_fields( string $opt_name = '', string $section_id = '', bool $permissions = false, bool $add_visibility = false ): array {
217
+            $fields = array();
218
+
219
+            if ( ! isset( self::$fields[ $opt_name ] ) ) {
220
+                return $fields;
221
+            }
222
+
223
+            foreach ( self::$fields[ $opt_name ] as $key => $field ) {
224
+                // Nested permissions.
225
+                $field['permissions'] = $field['permissions'] ?? $permissions;
226
+
227
+                self::$fields[ $opt_name ][ $key ]['permissions'] = $field['permissions'];
228
+
229
+                // Nested add_visibility permissions.
230
+                $field['add_visibility'] = $field['add_visibility'] ?? $add_visibility;
231
+
232
+                self::$fields[ $opt_name ][ $key ]['add_visibility'] = $field['add_visibility'];
233
+
234
+                if ( $field['section_id'] === $section_id ) {
235
+                    $p = $field['priority'];
236
+
237
+                    while ( isset( $fields[ $p ] ) ) {
238
+                        echo esc_html( $p++ );
239
+                    }
240
+
241
+                    $fields[ $p ] = $field;
242
+                }
243
+            }
244
+
245
+            ksort( $fields );
246
+
247
+            return $fields;
248
+        }
249
+
250
+        /**
251
+         * Get Section.
252
+         *
253
+         * @param string $opt_name Panel opt_name.
254
+         * @param string $id       ID.
255
+         *
256
+         * @return bool
257
+         */
258
+        public static function get_section( string $opt_name = '', string $id = '' ): bool {
259
+            self::check_opt_name( $opt_name );
260
+
261
+            if ( ! empty( $opt_name ) && ! empty( $id ) ) {
262
+                if ( ! isset( self::$sections[ $opt_name ][ $id ] ) ) {
263
+                    $id = strtolower( sanitize_html_class( $id ) );
264
+                }
265
+
266
+                return self::$sections[ $opt_name ][ $id ] ?? false;
267
+            }
268
+
269
+            return false;
270
+        }
271
+
272
+        /**
273
+         * Set_section.
274
+         *
275
+         * @param string $opt_name Panel opt_name.
276
+         * @param array  $section  Section array.
277
+         */
278
+        public static function set_section( string $opt_name = '', array $section = array() ) {
279
+            self::check_opt_name( $opt_name );
280
+
281
+            if ( ! empty( $opt_name ) && is_array( $section ) && ! empty( $section ) ) {
282
+                if ( ! isset( $section['id'] ) ) {
283
+                    if ( isset( $section['title'] ) ) {
284
+                        $section['id'] = strtolower( sanitize_html_class( $section['title'] ) );
285
+                    } else {
286
+                        $section['id'] = 'section';
287
+                    }
288
+
289
+                    if ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
290
+                        $orig = $section['id'];
291
+                        $i    = 0;
292
+
293
+                        while ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
294
+                            $section['id'] = $orig . '_' . $i;
295
+                        }
296
+                    }
297
+                }
298
+
299
+                if ( ! isset( $section['priority'] ) ) {
300
+                    $section['priority'] = self::get_priority( $opt_name, 'sections' );
301
+                }
302
+
303
+                if ( isset( $section['fields'] ) ) {
304
+                    if ( ! empty( $section['fields'] ) && is_array( $section['fields'] ) ) {
305
+                        if ( isset( $section['permissions'] ) || isset( $section['add_visibility'] ) ) {
306
+                            foreach ( $section['fields'] as $key => $field ) {
307
+                                if ( ! isset( $field['permissions'] ) && isset( $section['permissions'] ) ) {
308
+                                    $section['fields'][ $key ]['permissions'] = $section['permissions'];
309
+                                }
310
+
311
+                                if ( ! isset( $field['add_visibility'] ) && isset( $section['add_visibility'] ) ) {
312
+                                    $section['fields'][ $key ]['add_visibility'] = $section['add_visibility'];
313
+                                }
314
+                            }
315
+                        }
316
+
317
+                        self::process_fields_array( $opt_name, $section['id'], $section['fields'] );
318
+                    }
319
+
320
+                    unset( $section['fields'] );
321
+                }
322
+
323
+                self::$sections[ $opt_name ][ $section['id'] ] = $section;
324
+            } else {
325
+                self::$errors[ $opt_name ]['section']['empty'] = esc_html__( 'Unable to create a section due an empty section array or the section variable passed was not an array.', 'redux-framework' );
326
+            }
327
+        }
328
+
329
+        /**
330
+         * Process Sections Array.
331
+         *
332
+         * @param string $opt_name Panel opt_name.
333
+         * @param string $term_id  Term ID.
334
+         * @param array  $sections Sections array.
335
+         */
336
+        public static function process_sections_array( string $opt_name = '', string $term_id = '', array $sections = array() ) {
337
+            if ( ! empty( $opt_name ) && ! empty( $term_id ) && is_array( $sections ) && ! empty( $sections ) ) {
338
+                foreach ( $sections as $section ) {
339
+                    if ( ! is_array( $section ) ) {
340
+                        continue;
341
+                    }
342
+
343
+                    $section['term_id'] = $term_id;
344
+
345
+                    if ( ! isset( $section['fields'] ) || ! is_array( $section['fields'] ) ) {
346
+                        $section['fields'] = array();
347
+                    }
348
+
349
+                    self::set_section( $opt_name, $section );
350
+                }
351
+            }
352
+        }
353
+
354
+        /**
355
+         * Process field array.
356
+         *
357
+         * @param string $opt_name   Panel opt_name.
358
+         * @param string $section_id Section ID.
359
+         * @param array  $fields     Fields array.
360
+         */
361
+        public static function process_fields_array( string $opt_name = '', string $section_id = '', array $fields = array() ) {
362
+            if ( ! empty( $opt_name ) && ! empty( $section_id ) && is_array( $fields ) && ! empty( $fields ) ) {
363
+                foreach ( $fields as $field ) {
364
+                    if ( ! is_array( $field ) ) {
365
+                        continue;
366
+                    }
367
+
368
+                    $field['section_id'] = $section_id;
369
+
370
+                    self::set_field( $opt_name, $field );
371
+                }
372
+            }
373
+        }
374
+
375
+        /**
376
+         * Get field.
377
+         *
378
+         * @param string $opt_name Panel opt_name.
379
+         * @param string $id       ID.
380
+         *
381
+         * @return bool
382
+         */
383
+        public static function get_field( string $opt_name = '', string $id = '' ): bool {
384
+            self::check_opt_name( $opt_name );
385
+
386
+            if ( ! empty( $opt_name ) && ! empty( $id ) ) {
387
+                return self::$fields[ $opt_name ][ $id ] ?? false;
388
+            }
389
+
390
+            return false;
391
+        }
392
+
393
+        /**
394
+         * Set field.
395
+         *
396
+         * @param string $opt_name Panel opt_name.
397
+         * @param array  $field    Field array.
398
+         */
399
+        public static function set_field( string $opt_name = '', array $field = array() ) {
400
+            self::check_opt_name( $opt_name );
401
+
402
+            if ( ! empty( $opt_name ) && is_array( $field ) && ! empty( $field ) ) {
403
+                if ( ! isset( $field['priority'] ) ) {
404
+                    $field['priority'] = self::get_priority( $opt_name, 'fields' );
405
+                }
406
+
407
+                self::$fields[ $opt_name ][ $field['id'] ] = $field;
408
+            }
409
+        }
410
+
411
+        /**
412
+         * Set args.
413
+         *
414
+         * @param string $opt_name Panel opt_name.
415
+         * @param array  $args     Args array.
416
+         */
417
+        public static function set_args( string $opt_name = '', array $args = array() ) {
418
+            self::check_opt_name( $opt_name );
419
+
420
+            if ( ! empty( $opt_name ) && is_array( $args ) && ! empty( $args ) ) {
421
+                self::$args[ $opt_name ] = self::$args[ $opt_name ] ?? array();
422
+                self::$args[ $opt_name ] = wp_parse_args( $args, self::$args[ $opt_name ] );
423
+            }
424
+        }
425
+
426
+        /**
427
+         * Set term.
428
+         *
429
+         * @param string $opt_name Panel opt_name.
430
+         * @param array  $term     Term array.
431
+         */
432
+        public static function set_term( string $opt_name = '', array $term = array() ) {
433
+            self::check_opt_name( $opt_name );
434
+
435
+            if ( ! empty( $opt_name ) && is_array( $term ) && ! empty( $term ) ) {
436
+                if ( ! isset( $term['id'] ) ) {
437
+                    if ( isset( $term['title'] ) ) {
438
+                        $term['id'] = strtolower( sanitize_html_class( $term['title'] ) );
439
+                    } else {
440
+                        $term['id'] = 'term';
441
+                    }
442
+
443
+                    if ( isset( self::$terms[ $opt_name ][ $term['id'] ] ) ) {
444
+                        $orig = $term['id'];
445
+                        $i    = 0;
446
+
447
+                        while ( isset( self::$terms[ $opt_name ][ $term['id'] ] ) ) {
448
+                            $term['id'] = $orig . '_' . $i;
449
+                        }
450
+                    }
451
+                }
452
+
453
+                if ( isset( $term['sections'] ) ) {
454
+                    if ( ! empty( $term['sections'] ) && is_array( $term['sections'] ) ) {
455
+                        if ( isset( $term['permissions'] ) || isset( $term['add_visibility'] ) ) {
456
+                            foreach ( $term['sections'] as $key => $section ) {
457
+                                if ( ! isset( $section['permissions'] ) && isset( $term['permissions'] ) ) {
458
+                                    $term['sections'][ $key ]['permissions'] = $term['permissions'];
459
+                                }
460
+
461
+                                if ( ! isset( $section['add_visibility'] ) && isset( $term['add_visibility'] ) ) {
462
+                                    $term['sections'][ $key ]['add_visibility'] = $term['add_visibility'];
463
+                                }
464
+                            }
465
+                        }
466
+
467
+                        self::process_sections_array( $opt_name, $term['id'], $term['sections'] );
468
+                    }
469
+
470
+                    unset( $term['sections'] );
471
+                }
472
+
473
+                self::$terms[ $opt_name ][ $term['id'] ] = $term;
474
+            } else {
475
+                self::$errors[ $opt_name ]['term']['empty'] = esc_html__( 'Unable to create a term due an empty term array or the term variable passed was not an array.', 'redux-framework' );
476
+            }
477
+        }
478
+
479
+        /**
480
+         * Get terms.
481
+         *
482
+         * @param string $opt_name Panel opt_name.
483
+         *
484
+         * @return mixed
485
+         */
486
+        public static function get_terms( string $opt_name = '' ) {
487
+            self::check_opt_name( $opt_name );
488
+
489
+            if ( ! empty( $opt_name ) && ! empty( self::$terms[ $opt_name ] ) ) {
490
+                return self::$terms[ $opt_name ];
491
+            }
492
+
493
+            return false;
494
+        }
495
+
496
+        /**
497
+         * Get priority.
498
+         *
499
+         * @param string $opt_name Panel opt_name.
500
+         * @param string $type     Field type.
501
+         *
502
+         * @return mixed
503
+         */
504
+        public static function get_priority( string $opt_name, string $type ) {
505
+            $priority                              = self::$priority[ $opt_name ][ $type ];
506
+            self::$priority[ $opt_name ][ $type ] += 1;
507
+
508
+            return $priority;
509
+        }
510
+
511
+        /**
512
+         * Check opt_name.
513
+         *
514
+         * @param string $opt_name Panel opt_name.
515
+         */
516
+        public static function check_opt_name( string $opt_name = '' ) {
517
+            if ( empty( $opt_name ) || is_array( $opt_name ) ) {
518
+                return;
519
+            }
520
+
521
+            if ( ! isset( self::$terms[ $opt_name ] ) ) {
522
+                self::$terms[ $opt_name ] = array();
523
+            }
524
+
525
+            if ( ! isset( self::$priority[ $opt_name ] ) ) {
526
+                self::$priority[ $opt_name ]['args'] = 1;
527
+            }
528
+
529
+            if ( ! isset( self::$sections[ $opt_name ] ) ) {
530
+                self::$sections[ $opt_name ]             = array();
531
+                self::$priority[ $opt_name ]['sections'] = 1;
532
+            }
533
+
534
+            if ( ! isset( self::$fields[ $opt_name ] ) ) {
535
+                self::$fields[ $opt_name ]             = array();
536
+                self::$priority[ $opt_name ]['fields'] = 1;
537
+            }
538
+
539
+            if ( ! isset( self::$errors[ $opt_name ] ) ) {
540
+                self::$errors[ $opt_name ] = array();
541
+            }
542
+
543
+            if ( ! isset( self::$init[ $opt_name ] ) ) {
544
+                self::$init[ $opt_name ] = false;
545
+            }
546
+
547
+            if ( ! isset( self::$args[ $opt_name ] ) ) {
548
+                self::$args[ $opt_name ] = false;
549
+            }
550
+        }
551
+
552
+        /**
553
+         * Get field defaults.
554
+         *
555
+         * @param string $opt_name Panel opt_name.
556
+         *
557
+         * @return array|void
558
+         */
559
+        public static function get_field_defaults( string $opt_name ) {
560
+            if ( empty( $opt_name ) ) {
561
+                return;
562
+            }
563
+
564
+            if ( ! isset( self::$fields[ $opt_name ] ) ) {
565
+                return array();
566
+            }
567
+
568
+            return array_map(
569
+                function ( $field ) {
570
+                    return $field['default'] ?? '';
571
+                },
572
+                self::$fields[ $opt_name ]
573
+            );
574
+        }
575
+
576
+        /**
577
+         * Get term meta.
578
+         *
579
+         * @param array $args Args array.
580
+         *
581
+         * @return array|mixed|string
582
+         */
583
+        public static function get_term_meta( array $args = array() ) {
584
+            $default = array(
585
+                'key'      => '',
586
+                'opt_name' => '',
587
+                'taxonomy' => '',
588
+            );
589
+
590
+            $args = wp_parse_args( $args, $default );
591
+
592
+            // phpcs:ignore WordPress.PHP.DontExtract
593
+            extract( $args );
594
+
595
+            if ( empty( $taxonomy ) ) {
596
+                return array();
597
+            }
598
+
599
+            $single = ! empty( $key );
600
+
601
+            $meta = get_term_meta( $taxonomy, $key, $single );
602
+
603
+            // phpcs:ignore Generic.CodeAnalysis.EmptyStatement
604
+            if ( $single ) {
605
+                // Do nothing.
606
+            } elseif ( ! empty( $meta ) ) {
607
+                foreach ( $meta as $key => $value ) {
608
+                    if ( is_array( $value ) ) {
609
+                        $value = $value[0];
610
+                    }
611
+
612
+                    $meta[ $key ] = maybe_unserialize( $value );
613
+                }
614
+            }
615
+
616
+            if ( ! empty( $opt_name ) ) {
617
+                $defaults = self::get_field_defaults( $opt_name );
618
+
619
+                if ( $single ) {
620
+                    $default_value = '';
621
+
622
+                    if ( isset( $defaults[ $key ] ) ) {
623
+                        $default_value = $defaults[ $key ];
624
+                    }
625
+
626
+                    if ( is_array( $meta ) ) {
627
+                        if ( is_array( $default_value ) ) {
628
+                            $meta = wp_parse_args( $meta, $default_value );
629
+                        }
630
+                    } elseif ( '' === $meta && '' !== $default_value ) {
631
+                            $meta = $default_value;
632
+                    }
633
+                } else {
634
+                    $meta = wp_parse_args( $meta, $defaults );
635
+                }
636
+            }
637
+
638
+            return $meta;
639
+        }
640
+    }
641
+
642
+    Redux_Taxonomy::load();
643 643
 }
Please login to merge, or discard this patch.
Spacing   +60 added lines, -60 removed lines patch added patch discarded remove patch
@@ -92,7 +92,7 @@  discard block
 block discarded – undo
92 92
 				$instances = Redux::all_instances();
93 93
 
94 94
 				foreach ( self::$fields as $opt_name => $fields ) {
95
-					if ( ! isset( $instances[ $opt_name ] ) ) {
95
+					if ( ! isset( $instances[$opt_name] ) ) {
96 96
 						Redux::set_args( $opt_name, array( 'menu_type' => 'hidden' ) );
97 97
 
98 98
 						Redux::set_sections(
@@ -113,7 +113,7 @@  discard block
 block discarded – undo
113 113
 
114 114
 					self::check_opt_name( $opt_name );
115 115
 
116
-					Redux::set_args( $opt_name, self::$args[ $opt_name ] );
116
+					Redux::set_args( $opt_name, self::$args[$opt_name] );
117 117
 				}
118 118
 			}
119 119
 		}
@@ -126,7 +126,7 @@  discard block
 block discarded – undo
126 126
 		 * @return mixed
127 127
 		 */
128 128
 		public static function construct_args( string $opt_name ) {
129
-			$args             = self::$args[ $opt_name ];
129
+			$args             = self::$args[$opt_name];
130 130
 			$args['opt_name'] = $opt_name;
131 131
 
132 132
 			if ( ! isset( $args['menu_title'] ) ) {
@@ -154,11 +154,11 @@  discard block
 block discarded – undo
154 154
 		public static function construct_terms( string $opt_name ): array {
155 155
 			$terms = array();
156 156
 
157
-			if ( ! isset( self::$terms[ $opt_name ] ) ) {
157
+			if ( ! isset( self::$terms[$opt_name] ) ) {
158 158
 				return $terms;
159 159
 			}
160 160
 
161
-			foreach ( self::$terms[ $opt_name ] as $term ) {
161
+			foreach ( self::$terms[$opt_name] as $term ) {
162 162
 				$term['sections'] = self::construct_sections( $opt_name, $term['id'] );
163 163
 				$terms[]          = $term;
164 164
 			}
@@ -179,22 +179,22 @@  discard block
 block discarded – undo
179 179
 		public static function construct_sections( string $opt_name, string $term_id ): array {
180 180
 			$sections = array();
181 181
 
182
-			if ( ! isset( self::$sections[ $opt_name ] ) ) {
182
+			if ( ! isset( self::$sections[$opt_name] ) ) {
183 183
 				return $sections;
184 184
 			}
185 185
 
186
-			foreach ( self::$sections[ $opt_name ] as $section_id => $section ) {
186
+			foreach ( self::$sections[$opt_name] as $section_id => $section ) {
187 187
 				if ( $section['term_id'] === $term_id ) {
188
-					self::$sections[ $opt_name ][ $section_id ]['add_visibility'] = $section;
188
+					self::$sections[$opt_name][$section_id]['add_visibility'] = $section;
189 189
 
190 190
 					$p = $section['priority'];
191 191
 
192
-					while ( isset( $sections[ $p ] ) ) {
192
+					while ( isset( $sections[$p] ) ) {
193 193
 						echo esc_html( $p++ );
194 194
 					}
195 195
 
196 196
 					$section['fields'] = self::construct_fields( $opt_name, $section_id );
197
-					$sections[ $p ]    = $section;
197
+					$sections[$p]    = $section;
198 198
 				}
199 199
 			}
200 200
 
@@ -216,29 +216,29 @@  discard block
 block discarded – undo
216 216
 		public static function construct_fields( string $opt_name = '', string $section_id = '', bool $permissions = false, bool $add_visibility = false ): array {
217 217
 			$fields = array();
218 218
 
219
-			if ( ! isset( self::$fields[ $opt_name ] ) ) {
219
+			if ( ! isset( self::$fields[$opt_name] ) ) {
220 220
 				return $fields;
221 221
 			}
222 222
 
223
-			foreach ( self::$fields[ $opt_name ] as $key => $field ) {
223
+			foreach ( self::$fields[$opt_name] as $key => $field ) {
224 224
 				// Nested permissions.
225 225
 				$field['permissions'] = $field['permissions'] ?? $permissions;
226 226
 
227
-				self::$fields[ $opt_name ][ $key ]['permissions'] = $field['permissions'];
227
+				self::$fields[$opt_name][$key]['permissions'] = $field['permissions'];
228 228
 
229 229
 				// Nested add_visibility permissions.
230 230
 				$field['add_visibility'] = $field['add_visibility'] ?? $add_visibility;
231 231
 
232
-				self::$fields[ $opt_name ][ $key ]['add_visibility'] = $field['add_visibility'];
232
+				self::$fields[$opt_name][$key]['add_visibility'] = $field['add_visibility'];
233 233
 
234 234
 				if ( $field['section_id'] === $section_id ) {
235 235
 					$p = $field['priority'];
236 236
 
237
-					while ( isset( $fields[ $p ] ) ) {
237
+					while ( isset( $fields[$p] ) ) {
238 238
 						echo esc_html( $p++ );
239 239
 					}
240 240
 
241
-					$fields[ $p ] = $field;
241
+					$fields[$p] = $field;
242 242
 				}
243 243
 			}
244 244
 
@@ -259,11 +259,11 @@  discard block
 block discarded – undo
259 259
 			self::check_opt_name( $opt_name );
260 260
 
261 261
 			if ( ! empty( $opt_name ) && ! empty( $id ) ) {
262
-				if ( ! isset( self::$sections[ $opt_name ][ $id ] ) ) {
262
+				if ( ! isset( self::$sections[$opt_name][$id] ) ) {
263 263
 					$id = strtolower( sanitize_html_class( $id ) );
264 264
 				}
265 265
 
266
-				return self::$sections[ $opt_name ][ $id ] ?? false;
266
+				return self::$sections[$opt_name][$id] ?? false;
267 267
 			}
268 268
 
269 269
 			return false;
@@ -286,11 +286,11 @@  discard block
 block discarded – undo
286 286
 						$section['id'] = 'section';
287 287
 					}
288 288
 
289
-					if ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
289
+					if ( isset( self::$sections[$opt_name][$section['id']] ) ) {
290 290
 						$orig = $section['id'];
291 291
 						$i    = 0;
292 292
 
293
-						while ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
293
+						while ( isset( self::$sections[$opt_name][$section['id']] ) ) {
294 294
 							$section['id'] = $orig . '_' . $i;
295 295
 						}
296 296
 					}
@@ -305,11 +305,11 @@  discard block
 block discarded – undo
305 305
 						if ( isset( $section['permissions'] ) || isset( $section['add_visibility'] ) ) {
306 306
 							foreach ( $section['fields'] as $key => $field ) {
307 307
 								if ( ! isset( $field['permissions'] ) && isset( $section['permissions'] ) ) {
308
-									$section['fields'][ $key ]['permissions'] = $section['permissions'];
308
+									$section['fields'][$key]['permissions'] = $section['permissions'];
309 309
 								}
310 310
 
311 311
 								if ( ! isset( $field['add_visibility'] ) && isset( $section['add_visibility'] ) ) {
312
-									$section['fields'][ $key ]['add_visibility'] = $section['add_visibility'];
312
+									$section['fields'][$key]['add_visibility'] = $section['add_visibility'];
313 313
 								}
314 314
 							}
315 315
 						}
@@ -320,9 +320,9 @@  discard block
 block discarded – undo
320 320
 					unset( $section['fields'] );
321 321
 				}
322 322
 
323
-				self::$sections[ $opt_name ][ $section['id'] ] = $section;
323
+				self::$sections[$opt_name][$section['id']] = $section;
324 324
 			} else {
325
-				self::$errors[ $opt_name ]['section']['empty'] = esc_html__( 'Unable to create a section due an empty section array or the section variable passed was not an array.', 'redux-framework' );
325
+				self::$errors[$opt_name]['section']['empty'] = esc_html__( 'Unable to create a section due an empty section array or the section variable passed was not an array.', 'redux-framework' );
326 326
 			}
327 327
 		}
328 328
 
@@ -384,7 +384,7 @@  discard block
 block discarded – undo
384 384
 			self::check_opt_name( $opt_name );
385 385
 
386 386
 			if ( ! empty( $opt_name ) && ! empty( $id ) ) {
387
-				return self::$fields[ $opt_name ][ $id ] ?? false;
387
+				return self::$fields[$opt_name][$id] ?? false;
388 388
 			}
389 389
 
390 390
 			return false;
@@ -404,7 +404,7 @@  discard block
 block discarded – undo
404 404
 					$field['priority'] = self::get_priority( $opt_name, 'fields' );
405 405
 				}
406 406
 
407
-				self::$fields[ $opt_name ][ $field['id'] ] = $field;
407
+				self::$fields[$opt_name][$field['id']] = $field;
408 408
 			}
409 409
 		}
410 410
 
@@ -418,8 +418,8 @@  discard block
 block discarded – undo
418 418
 			self::check_opt_name( $opt_name );
419 419
 
420 420
 			if ( ! empty( $opt_name ) && is_array( $args ) && ! empty( $args ) ) {
421
-				self::$args[ $opt_name ] = self::$args[ $opt_name ] ?? array();
422
-				self::$args[ $opt_name ] = wp_parse_args( $args, self::$args[ $opt_name ] );
421
+				self::$args[$opt_name] = self::$args[$opt_name] ?? array();
422
+				self::$args[$opt_name] = wp_parse_args( $args, self::$args[$opt_name] );
423 423
 			}
424 424
 		}
425 425
 
@@ -440,11 +440,11 @@  discard block
 block discarded – undo
440 440
 						$term['id'] = 'term';
441 441
 					}
442 442
 
443
-					if ( isset( self::$terms[ $opt_name ][ $term['id'] ] ) ) {
443
+					if ( isset( self::$terms[$opt_name][$term['id']] ) ) {
444 444
 						$orig = $term['id'];
445 445
 						$i    = 0;
446 446
 
447
-						while ( isset( self::$terms[ $opt_name ][ $term['id'] ] ) ) {
447
+						while ( isset( self::$terms[$opt_name][$term['id']] ) ) {
448 448
 							$term['id'] = $orig . '_' . $i;
449 449
 						}
450 450
 					}
@@ -455,11 +455,11 @@  discard block
 block discarded – undo
455 455
 						if ( isset( $term['permissions'] ) || isset( $term['add_visibility'] ) ) {
456 456
 							foreach ( $term['sections'] as $key => $section ) {
457 457
 								if ( ! isset( $section['permissions'] ) && isset( $term['permissions'] ) ) {
458
-									$term['sections'][ $key ]['permissions'] = $term['permissions'];
458
+									$term['sections'][$key]['permissions'] = $term['permissions'];
459 459
 								}
460 460
 
461 461
 								if ( ! isset( $section['add_visibility'] ) && isset( $term['add_visibility'] ) ) {
462
-									$term['sections'][ $key ]['add_visibility'] = $term['add_visibility'];
462
+									$term['sections'][$key]['add_visibility'] = $term['add_visibility'];
463 463
 								}
464 464
 							}
465 465
 						}
@@ -470,9 +470,9 @@  discard block
 block discarded – undo
470 470
 					unset( $term['sections'] );
471 471
 				}
472 472
 
473
-				self::$terms[ $opt_name ][ $term['id'] ] = $term;
473
+				self::$terms[$opt_name][$term['id']] = $term;
474 474
 			} else {
475
-				self::$errors[ $opt_name ]['term']['empty'] = esc_html__( 'Unable to create a term due an empty term array or the term variable passed was not an array.', 'redux-framework' );
475
+				self::$errors[$opt_name]['term']['empty'] = esc_html__( 'Unable to create a term due an empty term array or the term variable passed was not an array.', 'redux-framework' );
476 476
 			}
477 477
 		}
478 478
 
@@ -486,8 +486,8 @@  discard block
 block discarded – undo
486 486
 		public static function get_terms( string $opt_name = '' ) {
487 487
 			self::check_opt_name( $opt_name );
488 488
 
489
-			if ( ! empty( $opt_name ) && ! empty( self::$terms[ $opt_name ] ) ) {
490
-				return self::$terms[ $opt_name ];
489
+			if ( ! empty( $opt_name ) && ! empty( self::$terms[$opt_name] ) ) {
490
+				return self::$terms[$opt_name];
491 491
 			}
492 492
 
493 493
 			return false;
@@ -502,8 +502,8 @@  discard block
 block discarded – undo
502 502
 		 * @return mixed
503 503
 		 */
504 504
 		public static function get_priority( string $opt_name, string $type ) {
505
-			$priority                              = self::$priority[ $opt_name ][ $type ];
506
-			self::$priority[ $opt_name ][ $type ] += 1;
505
+			$priority                              = self::$priority[$opt_name][$type];
506
+			self::$priority[$opt_name][$type] += 1;
507 507
 
508 508
 			return $priority;
509 509
 		}
@@ -518,34 +518,34 @@  discard block
 block discarded – undo
518 518
 				return;
519 519
 			}
520 520
 
521
-			if ( ! isset( self::$terms[ $opt_name ] ) ) {
522
-				self::$terms[ $opt_name ] = array();
521
+			if ( ! isset( self::$terms[$opt_name] ) ) {
522
+				self::$terms[$opt_name] = array();
523 523
 			}
524 524
 
525
-			if ( ! isset( self::$priority[ $opt_name ] ) ) {
526
-				self::$priority[ $opt_name ]['args'] = 1;
525
+			if ( ! isset( self::$priority[$opt_name] ) ) {
526
+				self::$priority[$opt_name]['args'] = 1;
527 527
 			}
528 528
 
529
-			if ( ! isset( self::$sections[ $opt_name ] ) ) {
530
-				self::$sections[ $opt_name ]             = array();
531
-				self::$priority[ $opt_name ]['sections'] = 1;
529
+			if ( ! isset( self::$sections[$opt_name] ) ) {
530
+				self::$sections[$opt_name]             = array();
531
+				self::$priority[$opt_name]['sections'] = 1;
532 532
 			}
533 533
 
534
-			if ( ! isset( self::$fields[ $opt_name ] ) ) {
535
-				self::$fields[ $opt_name ]             = array();
536
-				self::$priority[ $opt_name ]['fields'] = 1;
534
+			if ( ! isset( self::$fields[$opt_name] ) ) {
535
+				self::$fields[$opt_name]             = array();
536
+				self::$priority[$opt_name]['fields'] = 1;
537 537
 			}
538 538
 
539
-			if ( ! isset( self::$errors[ $opt_name ] ) ) {
540
-				self::$errors[ $opt_name ] = array();
539
+			if ( ! isset( self::$errors[$opt_name] ) ) {
540
+				self::$errors[$opt_name] = array();
541 541
 			}
542 542
 
543
-			if ( ! isset( self::$init[ $opt_name ] ) ) {
544
-				self::$init[ $opt_name ] = false;
543
+			if ( ! isset( self::$init[$opt_name] ) ) {
544
+				self::$init[$opt_name] = false;
545 545
 			}
546 546
 
547
-			if ( ! isset( self::$args[ $opt_name ] ) ) {
548
-				self::$args[ $opt_name ] = false;
547
+			if ( ! isset( self::$args[$opt_name] ) ) {
548
+				self::$args[$opt_name] = false;
549 549
 			}
550 550
 		}
551 551
 
@@ -561,15 +561,15 @@  discard block
 block discarded – undo
561 561
 				return;
562 562
 			}
563 563
 
564
-			if ( ! isset( self::$fields[ $opt_name ] ) ) {
564
+			if ( ! isset( self::$fields[$opt_name] ) ) {
565 565
 				return array();
566 566
 			}
567 567
 
568 568
 			return array_map(
569
-				function ( $field ) {
569
+				function( $field ) {
570 570
 					return $field['default'] ?? '';
571 571
 				},
572
-				self::$fields[ $opt_name ]
572
+				self::$fields[$opt_name]
573 573
 			);
574 574
 		}
575 575
 
@@ -609,7 +609,7 @@  discard block
 block discarded – undo
609 609
 						$value = $value[0];
610 610
 					}
611 611
 
612
-					$meta[ $key ] = maybe_unserialize( $value );
612
+					$meta[$key] = maybe_unserialize( $value );
613 613
 				}
614 614
 			}
615 615
 
@@ -619,8 +619,8 @@  discard block
 block discarded – undo
619 619
 				if ( $single ) {
620 620
 					$default_value = '';
621 621
 
622
-					if ( isset( $defaults[ $key ] ) ) {
623
-						$default_value = $defaults[ $key ];
622
+					if ( isset( $defaults[$key] ) ) {
623
+						$default_value = $defaults[$key];
624 624
 					}
625 625
 
626 626
 					if ( is_array( $meta ) ) {
Please login to merge, or discard this patch.
redux-core/inc/extensions/customizer/inc/class-redux-customizer-control.php 1 patch
Indentation   +61 added lines, -61 removed lines patch added patch discarded remove patch
@@ -10,40 +10,40 @@  discard block
 block discarded – undo
10 10
 
11 11
 if ( ! class_exists( 'Redux_Customizer_Control', false ) ) {
12 12
 
13
-	/**
14
-	 * Class Redux_Customizer_Control
15
-	 */
16
-	class Redux_Customizer_Control extends WP_Customize_Control {
13
+    /**
14
+     * Class Redux_Customizer_Control
15
+     */
16
+    class Redux_Customizer_Control extends WP_Customize_Control {
17 17
 
18
-		/**
19
-		 * Redux ID.
20
-		 *
21
-		 * @var string
22
-		 */
23
-		public string $redux_id = '';
18
+        /**
19
+         * Redux ID.
20
+         *
21
+         * @var string
22
+         */
23
+        public string $redux_id = '';
24 24
 
25
-		/**
26
-		 * Field render.
27
-		 */
28
-		public function render() {
25
+        /**
26
+         * Field render.
27
+         */
28
+        public function render() {
29 29
 
30
-			$this->redux_id = str_replace( 'customize-control-', '', 'customize-control-' . str_replace( '[', '-', str_replace( ']', '', $this->id ) ) );
31
-			$class          = 'customize-control redux-group-tab redux-field customize-control-' . $this->type;
32
-			$opt_name_arr   = explode( '[', $this->id );
33
-			$opt_name       = $opt_name_arr[0];
34
-			$field_id       = str_replace( ']', '', $opt_name_arr[1] );
30
+            $this->redux_id = str_replace( 'customize-control-', '', 'customize-control-' . str_replace( '[', '-', str_replace( ']', '', $this->id ) ) );
31
+            $class          = 'customize-control redux-group-tab redux-field customize-control-' . $this->type;
32
+            $opt_name_arr   = explode( '[', $this->id );
33
+            $opt_name       = $opt_name_arr[0];
34
+            $field_id       = str_replace( ']', '', $opt_name_arr[1] );
35 35
 
36
-			$section = Redux_Helpers::section_from_field_id( $opt_name, $field_id );
36
+            $section = Redux_Helpers::section_from_field_id( $opt_name, $field_id );
37 37
 
38
-			if ( isset( $section['disabled'] ) && true === $section['disabled'] ) {
39
-				$class .= ' disabled';
40
-			}
38
+            if ( isset( $section['disabled'] ) && true === $section['disabled'] ) {
39
+                $class .= ' disabled';
40
+            }
41 41
 
42
-			if ( isset( $section['hidden'] ) && true === $section['hidden'] ) {
43
-				$class .= ' hidden';
44
-			}
42
+            if ( isset( $section['hidden'] ) && true === $section['hidden'] ) {
43
+                $class .= ' hidden';
44
+            }
45 45
 
46
-			?>
46
+            ?>
47 47
 			<li id="<?php echo esc_attr( $this->redux_id ); ?>-li" class="<?php echo esc_attr( $class ); ?>">
48 48
 				<?php if ( 'repeater' !== $this->type ) { ?>
49 49
 					<input
@@ -57,42 +57,42 @@  discard block
 block discarded – undo
57 57
 				<?php $this->render_content(); ?>
58 58
 			</li>
59 59
 			<?php
60
-		}
60
+        }
61 61
 
62
-		/**
63
-		 * Render content hook.
64
-		 */
65
-		public function render_content() {
66
-			// phpcs:ignore WordPress.NamingConventions.ValidHookName
67
-			do_action( 'redux/customizer/control/render/' . $this->redux_id, $this );
68
-		}
62
+        /**
63
+         * Render content hook.
64
+         */
65
+        public function render_content() {
66
+            // phpcs:ignore WordPress.NamingConventions.ValidHookName
67
+            do_action( 'redux/customizer/control/render/' . $this->redux_id, $this );
68
+        }
69 69
 
70
-		/**
71
-		 * Label output.
72
-		 */
73
-		public function label() {
74
-			// The label has already been sanitized in the Fields class, no need to re-sanitize it.
75
-			echo( $this->label ); // phpcs:ignore WordPress.Security.EscapeOutput
76
-		}
70
+        /**
71
+         * Label output.
72
+         */
73
+        public function label() {
74
+            // The label has already been sanitized in the Fields class, no need to re-sanitize it.
75
+            echo( $this->label ); // phpcs:ignore WordPress.Security.EscapeOutput
76
+        }
77 77
 
78
-		/**
79
-		 * Description output.
80
-		 */
81
-		public function description() {
82
-			if ( ! empty( $this->description ) ) {
83
-				// The description has already been sanitized in the Fields class, no need to re-sanitize it.
84
-				echo '<span class="description customize-control-description">' . esc_html( $this->description ) . '</span>';
85
-			}
86
-		}
78
+        /**
79
+         * Description output.
80
+         */
81
+        public function description() {
82
+            if ( ! empty( $this->description ) ) {
83
+                // The description has already been sanitized in the Fields class, no need to re-sanitize it.
84
+                echo '<span class="description customize-control-description">' . esc_html( $this->description ) . '</span>';
85
+            }
86
+        }
87 87
 
88
-		/**
89
-		 * Title output.
90
-		 */
91
-		public function title() {
92
-			echo '<span class="customize-control-title">';
93
-			$this->label();
94
-			$this->description();
95
-			echo '</span>';
96
-		}
97
-	}
88
+        /**
89
+         * Title output.
90
+         */
91
+        public function title() {
92
+            echo '<span class="customize-control-title">';
93
+            $this->label();
94
+            $this->description();
95
+            echo '</span>';
96
+        }
97
+    }
98 98
 }
Please login to merge, or discard this patch.
redux-core/inc/fields/background/class-redux-background.php 1 patch
Indentation   +423 added lines, -423 removed lines patch added patch discarded remove patch
@@ -12,429 +12,429 @@
 block discarded – undo
12 12
 // Don't duplicate me!
13 13
 if ( ! class_exists( 'Redux_Background', false ) ) {
14 14
 
15
-	/**
16
-	 * Main Redux_background class
17
-	 *
18
-	 * @since       3.1.5
19
-	 */
20
-	class Redux_Background extends Redux_Field {
21
-
22
-		/**
23
-		 * Set field and value defaults.
24
-		 */
25
-		public function set_defaults() {
26
-			$defaults = array(
27
-				'background-color'      => true,
28
-				'background-repeat'     => true,
29
-				'background-attachment' => true,
30
-				'background-position'   => true,
31
-				'background-image'      => true,
32
-				'background-gradient'   => false,
33
-				'background-clip'       => false,
34
-				'background-origin'     => false,
35
-				'background-size'       => true,
36
-				'preview_media'         => false,
37
-				'preview'               => true,
38
-				'preview_height'        => '200px',
39
-				'transparent'           => true,
40
-			);
41
-
42
-			$this->field = wp_parse_args( $this->field, $defaults );
43
-
44
-			// No errors please.
45
-			$defaults = array(
46
-				'background-color'      => '',
47
-				'background-repeat'     => '',
48
-				'background-attachment' => '',
49
-				'background-position'   => '',
50
-				'background-image'      => '',
51
-				'background-clip'       => '',
52
-				'background-origin'     => '',
53
-				'background-size'       => '',
54
-				'media'                 => array(),
55
-			);
56
-
57
-			$this->value = wp_parse_args( $this->value, $defaults );
58
-
59
-			$defaults = array(
60
-				'id'        => '',
61
-				'width'     => '',
62
-				'height'    => '',
63
-				'thumbnail' => '',
64
-			);
65
-
66
-			$this->value['media'] = wp_parse_args( $this->value['media'], $defaults );
67
-		}
68
-
69
-		/**
70
-		 * Field Render Function.
71
-		 * Takes the vars and outputs the HTML for the field in the settings
72
-		 *
73
-		 * @since       1.0.0
74
-		 * @access      public
75
-		 * @return      void
76
-		 */
77
-		public function render() {
78
-			$this->select2_config['allowClear'] = true;
79
-
80
-			if ( isset( $this->field['select2'] ) ) {
81
-				$this->field['select2'] = wp_parse_args( $this->field['select2'], $this->select2_config );
82
-			} else {
83
-				$this->field['select2'] = $this->select2_config;
84
-			}
85
-
86
-			$this->field['select2'] = Redux_Functions::sanitize_camel_case_array_keys( $this->field['select2'] );
87
-
88
-			$select2_data = Redux_Functions::create_data_string( $this->field['select2'] );
89
-
90
-			if ( true === $this->field['background-color'] ) {
91
-				if ( isset( $this->value['color'] ) && empty( $this->value['background-color'] ) ) {
92
-					$this->value['background-color'] = $this->value['color'];
93
-				}
94
-
95
-				$def_bg_color = $this->field['default']['background-color'] ?? '';
96
-
97
-				echo '<input ';
98
-				echo 'data-id="' . esc_attr( $this->field['id'] ) . '"';
99
-				echo 'name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-color]"';
100
-				echo 'id="' . esc_attr( $this->field['id'] ) . '-color"';
101
-				echo 'class="color-picker redux-color redux-background-input redux-color-init ' . esc_attr( $this->field['class'] ) . '"';
102
-				echo 'type="text" value="' . esc_attr( $this->value['background-color'] ) . '"';
103
-				echo 'data-default-color="' . esc_attr( $def_bg_color ) . '"';
104
-
105
-				$data = array(
106
-					'field' => $this->field,
107
-					'index' => 'color',
108
-				);
109
-
110
-				echo Redux_Functions_Ex::output_alpha_data( $data ); // phpcs:ignore WordPress.Security.EscapeOutput
111
-
112
-				echo '>';
113
-
114
-				echo '<input type="hidden" class="redux-saved-color" id="' . esc_attr( $this->field['id'] ) . '-saved-color" value="">';
115
-
116
-				if ( ! isset( $this->field['transparent'] ) || false !== $this->field['transparent'] ) {
117
-					$is_checked = '';
118
-					if ( 'transparent' === $this->value['background-color'] ) {
119
-						$is_checked = ' checked="checked"';
120
-					}
121
-					echo '<label for="' . esc_attr( $this->field['id'] ) . '-transparency" class="color-transparency-check"><input type="checkbox" class="checkbox color-transparency redux-background-input ' . esc_attr( $this->field['class'] ) . '" id="' . esc_attr( $this->field['id'] ) . '-transparency" data-id="' . esc_attr( $this->field['id'] ) . '-color" value="1" ' . esc_html( $is_checked ) . '> ' . esc_html__( 'Transparent', 'redux-framework' ) . '</label>';
122
-				}
123
-
124
-				if ( true === $this->field['background-repeat'] || true === $this->field['background-position'] || true === $this->field['background-attachment'] ) {
125
-					echo '<br />';
126
-				}
127
-			}
128
-
129
-			if ( true === $this->field['background-repeat'] ) {
130
-				$array = array(
131
-					'no-repeat' => esc_html__( 'No Repeat', 'redux-framework' ),
132
-					'repeat'    => esc_html__( 'Repeat All', 'redux-framework' ),
133
-					'repeat-x'  => esc_html__( 'Repeat Horizontally', 'redux-framework' ),
134
-					'repeat-y'  => esc_html__( 'Repeat Vertically', 'redux-framework' ),
135
-					'inherit'   => esc_html__( 'Inherit', 'redux-framework' ),
136
-				);
137
-
138
-				echo '<select id="' . esc_attr( $this->field['id'] ) . '-repeat-select" data-placeholder="' . esc_html__( 'Background Repeat', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-repeat]" class="redux-select-item redux-background-input redux-background-repeat ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
139
-				echo '<option></option>';
140
-
141
-				foreach ( $array as $k => $v ) {
142
-					echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-repeat'], $k, false ) . '>' . esc_html( $v ) . '</option>';
143
-				}
144
-
145
-				echo '</select>';
146
-			}
147
-
148
-			if ( true === $this->field['background-clip'] ) {
149
-				$array = array(
150
-					'inherit'     => esc_html__( 'Inherit', 'redux-framework' ),
151
-					'border-box'  => esc_html__( 'Border Box', 'redux-framework' ),
152
-					'content-box' => esc_html__( 'Content Box', 'redux-framework' ),
153
-					'padding-box' => esc_html__( 'Padding Box', 'redux-framework' ),
154
-				);
155
-
156
-				echo '<select id="' . esc_attr( $this->field['id'] ) . '-clip-select" data-placeholder="' . esc_html__( 'Background Clip', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-clip]" class="redux-select-item redux-background-input redux-background-clip ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
157
-				echo '<option></option>';
158
-
159
-				foreach ( $array as $k => $v ) {
160
-					echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-clip'], $k, false ) . '>' . esc_html( $v ) . '</option>';
161
-				}
162
-
163
-				echo '</select>';
164
-			}
165
-
166
-			if ( true === $this->field['background-origin'] ) {
167
-				$array = array(
168
-					'inherit'     => esc_html__( 'Inherit', 'redux-framework' ),
169
-					'border-box'  => esc_html__( 'Border Box', 'redux-framework' ),
170
-					'content-box' => esc_html__( 'Content Box', 'redux-framework' ),
171
-					'padding-box' => esc_html__( 'Padding Box', 'redux-framework' ),
172
-				);
173
-
174
-				echo '<select id="' . esc_attr( $this->field['id'] ) . '-origin-select" data-placeholder="' . esc_html__( 'Background Origin', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-origin]" class="redux-select-item redux-background-input redux-background-origin ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
175
-				echo '<option></option>';
176
-
177
-				foreach ( $array as $k => $v ) {
178
-					echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-origin'], $k, false ) . '>' . esc_html( $v ) . '</option>';
179
-				}
180
-
181
-				echo '</select>';
182
-			}
183
-
184
-			if ( true === $this->field['background-size'] ) {
185
-				$array = array(
186
-					'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
187
-					'cover'   => esc_html__( 'Cover', 'redux-framework' ),
188
-					'contain' => esc_html__( 'Contain', 'redux-framework' ),
189
-				);
190
-
191
-				echo '<select id="' . esc_attr( $this->field['id'] ) . '-size-select" data-placeholder="' . esc_html__( 'Background Size', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-size]" class="redux-select-item redux-background-input redux-background-size ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
192
-				echo '<option></option>';
193
-
194
-				foreach ( $array as $k => $v ) {
195
-					echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-size'], $k, false ) . '>' . esc_html( $v ) . '</option>';
196
-				}
197
-
198
-				echo '</select>';
199
-			}
200
-
201
-			if ( true === $this->field['background-attachment'] ) {
202
-				$array = array(
203
-					'fixed'   => esc_html__( 'Fixed', 'redux-framework' ),
204
-					'scroll'  => esc_html__( 'Scroll', 'redux-framework' ),
205
-					'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
206
-				);
207
-
208
-				echo '<select id="' . esc_attr( $this->field['id'] ) . '-attachment-select" data-placeholder="' . esc_html__( 'Background Attachment', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-attachment]" class="redux-select-item redux-background-input redux-background-attachment ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
209
-				echo '<option></option>';
210
-
211
-				foreach ( $array as $k => $v ) {
212
-					echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-attachment'], $k, false ) . '>' . esc_html( $v ) . '</option>';
213
-				}
214
-
215
-				echo '</select>';
216
-			}
217
-
218
-			if ( true === $this->field['background-position'] ) {
219
-				$array = array(
220
-					'left top'      => esc_html__( 'Left Top', 'redux-framework' ),
221
-					'left center'   => esc_html__( 'Left center', 'redux-framework' ),
222
-					'left bottom'   => esc_html__( 'Left Bottom', 'redux-framework' ),
223
-					'center top'    => esc_html__( 'Center Top', 'redux-framework' ),
224
-					'center center' => esc_html__( 'Center Center', 'redux-framework' ),
225
-					'center bottom' => esc_html__( 'Center Bottom', 'redux-framework' ),
226
-					'right top'     => esc_html__( 'Right Top', 'redux-framework' ),
227
-					'right center'  => esc_html__( 'Right center', 'redux-framework' ),
228
-					'right bottom'  => esc_html__( 'Right Bottom', 'redux-framework' ),
229
-				);
230
-
231
-				echo '<select id="' . esc_attr( $this->field['id'] ) . '-position-select" data-placeholder="' . esc_html__( 'Background Position', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-position]" class="redux-select-item redux-background-input redux-background-position ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
232
-				echo '<option></option>';
233
-
234
-				foreach ( $array as $k => $v ) {
235
-					echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-position'], $k, false ) . '>' . esc_html( $v ) . '</option>';
236
-				}
237
-
238
-				echo '</select>';
239
-			}
240
-
241
-			if ( $this->field['background-image'] ) {
242
-				echo '<br />';
243
-
244
-				if ( empty( $this->value ) && ! empty( $this->field['default'] ) ) {
245
-					if ( is_array( $this->field['default'] ) ) {
246
-						if ( ! empty( $this->field['default']['media']['id'] ) ) {
247
-							$this->value['media']['id'] = $this->field['default']['media']['id'];
248
-						} elseif ( ! empty( $this->field['default']['id'] ) ) {
249
-							$this->value['media']['id'] = $this->field['default']['id'];
250
-						}
251
-
252
-						if ( ! empty( $this->field['default']['url'] ) ) {
253
-							$this->value['background-image'] = $this->field['default']['url'];
254
-						} elseif ( ! empty( $this->field['default']['media']['url'] ) ) {
255
-							$this->value['background-image'] = $this->field['default']['media']['url'];
256
-						} elseif ( ! empty( $this->field['default']['background-image'] ) ) {
257
-							$this->value['background-image'] = $this->field['default']['background-image'];
258
-						}
259
-					} elseif ( is_numeric( $this->field['default'] ) ) {
260
-						// Check if it's an attachment ID.
261
-							$this->value['media']['id'] = $this->field['default'];
262
-					} else { // Must be a URL.
263
-						$this->value['background-image'] = $this->field['default'];
264
-					}
265
-				}
266
-
267
-				if ( empty( $this->value['background-image'] ) && ! empty( $this->value['media']['id'] ) ) {
268
-					$img                             = wp_get_attachment_image_src( $this->value['media']['id'], 'full' );
269
-					$this->value['background-image'] = $img[0];
270
-					$this->value['media']['width']   = $img[1];
271
-					$this->value['media']['height']  = $img[2];
272
-				}
273
-
274
-				$hide = 'hide ';
275
-
276
-				if ( ( isset( $this->field['preview_media'] ) && false === $this->field['preview_media'] ) ) {
277
-					$this->field['class'] .= ' noPreview';
278
-				}
279
-
280
-				if ( ( ! empty( $this->field['background-image'] ) && true === $this->field['background-image'] ) || ( isset( $this->field['preview'] ) && false === $this->field['preview'] ) ) {
281
-					$hide = '';
282
-				}
283
-
284
-				$placeholder = $this->field['placeholder'] ?? esc_html__( 'No media selected', 'redux-framework' );
285
-
286
-				echo '<input placeholder="' . esc_html( $placeholder ) . '" type="text" class="redux-background-input ' . esc_attr( $hide ) . 'upload ' . esc_attr( $this->field['class'] ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-image]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][background-image]" value="' . esc_url( $this->value['background-image'] ) . '" />';
287
-				echo '<input type="hidden" class="upload-id ' . esc_attr( $this->field['class'] ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][id]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][id]" value="' . esc_attr( $this->value['media']['id'] ) . '" />';
288
-				echo '<input type="hidden" class="upload-height" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][height]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][height]" value="' . esc_attr( $this->value['media']['height'] ) . '" />';
289
-				echo '<input type="hidden" class="upload-width" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][width]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][width]" value="' . esc_attr( $this->value['media']['width'] ) . '" />';
290
-				echo '<input type="hidden" class="upload-thumbnail" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][thumbnail]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][thumbnail]" value="' . esc_url( $this->value['media']['thumbnail'] ) . '" />';
291
-
292
-				// Preview.
293
-				$hide = '';
294
-
295
-				if ( ( isset( $this->field['preview_media'] ) && false === $this->field['preview_media'] ) || empty( $this->value['background-image'] ) ) {
296
-					$hide = 'hide ';
297
-				}
298
-
299
-				if ( empty( $this->value['media']['thumbnail'] ) && ! empty( $this->value['background-image'] ) ) { // Just in case.
300
-					if ( ! empty( $this->value['media']['id'] ) ) {
301
-						$image = wp_get_attachment_image_src(
302
-							$this->value['media']['id'],
303
-							array(
304
-								150,
305
-								150,
306
-							)
307
-						);
308
-
309
-						$this->value['media']['thumbnail'] = $image[0];
310
-					} else {
311
-						$this->value['media']['thumbnail'] = $this->value['background-image'];
312
-					}
313
-				}
314
-
315
-				echo '<div class="' . esc_attr( $hide ) . 'screenshot">';
316
-				echo '<a class="of-uploaded-image" href="' . esc_url( $this->value['background-image'] ) . '" target="_blank">';
317
-
318
-				$alt = wp_prepare_attachment_for_js( $this->value['media']['id'] );
319
-				$alt = $alt['alt'] ?? '';
320
-
321
-				echo '<img class="redux-option-image" id="image_' . esc_attr( $this->value['media']['id'] ) . '" src="' . esc_url( $this->value['media']['thumbnail'] ) . '" alt="' . esc_attr( $alt ) . '" target="_blank" rel="external" />';
322
-				echo '</a>';
323
-				echo '</div>';
324
-
325
-				// Upload controls DIV.
326
-				echo '<div class="upload_button_div">';
327
-
328
-				// If the user has WP3.5+ show upload/remove button.
329
-				echo '<span class="button redux-background-upload" id="' . esc_attr( $this->field['id'] ) . '-media">' . esc_html__( 'Upload', 'redux-framework' ) . '</span>';
330
-
331
-				$hide = '';
332
-				if ( empty( $this->value['background-image'] ) || '' === $this->value['background-image'] ) {
333
-					$hide = ' hide';
334
-				}
335
-
336
-				echo '<span class="button removeCSS redux-remove-background' . esc_attr( $hide ) . '" id="reset_' . esc_attr( $this->field['id'] ) . '" rel="' . esc_attr( $this->field['id'] ) . '">' . esc_html__( 'Remove', 'redux-framework' ) . '</span>';
337
-
338
-				echo '</div>';
339
-			}
340
-
341
-			/**
342
-			 * Preview
343
-			 * */
344
-			if ( ! isset( $this->field['preview'] ) || false !== $this->field['preview'] ) {
345
-				$css = $this->css_style( $this->value );
346
-
347
-				$is_bg = strpos( $css, 'background-image' );
348
-
349
-				if ( empty( $css ) || ! $is_bg ) {
350
-					$css = 'display:none;';
351
-				}
352
-
353
-				$css .= 'height: ' . esc_attr( $this->field['preview_height'] ) . ';';
354
-				echo '<p class="clear ' . esc_attr( $this->field['id'] ) . '_previewer background-preview" style="' . esc_attr( $css ) . '">&nbsp;</p>';
355
-			}
356
-		}
357
-
358
-		/**
359
-		 * Enqueue Function.
360
-		 * If this field requires any scripts, or css define this function and register/enqueue the scripts/css
361
-		 *
362
-		 * @since       1.0.0
363
-		 * @access      public
364
-		 * @return      void
365
-		 */
366
-		public function enqueue() {
367
-			if ( function_exists( 'wp_enqueue_media' ) ) {
368
-				wp_enqueue_media();
369
-			} elseif ( ! wp_script_is( 'media-upload' ) ) {
370
-				wp_enqueue_script( 'media-upload' );
371
-			}
372
-
373
-			if ( ! wp_style_is( 'select2-css' ) ) {
374
-				wp_enqueue_style( 'select2-css' );
375
-			}
376
-
377
-			if ( ! wp_style_is( 'wp-color-picker' ) ) {
378
-				wp_enqueue_style( 'wp-color-picker' );
379
-			}
380
-
381
-			$dep_array = array( 'jquery', 'wp-color-picker', 'select2-js', 'redux-js' );
382
-
383
-			wp_enqueue_script(
384
-				'redux-field-background',
385
-				Redux_Core::$url . 'inc/fields/background/redux-background' . Redux_Functions::is_min() . '.js',
386
-				$dep_array,
387
-				$this->timestamp,
388
-				true
389
-			);
390
-
391
-			if ( $this->parent->args['dev_mode'] ) {
392
-				wp_enqueue_style(
393
-					'redux-field-background',
394
-					Redux_Core::$url . 'inc/fields/background/redux-background.css',
395
-					array(),
396
-					$this->timestamp
397
-				);
398
-
399
-				wp_enqueue_style( 'redux-color-picker' );
400
-			}
401
-		}
402
-
403
-		/**
404
-		 * Output CSS styling.
405
-		 *
406
-		 * @param array $data Value array.
407
-		 *
408
-		 * @return string
409
-		 */
410
-		public function css_style( $data = array() ): string {
411
-			$css = '';
412
-
413
-			if ( ! empty( $data ) && is_array( $data ) ) {
414
-				foreach ( $data as $key => $val ) {
415
-					if ( ! empty( $val ) && 'media' !== $key ) {
416
-						if ( 'background-image' === $key ) {
417
-							$css .= $key . ":url('" . esc_url( $val ) . "');";
418
-						} else {
419
-							$css .= $key . ':' . esc_attr( $val ) . ';';
420
-						}
421
-					}
422
-				}
423
-			}
424
-
425
-			return $css;
426
-		}
427
-
428
-		/**
429
-		 * Enable output_variables to be generated.
430
-		 *
431
-		 * @since       4.0.3
432
-		 * @return void
433
-		 */
434
-		public function output_variables() {
435
-			// No code needed, just defining the method is enough.
436
-		}
437
-	}
15
+    /**
16
+     * Main Redux_background class
17
+     *
18
+     * @since       3.1.5
19
+     */
20
+    class Redux_Background extends Redux_Field {
21
+
22
+        /**
23
+         * Set field and value defaults.
24
+         */
25
+        public function set_defaults() {
26
+            $defaults = array(
27
+                'background-color'      => true,
28
+                'background-repeat'     => true,
29
+                'background-attachment' => true,
30
+                'background-position'   => true,
31
+                'background-image'      => true,
32
+                'background-gradient'   => false,
33
+                'background-clip'       => false,
34
+                'background-origin'     => false,
35
+                'background-size'       => true,
36
+                'preview_media'         => false,
37
+                'preview'               => true,
38
+                'preview_height'        => '200px',
39
+                'transparent'           => true,
40
+            );
41
+
42
+            $this->field = wp_parse_args( $this->field, $defaults );
43
+
44
+            // No errors please.
45
+            $defaults = array(
46
+                'background-color'      => '',
47
+                'background-repeat'     => '',
48
+                'background-attachment' => '',
49
+                'background-position'   => '',
50
+                'background-image'      => '',
51
+                'background-clip'       => '',
52
+                'background-origin'     => '',
53
+                'background-size'       => '',
54
+                'media'                 => array(),
55
+            );
56
+
57
+            $this->value = wp_parse_args( $this->value, $defaults );
58
+
59
+            $defaults = array(
60
+                'id'        => '',
61
+                'width'     => '',
62
+                'height'    => '',
63
+                'thumbnail' => '',
64
+            );
65
+
66
+            $this->value['media'] = wp_parse_args( $this->value['media'], $defaults );
67
+        }
68
+
69
+        /**
70
+         * Field Render Function.
71
+         * Takes the vars and outputs the HTML for the field in the settings
72
+         *
73
+         * @since       1.0.0
74
+         * @access      public
75
+         * @return      void
76
+         */
77
+        public function render() {
78
+            $this->select2_config['allowClear'] = true;
79
+
80
+            if ( isset( $this->field['select2'] ) ) {
81
+                $this->field['select2'] = wp_parse_args( $this->field['select2'], $this->select2_config );
82
+            } else {
83
+                $this->field['select2'] = $this->select2_config;
84
+            }
85
+
86
+            $this->field['select2'] = Redux_Functions::sanitize_camel_case_array_keys( $this->field['select2'] );
87
+
88
+            $select2_data = Redux_Functions::create_data_string( $this->field['select2'] );
89
+
90
+            if ( true === $this->field['background-color'] ) {
91
+                if ( isset( $this->value['color'] ) && empty( $this->value['background-color'] ) ) {
92
+                    $this->value['background-color'] = $this->value['color'];
93
+                }
94
+
95
+                $def_bg_color = $this->field['default']['background-color'] ?? '';
96
+
97
+                echo '<input ';
98
+                echo 'data-id="' . esc_attr( $this->field['id'] ) . '"';
99
+                echo 'name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-color]"';
100
+                echo 'id="' . esc_attr( $this->field['id'] ) . '-color"';
101
+                echo 'class="color-picker redux-color redux-background-input redux-color-init ' . esc_attr( $this->field['class'] ) . '"';
102
+                echo 'type="text" value="' . esc_attr( $this->value['background-color'] ) . '"';
103
+                echo 'data-default-color="' . esc_attr( $def_bg_color ) . '"';
104
+
105
+                $data = array(
106
+                    'field' => $this->field,
107
+                    'index' => 'color',
108
+                );
109
+
110
+                echo Redux_Functions_Ex::output_alpha_data( $data ); // phpcs:ignore WordPress.Security.EscapeOutput
111
+
112
+                echo '>';
113
+
114
+                echo '<input type="hidden" class="redux-saved-color" id="' . esc_attr( $this->field['id'] ) . '-saved-color" value="">';
115
+
116
+                if ( ! isset( $this->field['transparent'] ) || false !== $this->field['transparent'] ) {
117
+                    $is_checked = '';
118
+                    if ( 'transparent' === $this->value['background-color'] ) {
119
+                        $is_checked = ' checked="checked"';
120
+                    }
121
+                    echo '<label for="' . esc_attr( $this->field['id'] ) . '-transparency" class="color-transparency-check"><input type="checkbox" class="checkbox color-transparency redux-background-input ' . esc_attr( $this->field['class'] ) . '" id="' . esc_attr( $this->field['id'] ) . '-transparency" data-id="' . esc_attr( $this->field['id'] ) . '-color" value="1" ' . esc_html( $is_checked ) . '> ' . esc_html__( 'Transparent', 'redux-framework' ) . '</label>';
122
+                }
123
+
124
+                if ( true === $this->field['background-repeat'] || true === $this->field['background-position'] || true === $this->field['background-attachment'] ) {
125
+                    echo '<br />';
126
+                }
127
+            }
128
+
129
+            if ( true === $this->field['background-repeat'] ) {
130
+                $array = array(
131
+                    'no-repeat' => esc_html__( 'No Repeat', 'redux-framework' ),
132
+                    'repeat'    => esc_html__( 'Repeat All', 'redux-framework' ),
133
+                    'repeat-x'  => esc_html__( 'Repeat Horizontally', 'redux-framework' ),
134
+                    'repeat-y'  => esc_html__( 'Repeat Vertically', 'redux-framework' ),
135
+                    'inherit'   => esc_html__( 'Inherit', 'redux-framework' ),
136
+                );
137
+
138
+                echo '<select id="' . esc_attr( $this->field['id'] ) . '-repeat-select" data-placeholder="' . esc_html__( 'Background Repeat', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-repeat]" class="redux-select-item redux-background-input redux-background-repeat ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
139
+                echo '<option></option>';
140
+
141
+                foreach ( $array as $k => $v ) {
142
+                    echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-repeat'], $k, false ) . '>' . esc_html( $v ) . '</option>';
143
+                }
144
+
145
+                echo '</select>';
146
+            }
147
+
148
+            if ( true === $this->field['background-clip'] ) {
149
+                $array = array(
150
+                    'inherit'     => esc_html__( 'Inherit', 'redux-framework' ),
151
+                    'border-box'  => esc_html__( 'Border Box', 'redux-framework' ),
152
+                    'content-box' => esc_html__( 'Content Box', 'redux-framework' ),
153
+                    'padding-box' => esc_html__( 'Padding Box', 'redux-framework' ),
154
+                );
155
+
156
+                echo '<select id="' . esc_attr( $this->field['id'] ) . '-clip-select" data-placeholder="' . esc_html__( 'Background Clip', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-clip]" class="redux-select-item redux-background-input redux-background-clip ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
157
+                echo '<option></option>';
158
+
159
+                foreach ( $array as $k => $v ) {
160
+                    echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-clip'], $k, false ) . '>' . esc_html( $v ) . '</option>';
161
+                }
162
+
163
+                echo '</select>';
164
+            }
165
+
166
+            if ( true === $this->field['background-origin'] ) {
167
+                $array = array(
168
+                    'inherit'     => esc_html__( 'Inherit', 'redux-framework' ),
169
+                    'border-box'  => esc_html__( 'Border Box', 'redux-framework' ),
170
+                    'content-box' => esc_html__( 'Content Box', 'redux-framework' ),
171
+                    'padding-box' => esc_html__( 'Padding Box', 'redux-framework' ),
172
+                );
173
+
174
+                echo '<select id="' . esc_attr( $this->field['id'] ) . '-origin-select" data-placeholder="' . esc_html__( 'Background Origin', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-origin]" class="redux-select-item redux-background-input redux-background-origin ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
175
+                echo '<option></option>';
176
+
177
+                foreach ( $array as $k => $v ) {
178
+                    echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-origin'], $k, false ) . '>' . esc_html( $v ) . '</option>';
179
+                }
180
+
181
+                echo '</select>';
182
+            }
183
+
184
+            if ( true === $this->field['background-size'] ) {
185
+                $array = array(
186
+                    'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
187
+                    'cover'   => esc_html__( 'Cover', 'redux-framework' ),
188
+                    'contain' => esc_html__( 'Contain', 'redux-framework' ),
189
+                );
190
+
191
+                echo '<select id="' . esc_attr( $this->field['id'] ) . '-size-select" data-placeholder="' . esc_html__( 'Background Size', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-size]" class="redux-select-item redux-background-input redux-background-size ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
192
+                echo '<option></option>';
193
+
194
+                foreach ( $array as $k => $v ) {
195
+                    echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-size'], $k, false ) . '>' . esc_html( $v ) . '</option>';
196
+                }
197
+
198
+                echo '</select>';
199
+            }
200
+
201
+            if ( true === $this->field['background-attachment'] ) {
202
+                $array = array(
203
+                    'fixed'   => esc_html__( 'Fixed', 'redux-framework' ),
204
+                    'scroll'  => esc_html__( 'Scroll', 'redux-framework' ),
205
+                    'inherit' => esc_html__( 'Inherit', 'redux-framework' ),
206
+                );
207
+
208
+                echo '<select id="' . esc_attr( $this->field['id'] ) . '-attachment-select" data-placeholder="' . esc_html__( 'Background Attachment', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-attachment]" class="redux-select-item redux-background-input redux-background-attachment ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
209
+                echo '<option></option>';
210
+
211
+                foreach ( $array as $k => $v ) {
212
+                    echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-attachment'], $k, false ) . '>' . esc_html( $v ) . '</option>';
213
+                }
214
+
215
+                echo '</select>';
216
+            }
217
+
218
+            if ( true === $this->field['background-position'] ) {
219
+                $array = array(
220
+                    'left top'      => esc_html__( 'Left Top', 'redux-framework' ),
221
+                    'left center'   => esc_html__( 'Left center', 'redux-framework' ),
222
+                    'left bottom'   => esc_html__( 'Left Bottom', 'redux-framework' ),
223
+                    'center top'    => esc_html__( 'Center Top', 'redux-framework' ),
224
+                    'center center' => esc_html__( 'Center Center', 'redux-framework' ),
225
+                    'center bottom' => esc_html__( 'Center Bottom', 'redux-framework' ),
226
+                    'right top'     => esc_html__( 'Right Top', 'redux-framework' ),
227
+                    'right center'  => esc_html__( 'Right center', 'redux-framework' ),
228
+                    'right bottom'  => esc_html__( 'Right Bottom', 'redux-framework' ),
229
+                );
230
+
231
+                echo '<select id="' . esc_attr( $this->field['id'] ) . '-position-select" data-placeholder="' . esc_html__( 'Background Position', 'redux-framework' ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-position]" class="redux-select-item redux-background-input redux-background-position ' . esc_attr( $this->field['class'] ) . '"' . esc_attr( $select2_data ) . '>';
232
+                echo '<option></option>';
233
+
234
+                foreach ( $array as $k => $v ) {
235
+                    echo '<option value="' . esc_attr( $k ) . '" ' . selected( $this->value['background-position'], $k, false ) . '>' . esc_html( $v ) . '</option>';
236
+                }
237
+
238
+                echo '</select>';
239
+            }
240
+
241
+            if ( $this->field['background-image'] ) {
242
+                echo '<br />';
243
+
244
+                if ( empty( $this->value ) && ! empty( $this->field['default'] ) ) {
245
+                    if ( is_array( $this->field['default'] ) ) {
246
+                        if ( ! empty( $this->field['default']['media']['id'] ) ) {
247
+                            $this->value['media']['id'] = $this->field['default']['media']['id'];
248
+                        } elseif ( ! empty( $this->field['default']['id'] ) ) {
249
+                            $this->value['media']['id'] = $this->field['default']['id'];
250
+                        }
251
+
252
+                        if ( ! empty( $this->field['default']['url'] ) ) {
253
+                            $this->value['background-image'] = $this->field['default']['url'];
254
+                        } elseif ( ! empty( $this->field['default']['media']['url'] ) ) {
255
+                            $this->value['background-image'] = $this->field['default']['media']['url'];
256
+                        } elseif ( ! empty( $this->field['default']['background-image'] ) ) {
257
+                            $this->value['background-image'] = $this->field['default']['background-image'];
258
+                        }
259
+                    } elseif ( is_numeric( $this->field['default'] ) ) {
260
+                        // Check if it's an attachment ID.
261
+                            $this->value['media']['id'] = $this->field['default'];
262
+                    } else { // Must be a URL.
263
+                        $this->value['background-image'] = $this->field['default'];
264
+                    }
265
+                }
266
+
267
+                if ( empty( $this->value['background-image'] ) && ! empty( $this->value['media']['id'] ) ) {
268
+                    $img                             = wp_get_attachment_image_src( $this->value['media']['id'], 'full' );
269
+                    $this->value['background-image'] = $img[0];
270
+                    $this->value['media']['width']   = $img[1];
271
+                    $this->value['media']['height']  = $img[2];
272
+                }
273
+
274
+                $hide = 'hide ';
275
+
276
+                if ( ( isset( $this->field['preview_media'] ) && false === $this->field['preview_media'] ) ) {
277
+                    $this->field['class'] .= ' noPreview';
278
+                }
279
+
280
+                if ( ( ! empty( $this->field['background-image'] ) && true === $this->field['background-image'] ) || ( isset( $this->field['preview'] ) && false === $this->field['preview'] ) ) {
281
+                    $hide = '';
282
+                }
283
+
284
+                $placeholder = $this->field['placeholder'] ?? esc_html__( 'No media selected', 'redux-framework' );
285
+
286
+                echo '<input placeholder="' . esc_html( $placeholder ) . '" type="text" class="redux-background-input ' . esc_attr( $hide ) . 'upload ' . esc_attr( $this->field['class'] ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[background-image]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][background-image]" value="' . esc_url( $this->value['background-image'] ) . '" />';
287
+                echo '<input type="hidden" class="upload-id ' . esc_attr( $this->field['class'] ) . '" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][id]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][id]" value="' . esc_attr( $this->value['media']['id'] ) . '" />';
288
+                echo '<input type="hidden" class="upload-height" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][height]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][height]" value="' . esc_attr( $this->value['media']['height'] ) . '" />';
289
+                echo '<input type="hidden" class="upload-width" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][width]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][width]" value="' . esc_attr( $this->value['media']['width'] ) . '" />';
290
+                echo '<input type="hidden" class="upload-thumbnail" name="' . esc_attr( $this->field['name'] . $this->field['name_suffix'] ) . '[media][thumbnail]" id="' . esc_attr( $this->parent->args['opt_name'] ) . '[' . esc_attr( $this->field['id'] ) . '][media][thumbnail]" value="' . esc_url( $this->value['media']['thumbnail'] ) . '" />';
291
+
292
+                // Preview.
293
+                $hide = '';
294
+
295
+                if ( ( isset( $this->field['preview_media'] ) && false === $this->field['preview_media'] ) || empty( $this->value['background-image'] ) ) {
296
+                    $hide = 'hide ';
297
+                }
298
+
299
+                if ( empty( $this->value['media']['thumbnail'] ) && ! empty( $this->value['background-image'] ) ) { // Just in case.
300
+                    if ( ! empty( $this->value['media']['id'] ) ) {
301
+                        $image = wp_get_attachment_image_src(
302
+                            $this->value['media']['id'],
303
+                            array(
304
+                                150,
305
+                                150,
306
+                            )
307
+                        );
308
+
309
+                        $this->value['media']['thumbnail'] = $image[0];
310
+                    } else {
311
+                        $this->value['media']['thumbnail'] = $this->value['background-image'];
312
+                    }
313
+                }
314
+
315
+                echo '<div class="' . esc_attr( $hide ) . 'screenshot">';
316
+                echo '<a class="of-uploaded-image" href="' . esc_url( $this->value['background-image'] ) . '" target="_blank">';
317
+
318
+                $alt = wp_prepare_attachment_for_js( $this->value['media']['id'] );
319
+                $alt = $alt['alt'] ?? '';
320
+
321
+                echo '<img class="redux-option-image" id="image_' . esc_attr( $this->value['media']['id'] ) . '" src="' . esc_url( $this->value['media']['thumbnail'] ) . '" alt="' . esc_attr( $alt ) . '" target="_blank" rel="external" />';
322
+                echo '</a>';
323
+                echo '</div>';
324
+
325
+                // Upload controls DIV.
326
+                echo '<div class="upload_button_div">';
327
+
328
+                // If the user has WP3.5+ show upload/remove button.
329
+                echo '<span class="button redux-background-upload" id="' . esc_attr( $this->field['id'] ) . '-media">' . esc_html__( 'Upload', 'redux-framework' ) . '</span>';
330
+
331
+                $hide = '';
332
+                if ( empty( $this->value['background-image'] ) || '' === $this->value['background-image'] ) {
333
+                    $hide = ' hide';
334
+                }
335
+
336
+                echo '<span class="button removeCSS redux-remove-background' . esc_attr( $hide ) . '" id="reset_' . esc_attr( $this->field['id'] ) . '" rel="' . esc_attr( $this->field['id'] ) . '">' . esc_html__( 'Remove', 'redux-framework' ) . '</span>';
337
+
338
+                echo '</div>';
339
+            }
340
+
341
+            /**
342
+             * Preview
343
+             * */
344
+            if ( ! isset( $this->field['preview'] ) || false !== $this->field['preview'] ) {
345
+                $css = $this->css_style( $this->value );
346
+
347
+                $is_bg = strpos( $css, 'background-image' );
348
+
349
+                if ( empty( $css ) || ! $is_bg ) {
350
+                    $css = 'display:none;';
351
+                }
352
+
353
+                $css .= 'height: ' . esc_attr( $this->field['preview_height'] ) . ';';
354
+                echo '<p class="clear ' . esc_attr( $this->field['id'] ) . '_previewer background-preview" style="' . esc_attr( $css ) . '">&nbsp;</p>';
355
+            }
356
+        }
357
+
358
+        /**
359
+         * Enqueue Function.
360
+         * If this field requires any scripts, or css define this function and register/enqueue the scripts/css
361
+         *
362
+         * @since       1.0.0
363
+         * @access      public
364
+         * @return      void
365
+         */
366
+        public function enqueue() {
367
+            if ( function_exists( 'wp_enqueue_media' ) ) {
368
+                wp_enqueue_media();
369
+            } elseif ( ! wp_script_is( 'media-upload' ) ) {
370
+                wp_enqueue_script( 'media-upload' );
371
+            }
372
+
373
+            if ( ! wp_style_is( 'select2-css' ) ) {
374
+                wp_enqueue_style( 'select2-css' );
375
+            }
376
+
377
+            if ( ! wp_style_is( 'wp-color-picker' ) ) {
378
+                wp_enqueue_style( 'wp-color-picker' );
379
+            }
380
+
381
+            $dep_array = array( 'jquery', 'wp-color-picker', 'select2-js', 'redux-js' );
382
+
383
+            wp_enqueue_script(
384
+                'redux-field-background',
385
+                Redux_Core::$url . 'inc/fields/background/redux-background' . Redux_Functions::is_min() . '.js',
386
+                $dep_array,
387
+                $this->timestamp,
388
+                true
389
+            );
390
+
391
+            if ( $this->parent->args['dev_mode'] ) {
392
+                wp_enqueue_style(
393
+                    'redux-field-background',
394
+                    Redux_Core::$url . 'inc/fields/background/redux-background.css',
395
+                    array(),
396
+                    $this->timestamp
397
+                );
398
+
399
+                wp_enqueue_style( 'redux-color-picker' );
400
+            }
401
+        }
402
+
403
+        /**
404
+         * Output CSS styling.
405
+         *
406
+         * @param array $data Value array.
407
+         *
408
+         * @return string
409
+         */
410
+        public function css_style( $data = array() ): string {
411
+            $css = '';
412
+
413
+            if ( ! empty( $data ) && is_array( $data ) ) {
414
+                foreach ( $data as $key => $val ) {
415
+                    if ( ! empty( $val ) && 'media' !== $key ) {
416
+                        if ( 'background-image' === $key ) {
417
+                            $css .= $key . ":url('" . esc_url( $val ) . "');";
418
+                        } else {
419
+                            $css .= $key . ':' . esc_attr( $val ) . ';';
420
+                        }
421
+                    }
422
+                }
423
+            }
424
+
425
+            return $css;
426
+        }
427
+
428
+        /**
429
+         * Enable output_variables to be generated.
430
+         *
431
+         * @since       4.0.3
432
+         * @return void
433
+         */
434
+        public function output_variables() {
435
+            // No code needed, just defining the method is enough.
436
+        }
437
+    }
438 438
 }
439 439
 
440 440
 class_alias( 'Redux_Background', 'ReduxFramework_Background' );
Please login to merge, or discard this patch.