WordPress Zero Spam - Version 5.4.1

Version Description

Download this release

Release Info

Developer bmarshall511
Plugin Icon 128x128 WordPress Zero Spam
Version 5.4.1
Comparing to
See all releases

Code changes from version 5.4.0 to 5.4.1

Files changed (39) hide show
  1. assets/css/admin.css +262 -23
  2. assets/css/admin.css.map +1 -1
  3. assets/css/jquery-jvectormap-2.0.5.css +78 -74
  4. assets/img/icon-memberpress.svg +0 -21
  5. assets/js/Chart.bundle.min.js +4053 -3809
  6. assets/js/jquery-jvectormap-world-merc.js +1 -0
  7. assets/js/jquery-jvectormap-world-mill.js +0 -1
  8. assets/src/scss/admin.scss +144 -31
  9. core/admin/class-dashboard.php +63 -33
  10. core/admin/tables/class-logtable.php +53 -53
  11. core/class-utilities.php +18 -12
  12. includes/class-cli.php +11 -8
  13. includes/class-plugin.php +3 -6
  14. includes/templates/admin-bar-chart.php +101 -0
  15. includes/templates/admin-header.php +89 -90
  16. includes/templates/admin-hours-list.php +52 -0
  17. includes/templates/admin-ips.php +41 -31
  18. includes/templates/admin-line-chart.php +87 -26
  19. includes/templates/admin-map.php +52 -33
  20. includes/templates/admin-modal-details.php +1 -1
  21. includes/templates/admin-pie.php +40 -51
  22. modules/class-security.php +15 -4
  23. modules/class-zerospam.php +98 -67
  24. modules/comments/class-comments.php +4 -1
  25. modules/contactform7/class-contactform7.php +4 -1
  26. modules/davidwalsh/class-davidwalsh.php +0 -13
  27. modules/fluentforms/class-fluentforms.php +4 -1
  28. modules/formidable/class-formidable.php +4 -1
  29. modules/give/class-give.php +4 -1
  30. modules/gravityforms/class-gravityforms.php +40 -36
  31. modules/login/class-login.php +4 -1
  32. modules/mailchimpforwp/class-mailchimpforwp.php +4 -1
  33. modules/memberpress/class-memberpress.php +0 -375
  34. modules/registration/class-registration.php +4 -1
  35. modules/woocommerce/class-woocommerce.php +4 -1
  36. modules/wpforms/class-wpforms.php +4 -1
  37. readme.txt +12 -5
  38. uninstall.php +23 -2
  39. wordpress-zero-spam.php +2 -2
assets/css/admin.css CHANGED
@@ -56,7 +56,7 @@
56
  color: #fff;
57
  }
58
 
59
- .zerospam-list--data-actions .button, .zerospam-table-form .column-actions .button {
60
  font-size: 11px;
61
  padding: 0.4rem 0.5rem;
62
  }
@@ -106,13 +106,16 @@
106
  .zerospam-dashboard {
107
  column-gap: 3rem;
108
  display: grid;
109
- grid-template-columns: 200px 1fr;
110
  grid-template-rows: auto;
111
  }
112
  }
113
  .zerospam-dashboard a {
114
  color: var(--zerospam-accent);
115
  }
 
 
 
116
 
117
  a.zerospam-dashboard__menu-link {
118
  align-items: center;
@@ -246,12 +249,37 @@ a.zerospam-dashboard__menu-link--active {
246
  }
247
  @media (min-width: 782px) {
248
  .zerospam-block--map {
249
- width: calc(60% - var(--zerospam-block-gap));
250
  }
251
  }
252
  @media (min-width: 782px) {
253
  .zerospam-block--list {
254
- width: calc(40% - var(--zerospam-block-gap));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
255
  }
256
  }
257
 
@@ -265,21 +293,6 @@ a.zerospam-dashboard__menu-link--active {
265
  .zerospam-blocks .zerospam-block, .zerospam-blocks .zerospam-form tr, .zerospam-form .zerospam-blocks tr {
266
  margin: calc(var(--zerospam-block-gap) / 2);
267
  }
268
- .zerospam-blocks .zerospam-block--facebook, .zerospam-blocks .zerospam-block--twitter {
269
- background-color: transparent;
270
- border: 0;
271
- box-shadow: none;
272
- }
273
- @media (min-width: 782px) {
274
- .zerospam-blocks .zerospam-block--facebook {
275
- width: 340px;
276
- }
277
- }
278
- @media (min-width: 782px) {
279
- .zerospam-blocks .zerospam-block--twitter {
280
- width: calc(100% - var(--zerospam-block-gap) * 2 - 340px);
281
- }
282
- }
283
 
284
  .zerospam-table-form .column-actions {
285
  column-gap: 5px;
@@ -388,6 +401,10 @@ a.zerospam-dashboard__menu-link--active {
388
  border: 1px solid var(--zerospam-trinary);
389
  box-shadow: none;
390
  }
 
 
 
 
391
  .zerospam-table-form input[type=radio],
392
  .zerospam-table-form input[type=checkbox],
393
  .zerospam-form input[type=radio],
@@ -467,6 +484,10 @@ a.zerospam-dashboard__menu-link--active {
467
  left: 1.7rem;
468
  }
469
 
 
 
 
 
470
  .zerospam-form-field-container {
471
  align-items: center;
472
  column-gap: 10px;
@@ -568,7 +589,7 @@ a.zerospam-dashboard__menu-link--active {
568
  transform: rotate(-45deg);
569
  }
570
 
571
- .zerospam-type-blocked::before, .zerospam-type-login::before, .zerospam-type-registration::before, .zerospam-type-comment::before, .zerospam-type-fluent_form::before, .zerospam-type-wpforms::before, .zerospam-type-contactform7::before, .zerospam-type-givewp::before, .zerospam-type-memberpress_registration::before, .zerospam-type-memberpress_login::before, .zerospam-type-mailchimp4wp::before, .zerospam-type-woocommerce_registration::before, .zerospam-type-gravityforms::before, .zerospam-type-formidable::before {
572
  background-position: center;
573
  background-repeat: no-repeat;
574
  background-size: contain;
@@ -600,9 +621,6 @@ a.zerospam-dashboard__menu-link--active {
600
  .zerospam-type-contactform7::before {
601
  background-image: url("../../modules/contactform7/icon-cf7.png");
602
  }
603
- .zerospam-type-memberpress_registration::before, .zerospam-type-memberpress_login::before {
604
- background-image: url("../img/icon-memberpress.svg");
605
- }
606
  .zerospam-type-givewp::before {
607
  background-image: url("../../modules/give/icon-givewp.png");
608
  }
@@ -616,11 +634,232 @@ a.zerospam-dashboard__menu-link--active {
616
  background-image: url("../../modules/gravityforms/icon-gravity-forms.svg");
617
  }
618
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
619
  .zerospam-list {
620
  list-style: none;
621
  margin: 0;
622
  padding: 0;
623
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
624
  .zerospam-list--data-actions li, .zerospam-list--data li {
625
  align-items: center;
626
  column-gap: 15px;
56
  color: #fff;
57
  }
58
 
59
+ .zerospam-list--data-actions .button, .zerospam-list--top .button, .zerospam-table-form .column-actions .button {
60
  font-size: 11px;
61
  padding: 0.4rem 0.5rem;
62
  }
106
  .zerospam-dashboard {
107
  column-gap: 3rem;
108
  display: grid;
109
+ grid-template-columns: 300px minmax(0, 1fr);
110
  grid-template-rows: auto;
111
  }
112
  }
113
  .zerospam-dashboard a {
114
  color: var(--zerospam-accent);
115
  }
116
+ .zerospam-dashboard__sections {
117
+ margin-bottom: 40px;
118
+ }
119
 
120
  a.zerospam-dashboard__menu-link {
121
  align-items: center;
249
  }
250
  @media (min-width: 782px) {
251
  .zerospam-block--map {
252
+ width: calc(65% - var(--zerospam-block-gap));
253
  }
254
  }
255
  @media (min-width: 782px) {
256
  .zerospam-block--list {
257
+ width: calc(35% - var(--zerospam-block-gap));
258
+ }
259
+ }
260
+ @media (min-width: 782px) {
261
+ .zerospam-block--line-chart {
262
+ width: calc(65% - var(--zerospam-block-gap));
263
+ }
264
+ }
265
+ @media (min-width: 782px) {
266
+ .zerospam-block--pie-chart {
267
+ width: calc(35% - var(--zerospam-block-gap));
268
+ }
269
+ }
270
+ @media (min-width: 782px) {
271
+ .zerospam-block--review .zerospam-block__content, .zerospam-block--review .zerospam-form td, .zerospam-form .zerospam-block--review td {
272
+ column-gap: 40px;
273
+ display: flex;
274
+ }
275
+ }
276
+ .zerospam-block--review .zerospam-block__content-col:first-child {
277
+ flex-grow: 1;
278
+ }
279
+ @media (min-width: 782px) {
280
+ .zerospam-block--review .zerospam-block__content-col:last-child {
281
+ flex-shrink: 0;
282
+ width: 32%;
283
  }
284
  }
285
 
293
  .zerospam-blocks .zerospam-block, .zerospam-blocks .zerospam-form tr, .zerospam-form .zerospam-blocks tr {
294
  margin: calc(var(--zerospam-block-gap) / 2);
295
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
296
 
297
  .zerospam-table-form .column-actions {
298
  column-gap: 5px;
401
  border: 1px solid var(--zerospam-trinary);
402
  box-shadow: none;
403
  }
404
+ .zerospam-table-form select,
405
+ .zerospam-form select {
406
+ padding-right: 33px;
407
+ }
408
  .zerospam-table-form input[type=radio],
409
  .zerospam-table-form input[type=checkbox],
410
  .zerospam-form input[type=radio],
484
  left: 1.7rem;
485
  }
486
 
487
+ .check-column input[type=checkbox] {
488
+ display: block;
489
+ }
490
+
491
  .zerospam-form-field-container {
492
  align-items: center;
493
  column-gap: 10px;
589
  transform: rotate(-45deg);
590
  }
591
 
592
+ .zerospam-type-blocked::before, .zerospam-type-login::before, .zerospam-type-registration::before, .zerospam-type-comment::before, .zerospam-type-fluent_form::before, .zerospam-type-wpforms::before, .zerospam-type-contactform7::before, .zerospam-type-givewp::before, .zerospam-type-mailchimp4wp::before, .zerospam-type-woocommerce_registration::before, .zerospam-type-gravityforms::before, .zerospam-type-formidable::before {
593
  background-position: center;
594
  background-repeat: no-repeat;
595
  background-size: contain;
621
  .zerospam-type-contactform7::before {
622
  background-image: url("../../modules/contactform7/icon-cf7.png");
623
  }
 
 
 
624
  .zerospam-type-givewp::before {
625
  background-image: url("../../modules/give/icon-givewp.png");
626
  }
634
  background-image: url("../../modules/gravityforms/icon-gravity-forms.svg");
635
  }
636
 
637
+ @keyframes row1 {
638
+ 0% {
639
+ background-position: 0% 0%;
640
+ }
641
+ 50% {
642
+ background-position: 50% 0%;
643
+ }
644
+ 100% {
645
+ background-position: 0% 0%;
646
+ }
647
+ }
648
+ @keyframes row2 {
649
+ 0% {
650
+ background-position: 0% 0%;
651
+ }
652
+ 50% {
653
+ background-position: 55% 0%;
654
+ }
655
+ 100% {
656
+ background-position: 0% 0%;
657
+ }
658
+ }
659
+ @keyframes row3 {
660
+ 0% {
661
+ background-position: 0% 0%;
662
+ }
663
+ 50% {
664
+ background-position: 60% 0%;
665
+ }
666
+ 100% {
667
+ background-position: 0% 0%;
668
+ }
669
+ }
670
+ @keyframes row4 {
671
+ 0% {
672
+ background-position: 0% 0%;
673
+ }
674
+ 50% {
675
+ background-position: 65% 0%;
676
+ }
677
+ 100% {
678
+ background-position: 0% 0%;
679
+ }
680
+ }
681
+ @keyframes row5 {
682
+ 0% {
683
+ background-position: 0% 0%;
684
+ }
685
+ 50% {
686
+ background-position: 70% 0%;
687
+ }
688
+ 100% {
689
+ background-position: 0% 0%;
690
+ }
691
+ }
692
+ @keyframes row6 {
693
+ 0% {
694
+ background-position: 0% 0%;
695
+ }
696
+ 50% {
697
+ background-position: 75% 0%;
698
+ }
699
+ 100% {
700
+ background-position: 0% 0%;
701
+ }
702
+ }
703
+ @keyframes row7 {
704
+ 0% {
705
+ background-position: 0% 0%;
706
+ }
707
+ 50% {
708
+ background-position: 80% 0%;
709
+ }
710
+ 100% {
711
+ background-position: 0% 0%;
712
+ }
713
+ }
714
+ @keyframes row8 {
715
+ 0% {
716
+ background-position: 0% 0%;
717
+ }
718
+ 50% {
719
+ background-position: 85% 0%;
720
+ }
721
+ 100% {
722
+ background-position: 0% 0%;
723
+ }
724
+ }
725
+ @keyframes row9 {
726
+ 0% {
727
+ background-position: 0% 0%;
728
+ }
729
+ 50% {
730
+ background-position: 90% 0%;
731
+ }
732
+ 100% {
733
+ background-position: 0% 0%;
734
+ }
735
+ }
736
+ @keyframes row10 {
737
+ 0% {
738
+ background-position: 0% 0%;
739
+ }
740
+ 50% {
741
+ background-position: 95% 0%;
742
+ }
743
+ 100% {
744
+ background-position: 0% 0%;
745
+ }
746
+ }
747
+ .zerospam-tag {
748
+ background-color: var(--zerospam-accent);
749
+ border-radius: 2px;
750
+ color: #fff;
751
+ display: inline-block;
752
+ padding: 3px;
753
+ font-size: 10px;
754
+ line-height: 1;
755
+ margin: 3px;
756
+ vertical-align: middle;
757
+ }
758
+
759
+ .zerospam-list__item--blocked {
760
+ background: rgba(255, 41, 41, 0.25) !important;
761
+ }
762
+
763
  .zerospam-list {
764
  list-style: none;
765
  margin: 0;
766
  padding: 0;
767
  }
768
+ .zerospam-list--top {
769
+ font-size: 12px;
770
+ line-height: 1;
771
+ }
772
+ .zerospam-list--top li {
773
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
774
+ align-items: center;
775
+ display: flex;
776
+ margin: 0;
777
+ padding: 6px;
778
+ }
779
+ .zerospam-list--top li:nth-child(1) {
780
+ animation: row1 5s ease infinite;
781
+ animation-delay: 0.1s;
782
+ background: linear-gradient(90deg, rgb(255, 255, 255) 0%, #fff 35%, rgba(255, 41, 41, calc(0.6 / 1)) 100%);
783
+ background-size: 200%;
784
+ }
785
+ .zerospam-list--top li:nth-child(2) {
786
+ animation: row2 5s ease infinite;
787
+ animation-delay: 0.2s;
788
+ background: linear-gradient(90deg, rgb(255, 255, 255) 0%, #fff 40%, rgba(255, 41, 41, calc(0.6 / 2)) 100%);
789
+ background-size: 200%;
790
+ }
791
+ .zerospam-list--top li:nth-child(3) {
792
+ animation: row3 5s ease infinite;
793
+ animation-delay: 0.3s;
794
+ background: linear-gradient(90deg, rgb(255, 255, 255) 0%, #fff 45%, rgba(255, 41, 41, calc(0.6 / 3)) 100%);
795
+ background-size: 200%;
796
+ }
797
+ .zerospam-list--top li:nth-child(4) {
798
+ animation: row4 5s ease infinite;
799
+ animation-delay: 0.4s;
800
+ background: linear-gradient(90deg, rgb(255, 255, 255) 0%, #fff 50%, rgba(255, 41, 41, calc(0.6 / 4)) 100%);
801
+ background-size: 200%;
802
+ }
803
+ .zerospam-list--top li:nth-child(5) {
804
+ animation: row5 5s ease infinite;
805
+ animation-delay: 0.5s;
806
+ background: linear-gradient(90deg, rgb(255, 255, 255) 0%, #fff 55%, rgba(255, 41, 41, calc(0.6 / 5)) 100%);
807
+ background-size: 200%;
808
+ }
809
+ .zerospam-list--top li:nth-child(6) {
810
+ animation: row6 5s ease infinite;
811
+ animation-delay: 0.6s;
812
+ background: linear-gradient(90deg, rgb(255, 255, 255) 0%, #fff 60%, rgba(255, 41, 41, calc(0.6 / 6)) 100%);
813
+ background-size: 200%;
814
+ }
815
+ .zerospam-list--top li:nth-child(7) {
816
+ animation: row7 5s ease infinite;
817
+ animation-delay: 0.7s;
818
+ background: linear-gradient(90deg, rgb(255, 255, 255) 0%, #fff 65%, rgba(255, 41, 41, calc(0.6 / 7)) 100%);
819
+ background-size: 200%;
820
+ }
821
+ .zerospam-list--top li:nth-child(8) {
822
+ animation: row8 5s ease infinite;
823
+ animation-delay: 0.8s;
824
+ background: linear-gradient(90deg, rgb(255, 255, 255) 0%, #fff 70%, rgba(255, 41, 41, calc(0.6 / 8)) 100%);
825
+ background-size: 200%;
826
+ }
827
+ .zerospam-list--top li:nth-child(9) {
828
+ animation: row9 5s ease infinite;
829
+ animation-delay: 0.9s;
830
+ background: linear-gradient(90deg, rgb(255, 255, 255) 0%, #fff 75%, rgba(255, 41, 41, calc(0.6 / 9)) 100%);
831
+ background-size: 200%;
832
+ }
833
+ .zerospam-list--top li:nth-child(10) {
834
+ animation: row10 5s ease infinite;
835
+ animation-delay: 1s;
836
+ background: linear-gradient(90deg, rgb(255, 255, 255) 0%, #fff 80%, rgba(255, 41, 41, calc(0.6 / 10)) 100%);
837
+ background-size: 200%;
838
+ }
839
+ .zerospam-list--top .zerospam-list__value--label {
840
+ flex-grow: 1;
841
+ overflow: hidden;
842
+ text-overflow: ellipsis;
843
+ white-space: nowrap;
844
+ }
845
+ .zerospam-list--top .zerospam-list__value--count {
846
+ font-size: 0.95em;
847
+ font-weight: bold;
848
+ margin: 0 20px;
849
+ text-align: right;
850
+ width: 35px;
851
+ }
852
+ .zerospam-list--top .zerospam-list__value--actions, .zerospam-list--top .zerospam-list__value--count {
853
+ flex-grow: 0;
854
+ flex-shrink: 0;
855
+ }
856
+ .zerospam-list--top .zerospam-list__value--actions {
857
+ text-align: right;
858
+ width: 85px;
859
+ }
860
+ .zerospam-list--top .zerospam-list__value img {
861
+ vertical-align: sub;
862
+ }
863
  .zerospam-list--data-actions li, .zerospam-list--data li {
864
  align-items: center;
865
  column-gap: 15px;
assets/css/admin.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../src/scss/admin.scss"],"names":[],"mappings":"AAkCA;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;AAAA;EAEE;EACA;EACA;EACA;;AAGF;AAAA;EACE;EACA;EACA;EACA;EACA;;AAGF;AAAA;EACE;;AAEA;AAAA;EACE;;;AAKN;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AA/FE;EAyFJ;IASI;IACA;IACA;;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAjHA;EAqHJ;IAEI;IACA;IACA;IACA;;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AA1KE;EAqKJ;IAQI;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAMA;EAEE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EACE;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAQJ;EACE;EACA;EACA;EACA;;AAIJ;EACE;;AAGF;EAEE;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;;AAMJ;EACE;EACA;;AAEA;EACE;EACA;;AAnSJ;EAwSF;IAEI;;;AA1SF;EA8SF;IAEI;;;;AAKN;EACE;EAEA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EAEE;EACA;EACA;;AApUF;EAuUA;IAEI;;;AAzUJ;EA6UA;IAEI;;;;AAON;EACE;EACA;;AAQA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAIA;EACE;EACA;;;AAOJ;AAAA;EACE;;AAGF;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;AAQJ;AAAA;AAAA;AAAA;EAEE;;AAEA;AAAA;AAAA;AAAA;EACE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;EACA;;;AAOV;EACE;EACA;EACA;;;AAGF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EAEA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;;AAMJ;EACE;;AAOF;EACE;EACA;EACA;EACA;;AAhjBA;EA4iBF;IAOI;;;AAIJ;EACE;EACA;EACA;;AAcJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;;AAmBA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE;;AAEA;EACE;;AAOF;EACE;;AAKF;EACE;;AAKF;EACE;;AAKF;EACE;;AAKF;EACE;;AAMF;EACE;;AAKF;EACE;;AAKF;EACE;;AAKF;EACE;;AAKF;EACE;;;AAKN;EACE;EACA;EACA;;AAIE;EACE;EACA;EACA;;AAIJ;EACE;EACA;;AAOE;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAMJ;AAAA;EAEE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMR;EACE;EACA;;;AAGF;AACA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AACA;AAAA;EAEE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAGF;EACE;EACA;EACA","file":"admin.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../src/scss/admin.scss"],"names":[],"mappings":"AAkCA;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;AAAA;EAEE;EACA;EACA;EACA;;AAGF;AAAA;EACE;EACA;EACA;EACA;EACA;;AAGF;AAAA;EACE;;AAEA;AAAA;EACE;;;AAKN;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AA/FE;EAyFJ;IASI;IACA;IACA;;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAjHA;EAqHJ;IAEI;IACA;IACA;IACA;;;AAGF;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AA9KE;EAyKJ;IAQI;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAMA;EAEE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EACE;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAQJ;EACE;EACA;EACA;EACA;;AAIJ;EACE;;AAGF;EAEE;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;;AAMJ;EACE;EACA;;AAEA;EACE;EACA;;AAvSJ;EA4SF;IAEI;;;AA9SF;EAkTF;IAEI;;;AApTF;EAwTF;IAEI;;;AA1TF;EA8TF;IAEI;;;AAhUF;EAqUA;IAEI;IACA;;;AAKF;EACE;;AA9UJ;EAiVE;IAEI;IACA;;;;AAOV;EACE;EAEA;EACA;EACA;EACA;;AAEA;EACE;;;AAKF;EACE;EACA;;AAQA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAIA;EACE;EACA;;;AAOJ;AAAA;EACE;;AAGF;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;AAIJ;AAAA;EACE;;AAOF;AAAA;AAAA;AAAA;EAEE;;AAEA;AAAA;AAAA;AAAA;EACE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;EACA;;;AAQR;EACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EAEA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;;AAMJ;EACE;;AAOF;EACE;EACA;EACA;EACA;;AA7kBA;EAykBF;IAOI;;;AAIJ;EACE;EACA;EACA;;AAcJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;;AAiBA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE;;AAEA;EACE;;AAOF;EACE;;AAKF;EACE;;AAKF;EACE;;AAKF;EACE;;AAKF;EACE;;AAKF;EACE;;AAKF;EACE;;AAKF;EACE;;AAKF;EACE;;;AAMJ;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;;AARJ;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;;AARJ;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;;AARJ;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;;AARJ;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;;AARJ;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;;AARJ;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;;AARJ;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;;AARJ;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;;AARJ;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAGE;EACE;EACA;EACA;EAMA;;AATF;EACE;EACA;EACA;EAMA;;AATF;EACE;EACA;EACA;EAMA;;AATF;EACE;EACA;EACA;EAMA;;AATF;EACE;EACA;EACA;EAMA;;AATF;EACE;EACA;EACA;EAMA;;AATF;EACE;EACA;EACA;EAMA;;AATF;EACE;EACA;EACA;EAMA;;AATF;EACE;EACA;EACA;EAMA;;AATF;EACE;EACA;EACA;EAMA;;AAUJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EAEE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;AAOJ;EACE;EACA;EACA;;AAIJ;EACE;EACA;;AAOE;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAMJ;AAAA;EAEE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMR;EACE;EACA;;;AAGF;AACA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AACA;AAAA;EAEE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAGF;EACE;EACA;EACA","file":"admin.css"}
assets/css/jquery-jvectormap-2.0.5.css CHANGED
@@ -1,135 +1,139 @@
1
  svg {
2
- touch-action: none;
3
  }
4
 
5
  .jvectormap-container {
6
- width: 100%;
7
- height: 100%;
8
- position: relative;
9
- overflow: hidden;
10
- touch-action: none;
11
  }
12
 
13
  .jvectormap-tip {
14
- position: absolute;
15
- display: none;
16
- border: solid 1px #CDCDCD;
17
- border-radius: 3px;
18
- background: #292929;
19
- color: white;
20
- font-family: sans-serif, Verdana;
21
- font-size: smaller;
22
- padding: 3px;
23
- }
24
-
25
- .jvectormap-zoomin, .jvectormap-zoomout, .jvectormap-goback {
26
- position: absolute;
27
- left: 10px;
28
- border-radius: 3px;
29
- background: #292929;
30
- padding: 3px;
31
- color: white;
32
- cursor: pointer;
33
- line-height: 10px;
34
- text-align: center;
35
- box-sizing: content-box;
36
- }
37
-
38
- .jvectormap-zoomin, .jvectormap-zoomout {
39
- width: 10px;
40
- height: 10px;
 
 
 
41
  }
42
 
43
  .jvectormap-zoomin {
44
- top: 10px;
45
  }
46
 
47
  .jvectormap-zoomout {
48
- top: 30px;
49
  }
50
 
51
  .jvectormap-goback {
52
- bottom: 10px;
53
- z-index: 1000;
54
- padding: 6px;
55
  }
56
 
57
  .jvectormap-spinner {
58
- position: absolute;
59
- left: 0;
60
- top: 0;
61
- right: 0;
62
- bottom: 0;
63
- background: center no-repeat url(data:image/gif;base64,R0lGODlhIAAgAPMAAP///wAAAMbGxoSEhLa2tpqamjY2NlZWVtjY2OTk5Ly8vB4eHgQEBAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ/V/nmOM82XiHRLYKhKP1oZmADdEAAAh+QQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY/CZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB+A4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6+Ho7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq+B6QDtuetcaBPnW6+O7wDHpIiK9SaVK5GgV543tzjgGcghAgAh+QQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK++G+w48edZPK+M6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE+G+cD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm+FNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk+aV+oJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0/VNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc+XiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30/iI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE/jiuL04RGEBgwWhShRgQExHBAAh+QQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR+ipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY+Yip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd+MFCN6HAAIKgNggY0KtEBAAh+QQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1+vsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d+jYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg+ygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0+bm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h+Kr0SJ8MFihpNbx+4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX+BP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA==);
 
64
  }
65
 
66
  .jvectormap-legend-title {
67
- font-weight: bold;
68
- font-size: 14px;
69
- text-align: center;
70
  }
71
 
72
  .jvectormap-legend-cnt {
73
- position: absolute;
74
  }
75
 
76
  .jvectormap-legend-cnt-h {
77
- bottom: 0;
78
- right: 0;
79
  }
80
 
81
  .jvectormap-legend-cnt-v {
82
- top: 0;
83
- right: 0;
84
  }
85
 
86
  .jvectormap-legend {
87
- background: black;
88
- color: white;
89
- border-radius: 3px;
90
  }
91
 
92
  .jvectormap-legend-cnt-h .jvectormap-legend {
93
- float: left;
94
- margin: 0 10px 10px 0;
95
- padding: 3px 3px 1px 3px;
96
  }
97
 
98
  .jvectormap-legend-cnt-h .jvectormap-legend .jvectormap-legend-tick {
99
- float: left;
100
  }
101
 
102
  .jvectormap-legend-cnt-v .jvectormap-legend {
103
- margin: 10px 10px 0 0;
104
- padding: 3px;
105
  }
106
 
107
  .jvectormap-legend-cnt-h .jvectormap-legend-tick {
108
- width: 40px;
109
  }
110
 
111
  .jvectormap-legend-cnt-h .jvectormap-legend-tick-sample {
112
- height: 15px;
113
  }
114
 
115
  .jvectormap-legend-cnt-v .jvectormap-legend-tick-sample {
116
- height: 20px;
117
- width: 20px;
118
- display: inline-block;
119
- vertical-align: middle;
120
  }
121
 
122
  .jvectormap-legend-tick-text {
123
- font-size: 12px;
124
  }
125
 
126
  .jvectormap-legend-cnt-h .jvectormap-legend-tick-text {
127
- text-align: center;
128
  }
129
 
130
  .jvectormap-legend-cnt-v .jvectormap-legend-tick-text {
131
- display: inline-block;
132
- vertical-align: middle;
133
- line-height: 20px;
134
- padding-left: 3px;
135
- }
1
  svg {
2
+ touch-action: none;
3
  }
4
 
5
  .jvectormap-container {
6
+ width: 100%;
7
+ height: 100%;
8
+ position: relative;
9
+ overflow: hidden;
10
+ touch-action: none;
11
  }
12
 
13
  .jvectormap-tip {
14
+ position: absolute;
15
+ display: none;
16
+ border: solid 1px #cdcdcd;
17
+ border-radius: 3px;
18
+ background: #292929;
19
+ color: white;
20
+ font-family: sans-serif, Verdana;
21
+ font-size: smaller;
22
+ padding: 3px;
23
+ }
24
+
25
+ .jvectormap-zoomin,
26
+ .jvectormap-zoomout,
27
+ .jvectormap-goback {
28
+ position: absolute;
29
+ left: 10px;
30
+ border-radius: 3px;
31
+ background: #292929;
32
+ padding: 3px;
33
+ color: white;
34
+ cursor: pointer;
35
+ line-height: 10px;
36
+ text-align: center;
37
+ box-sizing: content-box;
38
+ }
39
+
40
+ .jvectormap-zoomin,
41
+ .jvectormap-zoomout {
42
+ width: 10px;
43
+ height: 10px;
44
  }
45
 
46
  .jvectormap-zoomin {
47
+ top: 10px;
48
  }
49
 
50
  .jvectormap-zoomout {
51
+ top: 30px;
52
  }
53
 
54
  .jvectormap-goback {
55
+ bottom: 10px;
56
+ z-index: 1000;
57
+ padding: 6px;
58
  }
59
 
60
  .jvectormap-spinner {
61
+ position: absolute;
62
+ left: 0;
63
+ top: 0;
64
+ right: 0;
65
+ bottom: 0;
66
+ background: center no-repeat
67
+ url(data:image/gif;base64,R0lGODlhIAAgAPMAAP///wAAAMbGxoSEhLa2tpqamjY2NlZWVtjY2OTk5Ly8vB4eHgQEBAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ/V/nmOM82XiHRLYKhKP1oZmADdEAAAh+QQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY/CZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB+A4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6+Ho7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq+B6QDtuetcaBPnW6+O7wDHpIiK9SaVK5GgV543tzjgGcghAgAh+QQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK++G+w48edZPK+M6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE+G+cD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm+FNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk+aV+oJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0/VNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc+XiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30/iI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE/jiuL04RGEBgwWhShRgQExHBAAh+QQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR+ipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY+Yip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd+MFCN6HAAIKgNggY0KtEBAAh+QQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1+vsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d+jYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg+ygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0+bm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h+Kr0SJ8MFihpNbx+4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX+BP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA==);
68
  }
69
 
70
  .jvectormap-legend-title {
71
+ font-weight: bold;
72
+ font-size: 14px;
73
+ text-align: center;
74
  }
75
 
76
  .jvectormap-legend-cnt {
77
+ position: absolute;
78
  }
79
 
80
  .jvectormap-legend-cnt-h {
81
+ bottom: 0;
82
+ right: 0;
83
  }
84
 
85
  .jvectormap-legend-cnt-v {
86
+ top: 0;
87
+ right: 0;
88
  }
89
 
90
  .jvectormap-legend {
91
+ background: black;
92
+ color: white;
93
+ border-radius: 3px;
94
  }
95
 
96
  .jvectormap-legend-cnt-h .jvectormap-legend {
97
+ float: left;
98
+ margin: 0 10px 10px 0;
99
+ padding: 3px 3px 1px 3px;
100
  }
101
 
102
  .jvectormap-legend-cnt-h .jvectormap-legend .jvectormap-legend-tick {
103
+ float: left;
104
  }
105
 
106
  .jvectormap-legend-cnt-v .jvectormap-legend {
107
+ margin: 10px 10px 0 0;
108
+ padding: 3px;
109
  }
110
 
111
  .jvectormap-legend-cnt-h .jvectormap-legend-tick {
112
+ width: 40px;
113
  }
114
 
115
  .jvectormap-legend-cnt-h .jvectormap-legend-tick-sample {
116
+ height: 15px;
117
  }
118
 
119
  .jvectormap-legend-cnt-v .jvectormap-legend-tick-sample {
120
+ height: 20px;
121
+ width: 20px;
122
+ display: inline-block;
123
+ vertical-align: middle;
124
  }
125
 
126
  .jvectormap-legend-tick-text {
127
+ font-size: 12px;
128
  }
129
 
130
  .jvectormap-legend-cnt-h .jvectormap-legend-tick-text {
131
+ text-align: center;
132
  }
133
 
134
  .jvectormap-legend-cnt-v .jvectormap-legend-tick-text {
135
+ display: inline-block;
136
+ vertical-align: middle;
137
+ line-height: 20px;
138
+ padding-left: 3px;
139
+ }
assets/img/icon-memberpress.svg DELETED
@@ -1,21 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg width="73px" height="41px" viewBox="0 0 73 41" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
- <title>memberpress-logo-color</title>
4
- <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
5
- <g id="memberpress-logo-color" transform="translate(0.700000, 0.000000)" fill-rule="nonzero">
6
- <g id="Group">
7
- <g id="Path">
8
- <path d="M47.3,17.5 C47.3,13.4 50.6,10.1 54.7,10.1 C58.8,10.1 62.1,13.4 62.1,17.5 L62.1,35 C62.1,37.8 64.4,40 67.1,40 C69.9,40 72.1,37.7 72.1,35 L72.1,17.5 C72.2,7.8 64.4,0 54.7,0 C49.9,0 45.5,2 42.3,5.2 C45.4,8.4 47.3,12.7 47.3,17.5 L47.3,17.5 Z" fill="#20D1CC"></path>
9
- <path d="M37.3,17.5 C37.3,12.7 39.2,8.4 42.3,5.2 C39.1,2 34.7,0 29.9,0 C25,0 20.6,2 17.5,5.2 C20.6,8.3 22.5,12.7 22.5,17.4 C22.5,13.3 25.8,10 29.9,10 C34,10.1 37.3,13.4 37.3,17.5 L37.3,17.5 Z" fill="#05D0E0"></path>
10
- <path d="M47.3,35 L47.3,17.5 C47.3,12.7 45.4,8.4 42.3,5.2 C39.2,8.4 37.3,12.7 37.3,17.5 L37.3,35 C37.3,36.4 37.9,37.6 38.8,38.6 C39.7,39.5 41,40.1 42.4,40.1 C45.1,40 47.3,37.7 47.3,35 Z" fill="#01A9B2"></path>
11
- <path d="M5,0 C2.2,0 -2.66453526e-15,2.3 -2.66453526e-15,5 C-2.66453526e-15,7.8 2.3,10 5,10 C9.1,10 12.4,13.3 12.4,17.4 C12.4,12.6 14.3,8.3 17.4,5.2 C14.3,2 9.9,0 5,0 Z" fill="#0282C9"></path>
12
- <path d="M12.4,17.4 C12.4,17.4 12.4,17.4 12.4,17.4 L12.4,34.9 C12.4,37.7 14.7,39.9 17.4,39.9 C18.3,39.9 19.1,39.7 19.8,39.3 C21.4,38.4 22.4,36.8 22.4,34.9 L22.4,17.5 C22.4,17.5 22.4,17.5 22.4,17.5 C22.4,12.7 20.5,8.4 17.4,5.3 C14.3,8.4 12.4,12.7 12.4,17.4 Z" fill="#016BB1"></path>
13
- </g>
14
- <circle id="Oval" fill="#06429E" cx="5" cy="5" r="5"></circle>
15
- <circle id="Oval" fill="#01569A" cx="17.4" cy="35" r="5"></circle>
16
- <circle id="Oval" fill="#008C9D" cx="42.3" cy="35" r="5"></circle>
17
- <circle id="Oval" fill="#03ABA3" cx="67.2" cy="35" r="5"></circle>
18
- </g>
19
- </g>
20
- </g>
21
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/Chart.bundle.min.js CHANGED
@@ -1,5 +1,5 @@
1
  /*!
2
- * Chart.js v3.7.1
3
  * https://www.chartjs.org
4
  * (c) 2022 Chart.js Contributors
5
  * Released under the MIT License
@@ -13,26 +13,318 @@
13
  e());
14
  })(this, function () {
15
  "use strict";
16
- const t =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  "undefined" == typeof window
18
  ? function (t) {
19
  return t();
20
  }
21
  : window.requestAnimationFrame;
22
- function e(e, i, s) {
23
- const n = s || ((t) => Array.prototype.slice.call(t));
24
- let o = !1,
25
- a = [];
26
- return function (...s) {
27
- (a = n(s)),
28
- o ||
29
- ((o = !0),
30
- t.call(window, () => {
31
- (o = !1), e.apply(i, a);
32
  }));
33
  };
34
  }
35
- function i(t, e) {
36
  let i;
37
  return function (...s) {
38
  return (
@@ -40,11 +332,52 @@
40
  );
41
  };
42
  }
43
- const s = (t) => ("start" === t ? "left" : "end" === t ? "right" : "center"),
44
- n = (t, e, i) => ("start" === t ? e : "end" === t ? i : (e + i) / 2),
45
- o = (t, e, i, s) =>
46
  t === (s ? "left" : "right") ? i : "center" === t ? (e + i) / 2 : e;
47
- var a = new (class {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  constructor() {
49
  (this._request = null),
50
  (this._charts = new Map()),
@@ -66,7 +399,7 @@
66
  _refresh() {
67
  this._request ||
68
  ((this._running = !0),
69
- (this._request = t.call(window, () => {
70
  this._update(),
71
  (this._request = null),
72
  this._running && this._refresh();
@@ -147,11 +480,27 @@
147
  }
148
  })();
149
  /*!
150
- * @kurkle/color v0.1.9
151
  * https://github.com/kurkle/color#readme
152
- * (c) 2020 Jukka Kurkela
153
  * Released under the MIT License
154
- */ const r = {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  0: 0,
156
  1: 1,
157
  2: 2,
@@ -175,51 +524,35 @@
175
  e: 14,
176
  f: 15,
177
  },
178
- l = "0123456789ABCDEF",
179
- h = (t) => l[15 & t],
180
- c = (t) => l[(240 & t) >> 4] + l[15 & t],
181
- d = (t) => (240 & t) >> 4 == (15 & t);
182
- function u(t) {
183
- var e = (function (t) {
184
- return d(t.r) && d(t.g) && d(t.b) && d(t.a);
185
- })(t)
186
- ? h
187
- : c;
188
- return t ? "#" + e(t.r) + e(t.g) + e(t.b) + (t.a < 255 ? e(t.a) : "") : t;
189
- }
190
- function f(t) {
191
- return (t + 0.5) | 0;
192
- }
193
- const g = (t, e, i) => Math.max(Math.min(t, i), e);
194
- function p(t) {
195
- return g(f(2.55 * t), 0, 255);
196
- }
197
- function m(t) {
198
- return g(f(255 * t), 0, 255);
199
- }
200
- function x(t) {
201
- return g(f(t / 2.55) / 100, 0, 1);
202
- }
203
- function b(t) {
204
- return g(f(100 * t), 0, 100);
205
- }
206
- const _ =
207
- /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
208
- const y =
209
  /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
210
- function v(t, e, i) {
211
  const s = e * Math.min(i, 1 - i),
212
  n = (e, n = (e + t / 30) % 12) =>
213
  i - s * Math.max(Math.min(n - 3, 9 - n, 1), -1);
214
  return [n(0), n(8), n(4)];
215
  }
216
- function w(t, e, i) {
217
  const s = (s, n = (s + t / 60) % 6) =>
218
  i - i * e * Math.max(Math.min(n, 4 - n, 1), 0);
219
  return [s(5), s(3), s(1)];
220
  }
221
- function M(t, e, i) {
222
- const s = v(t, 1, 0.5);
223
  let n;
224
  for (
225
  e + i > 1 && ((n = 1 / (e + i)), (e *= n), (i *= n)), n = 0;
@@ -229,7 +562,7 @@
229
  (s[n] *= 1 - e - i), (s[n] += e);
230
  return s;
231
  }
232
- function k(t) {
233
  const e = t.r / 255,
234
  i = t.g / 255,
235
  s = t.b / 255,
@@ -241,49 +574,50 @@
241
  n !== o &&
242
  ((h = n - o),
243
  (l = a > 0.5 ? h / (2 - n - o) : h / (n + o)),
244
- (r =
245
- n === e
246
- ? (i - s) / h + (i < s ? 6 : 0)
247
- : n === i
248
- ? (s - e) / h + 2
249
- : (e - i) / h + 4),
 
250
  (r = 60 * r + 0.5)),
251
  [0 | r, l || 0, a]
252
  );
253
  }
254
- function S(t, e, i, s) {
255
- return (Array.isArray(e) ? t(e[0], e[1], e[2]) : t(e, i, s)).map(m);
256
  }
257
- function P(t, e, i) {
258
- return S(v, t, e, i);
259
  }
260
- function D(t) {
261
  return ((t % 360) + 360) % 360;
262
  }
263
- function C(t) {
264
- const e = y.exec(t);
265
  let i,
266
  s = 255;
267
  if (!e) return;
268
- e[5] !== i && (s = e[6] ? p(+e[5]) : m(+e[5]));
269
- const n = D(+e[2]),
270
  o = +e[3] / 100,
271
  a = +e[4] / 100;
272
  return (
273
  (i =
274
  "hwb" === e[1]
275
  ? (function (t, e, i) {
276
- return S(M, t, e, i);
277
  })(n, o, a)
278
  : "hsv" === e[1]
279
  ? (function (t, e, i) {
280
- return S(w, t, e, i);
281
  })(n, o, a)
282
- : P(n, o, a)),
283
  { r: i[0], g: i[1], b: i[2], a: s }
284
  );
285
  }
286
- const O = {
287
  x: "dark",
288
  Z: "light",
289
  Y: "re",
@@ -312,7 +646,7 @@
312
  I: "ightg",
313
  J: "wh",
314
  },
315
- A = {
316
  OiceXe: "f0f8ff",
317
  antiquewEte: "faebd7",
318
  aqua: "ffff",
@@ -462,54 +796,59 @@
462
  Lw: "ffff00",
463
  LwgYF: "9acd32",
464
  };
465
- let T;
466
- function L(t) {
467
- T ||
468
- ((T = (function () {
469
  const t = {},
470
- e = Object.keys(A),
471
- i = Object.keys(O);
472
  let s, n, o, a, r;
473
  for (s = 0; s < e.length; s++) {
474
  for (a = r = e[s], n = 0; n < i.length; n++)
475
- (o = i[n]), (r = r.replace(o, O[o]));
476
- (o = parseInt(A[a], 16)),
477
  (t[r] = [(o >> 16) & 255, (o >> 8) & 255, 255 & o]);
478
  }
479
  return t;
480
  })()),
481
- (T.transparent = [0, 0, 0, 0]));
482
- const e = T[t.toLowerCase()];
483
  return e && { r: e[0], g: e[1], b: e[2], a: 4 === e.length ? e[3] : 255 };
484
  }
485
- function R(t, e, i) {
 
 
 
 
 
486
  if (t) {
487
- let s = k(t);
488
  (s[e] = Math.max(0, Math.min(s[e] + s[e] * i, 0 === e ? 360 : 1))),
489
- (s = P(s)),
490
  (t.r = s[0]),
491
  (t.g = s[1]),
492
  (t.b = s[2]);
493
  }
494
  }
495
- function E(t, e) {
496
  return t ? Object.assign(e || {}, t) : t;
497
  }
498
- function I(t) {
499
  var e = { r: 0, g: 0, b: 0, a: 255 };
500
  return (
501
  Array.isArray(t)
502
  ? t.length >= 3 &&
503
  ((e = { r: t[0], g: t[1], b: t[2], a: 255 }),
504
- t.length > 3 && (e.a = m(t[3])))
505
- : ((e = E(t, { r: 0, g: 0, b: 0, a: 1 })).a = m(e.a)),
506
  e
507
  );
508
  }
509
- function z(t) {
510
  return "r" === t.charAt(0)
511
  ? (function (t) {
512
- const e = _.exec(t);
513
  let i,
514
  s,
515
  n,
@@ -517,47 +856,47 @@
517
  if (e) {
518
  if (e[7] !== i) {
519
  const t = +e[7];
520
- o = 255 & (e[8] ? p(t) : 255 * t);
521
  }
522
  return (
523
  (i = +e[1]),
524
  (s = +e[3]),
525
  (n = +e[5]),
526
- (i = 255 & (e[2] ? p(i) : i)),
527
- (s = 255 & (e[4] ? p(s) : s)),
528
- (n = 255 & (e[6] ? p(n) : n)),
529
  { r: i, g: s, b: n, a: o }
530
  );
531
  }
532
  })(t)
533
- : C(t);
534
  }
535
- class F {
536
  constructor(t) {
537
- if (t instanceof F) return t;
538
  const e = typeof t;
539
  let i;
540
  var s, n, o;
541
  "object" === e
542
- ? (i = I(t))
543
  : "string" === e &&
544
  ((o = (s = t).length),
545
  "#" === s[0] &&
546
  (4 === o || 5 === o
547
  ? (n = {
548
- r: 255 & (17 * r[s[1]]),
549
- g: 255 & (17 * r[s[2]]),
550
- b: 255 & (17 * r[s[3]]),
551
- a: 5 === o ? 17 * r[s[4]] : 255,
552
  })
553
  : (7 !== o && 9 !== o) ||
554
  (n = {
555
- r: (r[s[1]] << 4) | r[s[2]],
556
- g: (r[s[3]] << 4) | r[s[4]],
557
- b: (r[s[5]] << 4) | r[s[6]],
558
- a: 9 === o ? (r[s[7]] << 4) | r[s[8]] : 255,
559
  })),
560
- (i = n || L(t) || z(t))),
561
  (this._rgb = i),
562
  (this._valid = !!i);
563
  }
@@ -565,69 +904,85 @@
565
  return this._valid;
566
  }
567
  get rgb() {
568
- var t = E(this._rgb);
569
- return t && (t.a = x(t.a)), t;
570
  }
571
  set rgb(t) {
572
- this._rgb = I(t);
573
  }
574
  rgbString() {
575
  return this._valid
576
  ? (t = this._rgb) &&
577
  (t.a < 255
578
- ? `rgba(${t.r}, ${t.g}, ${t.b}, ${x(t.a)})`
579
  : `rgb(${t.r}, ${t.g}, ${t.b})`)
580
- : this._rgb;
581
  var t;
582
  }
583
  hexString() {
584
- return this._valid ? u(this._rgb) : this._rgb;
585
  }
586
  hslString() {
587
  return this._valid
588
  ? (function (t) {
589
  if (!t) return;
590
- const e = k(t),
591
  i = e[0],
592
- s = b(e[1]),
593
- n = b(e[2]);
594
  return t.a < 255
595
- ? `hsla(${i}, ${s}%, ${n}%, ${x(t.a)})`
596
  : `hsl(${i}, ${s}%, ${n}%)`;
597
  })(this._rgb)
598
- : this._rgb;
599
  }
600
  mix(t, e) {
601
- const i = this;
602
  if (t) {
603
- const s = i.rgb,
604
- n = t.rgb;
605
- let o;
606
- const a = e === o ? 0.5 : e,
607
- r = 2 * a - 1,
608
- l = s.a - n.a,
609
- h = ((r * l == -1 ? r : (r + l) / (1 + r * l)) + 1) / 2;
610
- (o = 1 - h),
611
- (s.r = 255 & (h * s.r + o * n.r + 0.5)),
612
- (s.g = 255 & (h * s.g + o * n.g + 0.5)),
613
- (s.b = 255 & (h * s.b + o * n.b + 0.5)),
614
- (s.a = a * s.a + (1 - a) * n.a),
615
- (i.rgb = s);
616
  }
617
- return i;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
618
  }
619
  clone() {
620
- return new F(this.rgb);
621
  }
622
  alpha(t) {
623
- return (this._rgb.a = m(t)), this;
624
  }
625
  clearer(t) {
626
  return (this._rgb.a *= 1 - t), this;
627
  }
628
  greyscale() {
629
  const t = this._rgb,
630
- e = f(0.3 * t.r + 0.59 * t.g + 0.11 * t.b);
631
  return (t.r = t.g = t.b = e), this;
632
  }
633
  opaquer(t) {
@@ -638,23 +993,23 @@
638
  return (t.r = 255 - t.r), (t.g = 255 - t.g), (t.b = 255 - t.b), this;
639
  }
640
  lighten(t) {
641
- return R(this._rgb, 2, t), this;
642
  }
643
  darken(t) {
644
- return R(this._rgb, 2, -t), this;
645
  }
646
  saturate(t) {
647
- return R(this._rgb, 1, t), this;
648
  }
649
  desaturate(t) {
650
- return R(this._rgb, 1, -t), this;
651
  }
652
  rotate(t) {
653
  return (
654
  (function (t, e) {
655
- var i = k(t);
656
- (i[0] = D(i[0] + e)),
657
- (i = P(i)),
658
  (t.r = i[0]),
659
  (t.g = i[1]),
660
  (t.b = i[2]);
@@ -663,158 +1018,37 @@
663
  );
664
  }
665
  }
666
- function B(t) {
667
- return new F(t);
668
- }
669
- const V = (t) => t instanceof CanvasGradient || t instanceof CanvasPattern;
670
- function W(t) {
671
- return V(t) ? t : B(t);
672
- }
673
- function N(t) {
674
- return V(t) ? t : B(t).saturate(0.5).darken(0.1).hexString();
675
- }
676
- function H() {}
677
- const j = (function () {
678
- let t = 0;
679
- return function () {
680
- return t++;
681
- };
682
- })();
683
- function $(t) {
684
- return null == t;
685
- }
686
- function Y(t) {
687
- if (Array.isArray && Array.isArray(t)) return !0;
688
- const e = Object.prototype.toString.call(t);
689
- return "[object" === e.substr(0, 7) && "Array]" === e.substr(-6);
690
- }
691
- function U(t) {
692
- return (
693
- null !== t && "[object Object]" === Object.prototype.toString.call(t)
694
- );
695
- }
696
- const X = (t) =>
697
- ("number" == typeof t || t instanceof Number) && isFinite(+t);
698
- function q(t, e) {
699
- return X(t) ? t : e;
700
- }
701
- function K(t, e) {
702
- return void 0 === t ? e : t;
703
  }
704
- const G = (t, e) =>
705
- "string" == typeof t && t.endsWith("%") ? parseFloat(t) / 100 : t / e,
706
- Z = (t, e) =>
707
- "string" == typeof t && t.endsWith("%") ? (parseFloat(t) / 100) * e : +t;
708
- function J(t, e, i) {
709
- if (t && "function" == typeof t.call) return t.apply(i, e);
710
  }
711
- function Q(t, e, i, s) {
712
- let n, o, a;
713
- if (Y(t))
714
- if (((o = t.length), s)) for (n = o - 1; n >= 0; n--) e.call(i, t[n], n);
715
- else for (n = 0; n < o; n++) e.call(i, t[n], n);
716
- else if (U(t))
717
- for (a = Object.keys(t), o = a.length, n = 0; n < o; n++)
718
- e.call(i, t[a[n]], a[n]);
719
  }
720
- function tt(t, e) {
721
- let i, s, n, o;
722
- if (!t || !e || t.length !== e.length) return !1;
723
- for (i = 0, s = t.length; i < s; ++i)
724
- if (
725
- ((n = t[i]),
726
- (o = e[i]),
727
- n.datasetIndex !== o.datasetIndex || n.index !== o.index)
728
- )
729
- return !1;
730
- return !0;
731
  }
732
- function et(t) {
733
- if (Y(t)) return t.map(et);
734
- if (U(t)) {
735
- const e = Object.create(null),
736
- i = Object.keys(t),
737
- s = i.length;
738
- let n = 0;
739
- for (; n < s; ++n) e[i[n]] = et(t[i[n]]);
740
- return e;
741
  }
742
  return t;
743
  }
744
- function it(t) {
745
- return -1 === ["__proto__", "prototype", "constructor"].indexOf(t);
746
  }
747
- function st(t, e, i, s) {
748
- if (!it(t)) return;
749
- const n = e[t],
750
- o = i[t];
751
- U(n) && U(o) ? nt(n, o, s) : (e[t] = et(o));
752
- }
753
- function nt(t, e, i) {
754
- const s = Y(e) ? e : [e],
755
- n = s.length;
756
- if (!U(t)) return t;
757
- const o = (i = i || {}).merger || st;
758
- for (let a = 0; a < n; ++a) {
759
- if (!U((e = s[a]))) continue;
760
- const n = Object.keys(e);
761
- for (let s = 0, a = n.length; s < a; ++s) o(n[s], t, e, i);
762
- }
763
- return t;
764
- }
765
- function ot(t, e) {
766
- return nt(t, e, { merger: at });
767
- }
768
- function at(t, e, i) {
769
- if (!it(t)) return;
770
- const s = e[t],
771
- n = i[t];
772
- U(s) && U(n)
773
- ? ot(s, n)
774
- : Object.prototype.hasOwnProperty.call(e, t) || (e[t] = et(n));
775
- }
776
- function rt(t, e) {
777
- const i = t.indexOf(".", e);
778
- return -1 === i ? t.length : i;
779
- }
780
- function lt(t, e) {
781
- if ("" === e) return t;
782
- let i = 0,
783
- s = rt(e, i);
784
- for (; t && s > i; )
785
- (t = t[e.substr(i, s - i)]), (i = s + 1), (s = rt(e, i));
786
- return t;
787
- }
788
- function ht(t) {
789
- return t.charAt(0).toUpperCase() + t.slice(1);
790
- }
791
- const ct = (t) => void 0 !== t,
792
- dt = (t) => "function" == typeof t,
793
- ut = (t, e) => {
794
- if (t.size !== e.size) return !1;
795
- for (const i of t) if (!e.has(i)) return !1;
796
- return !0;
797
- };
798
- function ft(t) {
799
- return (
800
- "mouseup" === t.type || "click" === t.type || "contextmenu" === t.type
801
- );
802
- }
803
- const gt = Object.create(null),
804
- pt = Object.create(null);
805
- function mt(t, e) {
806
- if (!e) return t;
807
- const i = e.split(".");
808
- for (let e = 0, s = i.length; e < s; ++e) {
809
- const s = i[e];
810
- t = t[s] || (t[s] = Object.create(null));
811
- }
812
- return t;
813
- }
814
- function xt(t, e, i) {
815
- return "string" == typeof e ? nt(mt(t, e), i) : nt(mt(t, ""), e);
816
- }
817
- var bt = new (class {
818
  constructor(t) {
819
  (this.animation = void 0),
820
  (this.backgroundColor = "rgba(0,0,0,0.1)"),
@@ -838,11 +1072,15 @@
838
  weight: null,
839
  }),
840
  (this.hover = {}),
841
- (this.hoverBackgroundColor = (t, e) => N(e.backgroundColor)),
842
- (this.hoverBorderColor = (t, e) => N(e.borderColor)),
843
- (this.hoverColor = (t, e) => N(e.color)),
844
  (this.indexAxis = "x"),
845
- (this.interaction = { mode: "nearest", intersect: !0 }),
 
 
 
 
846
  (this.maintainAspectRatio = !0),
847
  (this.onHover = null),
848
  (this.onClick = null),
@@ -856,32 +1094,32 @@
856
  this.describe(t);
857
  }
858
  set(t, e) {
859
- return xt(this, t, e);
860
  }
861
  get(t) {
862
- return mt(this, t);
863
  }
864
  describe(t, e) {
865
- return xt(pt, t, e);
866
  }
867
  override(t, e) {
868
- return xt(gt, t, e);
869
  }
870
  route(t, e, i, s) {
871
- const n = mt(this, t),
872
- o = mt(this, i),
873
- a = "_" + e;
874
- Object.defineProperties(n, {
875
- [a]: { value: n[e], writable: !0 },
876
  [e]: {
877
  enumerable: !0,
878
  get() {
879
- const t = this[a],
880
- e = o[s];
881
- return U(t) ? Object.assign({}, e, t) : K(t, e);
882
  },
883
  set(t) {
884
- this[a] = t;
885
  },
886
  },
887
  });
@@ -892,97 +1130,156 @@
892
  hover: { _fallback: "interaction" },
893
  interaction: { _scriptable: !1, _indexable: !1 },
894
  });
895
- const _t = Math.PI,
896
- yt = 2 * _t,
897
- vt = yt + _t,
898
- wt = Number.POSITIVE_INFINITY,
899
- Mt = _t / 180,
900
- kt = _t / 2,
901
- St = _t / 4,
902
- Pt = (2 * _t) / 3,
903
- Dt = Math.log10,
904
- Ct = Math.sign;
905
- function Ot(t) {
906
- const e = Math.round(t);
907
- t = Lt(t, e, t / 1e3) ? e : t;
908
- const i = Math.pow(10, Math.floor(Dt(t))),
909
- s = t / i;
910
- return (s <= 1 ? 1 : s <= 2 ? 2 : s <= 5 ? 5 : 10) * i;
911
- }
912
- function At(t) {
913
- const e = [],
914
- i = Math.sqrt(t);
915
- let s;
916
- for (s = 1; s < i; s++) t % s == 0 && (e.push(s), e.push(t / s));
917
- return i === (0 | i) && e.push(i), e.sort((t, e) => t - e).pop(), e;
918
- }
919
- function Tt(t) {
920
- return !isNaN(parseFloat(t)) && isFinite(t);
921
- }
922
- function Lt(t, e, i) {
923
- return Math.abs(t - e) < i;
924
- }
925
- function Rt(t, e) {
926
- const i = Math.round(t);
927
- return i - e <= t && i + e >= t;
928
- }
929
- function Et(t, e, i) {
930
- let s, n, o;
931
- for (s = 0, n = t.length; s < n; s++)
932
- (o = t[s][i]),
933
- isNaN(o) ||
934
- ((e.min = Math.min(e.min, o)), (e.max = Math.max(e.max, o)));
935
- }
936
- function It(t) {
937
- return t * (_t / 180);
938
- }
939
- function zt(t) {
940
- return t * (180 / _t);
941
- }
942
- function Ft(t) {
943
- if (!X(t)) return;
944
- let e = 1,
945
- i = 0;
946
- for (; Math.round(t * e) / e !== t; ) (e *= 10), i++;
947
- return i;
948
  }
949
- function Bt(t, e) {
950
- const i = e.x - t.x,
951
- s = e.y - t.y,
952
- n = Math.sqrt(i * i + s * s);
953
- let o = Math.atan2(s, i);
954
- return o < -0.5 * _t && (o += yt), { angle: o, distance: n };
955
  }
956
- function Vt(t, e) {
957
- return Math.sqrt(Math.pow(e.x - t.x, 2) + Math.pow(e.y - t.y, 2));
 
 
 
 
 
 
 
958
  }
959
- function Wt(t, e) {
960
- return ((t - e + vt) % yt) - _t;
 
961
  }
962
- function Nt(t) {
963
- return ((t % yt) + yt) % yt;
 
 
 
 
 
 
 
964
  }
965
- function Ht(t, e, i, s) {
966
- const n = Nt(t),
967
- o = Nt(e),
968
- a = Nt(i),
969
- r = Nt(o - n),
970
- l = Nt(a - n),
971
- h = Nt(n - o),
972
- c = Nt(n - a);
973
- return n === o || n === a || (s && o === a) || (r > l && h < c);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
974
  }
975
- function jt(t, e, i) {
976
- return Math.max(e, Math.min(i, t));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
977
  }
978
- function $t(t) {
979
- return jt(t, -32768, 32767);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
980
  }
981
- function Yt(t, e, i, s = 1e-6) {
982
- return t >= Math.min(e, i) - s && t <= Math.max(e, i) + s;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
983
  }
984
- function Ut(t) {
985
- return !t || $(t.size) || $(t.family)
986
  ? null
987
  : (t.style ? t.style + " " : "") +
988
  (t.weight ? t.weight + " " : "") +
@@ -990,142 +1287,148 @@
990
  "px " +
991
  t.family;
992
  }
993
- function Xt(t, e, i, s, n) {
994
  let o = e[n];
995
  return (
996
  o || ((o = e[n] = t.measureText(n).width), i.push(n)), o > s && (s = o), s
997
  );
998
  }
999
- function qt(t, e, i, s) {
1000
- let n = ((s = s || {}).data = s.data || {}),
1001
- o = (s.garbageCollect = s.garbageCollect || []);
1002
- s.font !== e &&
1003
- ((n = s.data = {}), (o = s.garbageCollect = []), (s.font = e)),
1004
  t.save(),
1005
  (t.font = e);
1006
- let a = 0;
1007
- const r = i.length;
1008
- let l, h, c, d, u;
1009
- for (l = 0; l < r; l++)
1010
- if (((d = i[l]), null != d && !0 !== Y(d))) a = Xt(t, n, o, a, d);
1011
- else if (Y(d))
1012
- for (h = 0, c = d.length; h < c; h++)
1013
- (u = d[h]), null == u || Y(u) || (a = Xt(t, n, o, a, u));
1014
  t.restore();
1015
- const f = o.length / 2;
1016
- if (f > i.length) {
1017
- for (l = 0; l < f; l++) delete n[o[l]];
1018
- o.splice(0, f);
1019
  }
1020
- return a;
1021
  }
1022
- function Kt(t, e, i) {
1023
  const s = t.currentDevicePixelRatio,
1024
  n = 0 !== i ? Math.max(i / 2, 0.5) : 0;
1025
  return Math.round((e - n) * s) / s + n;
1026
  }
1027
- function Gt(t, e) {
1028
  (e = e || t.getContext("2d")).save(),
1029
  e.resetTransform(),
1030
  e.clearRect(0, 0, t.width, t.height),
1031
  e.restore();
1032
  }
1033
- function Zt(t, e, i, s) {
1034
- let n, o, a, r, l;
1035
- const h = e.pointStyle,
1036
- c = e.rotation,
1037
- d = e.radius;
1038
- let u = (c || 0) * Mt;
 
 
 
1039
  if (
1040
- h &&
1041
- "object" == typeof h &&
1042
- ((n = h.toString()),
1043
- "[object HTMLImageElement]" === n || "[object HTMLCanvasElement]" === n)
1044
  )
1045
  return (
1046
  t.save(),
1047
  t.translate(i, s),
1048
- t.rotate(u),
1049
- t.drawImage(h, -h.width / 2, -h.height / 2, h.width, h.height),
1050
  void t.restore()
1051
  );
1052
- if (!(isNaN(d) || d <= 0)) {
1053
- switch ((t.beginPath(), h)) {
1054
  default:
1055
- t.arc(i, s, d, 0, yt), t.closePath();
 
1056
  break;
1057
  case "triangle":
1058
- t.moveTo(i + Math.sin(u) * d, s - Math.cos(u) * d),
1059
- (u += Pt),
1060
- t.lineTo(i + Math.sin(u) * d, s - Math.cos(u) * d),
1061
- (u += Pt),
1062
- t.lineTo(i + Math.sin(u) * d, s - Math.cos(u) * d),
1063
  t.closePath();
1064
  break;
1065
  case "rectRounded":
1066
- (l = 0.516 * d),
1067
- (r = d - l),
1068
- (o = Math.cos(u + St) * r),
1069
- (a = Math.sin(u + St) * r),
1070
- t.arc(i - o, s - a, l, u - _t, u - kt),
1071
- t.arc(i + a, s - o, l, u - kt, u),
1072
- t.arc(i + o, s + a, l, u, u + kt),
1073
- t.arc(i - a, s + o, l, u + kt, u + _t),
1074
  t.closePath();
1075
  break;
1076
  case "rect":
1077
- if (!c) {
1078
- (r = Math.SQRT1_2 * d), t.rect(i - r, s - r, 2 * r, 2 * r);
 
 
1079
  break;
1080
  }
1081
- u += St;
1082
  case "rectRot":
1083
- (o = Math.cos(u) * d),
1084
- (a = Math.sin(u) * d),
1085
- t.moveTo(i - o, s - a),
1086
- t.lineTo(i + a, s - o),
1087
- t.lineTo(i + o, s + a),
1088
- t.lineTo(i - a, s + o),
1089
  t.closePath();
1090
  break;
1091
  case "crossRot":
1092
- u += St;
1093
  case "cross":
1094
- (o = Math.cos(u) * d),
1095
- (a = Math.sin(u) * d),
1096
- t.moveTo(i - o, s - a),
1097
- t.lineTo(i + o, s + a),
1098
- t.moveTo(i + a, s - o),
1099
- t.lineTo(i - a, s + o);
1100
  break;
1101
  case "star":
1102
- (o = Math.cos(u) * d),
1103
- (a = Math.sin(u) * d),
1104
- t.moveTo(i - o, s - a),
1105
- t.lineTo(i + o, s + a),
1106
- t.moveTo(i + a, s - o),
1107
- t.lineTo(i - a, s + o),
1108
- (u += St),
1109
- (o = Math.cos(u) * d),
1110
- (a = Math.sin(u) * d),
1111
- t.moveTo(i - o, s - a),
1112
- t.lineTo(i + o, s + a),
1113
- t.moveTo(i + a, s - o),
1114
- t.lineTo(i - a, s + o);
1115
  break;
1116
  case "line":
1117
- (o = Math.cos(u) * d),
1118
- (a = Math.sin(u) * d),
1119
- t.moveTo(i - o, s - a),
1120
- t.lineTo(i + o, s + a);
1121
  break;
1122
  case "dash":
1123
- t.moveTo(i, s), t.lineTo(i + Math.cos(u) * d, s + Math.sin(u) * d);
1124
  }
1125
  t.fill(), e.borderWidth > 0 && t.stroke();
1126
  }
1127
  }
1128
- function Jt(t, e, i) {
1129
  return (
1130
  (i = i || 0.5),
1131
  !e ||
@@ -1136,16 +1439,16 @@
1136
  t.y < e.bottom + i)
1137
  );
1138
  }
1139
- function Qt(t, e) {
1140
  t.save(),
1141
  t.beginPath(),
1142
  t.rect(e.left, e.top, e.right - e.left, e.bottom - e.top),
1143
  t.clip();
1144
  }
1145
- function te(t) {
1146
  t.restore();
1147
  }
1148
- function ee(t, e, i, s, n) {
1149
  if (!e) return t.lineTo(i.x, i.y);
1150
  if ("middle" === n) {
1151
  const s = (e.x + i.x) / 2;
@@ -1153,7 +1456,7 @@
1153
  } else ("after" === n) != !!s ? t.lineTo(e.x, i.y) : t.lineTo(i.x, e.y);
1154
  t.lineTo(i.x, i.y);
1155
  }
1156
- function ie(t, e, i, s) {
1157
  if (!e) return t.lineTo(i.x, i.y);
1158
  t.bezierCurveTo(
1159
  s ? e.cp1x : e.cp2x,
@@ -1164,35 +1467,35 @@
1164
  i.y
1165
  );
1166
  }
1167
- function se(t, e, i, s, n, o = {}) {
1168
- const a = Y(e) ? e : [e],
1169
- r = o.strokeWidth > 0 && "" !== o.strokeColor;
1170
- let l, h;
1171
  for (
1172
  t.save(),
1173
- t.font = n.string,
1174
  (function (t, e) {
1175
  e.translation && t.translate(e.translation[0], e.translation[1]);
1176
- $(e.rotation) || t.rotate(e.rotation);
1177
  e.color && (t.fillStyle = e.color);
1178
  e.textAlign && (t.textAlign = e.textAlign);
1179
  e.textBaseline && (t.textBaseline = e.textBaseline);
1180
- })(t, o),
1181
- l = 0;
1182
- l < a.length;
1183
- ++l
1184
  )
1185
- (h = a[l]),
1186
- r &&
1187
- (o.strokeColor && (t.strokeStyle = o.strokeColor),
1188
- $(o.strokeWidth) || (t.lineWidth = o.strokeWidth),
1189
- t.strokeText(h, i, s, o.maxWidth)),
1190
- t.fillText(h, i, s, o.maxWidth),
1191
- ne(t, i, s, h, o),
1192
- (s += n.lineHeight);
1193
  t.restore();
1194
  }
1195
- function ne(t, e, i, s, n) {
1196
  if (n.strikethrough || n.underline) {
1197
  const o = t.measureText(s),
1198
  a = e - o.actualBoundingBoxLeft,
@@ -1208,735 +1511,26 @@
1208
  t.stroke();
1209
  }
1210
  }
1211
- function oe(t, e) {
1212
  const { x: i, y: s, w: n, h: o, radius: a } = e;
1213
- t.arc(i + a.topLeft, s + a.topLeft, a.topLeft, -kt, _t, !0),
1214
  t.lineTo(i, s + o - a.bottomLeft),
1215
- t.arc(i + a.bottomLeft, s + o - a.bottomLeft, a.bottomLeft, _t, kt, !0),
1216
  t.lineTo(i + n - a.bottomRight, s + o),
1217
  t.arc(
1218
  i + n - a.bottomRight,
1219
  s + o - a.bottomRight,
1220
  a.bottomRight,
1221
- kt,
1222
  0,
1223
  !0
1224
  ),
1225
  t.lineTo(i + n, s + a.topRight),
1226
- t.arc(i + n - a.topRight, s + a.topRight, a.topRight, 0, -kt, !0),
1227
  t.lineTo(i + a.topLeft, s);
1228
  }
1229
- function ae(t, e, i) {
1230
- i = i || ((i) => t[i] < e);
1231
- let s,
1232
- n = t.length - 1,
1233
- o = 0;
1234
- for (; n - o > 1; ) (s = (o + n) >> 1), i(s) ? (o = s) : (n = s);
1235
- return { lo: o, hi: n };
1236
- }
1237
- const re = (t, e, i) => ae(t, i, (s) => t[s][e] < i),
1238
- le = (t, e, i) => ae(t, i, (s) => t[s][e] >= i);
1239
- function he(t, e, i) {
1240
- let s = 0,
1241
- n = t.length;
1242
- for (; s < n && t[s] < e; ) s++;
1243
- for (; n > s && t[n - 1] > i; ) n--;
1244
- return s > 0 || n < t.length ? t.slice(s, n) : t;
1245
- }
1246
- const ce = ["push", "pop", "shift", "splice", "unshift"];
1247
- function de(t, e) {
1248
- t._chartjs
1249
- ? t._chartjs.listeners.push(e)
1250
- : (Object.defineProperty(t, "_chartjs", {
1251
- configurable: !0,
1252
- enumerable: !1,
1253
- value: { listeners: [e] },
1254
- }),
1255
- ce.forEach((e) => {
1256
- const i = "_onData" + ht(e),
1257
- s = t[e];
1258
- Object.defineProperty(t, e, {
1259
- configurable: !0,
1260
- enumerable: !1,
1261
- value(...e) {
1262
- const n = s.apply(this, e);
1263
- return (
1264
- t._chartjs.listeners.forEach((t) => {
1265
- "function" == typeof t[i] && t[i](...e);
1266
- }),
1267
- n
1268
- );
1269
- },
1270
- });
1271
- }));
1272
- }
1273
- function ue(t, e) {
1274
- const i = t._chartjs;
1275
- if (!i) return;
1276
- const s = i.listeners,
1277
- n = s.indexOf(e);
1278
- -1 !== n && s.splice(n, 1),
1279
- s.length > 0 ||
1280
- (ce.forEach((e) => {
1281
- delete t[e];
1282
- }),
1283
- delete t._chartjs);
1284
- }
1285
- function fe(t) {
1286
- const e = new Set();
1287
- let i, s;
1288
- for (i = 0, s = t.length; i < s; ++i) e.add(t[i]);
1289
- return e.size === s ? t : Array.from(e);
1290
- }
1291
- function ge() {
1292
- return "undefined" != typeof window && "undefined" != typeof document;
1293
- }
1294
- function pe(t) {
1295
- let e = t.parentNode;
1296
- return e && "[object ShadowRoot]" === e.toString() && (e = e.host), e;
1297
- }
1298
- function me(t, e, i) {
1299
- let s;
1300
- return (
1301
- "string" == typeof t
1302
- ? ((s = parseInt(t, 10)),
1303
- -1 !== t.indexOf("%") && (s = (s / 100) * e.parentNode[i]))
1304
- : (s = t),
1305
- s
1306
- );
1307
- }
1308
- const xe = (t) => window.getComputedStyle(t, null);
1309
- function be(t, e) {
1310
- return xe(t).getPropertyValue(e);
1311
- }
1312
- const _e = ["top", "right", "bottom", "left"];
1313
- function ye(t, e, i) {
1314
- const s = {};
1315
- i = i ? "-" + i : "";
1316
- for (let n = 0; n < 4; n++) {
1317
- const o = _e[n];
1318
- s[o] = parseFloat(t[e + "-" + o + i]) || 0;
1319
- }
1320
- return (s.width = s.left + s.right), (s.height = s.top + s.bottom), s;
1321
- }
1322
- function ve(t, e) {
1323
- const { canvas: i, currentDevicePixelRatio: s } = e,
1324
- n = xe(i),
1325
- o = "border-box" === n.boxSizing,
1326
- a = ye(n, "padding"),
1327
- r = ye(n, "border", "width"),
1328
- {
1329
- x: l,
1330
- y: h,
1331
- box: c,
1332
- } = (function (t, e) {
1333
- const i = t.native || t,
1334
- s = i.touches,
1335
- n = s && s.length ? s[0] : i,
1336
- { offsetX: o, offsetY: a } = n;
1337
- let r,
1338
- l,
1339
- h = !1;
1340
- if (
1341
- ((t, e, i) => (t > 0 || e > 0) && (!i || !i.shadowRoot))(
1342
- o,
1343
- a,
1344
- i.target
1345
- )
1346
- )
1347
- (r = o), (l = a);
1348
- else {
1349
- const t = e.getBoundingClientRect();
1350
- (r = n.clientX - t.left), (l = n.clientY - t.top), (h = !0);
1351
- }
1352
- return { x: r, y: l, box: h };
1353
- })(t, i),
1354
- d = a.left + (c && r.left),
1355
- u = a.top + (c && r.top);
1356
- let { width: f, height: g } = e;
1357
- return (
1358
- o && ((f -= a.width + r.width), (g -= a.height + r.height)),
1359
- {
1360
- x: Math.round((((l - d) / f) * i.width) / s),
1361
- y: Math.round((((h - u) / g) * i.height) / s),
1362
- }
1363
- );
1364
- }
1365
- const we = (t) => Math.round(10 * t) / 10;
1366
- function Me(t, e, i, s) {
1367
- const n = xe(t),
1368
- o = ye(n, "margin"),
1369
- a = me(n.maxWidth, t, "clientWidth") || wt,
1370
- r = me(n.maxHeight, t, "clientHeight") || wt,
1371
- l = (function (t, e, i) {
1372
- let s, n;
1373
- if (void 0 === e || void 0 === i) {
1374
- const o = pe(t);
1375
- if (o) {
1376
- const t = o.getBoundingClientRect(),
1377
- a = xe(o),
1378
- r = ye(a, "border", "width"),
1379
- l = ye(a, "padding");
1380
- (e = t.width - l.width - r.width),
1381
- (i = t.height - l.height - r.height),
1382
- (s = me(a.maxWidth, o, "clientWidth")),
1383
- (n = me(a.maxHeight, o, "clientHeight"));
1384
- } else (e = t.clientWidth), (i = t.clientHeight);
1385
- }
1386
- return { width: e, height: i, maxWidth: s || wt, maxHeight: n || wt };
1387
- })(t, e, i);
1388
- let { width: h, height: c } = l;
1389
- if ("content-box" === n.boxSizing) {
1390
- const t = ye(n, "border", "width"),
1391
- e = ye(n, "padding");
1392
- (h -= e.width + t.width), (c -= e.height + t.height);
1393
- }
1394
- return (
1395
- (h = Math.max(0, h - o.width)),
1396
- (c = Math.max(0, s ? Math.floor(h / s) : c - o.height)),
1397
- (h = we(Math.min(h, a, l.maxWidth))),
1398
- (c = we(Math.min(c, r, l.maxHeight))),
1399
- h && !c && (c = we(h / 2)),
1400
- { width: h, height: c }
1401
- );
1402
- }
1403
- function ke(t, e, i) {
1404
- const s = e || 1,
1405
- n = Math.floor(t.height * s),
1406
- o = Math.floor(t.width * s);
1407
- (t.height = n / s), (t.width = o / s);
1408
- const a = t.canvas;
1409
- return (
1410
- a.style &&
1411
- (i || (!a.style.height && !a.style.width)) &&
1412
- ((a.style.height = `${t.height}px`), (a.style.width = `${t.width}px`)),
1413
- (t.currentDevicePixelRatio !== s || a.height !== n || a.width !== o) &&
1414
- ((t.currentDevicePixelRatio = s),
1415
- (a.height = n),
1416
- (a.width = o),
1417
- t.ctx.setTransform(s, 0, 0, s, 0, 0),
1418
- !0)
1419
- );
1420
- }
1421
- const Se = (function () {
1422
- let t = !1;
1423
- try {
1424
- const e = {
1425
- get passive() {
1426
- return (t = !0), !1;
1427
- },
1428
- };
1429
- window.addEventListener("test", null, e),
1430
- window.removeEventListener("test", null, e);
1431
- } catch (t) {}
1432
- return t;
1433
- })();
1434
- function Pe(t, e) {
1435
- const i = be(t, e),
1436
- s = i && i.match(/^(\d+)(\.\d+)?px$/);
1437
- return s ? +s[1] : void 0;
1438
- }
1439
- function De(t, e) {
1440
- return "native" in t ? { x: t.x, y: t.y } : ve(t, e);
1441
- }
1442
- function Ce(t, e, i, s) {
1443
- const { controller: n, data: o, _sorted: a } = t,
1444
- r = n._cachedMeta.iScale;
1445
- if (r && e === r.axis && "r" !== e && a && o.length) {
1446
- const t = r._reversePixels ? le : re;
1447
- if (!s) return t(o, e, i);
1448
- if (n._sharedOptions) {
1449
- const s = o[0],
1450
- n = "function" == typeof s.getRange && s.getRange(e);
1451
- if (n) {
1452
- const s = t(o, e, i - n),
1453
- a = t(o, e, i + n);
1454
- return { lo: s.lo, hi: a.hi };
1455
- }
1456
- }
1457
- }
1458
- return { lo: 0, hi: o.length - 1 };
1459
- }
1460
- function Oe(t, e, i, s, n) {
1461
- const o = t.getSortedVisibleDatasetMetas(),
1462
- a = i[e];
1463
- for (let t = 0, i = o.length; t < i; ++t) {
1464
- const { index: i, data: r } = o[t],
1465
- { lo: l, hi: h } = Ce(o[t], e, a, n);
1466
- for (let t = l; t <= h; ++t) {
1467
- const e = r[t];
1468
- e.skip || s(e, i, t);
1469
- }
1470
- }
1471
- }
1472
- function Ae(t, e, i, s) {
1473
- const n = [];
1474
- if (!Jt(e, t.chartArea, t._minPadding)) return n;
1475
- return (
1476
- Oe(
1477
- t,
1478
- i,
1479
- e,
1480
- function (t, i, o) {
1481
- t.inRange(e.x, e.y, s) &&
1482
- n.push({ element: t, datasetIndex: i, index: o });
1483
- },
1484
- !0
1485
- ),
1486
- n
1487
- );
1488
- }
1489
- function Te(t, e, i, s, n) {
1490
- let o = [];
1491
- const a = (function (t) {
1492
- const e = -1 !== t.indexOf("x"),
1493
- i = -1 !== t.indexOf("y");
1494
- return function (t, s) {
1495
- const n = e ? Math.abs(t.x - s.x) : 0,
1496
- o = i ? Math.abs(t.y - s.y) : 0;
1497
- return Math.sqrt(Math.pow(n, 2) + Math.pow(o, 2));
1498
- };
1499
- })(i);
1500
- let r = Number.POSITIVE_INFINITY;
1501
- return (
1502
- Oe(t, i, e, function (i, l, h) {
1503
- const c = i.inRange(e.x, e.y, n);
1504
- if (s && !c) return;
1505
- const d = i.getCenterPoint(n);
1506
- if (!Jt(d, t.chartArea, t._minPadding) && !c) return;
1507
- const u = a(e, d);
1508
- u < r
1509
- ? ((o = [{ element: i, datasetIndex: l, index: h }]), (r = u))
1510
- : u === r && o.push({ element: i, datasetIndex: l, index: h });
1511
- }),
1512
- o
1513
- );
1514
- }
1515
- function Le(t, e, i, s, n) {
1516
- return Jt(e, t.chartArea, t._minPadding)
1517
- ? "r" !== i || s
1518
- ? Te(t, e, i, s, n)
1519
- : (function (t, e, i, s) {
1520
- let n = [];
1521
- return (
1522
- Oe(t, i, e, function (t, i, o) {
1523
- const { startAngle: a, endAngle: r } = t.getProps(
1524
- ["startAngle", "endAngle"],
1525
- s
1526
- ),
1527
- { angle: l } = Bt(t, { x: e.x, y: e.y });
1528
- Ht(l, a, r) &&
1529
- n.push({ element: t, datasetIndex: i, index: o });
1530
- }),
1531
- n
1532
- );
1533
- })(t, e, i, n)
1534
- : [];
1535
- }
1536
- function Re(t, e, i, s) {
1537
- const n = De(e, t),
1538
- o = [],
1539
- a = i.axis,
1540
- r = "x" === a ? "inXRange" : "inYRange";
1541
- let l = !1;
1542
- return (
1543
- (function (t, e) {
1544
- const i = t.getSortedVisibleDatasetMetas();
1545
- let s, n, o;
1546
- for (let t = 0, a = i.length; t < a; ++t) {
1547
- ({ index: s, data: n } = i[t]);
1548
- for (let t = 0, i = n.length; t < i; ++t)
1549
- (o = n[t]), o.skip || e(o, s, t);
1550
- }
1551
- })(t, (t, e, i) => {
1552
- t[r](n[a], s) && o.push({ element: t, datasetIndex: e, index: i }),
1553
- t.inRange(n.x, n.y, s) && (l = !0);
1554
- }),
1555
- i.intersect && !l ? [] : o
1556
- );
1557
- }
1558
- var Ee = {
1559
- modes: {
1560
- index(t, e, i, s) {
1561
- const n = De(e, t),
1562
- o = i.axis || "x",
1563
- a = i.intersect ? Ae(t, n, o, s) : Le(t, n, o, !1, s),
1564
- r = [];
1565
- return a.length
1566
- ? (t.getSortedVisibleDatasetMetas().forEach((t) => {
1567
- const e = a[0].index,
1568
- i = t.data[e];
1569
- i &&
1570
- !i.skip &&
1571
- r.push({ element: i, datasetIndex: t.index, index: e });
1572
- }),
1573
- r)
1574
- : [];
1575
- },
1576
- dataset(t, e, i, s) {
1577
- const n = De(e, t),
1578
- o = i.axis || "xy";
1579
- let a = i.intersect ? Ae(t, n, o, s) : Le(t, n, o, !1, s);
1580
- if (a.length > 0) {
1581
- const e = a[0].datasetIndex,
1582
- i = t.getDatasetMeta(e).data;
1583
- a = [];
1584
- for (let t = 0; t < i.length; ++t)
1585
- a.push({ element: i[t], datasetIndex: e, index: t });
1586
- }
1587
- return a;
1588
- },
1589
- point: (t, e, i, s) => Ae(t, De(e, t), i.axis || "xy", s),
1590
- nearest: (t, e, i, s) => Le(t, De(e, t), i.axis || "xy", i.intersect, s),
1591
- x: (t, e, i, s) => Re(t, e, { axis: "x", intersect: i.intersect }, s),
1592
- y: (t, e, i, s) => Re(t, e, { axis: "y", intersect: i.intersect }, s),
1593
- },
1594
- };
1595
- const Ie = new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/),
1596
- ze = new RegExp(
1597
- /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/
1598
- );
1599
- function Fe(t, e) {
1600
- const i = ("" + t).match(Ie);
1601
- if (!i || "normal" === i[1]) return 1.2 * e;
1602
- switch (((t = +i[2]), i[3])) {
1603
- case "px":
1604
- return t;
1605
- case "%":
1606
- t /= 100;
1607
- }
1608
- return e * t;
1609
- }
1610
- function Be(t, e) {
1611
- const i = {},
1612
- s = U(e),
1613
- n = s ? Object.keys(e) : e,
1614
- o = U(t) ? (s ? (i) => K(t[i], t[e[i]]) : (e) => t[e]) : () => t;
1615
- for (const t of n) i[t] = +o(t) || 0;
1616
- return i;
1617
- }
1618
- function Ve(t) {
1619
- return Be(t, { top: "y", right: "x", bottom: "y", left: "x" });
1620
- }
1621
- function We(t) {
1622
- return Be(t, ["topLeft", "topRight", "bottomLeft", "bottomRight"]);
1623
- }
1624
- function Ne(t) {
1625
- const e = Ve(t);
1626
- return (e.width = e.left + e.right), (e.height = e.top + e.bottom), e;
1627
- }
1628
- function He(t, e) {
1629
- (t = t || {}), (e = e || bt.font);
1630
- let i = K(t.size, e.size);
1631
- "string" == typeof i && (i = parseInt(i, 10));
1632
- let s = K(t.style, e.style);
1633
- s &&
1634
- !("" + s).match(ze) &&
1635
- (console.warn('Invalid font style specified: "' + s + '"'), (s = ""));
1636
- const n = {
1637
- family: K(t.family, e.family),
1638
- lineHeight: Fe(K(t.lineHeight, e.lineHeight), i),
1639
- size: i,
1640
- style: s,
1641
- weight: K(t.weight, e.weight),
1642
- string: "",
1643
- };
1644
- return (n.string = Ut(n)), n;
1645
- }
1646
- function je(t, e, i, s) {
1647
- let n,
1648
- o,
1649
- a,
1650
- r = !0;
1651
- for (n = 0, o = t.length; n < o; ++n)
1652
- if (
1653
- ((a = t[n]),
1654
- void 0 !== a &&
1655
- (void 0 !== e && "function" == typeof a && ((a = a(e)), (r = !1)),
1656
- void 0 !== i && Y(a) && ((a = a[i % a.length]), (r = !1)),
1657
- void 0 !== a))
1658
- )
1659
- return s && !r && (s.cacheable = !1), a;
1660
- }
1661
- function $e(t, e, i) {
1662
- const { min: s, max: n } = t,
1663
- o = Z(e, (n - s) / 2),
1664
- a = (t, e) => (i && 0 === t ? 0 : t + e);
1665
- return { min: a(s, -Math.abs(o)), max: a(n, o) };
1666
- }
1667
- function Ye(t, e) {
1668
- return Object.assign(Object.create(t), e);
1669
- }
1670
- const Ue = ["left", "top", "right", "bottom"];
1671
- function Xe(t, e) {
1672
- return t.filter((t) => t.pos === e);
1673
- }
1674
- function qe(t, e) {
1675
- return t.filter((t) => -1 === Ue.indexOf(t.pos) && t.box.axis === e);
1676
- }
1677
- function Ke(t, e) {
1678
- return t.sort((t, i) => {
1679
- const s = e ? i : t,
1680
- n = e ? t : i;
1681
- return s.weight === n.weight ? s.index - n.index : s.weight - n.weight;
1682
- });
1683
- }
1684
- function Ge(t, e) {
1685
- const i = (function (t) {
1686
- const e = {};
1687
- for (const i of t) {
1688
- const { stack: t, pos: s, stackWeight: n } = i;
1689
- if (!t || !Ue.includes(s)) continue;
1690
- const o =
1691
- e[t] || (e[t] = { count: 0, placed: 0, weight: 0, size: 0 });
1692
- o.count++, (o.weight += n);
1693
- }
1694
- return e;
1695
- })(t),
1696
- { vBoxMaxWidth: s, hBoxMaxHeight: n } = e;
1697
- let o, a, r;
1698
- for (o = 0, a = t.length; o < a; ++o) {
1699
- r = t[o];
1700
- const { fullSize: a } = r.box,
1701
- l = i[r.stack],
1702
- h = l && r.stackWeight / l.weight;
1703
- r.horizontal
1704
- ? ((r.width = h ? h * s : a && e.availableWidth), (r.height = n))
1705
- : ((r.width = s), (r.height = h ? h * n : a && e.availableHeight));
1706
- }
1707
- return i;
1708
- }
1709
- function Ze(t, e, i, s) {
1710
- return Math.max(t[i], e[i]) + Math.max(t[s], e[s]);
1711
- }
1712
- function Je(t, e) {
1713
- (t.top = Math.max(t.top, e.top)),
1714
- (t.left = Math.max(t.left, e.left)),
1715
- (t.bottom = Math.max(t.bottom, e.bottom)),
1716
- (t.right = Math.max(t.right, e.right));
1717
- }
1718
- function Qe(t, e, i, s) {
1719
- const { pos: n, box: o } = i,
1720
- a = t.maxPadding;
1721
- if (!U(n)) {
1722
- i.size && (t[n] -= i.size);
1723
- const e = s[i.stack] || { size: 0, count: 1 };
1724
- (e.size = Math.max(e.size, i.horizontal ? o.height : o.width)),
1725
- (i.size = e.size / e.count),
1726
- (t[n] += i.size);
1727
- }
1728
- o.getPadding && Je(a, o.getPadding());
1729
- const r = Math.max(0, e.outerWidth - Ze(a, t, "left", "right")),
1730
- l = Math.max(0, e.outerHeight - Ze(a, t, "top", "bottom")),
1731
- h = r !== t.w,
1732
- c = l !== t.h;
1733
- return (
1734
- (t.w = r),
1735
- (t.h = l),
1736
- i.horizontal ? { same: h, other: c } : { same: c, other: h }
1737
- );
1738
- }
1739
- function ti(t, e) {
1740
- const i = e.maxPadding;
1741
- function s(t) {
1742
- const s = { left: 0, top: 0, right: 0, bottom: 0 };
1743
- return (
1744
- t.forEach((t) => {
1745
- s[t] = Math.max(e[t], i[t]);
1746
- }),
1747
- s
1748
- );
1749
- }
1750
- return s(t ? ["left", "right"] : ["top", "bottom"]);
1751
- }
1752
- function ei(t, e, i, s) {
1753
- const n = [];
1754
- let o, a, r, l, h, c;
1755
- for (o = 0, a = t.length, h = 0; o < a; ++o) {
1756
- (r = t[o]),
1757
- (l = r.box),
1758
- l.update(r.width || e.w, r.height || e.h, ti(r.horizontal, e));
1759
- const { same: a, other: d } = Qe(e, i, r, s);
1760
- (h |= a && n.length), (c = c || d), l.fullSize || n.push(r);
1761
- }
1762
- return (h && ei(n, e, i, s)) || c;
1763
- }
1764
- function ii(t, e, i, s, n) {
1765
- (t.top = i),
1766
- (t.left = e),
1767
- (t.right = e + s),
1768
- (t.bottom = i + n),
1769
- (t.width = s),
1770
- (t.height = n);
1771
- }
1772
- function si(t, e, i, s) {
1773
- const n = i.padding;
1774
- let { x: o, y: a } = e;
1775
- for (const r of t) {
1776
- const t = r.box,
1777
- l = s[r.stack] || { count: 1, placed: 0, weight: 1 },
1778
- h = r.stackWeight / l.weight || 1;
1779
- if (r.horizontal) {
1780
- const s = e.w * h,
1781
- o = l.size || t.height;
1782
- ct(l.start) && (a = l.start),
1783
- t.fullSize
1784
- ? ii(t, n.left, a, i.outerWidth - n.right - n.left, o)
1785
- : ii(t, e.left + l.placed, a, s, o),
1786
- (l.start = a),
1787
- (l.placed += s),
1788
- (a = t.bottom);
1789
- } else {
1790
- const s = e.h * h,
1791
- a = l.size || t.width;
1792
- ct(l.start) && (o = l.start),
1793
- t.fullSize
1794
- ? ii(t, o, n.top, a, i.outerHeight - n.bottom - n.top)
1795
- : ii(t, o, e.top + l.placed, a, s),
1796
- (l.start = o),
1797
- (l.placed += s),
1798
- (o = t.right);
1799
- }
1800
- }
1801
- (e.x = o), (e.y = a);
1802
- }
1803
- bt.set("layout", {
1804
- autoPadding: !0,
1805
- padding: { top: 0, right: 0, bottom: 0, left: 0 },
1806
- });
1807
- var ni = {
1808
- addBox(t, e) {
1809
- t.boxes || (t.boxes = []),
1810
- (e.fullSize = e.fullSize || !1),
1811
- (e.position = e.position || "top"),
1812
- (e.weight = e.weight || 0),
1813
- (e._layers =
1814
- e._layers ||
1815
- function () {
1816
- return [
1817
- {
1818
- z: 0,
1819
- draw(t) {
1820
- e.draw(t);
1821
- },
1822
- },
1823
- ];
1824
- }),
1825
- t.boxes.push(e);
1826
- },
1827
- removeBox(t, e) {
1828
- const i = t.boxes ? t.boxes.indexOf(e) : -1;
1829
- -1 !== i && t.boxes.splice(i, 1);
1830
- },
1831
- configure(t, e, i) {
1832
- (e.fullSize = i.fullSize),
1833
- (e.position = i.position),
1834
- (e.weight = i.weight);
1835
- },
1836
- update(t, e, i, s) {
1837
- if (!t) return;
1838
- const n = Ne(t.options.layout.padding),
1839
- o = Math.max(e - n.width, 0),
1840
- a = Math.max(i - n.height, 0),
1841
- r = (function (t) {
1842
- const e = (function (t) {
1843
- const e = [];
1844
- let i, s, n, o, a, r;
1845
- for (i = 0, s = (t || []).length; i < s; ++i)
1846
- (n = t[i]),
1847
- ({
1848
- position: o,
1849
- options: { stack: a, stackWeight: r = 1 },
1850
- } = n),
1851
- e.push({
1852
- index: i,
1853
- box: n,
1854
- pos: o,
1855
- horizontal: n.isHorizontal(),
1856
- weight: n.weight,
1857
- stack: a && o + a,
1858
- stackWeight: r,
1859
- });
1860
- return e;
1861
- })(t),
1862
- i = Ke(
1863
- e.filter((t) => t.box.fullSize),
1864
- !0
1865
- ),
1866
- s = Ke(Xe(e, "left"), !0),
1867
- n = Ke(Xe(e, "right")),
1868
- o = Ke(Xe(e, "top"), !0),
1869
- a = Ke(Xe(e, "bottom")),
1870
- r = qe(e, "x"),
1871
- l = qe(e, "y");
1872
- return {
1873
- fullSize: i,
1874
- leftAndTop: s.concat(o),
1875
- rightAndBottom: n.concat(l).concat(a).concat(r),
1876
- chartArea: Xe(e, "chartArea"),
1877
- vertical: s.concat(n).concat(l),
1878
- horizontal: o.concat(a).concat(r),
1879
- };
1880
- })(t.boxes),
1881
- l = r.vertical,
1882
- h = r.horizontal;
1883
- Q(t.boxes, (t) => {
1884
- "function" == typeof t.beforeLayout && t.beforeLayout();
1885
- });
1886
- const c =
1887
- l.reduce(
1888
- (t, e) =>
1889
- e.box.options && !1 === e.box.options.display ? t : t + 1,
1890
- 0
1891
- ) || 1,
1892
- d = Object.freeze({
1893
- outerWidth: e,
1894
- outerHeight: i,
1895
- padding: n,
1896
- availableWidth: o,
1897
- availableHeight: a,
1898
- vBoxMaxWidth: o / 2 / c,
1899
- hBoxMaxHeight: a / 2,
1900
- }),
1901
- u = Object.assign({}, n);
1902
- Je(u, Ne(s));
1903
- const f = Object.assign(
1904
- { maxPadding: u, w: o, h: a, x: n.left, y: n.top },
1905
- n
1906
- ),
1907
- g = Ge(l.concat(h), d);
1908
- ei(r.fullSize, f, d, g),
1909
- ei(l, f, d, g),
1910
- ei(h, f, d, g) && ei(l, f, d, g),
1911
- (function (t) {
1912
- const e = t.maxPadding;
1913
- function i(i) {
1914
- const s = Math.max(e[i] - t[i], 0);
1915
- return (t[i] += s), s;
1916
- }
1917
- (t.y += i("top")), (t.x += i("left")), i("right"), i("bottom");
1918
- })(f),
1919
- si(r.leftAndTop, f, d, g),
1920
- (f.x += f.w),
1921
- (f.y += f.h),
1922
- si(r.rightAndBottom, f, d, g),
1923
- (t.chartArea = {
1924
- left: f.left,
1925
- top: f.top,
1926
- right: f.left + f.w,
1927
- bottom: f.top + f.h,
1928
- height: f.h,
1929
- width: f.w,
1930
- }),
1931
- Q(r.chartArea, (e) => {
1932
- const i = e.box;
1933
- Object.assign(i, t.chartArea),
1934
- i.update(f.w, f.h, { left: 0, top: 0, right: 0, bottom: 0 });
1935
- });
1936
- },
1937
- };
1938
- function oi(t, e = [""], i = t, s, n = () => t[0]) {
1939
- ct(s) || (s = mi("_fallback", t));
1940
  const o = {
1941
  [Symbol.toStringTag]: "Object",
1942
  _cacheable: !0,
@@ -1944,53 +1538,53 @@
1944
  _rootScopes: i,
1945
  _fallback: s,
1946
  _getTarget: n,
1947
- override: (n) => oi([n, ...t], e, i, s),
1948
  };
1949
  return new Proxy(o, {
1950
  deleteProperty: (e, i) => (
1951
  delete e[i], delete e._keys, delete t[0][i], !0
1952
  ),
1953
  get: (i, s) =>
1954
- ci(i, s, () =>
1955
  (function (t, e, i, s) {
1956
  let n;
1957
  for (const o of e)
1958
- if (((n = mi(li(o, t), i)), ct(n)))
1959
- return hi(t, n) ? gi(i, s, t, n) : n;
1960
  })(s, e, t, i)
1961
  ),
1962
  getOwnPropertyDescriptor: (t, e) =>
1963
  Reflect.getOwnPropertyDescriptor(t._scopes[0], e),
1964
  getPrototypeOf: () => Reflect.getPrototypeOf(t[0]),
1965
- has: (t, e) => xi(t).includes(e),
1966
- ownKeys: (t) => xi(t),
1967
  set(t, e, i) {
1968
  const s = t._storage || (t._storage = n());
1969
  return (t[e] = s[e] = i), delete t._keys, !0;
1970
  },
1971
  });
1972
  }
1973
- function ai(t, e, i, s) {
1974
- const n = {
1975
  _cacheable: !1,
1976
  _proxy: t,
1977
  _context: e,
1978
  _subProxy: i,
1979
  _stack: new Set(),
1980
- _descriptors: ri(t, s),
1981
- setContext: (e) => ai(t, e, i, s),
1982
- override: (n) => ai(t.override(n), e, i, s),
1983
  };
1984
- return new Proxy(n, {
1985
  deleteProperty: (e, i) => (delete e[i], delete t[i], !0),
1986
  get: (t, e, i) =>
1987
- ci(t, e, () =>
1988
  (function (t, e, i) {
1989
- const { _proxy: s, _context: n, _subProxy: o, _descriptors: a } = t;
1990
- let r = s[e];
1991
- dt(r) &&
1992
- a.isScriptable(e) &&
1993
- (r = (function (t, e, i, s) {
1994
  const { _proxy: n, _context: o, _subProxy: a, _stack: r } = i;
1995
  if (r.has(t))
1996
  throw new Error(
@@ -1999,32 +1593,32 @@
1999
  r.add(t),
2000
  (e = e(o, a || s)),
2001
  r.delete(t),
2002
- hi(t, e) && (e = gi(n._scopes, n, t, e));
2003
  return e;
2004
- })(e, r, t, i));
2005
- Y(r) &&
2006
- r.length &&
2007
- (r = (function (t, e, i, s) {
2008
  const {
2009
- _proxy: n,
2010
- _context: o,
2011
- _subProxy: a,
2012
- _descriptors: r,
2013
  } = i;
2014
- if (ct(o.index) && s(t)) e = e[o.index % e.length];
2015
- else if (U(e[0])) {
2016
  const i = e,
2017
- s = n._scopes.filter((t) => t !== i);
2018
  e = [];
2019
- for (const l of i) {
2020
- const i = gi(s, n, t, l);
2021
- e.push(ai(i, o, a && a[t], r));
2022
  }
2023
  }
2024
  return e;
2025
- })(e, r, t, a.isIndexable));
2026
- hi(e, r) && (r = ai(r, n, o && o[e], a));
2027
- return r;
2028
  })(t, e, i)
2029
  ),
2030
  getOwnPropertyDescriptor: (e, i) =>
@@ -2039,7 +1633,7 @@
2039
  set: (e, i, s) => ((t[i] = s), delete e[i], !0),
2040
  });
2041
  }
2042
- function ri(t, e = { scriptable: !0, indexable: !0 }) {
2043
  const {
2044
  _scriptable: i = e.scriptable,
2045
  _indexable: s = e.indexable,
@@ -2049,69 +1643,68 @@
2049
  allKeys: n,
2050
  scriptable: i,
2051
  indexable: s,
2052
- isScriptable: dt(i) ? i : () => i,
2053
- isIndexable: dt(s) ? s : () => s,
2054
  };
2055
  }
2056
- const li = (t, e) => (t ? t + ht(e) : e),
2057
- hi = (t, e) =>
2058
- U(e) &&
2059
  "adapters" !== t &&
2060
  (null === Object.getPrototypeOf(e) || e.constructor === Object);
2061
- function ci(t, e, i) {
2062
  if (Object.prototype.hasOwnProperty.call(t, e)) return t[e];
2063
  const s = i();
2064
  return (t[e] = s), s;
2065
  }
2066
- function di(t, e, i) {
2067
- return dt(t) ? t(e, i) : t;
2068
  }
2069
- const ui = (t, e) =>
2070
- !0 === t ? e : "string" == typeof t ? lt(e, t) : void 0;
2071
- function fi(t, e, i, s, n) {
2072
  for (const o of e) {
2073
- const e = ui(i, o);
2074
  if (e) {
2075
  t.add(e);
2076
- const o = di(e._fallback, i, n);
2077
- if (ct(o) && o !== i && o !== s) return o;
2078
- } else if (!1 === e && ct(s) && i !== s) return null;
2079
  }
2080
  return !1;
2081
  }
2082
- function gi(t, e, i, s) {
2083
- const n = e._rootScopes,
2084
- o = di(e._fallback, i, s),
2085
- a = [...t, ...n],
2086
- r = new Set();
2087
- r.add(s);
2088
- let l = pi(r, a, i, o || i, s);
2089
  return (
2090
- null !== l &&
2091
- (!ct(o) || o === i || ((l = pi(r, a, o, l, s)), null !== l)) &&
2092
- oi(Array.from(r), [""], n, o, () =>
2093
  (function (t, e, i) {
2094
- const s = t._getTarget();
2095
- e in s || (s[e] = {});
2096
- const n = s[e];
2097
- if (Y(n) && U(i)) return i;
2098
- return n;
2099
- })(e, i, s)
2100
  )
2101
  );
2102
  }
2103
- function pi(t, e, i, s, n) {
2104
- for (; i; ) i = fi(t, e, i, s, n);
2105
  return i;
2106
  }
2107
- function mi(t, e) {
2108
  for (const i of e) {
2109
  if (!i) continue;
2110
  const e = i[t];
2111
- if (ct(e)) return e;
2112
  }
2113
  }
2114
- function xi(t) {
2115
  let e = t._keys;
2116
  return (
2117
  e ||
@@ -2126,15 +1719,24 @@
2126
  e
2127
  );
2128
  }
2129
- const bi = Number.EPSILON || 1e-14,
2130
- _i = (t, e) => e < t.length && !t[e].skip && t[e],
2131
- yi = (t) => ("x" === t ? "y" : "x");
2132
- function vi(t, e, i, s) {
 
 
 
 
 
 
 
 
 
2133
  const n = t.skip ? e : t,
2134
  o = e,
2135
  a = i.skip ? e : i,
2136
- r = Vt(o, n),
2137
- l = Vt(a, o);
2138
  let h = r / (r + l),
2139
  c = l / (r + l);
2140
  (h = isNaN(h) ? 0 : h), (c = isNaN(c) ? 0 : c);
@@ -2145,24 +1747,24 @@
2145
  next: { x: o.x + u * (a.x - n.x), y: o.y + u * (a.y - n.y) },
2146
  };
2147
  }
2148
- function wi(t, e = "x") {
2149
- const i = yi(e),
2150
  s = t.length,
2151
  n = Array(s).fill(0),
2152
  o = Array(s);
2153
  let a,
2154
  r,
2155
  l,
2156
- h = _i(t, 0);
2157
  for (a = 0; a < s; ++a)
2158
- if (((r = l), (l = h), (h = _i(t, a + 1)), l)) {
2159
  if (h) {
2160
  const t = h[e] - l[e];
2161
  n[a] = 0 !== t ? (h[i] - l[i]) / t : 0;
2162
  }
2163
  o[a] = r
2164
  ? h
2165
- ? Ct(n[a - 1]) !== Ct(n[a])
2166
  ? 0
2167
  : (n[a - 1] + n[a]) / 2
2168
  : n[a - 1]
@@ -2175,13 +1777,13 @@
2175
  a,
2176
  r,
2177
  l,
2178
- h = _i(t, 0);
2179
  for (let c = 0; c < s - 1; ++c)
2180
  (l = h),
2181
- (h = _i(t, c + 1)),
2182
  l &&
2183
  h &&
2184
- (Lt(e[c], 0, bi)
2185
  ? (i[c] = i[c + 1] = 0)
2186
  : ((n = i[c] / e[c]),
2187
  (o = i[c + 1] / e[c]),
@@ -2192,14 +1794,14 @@
2192
  (i[c + 1] = o * a * e[c]))));
2193
  })(t, n, o),
2194
  (function (t, e, i = "x") {
2195
- const s = yi(i),
2196
  n = t.length;
2197
  let o,
2198
  a,
2199
  r,
2200
- l = _i(t, 0);
2201
  for (let h = 0; h < n; ++h) {
2202
- if (((a = r), (r = l), (l = _i(t, h + 1)), !r)) continue;
2203
  const n = r[i],
2204
  c = r[s];
2205
  a &&
@@ -2213,21 +1815,21 @@
2213
  }
2214
  })(t, o, e);
2215
  }
2216
- function Mi(t, e, i) {
2217
  return Math.max(Math.min(t, i), e);
2218
  }
2219
- function ki(t, e, i, s, n) {
2220
  let o, a, r, l;
2221
  if (
2222
  (e.spanGaps && (t = t.filter((t) => !t.skip)),
2223
  "monotone" === e.cubicInterpolationMode)
2224
  )
2225
- wi(t, n);
2226
  else {
2227
  let i = s ? t[t.length - 1] : t[0];
2228
  for (o = 0, a = t.length; o < a; ++o)
2229
  (r = t[o]),
2230
- (l = vi(i, r, t[Math.min(o + 1, a - (s ? 0 : 1)) % a], e.tension)),
2231
  (r.cp1x = l.previous.x),
2232
  (r.cp1y = l.previous.y),
2233
  (r.cp2x = l.next.x),
@@ -2241,26 +1843,25 @@
2241
  n,
2242
  o,
2243
  a,
2244
- r = Jt(t[0], e);
2245
  for (i = 0, s = t.length; i < s; ++i)
2246
  (a = o),
2247
  (o = r),
2248
- (r = i < s - 1 && Jt(t[i + 1], e)),
2249
  o &&
2250
  ((n = t[i]),
2251
  a &&
2252
- ((n.cp1x = Mi(n.cp1x, e.left, e.right)),
2253
- (n.cp1y = Mi(n.cp1y, e.top, e.bottom))),
2254
  r &&
2255
- ((n.cp2x = Mi(n.cp2x, e.left, e.right)),
2256
- (n.cp2y = Mi(n.cp2y, e.top, e.bottom))));
2257
  })(t, i);
2258
  }
2259
- const Si = (t) => 0 === t || 1 === t,
2260
- Pi = (t, e, i) =>
2261
- -Math.pow(2, 10 * (t -= 1)) * Math.sin(((t - e) * yt) / i),
2262
- Di = (t, e, i) => Math.pow(2, -10 * t) * Math.sin(((t - e) * yt) / i) + 1,
2263
- Ci = {
2264
  linear: (t) => t,
2265
  easeInQuad: (t) => t * t,
2266
  easeOutQuad: (t) => -t * (t - 2),
@@ -2282,13 +1883,13 @@
2282
  (t /= 0.5) < 1
2283
  ? 0.5 * t * t * t * t * t
2284
  : 0.5 * ((t -= 2) * t * t * t * t + 2),
2285
- easeInSine: (t) => 1 - Math.cos(t * kt),
2286
- easeOutSine: (t) => Math.sin(t * kt),
2287
- easeInOutSine: (t) => -0.5 * (Math.cos(_t * t) - 1),
2288
  easeInExpo: (t) => (0 === t ? 0 : Math.pow(2, 10 * (t - 1))),
2289
  easeOutExpo: (t) => (1 === t ? 1 : 1 - Math.pow(2, -10 * t)),
2290
  easeInOutExpo: (t) =>
2291
- Si(t)
2292
  ? t
2293
  : t < 0.5
2294
  ? 0.5 * Math.pow(2, 10 * (2 * t - 1))
@@ -2299,15 +1900,15 @@
2299
  (t /= 0.5) < 1
2300
  ? -0.5 * (Math.sqrt(1 - t * t) - 1)
2301
  : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),
2302
- easeInElastic: (t) => (Si(t) ? t : Pi(t, 0.075, 0.3)),
2303
- easeOutElastic: (t) => (Si(t) ? t : Di(t, 0.075, 0.3)),
2304
  easeInOutElastic(t) {
2305
  const e = 0.1125;
2306
- return Si(t)
2307
  ? t
2308
  : t < 0.5
2309
- ? 0.5 * Pi(2 * t, e, 0.45)
2310
- : 0.5 + 0.5 * Di(2 * t - 1, e, 0.45);
2311
  },
2312
  easeInBack(t) {
2313
  const e = 1.70158;
@@ -2323,7 +1924,7 @@
2323
  ? t * t * ((1 + (e *= 1.525)) * t - e) * 0.5
2324
  : 0.5 * ((t -= 2) * t * ((1 + (e *= 1.525)) * t + e) + 2);
2325
  },
2326
- easeInBounce: (t) => 1 - Ci.easeOutBounce(1 - t),
2327
  easeOutBounce(t) {
2328
  const e = 7.5625,
2329
  i = 2.75;
@@ -2337,13 +1938,13 @@
2337
  },
2338
  easeInOutBounce: (t) =>
2339
  t < 0.5
2340
- ? 0.5 * Ci.easeInBounce(2 * t)
2341
- : 0.5 * Ci.easeOutBounce(2 * t - 1) + 0.5,
2342
  };
2343
- function Oi(t, e, i, s) {
2344
  return { x: t.x + i * (e.x - t.x), y: t.y + i * (e.y - t.y) };
2345
  }
2346
- function Ai(t, e, i, s) {
2347
  return {
2348
  x: t.x + i * (e.x - t.x),
2349
  y:
@@ -2360,26 +1961,101 @@
2360
  : t.y,
2361
  };
2362
  }
2363
- function Ti(t, e, i, s) {
2364
  const n = { x: t.cp2x, y: t.cp2y },
2365
  o = { x: e.cp1x, y: e.cp1y },
2366
- a = Oi(t, n, i),
2367
- r = Oi(n, o, i),
2368
- l = Oi(o, e, i),
2369
- h = Oi(a, r, i),
2370
- c = Oi(r, l, i);
2371
- return Oi(h, c, i);
2372
- }
2373
- const Li = new Map();
2374
- function Ri(t, e, i) {
2375
  return (function (t, e) {
2376
  e = e || {};
2377
  const i = t + JSON.stringify(e);
2378
- let s = Li.get(i);
2379
- return s || ((s = new Intl.NumberFormat(t, e)), Li.set(i, s)), s;
2380
  })(e, i).format(t);
2381
  }
2382
- function Ei(t, e, i) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2383
  return t
2384
  ? (function (t, e) {
2385
  return {
@@ -2401,7 +2077,7 @@
2401
  leftForLtr: (t, e) => t,
2402
  };
2403
  }
2404
- function Ii(t, e) {
2405
  let i, s;
2406
  ("ltr" !== e && "rtl" !== e) ||
2407
  ((i = t.canvas.style),
@@ -2412,17 +2088,17 @@
2412
  i.setProperty("direction", e, "important"),
2413
  (t.prevTextDirection = s));
2414
  }
2415
- function zi(t, e) {
2416
  void 0 !== e &&
2417
  (delete t.prevTextDirection,
2418
  t.canvas.style.setProperty("direction", e[0], e[1]));
2419
  }
2420
- function Fi(t) {
2421
  return "angle" === t
2422
- ? { between: Ht, compare: Wt, normalize: Nt }
2423
- : { between: Yt, compare: (t, e) => t - e, normalize: (t) => t };
2424
  }
2425
- function Bi({ start: t, end: e, count: i, loop: s, style: n }) {
2426
  return {
2427
  start: t % i,
2428
  end: e % i,
@@ -2430,11 +2106,11 @@
2430
  style: n,
2431
  };
2432
  }
2433
- function Vi(t, e, i) {
2434
  if (!i) return [t];
2435
  const { property: s, start: n, end: o } = i,
2436
  a = e.length,
2437
- { compare: r, between: l, normalize: h } = Fi(s),
2438
  {
2439
  start: c,
2440
  end: d,
@@ -2442,7 +2118,7 @@
2442
  style: f,
2443
  } = (function (t, e, i) {
2444
  const { property: s, start: n, end: o } = i,
2445
- { between: a, normalize: r } = Fi(s),
2446
  l = e.length;
2447
  let h,
2448
  c,
@@ -2461,40 +2137,40 @@
2461
  g = [];
2462
  let p,
2463
  m,
2464
- x,
2465
- b = !1,
2466
  _ = null;
2467
- const y = () => b || (l(n, x, p) && 0 !== r(n, x)),
2468
- v = () => !b || 0 === r(o, p) || l(o, x, p);
2469
  for (let t = c, i = c; t <= d; ++t)
2470
  (m = e[t % a]),
2471
  m.skip ||
2472
  ((p = h(m[s])),
2473
- p !== x &&
2474
- ((b = l(p, n, o)),
2475
  null === _ && y() && (_ = 0 === r(p, n) ? t : i),
2476
  null !== _ &&
2477
  v() &&
2478
- (g.push(Bi({ start: _, end: t, loop: u, count: a, style: f })),
2479
  (_ = null)),
2480
  (i = t),
2481
- (x = p)));
2482
  return (
2483
  null !== _ &&
2484
- g.push(Bi({ start: _, end: d, loop: u, count: a, style: f })),
2485
  g
2486
  );
2487
  }
2488
- function Wi(t, e) {
2489
  const i = [],
2490
  s = t.segments;
2491
  for (let n = 0; n < s.length; n++) {
2492
- const o = Vi(s[n], t.points, e);
2493
  o.length && i.push(...o);
2494
  }
2495
  return i;
2496
  }
2497
- function Ni(t, e) {
2498
  const i = t.points,
2499
  s = t.options.spanGaps,
2500
  n = i.length;
@@ -2508,8 +2184,8 @@
2508
  for (n %= e, i && (o += n); o > n && t[o % e].skip; ) o--;
2509
  return (o %= e), { start: n, end: o };
2510
  })(i, n, o, s);
2511
- if (!0 === s) return Hi(t, [{ start: a, end: r, loop: o }], i, e);
2512
- return Hi(
2513
  t,
2514
  (function (t, e, i, s) {
2515
  const n = t.length,
@@ -2533,11 +2209,11 @@
2533
  e
2534
  );
2535
  }
2536
- function Hi(t, e, i, s) {
2537
  return s && s.setContext && i
2538
  ? (function (t, e, i, s) {
2539
  const n = t._chart.getContext(),
2540
- o = ji(t.options),
2541
  {
2542
  _datasetIndex: a,
2543
  options: { spanGaps: r },
@@ -2564,9 +2240,9 @@
2564
  o = i[d % l];
2565
  for (u = d + 1; u <= t.end; u++) {
2566
  const r = i[u % l];
2567
- (e = ji(
2568
  s.setContext(
2569
- Ye(n, {
2570
  type: "segment",
2571
  p0: o,
2572
  p1: r,
@@ -2576,7 +2252,7 @@
2576
  })
2577
  )
2578
  )),
2579
- $i(e, c) && f(d, u - 1, t.loop, c),
2580
  (o = r),
2581
  (c = e);
2582
  }
@@ -2586,7 +2262,7 @@
2586
  })(t, e, i, s)
2587
  : e;
2588
  }
2589
- function ji(t) {
2590
  return {
2591
  backgroundColor: t.backgroundColor,
2592
  borderCapStyle: t.borderCapStyle,
@@ -2597,135 +2273,562 @@
2597
  borderColor: t.borderColor,
2598
  };
2599
  }
2600
- function $i(t, e) {
2601
  return e && JSON.stringify(t) !== JSON.stringify(e);
2602
  }
2603
- var Yi = Object.freeze({
2604
  __proto__: null,
2605
- easingEffects: Ci,
2606
- color: W,
2607
- getHoverColor: N,
2608
- noop: H,
2609
- uid: j,
2610
- isNullOrUndef: $,
2611
- isArray: Y,
2612
- isObject: U,
2613
- isFinite: X,
2614
- finiteOrDefault: q,
2615
- valueOrDefault: K,
2616
- toPercentage: G,
2617
- toDimension: Z,
2618
- callback: J,
2619
- each: Q,
2620
- _elementsEqual: tt,
2621
- clone: et,
2622
- _merger: st,
2623
- merge: nt,
2624
- mergeIf: ot,
2625
- _mergerIf: at,
 
2626
  _deprecated: function (t, e, i, s) {
2627
  void 0 !== e &&
2628
  console.warn(
2629
  t + ': "' + i + '" is deprecated. Please use "' + s + '" instead'
2630
  );
2631
  },
2632
- resolveObjectKey: lt,
2633
- _capitalize: ht,
2634
- defined: ct,
2635
- isFunction: dt,
2636
- setsEqual: ut,
2637
- _isClickEvent: ft,
2638
- toFontString: Ut,
2639
- _measureText: Xt,
2640
- _longestText: qt,
2641
- _alignPixel: Kt,
2642
- clearCanvas: Gt,
2643
- drawPoint: Zt,
2644
- _isPointInArea: Jt,
2645
- clipArea: Qt,
2646
- unclipArea: te,
2647
- _steppedLineTo: ee,
2648
- _bezierCurveTo: ie,
2649
- renderText: se,
2650
- addRoundedRectPath: oe,
2651
- _lookup: ae,
2652
- _lookupByKey: re,
2653
- _rlookupByKey: le,
2654
- _filterBetween: he,
2655
- listenArrayEvents: de,
2656
- unlistenArrayEvents: ue,
2657
- _arrayUnique: fe,
2658
- _createResolver: oi,
2659
- _attachContext: ai,
2660
- _descriptors: ri,
2661
- splineCurve: vi,
2662
- splineCurveMonotone: wi,
2663
- _updateBezierControlPoints: ki,
2664
- _isDomSupported: ge,
2665
- _getParentNode: pe,
2666
- getStyle: be,
2667
- getRelativePosition: ve,
2668
- getMaximumSize: Me,
2669
- retinaScale: ke,
2670
- supportsEventListenerOptions: Se,
2671
- readUsedSize: Pe,
2672
- fontString: function (t, e, i) {
2673
- return e + " " + t + "px " + i;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2674
  },
2675
- requestAnimFrame: t,
2676
- throttled: e,
2677
- debounce: i,
2678
- _toLeftRightCenter: s,
2679
- _alignStartEnd: n,
2680
- _textX: o,
2681
- _pointInLine: Oi,
2682
- _steppedInterpolation: Ai,
2683
- _bezierInterpolation: Ti,
2684
- formatNumber: Ri,
2685
- toLineHeight: Fe,
2686
- _readValueToProps: Be,
2687
- toTRBL: Ve,
2688
- toTRBLCorners: We,
2689
- toPadding: Ne,
2690
- toFont: He,
2691
- resolve: je,
2692
- _addGrace: $e,
2693
- createContext: Ye,
2694
- PI: _t,
2695
- TAU: yt,
2696
- PITAU: vt,
2697
- INFINITY: wt,
2698
- RAD_PER_DEG: Mt,
2699
- HALF_PI: kt,
2700
- QUARTER_PI: St,
2701
- TWO_THIRDS_PI: Pt,
2702
- log10: Dt,
2703
- sign: Ct,
2704
- niceNum: Ot,
2705
- _factorize: At,
2706
- isNumber: Tt,
2707
- almostEquals: Lt,
2708
- almostWhole: Rt,
2709
- _setMinAndMaxByKey: Et,
2710
- toRadians: It,
2711
- toDegrees: zt,
2712
- _decimalPlaces: Ft,
2713
- getAngleFromPoint: Bt,
2714
- distanceBetweenPoints: Vt,
2715
- _angleDiff: Wt,
2716
- _normalizeAngle: Nt,
2717
- _angleBetween: Ht,
2718
- _limitValue: jt,
2719
- _int16Range: $t,
2720
- _isBetween: Yt,
2721
- getRtlAdapter: Ei,
2722
- overrideTextDirection: Ii,
2723
- restoreTextDirection: zi,
2724
- _boundSegment: Vi,
2725
- _boundSegments: Wi,
2726
- _computeSegments: Ni,
2727
- });
2728
- class Ui {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2729
  acquireContext(t, e) {}
2730
  releaseContext(t) {
2731
  return !1;
@@ -2747,7 +2850,7 @@
2747
  }
2748
  updateConfig(t) {}
2749
  }
2750
- class Xi extends Ui {
2751
  acquireContext(t) {
2752
  return (t && t.getContext && t.getContext("2d")) || null;
2753
  }
@@ -2755,7 +2858,7 @@
2755
  t.options.animation = !1;
2756
  }
2757
  }
2758
- const qi = {
2759
  touchstart: "mousedown",
2760
  touchmove: "mousemove",
2761
  touchend: "mouseup",
@@ -2766,82 +2869,82 @@
2766
  pointerleave: "mouseout",
2767
  pointerout: "mouseout",
2768
  },
2769
- Ki = (t) => null === t || "" === t;
2770
- const Gi = !!Se && { passive: !0 };
2771
- function Zi(t, e, i) {
2772
- t.canvas.removeEventListener(e, i, Gi);
2773
  }
2774
- function Ji(t, e) {
2775
  for (const i of t) if (i === e || i.contains(e)) return !0;
2776
  }
2777
- function Qi(t, e, i) {
2778
  const s = t.canvas,
2779
  n = new MutationObserver((t) => {
2780
  let e = !1;
2781
  for (const i of t)
2782
- (e = e || Ji(i.addedNodes, s)), (e = e && !Ji(i.removedNodes, s));
2783
  e && i();
2784
  });
2785
  return n.observe(document, { childList: !0, subtree: !0 }), n;
2786
  }
2787
- function ts(t, e, i) {
2788
  const s = t.canvas,
2789
  n = new MutationObserver((t) => {
2790
  let e = !1;
2791
  for (const i of t)
2792
- (e = e || Ji(i.removedNodes, s)), (e = e && !Ji(i.addedNodes, s));
2793
  e && i();
2794
  });
2795
  return n.observe(document, { childList: !0, subtree: !0 }), n;
2796
  }
2797
- const es = new Map();
2798
- let is = 0;
2799
- function ss() {
2800
  const t = window.devicePixelRatio;
2801
- t !== is &&
2802
- ((is = t),
2803
- es.forEach((e, i) => {
2804
  i.currentDevicePixelRatio !== t && e();
2805
  }));
2806
  }
2807
- function ns(t, i, s) {
2808
- const n = t.canvas,
2809
- o = n && pe(n);
2810
- if (!o) return;
2811
- const a = e((t, e) => {
2812
- const i = o.clientWidth;
2813
- s(t, e), i < o.clientWidth && s();
2814
  }, window),
2815
- r = new ResizeObserver((t) => {
2816
  const e = t[0],
2817
  i = e.contentRect.width,
2818
  s = e.contentRect.height;
2819
- (0 === i && 0 === s) || a(i, s);
2820
  });
2821
  return (
2822
- r.observe(o),
2823
  (function (t, e) {
2824
- es.size || window.addEventListener("resize", ss), es.set(t, e);
2825
- })(t, a),
2826
- r
2827
  );
2828
  }
2829
- function os(t, e, i) {
2830
  i && i.disconnect(),
2831
  "resize" === e &&
2832
  (function (t) {
2833
- es.delete(t), es.size || window.removeEventListener("resize", ss);
2834
  })(t);
2835
  }
2836
- function as(t, i, s) {
2837
- const n = t.canvas,
2838
- o = e(
2839
  (e) => {
2840
  null !== t.ctx &&
2841
- s(
2842
  (function (t, e) {
2843
- const i = qi[t.type] || t.type,
2844
- { x: s, y: n } = ve(t, e);
2845
  return {
2846
  type: i,
2847
  chart: e,
@@ -2860,12 +2963,12 @@
2860
  );
2861
  return (
2862
  (function (t, e, i) {
2863
- t.addEventListener(e, i, Gi);
2864
- })(n, i, o),
2865
- o
2866
  );
2867
  }
2868
- class rs extends Ui {
2869
  acquireContext(t, e) {
2870
  const i = t && t.getContext && t.getContext("2d");
2871
  return i && i.canvas === t
@@ -2887,15 +2990,15 @@
2887
  }),
2888
  (i.display = i.display || "block"),
2889
  (i.boxSizing = i.boxSizing || "border-box"),
2890
- Ki(n))
2891
  ) {
2892
- const e = Pe(t, "width");
2893
  void 0 !== e && (t.width = e);
2894
  }
2895
- if (Ki(s))
2896
  if ("" === t.style.height) t.height = t.width / (e || 2);
2897
  else {
2898
- const e = Pe(t, "height");
2899
  void 0 !== e && (t.height = e);
2900
  }
2901
  })(t, e),
@@ -2905,15 +3008,15 @@
2905
  releaseContext(t) {
2906
  const e = t.canvas;
2907
  if (!e.$chartjs) return !1;
2908
- const i = e.$chartjs.initial;
2909
  ["height", "width"].forEach((t) => {
2910
- const s = i[t];
2911
- $(s) ? e.removeAttribute(t) : e.setAttribute(t, s);
2912
  });
2913
- const s = i.style || {};
2914
  return (
2915
- Object.keys(s).forEach((t) => {
2916
- e.style[t] = s[t];
2917
  }),
2918
  (e.width = e.width),
2919
  delete e.$chartjs,
@@ -2923,58 +3026,58 @@
2923
  addEventListener(t, e, i) {
2924
  this.removeEventListener(t, e);
2925
  const s = t.$proxies || (t.$proxies = {}),
2926
- n = { attach: Qi, detach: ts, resize: ns }[e] || as;
2927
  s[e] = n(t, e, i);
2928
  }
2929
  removeEventListener(t, e) {
2930
  const i = t.$proxies || (t.$proxies = {}),
2931
  s = i[e];
2932
  if (!s) return;
2933
- (({ attach: os, detach: os, resize: os }[e] || Zi)(t, e, s),
2934
  (i[e] = void 0));
2935
  }
2936
  getDevicePixelRatio() {
2937
  return window.devicePixelRatio;
2938
  }
2939
  getMaximumSize(t, e, i, s) {
2940
- return Me(t, e, i, s);
2941
  }
2942
  isAttached(t) {
2943
- const e = pe(t);
2944
  return !(!e || !e.isConnected);
2945
  }
2946
  }
2947
- function ls(t) {
2948
- return !ge() ||
2949
  ("undefined" != typeof OffscreenCanvas && t instanceof OffscreenCanvas)
2950
- ? Xi
2951
- : rs;
2952
  }
2953
- var hs = Object.freeze({
2954
  __proto__: null,
2955
- _detectPlatform: ls,
2956
- BasePlatform: Ui,
2957
- BasicPlatform: Xi,
2958
- DomPlatform: rs,
2959
  });
2960
- const cs = "transparent",
2961
- ds = {
2962
  boolean: (t, e, i) => (i > 0.5 ? e : t),
2963
  color(t, e, i) {
2964
- const s = W(t || cs),
2965
- n = s.valid && W(e || cs);
2966
  return n && n.valid ? n.mix(s, i).hexString() : e;
2967
  },
2968
  number: (t, e, i) => t + (e - t) * i,
2969
  };
2970
- class us {
2971
  constructor(t, e, i, s) {
2972
  const n = e[i];
2973
- s = je([t.to, s, n, t.from]);
2974
- const o = je([t.from, n, s]);
2975
  (this._active = !0),
2976
- (this._fn = t.fn || ds[t.type || typeof o]),
2977
- (this._easing = Ci[t.easing] || Ci.linear),
2978
  (this._start = Math.floor(Date.now() + (t.delay || 0))),
2979
  (this._duration = this._total = Math.floor(t.duration)),
2980
  (this._loop = !!t.loop),
@@ -2997,8 +3100,8 @@
2997
  (this._duration = Math.floor(Math.max(o, t.duration))),
2998
  (this._total += n),
2999
  (this._loop = !!t.loop),
3000
- (this._to = je([t.to, e, s, t.from])),
3001
- (this._from = je([t.from, s, e]));
3002
  }
3003
  }
3004
  cancel() {
@@ -3034,7 +3137,7 @@
3034
  for (let t = 0; t < i.length; t++) i[t][e]();
3035
  }
3036
  }
3037
- bt.set("animation", {
3038
  delay: void 0,
3039
  duration: 1e3,
3040
  easing: "easeOutQuart",
@@ -3044,13 +3147,13 @@
3044
  to: void 0,
3045
  type: void 0,
3046
  });
3047
- const fs = Object.keys(bt.animation);
3048
- bt.describe("animation", {
3049
  _fallback: !1,
3050
  _indexable: !1,
3051
  _scriptable: (t) => "onProgress" !== t && "onComplete" !== t && "fn" !== t,
3052
  }),
3053
- bt.set("animations", {
3054
  colors: {
3055
  type: "color",
3056
  properties: ["color", "borderColor", "backgroundColor"],
@@ -3060,8 +3163,8 @@
3060
  properties: ["x", "y", "borderWidth", "radius", "tension"],
3061
  },
3062
  }),
3063
- bt.describe("animations", { _fallback: "animation" }),
3064
- bt.set("transitions", {
3065
  active: { animation: { duration: 400 } },
3066
  resize: { animation: { duration: 0 } },
3067
  show: {
@@ -3077,20 +3180,20 @@
3077
  },
3078
  },
3079
  });
3080
- class gs {
3081
  constructor(t, e) {
3082
  (this._chart = t), (this._properties = new Map()), this.configure(e);
3083
  }
3084
  configure(t) {
3085
- if (!U(t)) return;
3086
  const e = this._properties;
3087
  Object.getOwnPropertyNames(t).forEach((i) => {
3088
- const s = t[i];
3089
- if (!U(s)) return;
3090
- const n = {};
3091
- for (const t of fs) n[t] = s[t];
3092
- ((Y(s.properties) && s.properties) || [i]).forEach((t) => {
3093
- (t !== i && e.has(t)) || e.set(t, n);
3094
  });
3095
  });
3096
  }
@@ -3151,7 +3254,7 @@
3151
  c.cancel();
3152
  }
3153
  d && d.duration
3154
- ? ((n[l] = c = new us(d, t, l, h)), s.push(c))
3155
  : (t[l] = h);
3156
  }
3157
  return s;
@@ -3159,55 +3262,54 @@
3159
  update(t, e) {
3160
  if (0 === this._properties.size) return void Object.assign(t, e);
3161
  const i = this._createAnimations(t, e);
3162
- return i.length ? (a.add(this._chart, i), !0) : void 0;
3163
  }
3164
  }
3165
- function ps(t, e) {
3166
  const i = (t && t.options) || {},
3167
  s = i.reverse,
3168
  n = void 0 === i.min ? e : 0,
3169
  o = void 0 === i.max ? e : 0;
3170
  return { start: s ? o : n, end: s ? n : o };
3171
  }
3172
- function ms(t, e) {
3173
  const i = [],
3174
  s = t._getSortedDatasetMetas(e);
3175
  let n, o;
3176
  for (n = 0, o = s.length; n < o; ++n) i.push(s[n].index);
3177
  return i;
3178
  }
3179
- function xs(t, e, i, s = {}) {
3180
  const n = t.keys,
3181
- o = "single" === s.mode;
3182
- let a, r, l, h;
3183
  if (null !== e) {
3184
- for (a = 0, r = n.length; a < r; ++a) {
3185
- if (((l = +n[a]), l === i)) {
3186
  if (s.all) continue;
3187
  break;
3188
  }
3189
- (h = t.values[l]),
3190
- X(h) && (o || 0 === e || Ct(e) === Ct(h)) && (e += h);
3191
  }
3192
  return e;
3193
  }
3194
  }
3195
- function bs(t, e) {
3196
  const i = t && t.options.stacked;
3197
  return i || (void 0 === i && void 0 !== e.stack);
3198
  }
3199
- function _s(t, e, i) {
3200
  const s = t[e] || (t[e] = {});
3201
  return s[i] || (s[i] = {});
3202
  }
3203
- function ys(t, e, i, s) {
3204
  for (const n of e.getMatchingVisibleMetas(s).reverse()) {
3205
  const e = t[n.index];
3206
  if ((i && e > 0) || (!i && e < 0)) return n.index;
3207
  }
3208
  return null;
3209
  }
3210
- function vs(t, e) {
3211
  const { chart: i, _cachedMeta: s } = t,
3212
  n = i._stacks || (i._stacks = {}),
3213
  { iScale: o, vScale: a, index: r } = s,
@@ -3221,19 +3323,19 @@
3221
  for (let t = 0; t < d; ++t) {
3222
  const i = e[t],
3223
  { [l]: o, [h]: d } = i;
3224
- (u = (i._stacks || (i._stacks = {}))[h] = _s(n, c, o)),
3225
  (u[r] = d),
3226
- (u._top = ys(u, a, !0, s.type)),
3227
- (u._bottom = ys(u, a, !1, s.type));
3228
  }
3229
  }
3230
- function ws(t, e) {
3231
  const i = t.scales;
3232
  return Object.keys(i)
3233
  .filter((t) => i[t].axis === e)
3234
  .shift();
3235
  }
3236
- function Ms(t, e) {
3237
  const i = t.controller.index,
3238
  s = t.vScale && t.vScale.axis;
3239
  if (s) {
@@ -3245,9 +3347,9 @@
3245
  }
3246
  }
3247
  }
3248
- const ks = (t) => "reset" === t || "none" === t,
3249
- Ss = (t, e) => (e ? t : Object.assign({}, t));
3250
- class Ps {
3251
  constructor(t, e) {
3252
  (this.chart = t),
3253
  (this._ctx = t.ctx),
@@ -3263,6 +3365,7 @@
3263
  (this._drawStart = void 0),
3264
  (this._drawCount = void 0),
3265
  (this.enableOptionSharing = !1),
 
3266
  (this.$context = void 0),
3267
  (this._syncList = []),
3268
  this.initialize();
@@ -3271,28 +3374,28 @@
3271
  const t = this._cachedMeta;
3272
  this.configure(),
3273
  this.linkScales(),
3274
- (t._stacked = bs(t.vScale, t)),
3275
  this.addElements();
3276
  }
3277
  updateIndex(t) {
3278
- this.index !== t && Ms(this._cachedMeta), (this.index = t);
3279
  }
3280
  linkScales() {
3281
  const t = this.chart,
3282
  e = this._cachedMeta,
3283
  i = this.getDataset(),
3284
  s = (t, e, i, s) => ("x" === t ? e : "r" === t ? s : i),
3285
- n = (e.xAxisID = K(i.xAxisID, ws(t, "x"))),
3286
- o = (e.yAxisID = K(i.yAxisID, ws(t, "y"))),
3287
- a = (e.rAxisID = K(i.rAxisID, ws(t, "r"))),
3288
- r = e.indexAxis,
3289
- l = (e.iAxisID = s(r, n, o, a)),
3290
- h = (e.vAxisID = s(r, o, n, a));
3291
  (e.xScale = this.getScaleForId(n)),
3292
  (e.yScale = this.getScaleForId(o)),
3293
  (e.rScale = this.getScaleForId(a)),
3294
- (e.iScale = this.getScaleForId(l)),
3295
- (e.vScale = this.getScaleForId(h));
3296
  }
3297
  getDataset() {
3298
  return this.chart.data.datasets[this.index];
@@ -3312,13 +3415,13 @@
3312
  }
3313
  _destroy() {
3314
  const t = this._cachedMeta;
3315
- this._data && ue(this._data, this), t._stacked && Ms(t);
3316
  }
3317
  _dataCheck() {
3318
  const t = this.getDataset(),
3319
  e = t.data || (t.data = []),
3320
  i = this._data;
3321
- if (U(e))
3322
  this._data = (function (t) {
3323
  const e = Object.keys(t),
3324
  i = new Array(e.length);
@@ -3329,11 +3432,11 @@
3329
  })(e);
3330
  else if (i !== e) {
3331
  if (i) {
3332
- ue(i, this);
3333
  const t = this._cachedMeta;
3334
- Ms(t), (t._parsed = []);
3335
  }
3336
- e && Object.isExtensible(e) && de(e, this),
3337
  (this._syncList = []),
3338
  (this._data = e);
3339
  }
@@ -3349,10 +3452,10 @@
3349
  let s = !1;
3350
  this._dataCheck();
3351
  const n = e._stacked;
3352
- (e._stacked = bs(e.vScale, e)),
3353
- e.stack !== i.stack && ((s = !0), Ms(e), (e.stack = i.stack)),
3354
  this._resyncElements(t),
3355
- (s || n !== e._stacked) && vs(this, e._parsed);
3356
  }
3357
  configure() {
3358
  const t = this.chart.config,
@@ -3363,27 +3466,27 @@
3363
  (this._cachedDataOpts = {});
3364
  }
3365
  parse(t, e) {
3366
- const { _cachedMeta: i, _data: s } = this,
3367
- { iScale: n, _stacked: o } = i,
3368
- a = n.axis;
3369
- let r,
3370
- l,
3371
- h,
3372
- c = (0 === t && e === s.length) || i._sorted,
3373
- d = t > 0 && i._parsed[t - 1];
3374
- if (!1 === this._parsing) (i._parsed = s), (i._sorted = !0), (h = s);
3375
  else {
3376
- h = Y(s[t])
3377
- ? this.parseArrayData(i, s, t, e)
3378
- : U(s[t])
3379
- ? this.parseObjectData(i, s, t, e)
3380
- : this.parsePrimitiveData(i, s, t, e);
3381
- const n = () => null === l[a] || (d && l[a] < d[a]);
3382
- for (r = 0; r < e; ++r)
3383
- (i._parsed[r + t] = l = h[r]), c && (n() && (c = !1), (d = l));
3384
- i._sorted = c;
3385
  }
3386
- o && vs(this, h);
3387
  }
3388
  parsePrimitiveData(t, e, i, s) {
3389
  const { iScale: n, vScale: o } = t,
@@ -3416,7 +3519,7 @@
3416
  for (h = 0, c = s; h < c; ++h)
3417
  (d = h + i),
3418
  (u = e[d]),
3419
- (l[h] = { x: n.parse(lt(u, a), d), y: o.parse(lt(u, r), d) });
3420
  return l;
3421
  }
3422
  getParsed(t) {
@@ -3429,7 +3532,7 @@
3429
  const s = this.chart,
3430
  n = this._cachedMeta,
3431
  o = e[t.axis];
3432
- return xs({ keys: ms(s, !0), values: e._stacks[t.axis] }, o, n.index, {
3433
  mode: i,
3434
  });
3435
  }
@@ -3437,7 +3540,7 @@
3437
  const n = i[e.axis];
3438
  let o = null === n ? NaN : n;
3439
  const a = s && i._stacks[e.axis];
3440
- s && a && ((s.values = a), (o = xs(s, n, this._cachedMeta.index))),
3441
  (t.min = Math.min(t.min, o)),
3442
  (t.max = Math.max(t.max, o));
3443
  }
@@ -3445,16 +3548,16 @@
3445
  const i = this._cachedMeta,
3446
  s = i._parsed,
3447
  n = i._sorted && t === i.iScale,
3448
- o = s.length,
3449
- a = this._getOtherScale(t),
3450
- r = ((t, e, i) =>
3451
- t && !e.hidden && e._stacked && { keys: ms(i, !0), values: null })(
3452
  e,
3453
  i,
3454
  this.chart
3455
  ),
3456
- l = { min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY },
3457
- { min: h, max: c } = (function (t) {
3458
  const {
3459
  min: e,
3460
  max: i,
@@ -3465,32 +3568,32 @@
3465
  min: s ? e : Number.NEGATIVE_INFINITY,
3466
  max: n ? i : Number.POSITIVE_INFINITY,
3467
  };
3468
- })(a);
3469
- let d, u;
3470
- function f() {
3471
- u = s[d];
3472
- const e = u[a.axis];
3473
- return !X(u[t.axis]) || h > e || c < e;
3474
  }
3475
  for (
3476
- d = 0;
3477
- d < o && (f() || (this.updateRangeFromParsed(l, t, u, r), !n));
3478
- ++d
3479
  );
3480
  if (n)
3481
- for (d = o - 1; d >= 0; --d)
3482
- if (!f()) {
3483
- this.updateRangeFromParsed(l, t, u, r);
3484
  break;
3485
  }
3486
- return l;
3487
  }
3488
  getAllParsedValues(t) {
3489
  const e = this._cachedMeta._parsed,
3490
  i = [];
3491
- let s, n, o;
3492
  for (s = 0, n = e.length; s < n; ++s)
3493
- (o = e[s][t.axis]), X(o) && i.push(o);
3494
  return i;
3495
  }
3496
  getMaxOverflow() {
@@ -3510,20 +3613,20 @@
3510
  const e = this._cachedMeta;
3511
  this.update(t || "default"),
3512
  (e._clip = (function (t) {
3513
- let e, i, s, n;
3514
  return (
3515
- U(t)
3516
- ? ((e = t.top), (i = t.right), (s = t.bottom), (n = t.left))
3517
- : (e = i = s = n = t),
3518
- { top: e, right: i, bottom: s, left: n, disabled: !1 === t }
3519
  );
3520
  })(
3521
- K(
3522
  this.options.clip,
3523
  (function (t, e, i) {
3524
  if (!1 === i) return !1;
3525
- const s = ps(t, i),
3526
- n = ps(e, i);
3527
  return {
3528
  top: n.end,
3529
  right: s.end,
@@ -3566,7 +3669,7 @@
3566
  (n =
3567
  e.$context ||
3568
  (e.$context = (function (t, e, i) {
3569
- return Ye(t, {
3570
  active: !1,
3571
  dataIndex: e,
3572
  parsed: void 0,
@@ -3584,7 +3687,7 @@
3584
  (n =
3585
  this.$context ||
3586
  (this.$context = (function (t, e) {
3587
- return Ye(t, {
3588
  active: !1,
3589
  dataset: void 0,
3590
  datasetIndex: e,
@@ -3608,16 +3711,16 @@
3608
  n = this._cachedDataOpts,
3609
  o = t + "-" + e,
3610
  a = n[o],
3611
- r = this.enableOptionSharing && ct(i);
3612
- if (a) return Ss(a, r);
3613
  const l = this.chart.config,
3614
  h = l.datasetElementScopeKeys(this._type, t),
3615
  c = s ? [`${t}Hover`, "hover", t, ""] : [t, ""],
3616
  d = l.getOptionScopes(this.getDataset(), h),
3617
- u = Object.keys(bt.elements[t]),
3618
  f = l.resolveNamedOptions(d, u, () => this.getContext(i, s), c);
3619
  return (
3620
- f.$shared && ((f.$shared = r), (n[o] = Object.freeze(Ss(f, r)))), f
3621
  );
3622
  }
3623
  _resolveAnimations(t, e, i) {
@@ -3633,7 +3736,7 @@
3633
  o = s.getOptionScopes(this.getDataset(), n);
3634
  r = s.createResolver(o, this.getContext(t, i, e));
3635
  }
3636
- const l = new gs(s, r && r.animations);
3637
  return r && r._cacheable && (n[o] = Object.freeze(l)), l;
3638
  }
3639
  getSharedOptions(t) {
@@ -3643,13 +3746,23 @@
3643
  );
3644
  }
3645
  includeOptions(t, e) {
3646
- return !e || ks(t) || this.chart._animationsDisabled;
 
 
 
 
 
 
 
 
 
 
3647
  }
3648
  updateElement(t, e, i, s) {
3649
- ks(s) ? Object.assign(t, i) : this._resolveAnimations(e, s).update(t, i);
3650
  }
3651
  updateSharedOptions(t, e, i) {
3652
- t && !ks(e) && this._resolveAnimations(void 0, e).update(t, i);
3653
  }
3654
  _setStyle(t, e, i, s) {
3655
  t.active = s;
@@ -3703,7 +3816,7 @@
3703
  const i = this._cachedMeta;
3704
  if (this._parsing) {
3705
  const s = i._parsed.splice(t, e);
3706
- i._stacked && Ms(i, s);
3707
  }
3708
  i.data.splice(t, e);
3709
  }
@@ -3734,10 +3847,10 @@
3734
  this._sync(["_insertElements", 0, arguments.length]);
3735
  }
3736
  }
3737
- (Ps.defaults = {}),
3738
- (Ps.prototype.datasetElementType = null),
3739
- (Ps.prototype.dataElementType = null);
3740
- class Ds {
3741
  constructor() {
3742
  (this.x = void 0),
3743
  (this.y = void 0),
@@ -3750,7 +3863,7 @@
3750
  return { x: e, y: i };
3751
  }
3752
  hasValue() {
3753
- return Tt(this.x) && Tt(this.y);
3754
  }
3755
  getProps(t, e) {
3756
  const i = this.$animations;
@@ -3764,9 +3877,9 @@
3764
  );
3765
  }
3766
  }
3767
- (Ds.defaults = {}), (Ds.defaultRoutes = void 0);
3768
- const Cs = {
3769
- values: (t) => (Y(t) ? t : "" + t),
3770
  numeric(t, e, i) {
3771
  if (0 === t) return "0";
3772
  const s = this.chart.options.locale;
@@ -3785,24 +3898,24 @@
3785
  return i;
3786
  })(t, i));
3787
  }
3788
- const a = Dt(Math.abs(o)),
3789
  r = Math.max(Math.min(-1 * Math.floor(a), 20), 0),
3790
  l = { notation: n, minimumFractionDigits: r, maximumFractionDigits: r };
3791
- return Object.assign(l, this.options.ticks.format), Ri(t, s, l);
3792
  },
3793
  logarithmic(t, e, i) {
3794
  if (0 === t) return "0";
3795
- const s = t / Math.pow(10, Math.floor(Dt(t)));
3796
  return 1 === s || 2 === s || 5 === s
3797
- ? Cs.numeric.call(this, t, e, i)
3798
  : "";
3799
  },
3800
  };
3801
- var Os = { formatters: Cs };
3802
- function As(t, e) {
3803
- const i = t.options.ticks,
3804
- s =
3805
- i.maxTicksLimit ||
3806
  (function (t) {
3807
  const e = t.options.offset,
3808
  i = t._tickSize(),
@@ -3810,7 +3923,7 @@
3810
  n = t._maxLength / i;
3811
  return Math.floor(Math.min(s, n));
3812
  })(t),
3813
- n = i.major.enabled
3814
  ? (function (t) {
3815
  const e = [];
3816
  let i, s;
@@ -3818,11 +3931,11 @@
3818
  return e;
3819
  })(e)
3820
  : [],
3821
- o = n.length,
3822
- a = n[0],
3823
- r = n[o - 1],
3824
- l = [];
3825
- if (o > s)
3826
  return (
3827
  (function (t, e, i, s) {
3828
  let n,
@@ -3830,10 +3943,10 @@
3830
  a = i[0];
3831
  for (s = Math.ceil(s), n = 0; n < t.length; n++)
3832
  n === a && (e.push(t[n]), o++, (a = i[o * s]));
3833
- })(e, l, n, o / s),
3834
- l
3835
  );
3836
- const h = (function (t, e, i) {
3837
  const s = (function (t) {
3838
  const e = t.length;
3839
  let i, s;
@@ -3844,39 +3957,39 @@
3844
  })(t),
3845
  n = e.length / i;
3846
  if (!s) return Math.max(n, 1);
3847
- const o = At(s);
3848
  for (let t = 0, e = o.length - 1; t < e; t++) {
3849
  const e = o[t];
3850
  if (e > n) return e;
3851
  }
3852
  return Math.max(n, 1);
3853
- })(n, e, s);
3854
- if (o > 0) {
3855
- let t, i;
3856
- const s = o > 1 ? Math.round((r - a) / (o - 1)) : null;
3857
- for (Ts(e, l, h, $(s) ? 0 : a - s, a), t = 0, i = o - 1; t < i; t++)
3858
- Ts(e, l, h, n[t], n[t + 1]);
3859
- return Ts(e, l, h, r, $(s) ? e.length : r + s), l;
3860
- }
3861
- return Ts(e, l, h), l;
3862
- }
3863
- function Ts(t, e, i, s, n) {
3864
- const o = K(s, 0),
3865
- a = Math.min(K(n, t.length), t.length);
3866
- let r,
3867
- l,
3868
  h,
3869
- c = 0;
 
3870
  for (
3871
- i = Math.ceil(i), n && ((r = n - s), (i = r / Math.floor(r / i))), h = o;
3872
- h < 0;
3873
 
3874
  )
3875
- c++, (h = Math.round(o + c * i));
3876
- for (l = Math.max(o, 0); l < a; l++)
3877
- l === h && (e.push(t[l]), c++, (h = Math.round(o + c * i)));
3878
  }
3879
- bt.set("scale", {
3880
  display: !0,
3881
  offset: !1,
3882
  reverse: !1,
@@ -3909,7 +4022,7 @@
3909
  autoSkip: !0,
3910
  autoSkipPadding: 3,
3911
  labelOffset: 0,
3912
- callback: Os.formatters.values,
3913
  minor: {},
3914
  major: {},
3915
  align: "center",
@@ -3919,11 +4032,11 @@
3919
  backdropPadding: 2,
3920
  },
3921
  }),
3922
- bt.route("scale.ticks", "color", "", "color"),
3923
- bt.route("scale.grid", "color", "", "borderColor"),
3924
- bt.route("scale.grid", "borderColor", "", "borderColor"),
3925
- bt.route("scale.title", "color", "", "color"),
3926
- bt.describe("scale", {
3927
  _fallback: !1,
3928
  _scriptable: (t) =>
3929
  !t.startsWith("before") &&
@@ -3932,13 +4045,13 @@
3932
  "parser" !== t,
3933
  _indexable: (t) => "borderDash" !== t && "tickBorderDash" !== t,
3934
  }),
3935
- bt.describe("scales", { _fallback: "scale" }),
3936
- bt.describe("scale.ticks", {
3937
  _scriptable: (t) => "backdropPadding" !== t && "callback" !== t,
3938
  _indexable: (t) => "backdropPadding" !== t,
3939
  });
3940
- const Ls = (t, e, i) => ("top" === e || "left" === e ? t[e] + i : t[e] - i);
3941
- function Rs(t, e) {
3942
  const i = [],
3943
  s = t.length / e,
3944
  n = t.length;
@@ -3946,7 +4059,7 @@
3946
  for (; o < n; o += s) i.push(t[Math.floor(o)]);
3947
  return i;
3948
  }
3949
- function Es(t, e, i) {
3950
  const s = t.ticks.length,
3951
  n = Math.min(e, s - 1),
3952
  o = t._startPixel,
@@ -3969,24 +4082,24 @@
3969
  )
3970
  return h;
3971
  }
3972
- function Is(t) {
3973
  return t.drawTicks ? t.tickLength : 0;
3974
  }
3975
- function zs(t, e) {
3976
  if (!t.display) return 0;
3977
- const i = He(t.font, e),
3978
- s = Ne(t.padding);
3979
- return (Y(t.text) ? t.text.length : 1) * i.lineHeight + s.height;
3980
  }
3981
- function Fs(t, e, i) {
3982
- let n = s(t);
3983
  return (
3984
  ((i && "right" !== e) || (!i && "right" === e)) &&
3985
- (n = ((t) => ("left" === t ? "right" : "right" === t ? "left" : t))(n)),
3986
- n
3987
  );
3988
  }
3989
- class Bs extends Ds {
3990
  constructor(t) {
3991
  super(),
3992
  (this.id = t.id),
@@ -4051,26 +4164,26 @@
4051
  _suggestedMax: s,
4052
  } = this;
4053
  return (
4054
- (t = q(t, Number.POSITIVE_INFINITY)),
4055
- (e = q(e, Number.NEGATIVE_INFINITY)),
4056
- (i = q(i, Number.POSITIVE_INFINITY)),
4057
- (s = q(s, Number.NEGATIVE_INFINITY)),
4058
- { min: q(t, i), max: q(e, s), minDefined: X(t), maxDefined: X(e) }
4059
  );
4060
  }
4061
  getMinMax(t) {
4062
  let e,
4063
  { min: i, max: s, minDefined: n, maxDefined: o } = this.getUserBounds();
4064
  if (n && o) return { min: i, max: s };
4065
- const a = this.getMatchingVisibleMetas();
4066
- for (let r = 0, l = a.length; r < l; ++r)
4067
- (e = a[r].controller.getMinMax(this, t)),
4068
  n || (i = Math.min(i, e.min)),
4069
  o || (s = Math.max(s, e.max));
4070
  return (
4071
  (i = o && i > s ? s : i),
4072
  (s = n && i > s ? i : s),
4073
- { min: q(i, q(s, i)), max: q(s, q(i, s)) }
4074
  );
4075
  }
4076
  getPadding() {
@@ -4097,7 +4210,7 @@
4097
  (this._cache = {}), (this._dataLimitsCached = !1);
4098
  }
4099
  beforeUpdate() {
4100
- J(this.options.beforeUpdate, [this]);
4101
  }
4102
  update(t, e, i) {
4103
  const { beginAtZero: s, grace: n, ticks: o } = this.options,
@@ -4121,20 +4234,22 @@
4121
  (this.beforeDataLimits(),
4122
  this.determineDataLimits(),
4123
  this.afterDataLimits(),
4124
- (this._range = $e(this, n, s)),
4125
  (this._dataLimitsCached = !0)),
4126
  this.beforeBuildTicks(),
4127
  (this.ticks = this.buildTicks() || []),
4128
  this.afterBuildTicks();
4129
  const r = a < this.ticks.length;
4130
- this._convertTicksToLabels(r ? Rs(this.ticks, a) : this.ticks),
4131
  this.configure(),
4132
  this.beforeCalculateLabelRotation(),
4133
  this.calculateLabelRotation(),
4134
  this.afterCalculateLabelRotation(),
4135
  o.display &&
4136
  (o.autoSkip || "auto" === o.source) &&
4137
- ((this.ticks = As(this, this.ticks)), (this._labelSizes = null)),
 
 
4138
  r && this._convertTicksToLabels(this.ticks),
4139
  this.beforeFit(),
4140
  this.fit(),
@@ -4155,10 +4270,10 @@
4155
  (this._alignToPixels = this.options.alignToPixels);
4156
  }
4157
  afterUpdate() {
4158
- J(this.options.afterUpdate, [this]);
4159
  }
4160
  beforeSetDimensions() {
4161
- J(this.options.beforeSetDimensions, [this]);
4162
  }
4163
  setDimensions() {
4164
  this.isHorizontal()
@@ -4174,11 +4289,11 @@
4174
  (this.paddingBottom = 0);
4175
  }
4176
  afterSetDimensions() {
4177
- J(this.options.afterSetDimensions, [this]);
4178
  }
4179
  _callHooks(t) {
4180
  this.chart.notifyPlugins(t, this.getContext()),
4181
- J(this.options[t], [this]);
4182
  }
4183
  beforeDataLimits() {
4184
  this._callHooks("beforeDataLimits");
@@ -4197,19 +4312,19 @@
4197
  this._callHooks("afterBuildTicks");
4198
  }
4199
  beforeTickToLabelConversion() {
4200
- J(this.options.beforeTickToLabelConversion, [this]);
4201
  }
4202
  generateTickLabels(t) {
4203
  const e = this.options.ticks;
4204
  let i, s, n;
4205
  for (i = 0, s = t.length; i < s; i++)
4206
- (n = t[i]), (n.label = J(e.callback, [n.value, i, t], this));
4207
  }
4208
  afterTickToLabelConversion() {
4209
- J(this.options.afterTickToLabelConversion, [this]);
4210
  }
4211
  beforeCalculateLabelRotation() {
4212
- J(this.options.beforeCalculateLabelRotation, [this]);
4213
  }
4214
  calculateLabelRotation() {
4215
  const t = this.options,
@@ -4232,30 +4347,31 @@
4232
  const h = this._getLabelSizes(),
4233
  c = h.widest.width,
4234
  d = h.highest.height,
4235
- u = jt(this.chart.width - c, 0, this.maxWidth);
4236
  (o = t.offset ? this.maxWidth / i : u / (i - 1)),
4237
  c + 6 > o &&
4238
  ((o = u / (i - (t.offset ? 0.5 : 1))),
4239
  (a =
4240
  this.maxHeight -
4241
- Is(t.grid) -
4242
  e.padding -
4243
- zs(t.title, this.chart.options.font)),
4244
  (r = Math.sqrt(c * c + d * d)),
4245
- (l = zt(
4246
  Math.min(
4247
- Math.asin(jt((h.highest.height + 6) / o, -1, 1)),
4248
- Math.asin(jt(a / r, -1, 1)) - Math.asin(jt(d / r, -1, 1))
4249
  )
4250
  )),
4251
  (l = Math.max(s, Math.min(n, l)))),
4252
  (this.labelRotation = l);
4253
  }
4254
  afterCalculateLabelRotation() {
4255
- J(this.options.afterCalculateLabelRotation, [this]);
4256
  }
 
4257
  beforeFit() {
4258
- J(this.options.beforeFit, [this]);
4259
  }
4260
  fit() {
4261
  const t = { width: 0, height: 0 },
@@ -4266,11 +4382,11 @@
4266
  o = this._isVisible(),
4267
  a = this.isHorizontal();
4268
  if (o) {
4269
- const o = zs(s, e.options.font);
4270
  if (
4271
  (a
4272
- ? ((t.width = this.maxWidth), (t.height = Is(n) + o))
4273
- : ((t.height = this.maxHeight), (t.width = Is(n) + o)),
4274
  i.display && this.ticks.length)
4275
  ) {
4276
  const {
@@ -4280,7 +4396,7 @@
4280
  highest: o,
4281
  } = this._getLabelSizes(),
4282
  r = 2 * i.padding,
4283
- l = It(this.labelRotation),
4284
  h = Math.cos(l),
4285
  c = Math.sin(l);
4286
  if (a) {
@@ -4322,7 +4438,7 @@
4322
  ? (d = e.width)
4323
  : "end" === n
4324
  ? (c = t.width)
4325
- : ((c = t.width / 2), (d = e.width / 2)),
4326
  (this.paddingLeft = Math.max(
4327
  ((c - a + o) * this.width) / (this.width - a),
4328
  0
@@ -4355,7 +4471,7 @@
4355
  )));
4356
  }
4357
  afterFit() {
4358
- J(this.options.afterFit, [this]);
4359
  }
4360
  isHorizontal() {
4361
  const { axis: t, position: e } = this.options;
@@ -4365,16 +4481,16 @@
4365
  return this.options.fullSize;
4366
  }
4367
  _convertTicksToLabels(t) {
4368
- let e, i;
4369
  for (
4370
  this.beforeTickToLabelConversion(),
4371
  this.generateTickLabels(t),
4372
  e = 0,
4373
- i = t.length;
4374
- e < i;
4375
  e++
4376
  )
4377
- $(t[e].label) && (t.splice(e, 1), i--, e--);
4378
  this.afterTickToLabelConversion();
4379
  }
4380
  _getLabelSizes() {
@@ -4382,47 +4498,47 @@
4382
  if (!t) {
4383
  const e = this.options.ticks.sampleSize;
4384
  let i = this.ticks;
4385
- e < i.length && (i = Rs(i, e)),
4386
  (this._labelSizes = t = this._computeLabelSizes(i, i.length));
4387
  }
4388
  return t;
4389
  }
4390
  _computeLabelSizes(t, e) {
4391
- const { ctx: i, _longestTextCache: s } = this,
4392
- n = [],
4393
- o = [];
4394
- let a,
4395
- r,
4396
- l,
4397
  h,
4398
  c,
4399
- d,
4400
  u,
4401
  f,
4402
  g,
4403
  p,
4404
  m,
4405
- x = 0,
4406
- b = 0;
4407
- for (a = 0; a < e; ++a) {
 
 
 
4408
  if (
4409
- ((h = t[a].label),
4410
- (c = this._resolveTickFontOptions(a)),
4411
- (i.font = d = c.string),
4412
- (u = s[d] = s[d] || { data: {}, gc: [] }),
4413
- (f = c.lineHeight),
4414
- (g = p = 0),
4415
- $(h) || Y(h))
4416
  ) {
4417
- if (Y(h))
4418
- for (r = 0, l = h.length; r < l; ++r)
4419
- (m = h[r]),
4420
- $(m) || Y(m) || ((g = Xt(i, u.data, u.gc, g, m)), (p += f));
4421
- } else (g = Xt(i, u.data, u.gc, g, h)), (p = f);
4422
- n.push(g), o.push(p), (x = Math.max(g, x)), (b = Math.max(p, b));
4423
  }
4424
  !(function (t, e) {
4425
- Q(t, (t) => {
4426
  const i = t.gc,
4427
  s = i.length / 2;
4428
  let n;
@@ -4431,17 +4547,17 @@
4431
  i.splice(0, s);
4432
  }
4433
  });
4434
- })(s, e);
4435
- const _ = n.indexOf(x),
4436
- y = o.indexOf(b),
4437
- v = (t) => ({ width: n[t] || 0, height: o[t] || 0 });
4438
  return {
4439
- first: v(0),
4440
- last: v(e - 1),
4441
- widest: v(_),
4442
- highest: v(y),
4443
- widths: n,
4444
- heights: o,
4445
  };
4446
  }
4447
  getLabelForValue(t) {
@@ -4460,7 +4576,7 @@
4460
  getPixelForDecimal(t) {
4461
  this._reversePixels && (t = 1 - t);
4462
  const e = this._startPixel + t * this._length;
4463
- return $t(this._alignToPixels ? Kt(this.chart, e, 0) : e);
4464
  }
4465
  getDecimalForPixel(t) {
4466
  const e = (t - this._startPixel) / this._length;
@@ -4480,13 +4596,13 @@
4480
  return (
4481
  i.$context ||
4482
  (i.$context = (function (t, e, i) {
4483
- return Ye(t, { tick: i, index: e, type: "tick" });
4484
  })(this.getContext(), t, i))
4485
  );
4486
  }
4487
  return (
4488
  this.$context ||
4489
- (this.$context = Ye(this.chart.getContext(), {
4490
  scale: this,
4491
  type: "scale",
4492
  }))
@@ -4494,7 +4610,7 @@
4494
  }
4495
  _tickSize() {
4496
  const t = this.options.ticks,
4497
- e = It(this.labelRotation),
4498
  i = Math.abs(Math.cos(e)),
4499
  s = Math.abs(Math.sin(e)),
4500
  n = this._getLabelSizes(),
@@ -4517,112 +4633,110 @@
4517
  const e = this.axis,
4518
  i = this.chart,
4519
  s = this.options,
4520
- { grid: n, position: o } = s,
4521
- a = n.offset,
4522
- r = this.isHorizontal(),
4523
- l = this.ticks.length + (a ? 1 : 0),
4524
- h = Is(n),
4525
- c = [],
4526
- d = n.setContext(this.getContext()),
4527
- u = d.drawBorder ? d.borderWidth : 0,
4528
- f = u / 2,
4529
- g = function (t) {
4530
- return Kt(i, t, u);
4531
  };
4532
- let p, m, x, b, _, y, v, w, M, k, S, P;
4533
- if ("top" === o)
4534
- (p = g(this.bottom)),
4535
- (y = this.bottom - h),
4536
- (w = p - f),
4537
- (k = g(t.top) + f),
4538
- (P = t.bottom);
4539
- else if ("bottom" === o)
4540
- (p = g(this.top)),
4541
- (k = t.top),
4542
- (P = g(t.bottom) - f),
4543
- (y = p + f),
4544
- (w = this.top + h);
4545
- else if ("left" === o)
4546
- (p = g(this.right)),
4547
- (_ = this.right - h),
4548
- (v = p - f),
4549
- (M = g(t.left) + f),
4550
- (S = t.right);
4551
- else if ("right" === o)
4552
- (p = g(this.left)),
4553
- (M = t.left),
4554
- (S = g(t.right) - f),
4555
- (_ = p + f),
4556
- (v = this.left + h);
4557
  else if ("x" === e) {
4558
- if ("center" === o) p = g((t.top + t.bottom) / 2 + 0.5);
4559
- else if (U(o)) {
4560
- const t = Object.keys(o)[0],
4561
- e = o[t];
4562
- p = g(this.chart.scales[t].getPixelForValue(e));
4563
  }
4564
- (k = t.top), (P = t.bottom), (y = p + f), (w = y + h);
4565
  } else if ("y" === e) {
4566
- if ("center" === o) p = g((t.left + t.right) / 2);
4567
- else if (U(o)) {
4568
- const t = Object.keys(o)[0],
4569
- e = o[t];
4570
- p = g(this.chart.scales[t].getPixelForValue(e));
4571
  }
4572
- (_ = p - f), (v = _ - h), (M = t.left), (S = t.right);
4573
  }
4574
- const D = K(s.ticks.maxTicksLimit, l),
4575
- C = Math.max(1, Math.ceil(l / D));
4576
- for (m = 0; m < l; m += C) {
4577
- const t = n.setContext(this.getContext(m)),
4578
  e = t.lineWidth,
4579
  s = t.color,
4580
- o = n.borderDash || [],
4581
- l = t.borderDashOffset,
4582
- h = t.tickWidth,
4583
- d = t.tickColor,
4584
- u = t.tickBorderDash || [],
4585
  f = t.tickBorderDashOffset;
4586
- (x = Es(this, m, a)),
4587
- void 0 !== x &&
4588
- ((b = Kt(i, x, e)),
4589
- r ? (_ = v = M = S = b) : (y = w = k = P = b),
4590
- c.push({
4591
- tx1: _,
4592
- ty1: y,
4593
- tx2: v,
4594
- ty2: w,
4595
- x1: M,
4596
- y1: k,
4597
- x2: S,
4598
- y2: P,
4599
  width: e,
4600
  color: s,
4601
- borderDash: o,
4602
- borderDashOffset: l,
4603
- tickWidth: h,
4604
- tickColor: d,
4605
- tickBorderDash: u,
4606
  tickBorderDashOffset: f,
4607
  }));
4608
  }
4609
- return (this._ticksLength = l), (this._borderValue = p), c;
4610
  }
4611
  _computeLabelItems(t) {
4612
  const e = this.axis,
4613
  i = this.options,
4614
- { position: s, ticks: n } = i,
4615
- o = this.isHorizontal(),
4616
- a = this.ticks,
4617
- { align: r, crossAlign: l, padding: h, mirror: c } = n,
4618
- d = Is(i.grid),
4619
- u = d + h,
4620
- f = c ? -h : u,
4621
- g = -It(this.labelRotation),
4622
- p = [];
4623
- let m,
4624
- x,
4625
- b,
4626
  _,
4627
  y,
4628
  v,
@@ -4632,81 +4746,95 @@
4632
  S,
4633
  P,
4634
  D,
4635
- C = "middle";
4636
- if ("top" === s)
4637
- (v = this.bottom - f), (w = this._getXAxisLabelAlignment());
4638
- else if ("bottom" === s)
4639
- (v = this.top + f), (w = this._getXAxisLabelAlignment());
4640
- else if ("left" === s) {
4641
- const t = this._getYAxisLabelAlignment(d);
4642
- (w = t.textAlign), (y = t.x);
4643
- } else if ("right" === s) {
4644
- const t = this._getYAxisLabelAlignment(d);
4645
- (w = t.textAlign), (y = t.x);
 
 
4646
  } else if ("x" === e) {
4647
- if ("center" === s) v = (t.top + t.bottom) / 2 + u;
4648
- else if (U(s)) {
4649
- const t = Object.keys(s)[0],
4650
- e = s[t];
4651
- v = this.chart.scales[t].getPixelForValue(e) + u;
4652
  }
4653
- w = this._getXAxisLabelAlignment();
4654
  } else if ("y" === e) {
4655
- if ("center" === s) y = (t.left + t.right) / 2 - u;
4656
- else if (U(s)) {
4657
- const t = Object.keys(s)[0],
4658
- e = s[t];
4659
- y = this.chart.scales[t].getPixelForValue(e);
4660
  }
4661
- w = this._getYAxisLabelAlignment(d).textAlign;
4662
  }
4663
  "y" === e &&
4664
- ("start" === r ? (C = "top") : "end" === r && (C = "bottom"));
4665
- const O = this._getLabelSizes();
4666
- for (m = 0, x = a.length; m < x; ++m) {
4667
- (b = a[m]), (_ = b.label);
4668
- const t = n.setContext(this.getContext(m));
4669
- (M = this.getPixelForTick(m) + n.labelOffset),
4670
- (k = this._resolveTickFontOptions(m)),
4671
- (S = k.lineHeight),
4672
- (P = Y(_) ? _.length : 1);
4673
- const e = P / 2,
4674
  i = t.color,
4675
- r = t.textStrokeColor,
4676
  h = t.textStrokeWidth;
4677
- let d;
 
4678
  if (
4679
- (o
4680
- ? ((y = M),
4681
- (D =
4682
- "top" === s
4683
- ? "near" === l || 0 !== g
4684
- ? -P * S + S / 2
4685
- : "center" === l
4686
- ? -O.highest.height / 2 - e * S + S
4687
- : -O.highest.height + S / 2
4688
- : "near" === l || 0 !== g
4689
- ? S / 2
4690
- : "center" === l
4691
- ? O.highest.height / 2 - e * S
4692
- : O.highest.height - P * S),
4693
- c && (D *= -1))
4694
- : ((v = M), (D = ((1 - P) * S) / 2)),
 
 
 
 
 
 
 
 
 
 
 
4695
  t.showLabelBackdrop)
4696
  ) {
4697
- const e = Ne(t.backdropPadding),
4698
- i = O.heights[m],
4699
- s = O.widths[m];
4700
- let n = v + D - e.top,
4701
- o = y - e.left;
4702
- switch (C) {
4703
  case "middle":
4704
  n -= i / 2;
4705
  break;
4706
  case "bottom":
4707
  n -= i;
4708
  }
4709
- switch (w) {
4710
  case "center":
4711
  o -= s / 2;
4712
  break;
@@ -4721,28 +4849,32 @@
4721
  color: t.backdropColor,
4722
  };
4723
  }
4724
- p.push({
4725
- rotation: g,
4726
- label: _,
4727
- font: k,
4728
  color: i,
4729
- strokeColor: r,
4730
  strokeWidth: h,
4731
- textOffset: D,
4732
- textAlign: w,
4733
- textBaseline: C,
4734
- translation: [y, v],
4735
  backdrop: d,
4736
  });
4737
  }
4738
- return p;
4739
  }
4740
  _getXAxisLabelAlignment() {
4741
  const { position: t, ticks: e } = this.options;
4742
- if (-It(this.labelRotation)) return "top" === t ? "left" : "right";
4743
  let i = "center";
4744
  return (
4745
- "start" === e.align ? (i = "left") : "end" === e.align && (i = "right"),
 
 
 
 
4746
  i
4747
  );
4748
  }
@@ -4868,11 +5000,11 @@
4868
  a = this._borderValue;
4869
  let r, l, h, c;
4870
  this.isHorizontal()
4871
- ? ((r = Kt(t, this.left, n) - n / 2),
4872
- (l = Kt(t, this.right, o) + o / 2),
4873
  (h = c = a))
4874
- : ((h = Kt(t, this.top, n) - n / 2),
4875
- (c = Kt(t, this.bottom, o) + o / 2),
4876
  (r = l = a)),
4877
  e.save(),
4878
  (e.lineWidth = s.borderWidth),
@@ -4887,7 +5019,7 @@
4887
  if (!this.options.ticks.display) return;
4888
  const e = this.ctx,
4889
  i = this._computeLabelArea();
4890
- i && Qt(e, i);
4891
  const s =
4892
  this._labelItems || (this._labelItems = this._computeLabelItems(t));
4893
  let n, o;
@@ -4903,29 +5035,29 @@
4903
  t.backdrop.width,
4904
  t.backdrop.height
4905
  )),
4906
- se(e, o, 0, t.textOffset, i, t);
4907
  }
4908
- i && te(e);
4909
  }
4910
  drawTitle() {
4911
  const {
4912
  ctx: t,
4913
- options: { position: e, title: i, reverse: s },
4914
  } = this;
4915
  if (!i.display) return;
4916
- const o = He(i.font),
4917
- a = Ne(i.padding),
4918
- r = i.align;
4919
- let l = o.lineHeight / 2;
4920
- "bottom" === e || "center" === e || U(e)
4921
- ? ((l += a.bottom),
4922
- Y(i.text) && (l += o.lineHeight * (i.text.length - 1)))
4923
- : (l += a.top);
4924
  const {
4925
- titleX: h,
4926
- titleY: c,
4927
- maxWidth: d,
4928
- rotation: u,
4929
  } = (function (t, e, i, s) {
4930
  const { top: o, left: a, bottom: r, right: l, chart: h } = t,
4931
  { chartArea: c, scales: d } = h;
@@ -4934,33 +5066,33 @@
4934
  g,
4935
  p = 0;
4936
  const m = r - o,
4937
- x = l - a;
4938
  if (t.isHorizontal()) {
4939
- if (((f = n(s, a, l)), U(i))) {
4940
  const t = Object.keys(i)[0],
4941
  s = i[t];
4942
  g = d[t].getPixelForValue(s) + m - e;
4943
  } else
4944
- g = "center" === i ? (c.bottom + c.top) / 2 + m - e : Ls(t, i, e);
4945
  u = l - a;
4946
  } else {
4947
- if (U(i)) {
4948
  const t = Object.keys(i)[0],
4949
  s = i[t];
4950
- f = d[t].getPixelForValue(s) - x + e;
4951
  } else
4952
- f = "center" === i ? (c.left + c.right) / 2 - x + e : Ls(t, i, e);
4953
- (g = n(s, r, o)), (p = "left" === i ? -kt : kt);
4954
  }
4955
  return { titleX: f, titleY: g, maxWidth: u, rotation: p };
4956
- })(this, l, e, r);
4957
- se(t, i.text, 0, 0, o, {
4958
  color: i.color,
4959
- maxWidth: d,
4960
- rotation: u,
4961
- textAlign: Fs(r, e, s),
4962
  textBaseline: "middle",
4963
- translation: [h, c],
4964
  });
4965
  }
4966
  draw(t) {
@@ -4974,8 +5106,8 @@
4974
  _layers() {
4975
  const t = this.options,
4976
  e = (t.ticks && t.ticks.z) || 0,
4977
- i = K(t.grid && t.grid.z, -1);
4978
- return this._isVisible() && this.draw === Bs.prototype.draw
4979
  ? [
4980
  {
4981
  z: i,
@@ -5017,14 +5149,14 @@
5017
  return s;
5018
  }
5019
  _resolveTickFontOptions(t) {
5020
- return He(this.options.ticks.setContext(this.getContext(t)).font);
5021
  }
5022
  _maxDigits() {
5023
  const t = this._resolveTickFontOptions(0).lineHeight;
5024
  return (this.isHorizontal() ? this.width : this.height) / t;
5025
  }
5026
  }
5027
- class Vs {
5028
  constructor(t, e, i) {
5029
  (this.type = t),
5030
  (this.scope = e),
@@ -5051,12 +5183,12 @@
5051
  n in s ||
5052
  ((s[n] = t),
5053
  (function (t, e, i) {
5054
- const s = nt(Object.create(null), [
5055
- i ? bt.get(i) : {},
5056
- bt.get(e),
5057
  t.defaults,
5058
  ]);
5059
- bt.set(e, s),
5060
  t.defaultRoutes &&
5061
  (function (t, e) {
5062
  Object.keys(e).forEach((i) => {
@@ -5066,12 +5198,12 @@
5066
  a = e[i].split("."),
5067
  r = a.pop(),
5068
  l = a.join(".");
5069
- bt.route(o, n, l, r);
5070
  });
5071
  })(e, t.defaultRoutes);
5072
- t.descriptors && bt.describe(e, t.descriptors);
5073
  })(t, o, i),
5074
- this.override && bt.override(t.id, t.overrides)),
5075
  o
5076
  );
5077
  }
@@ -5083,15 +5215,15 @@
5083
  i = t.id,
5084
  s = this.scope;
5085
  i in e && delete e[i],
5086
- s && i in bt[s] && (delete bt[s][i], this.override && delete gt[i]);
5087
  }
5088
  }
5089
- var Ws = new (class {
5090
  constructor() {
5091
- (this.controllers = new Vs(Ps, "datasets", !0)),
5092
- (this.elements = new Vs(Ds, "elements")),
5093
- (this.plugins = new Vs(Object, "plugins")),
5094
- (this.scales = new Vs(Bs, "scales")),
5095
  (this._typedRegistries = [
5096
  this.controllers,
5097
  this.scales,
@@ -5145,15 +5277,15 @@
5145
  const s = i || this._getRegistryForType(e);
5146
  i || s.isForType(e) || (s === this.plugins && e.id)
5147
  ? this._exec(t, s, e)
5148
- : Q(e, (e) => {
5149
  const s = i || this._getRegistryForType(e);
5150
  this._exec(t, s, e);
5151
  });
5152
  });
5153
  }
5154
  _exec(t, e, i) {
5155
- const s = ht(t);
5156
- J(i["before" + s], [], i), e[t](i), J(i["after" + s], [], i);
5157
  }
5158
  _getRegistryForType(t) {
5159
  for (let e = 0; e < this._typedRegistries.length; e++) {
@@ -5169,7 +5301,7 @@
5169
  return s;
5170
  }
5171
  })();
5172
- class Ns {
5173
  constructor() {
5174
  this._init = [];
5175
  }
@@ -5190,12 +5322,12 @@
5190
  s = s || {};
5191
  for (const n of t) {
5192
  const t = n.plugin;
5193
- if (!1 === J(t[i], [e, s, n.options], t) && s.cancelable) return !1;
5194
  }
5195
  return !0;
5196
  }
5197
  invalidate() {
5198
- $(this._cache) ||
5199
  ((this._oldCache = this._cache), (this._cache = void 0));
5200
  }
5201
  _descriptors(t) {
@@ -5205,29 +5337,33 @@
5205
  }
5206
  _createDescriptors(t, e) {
5207
  const i = t && t.config,
5208
- s = K(i.options && i.options.plugins, {}),
5209
  n = (function (t) {
5210
- const e = [],
5211
- i = Object.keys(Ws.plugins.items);
5212
- for (let t = 0; t < i.length; t++) e.push(Ws.getPlugin(i[t]));
5213
- const s = t.plugins || [];
5214
- for (let t = 0; t < s.length; t++) {
5215
- const i = s[t];
5216
- -1 === e.indexOf(i) && e.push(i);
 
5217
  }
5218
- return e;
5219
  })(i);
5220
  return !1 !== s || e
5221
- ? (function (t, e, i, s) {
5222
- const n = [],
5223
- o = t.getContext();
5224
- for (let a = 0; a < e.length; a++) {
5225
- const r = e[a],
5226
- l = Hs(i[r.id], s);
5227
  null !== l &&
5228
- n.push({ plugin: r, options: js(t.config, r, l, o) });
 
 
 
5229
  }
5230
- return n;
5231
  })(t, n, s, e)
5232
  : [];
5233
  }
@@ -5239,20 +5375,23 @@
5239
  this._notify(s(e, i), t, "stop"), this._notify(s(i, e), t, "start");
5240
  }
5241
  }
5242
- function Hs(t, e) {
5243
  return e || !1 !== t ? (!0 === t ? {} : t) : null;
5244
  }
5245
- function js(t, e, i, s) {
5246
- const n = t.pluginScopeKeys(e),
5247
- o = t.getOptionScopes(i, n);
5248
- return t.createResolver(o, s, [""], {
5249
- scriptable: !1,
5250
- indexable: !1,
5251
- allKeys: !0,
5252
- });
 
 
 
5253
  }
5254
- function $s(t, e) {
5255
- const i = bt.datasets[t] || {};
5256
  return (
5257
  ((e.datasets || {})[t] || {}).indexAxis ||
5258
  e.indexAxis ||
@@ -5260,7 +5399,7 @@
5260
  "x"
5261
  );
5262
  }
5263
- function Ys(t, e) {
5264
  return "x" === t || "y" === t
5265
  ? t
5266
  : e.axis ||
@@ -5272,19 +5411,19 @@
5272
  t.charAt(0).toLowerCase();
5273
  var i;
5274
  }
5275
- function Us(t) {
5276
  const e = t.options || (t.options = {});
5277
- (e.plugins = K(e.plugins, {})),
5278
  (e.scales = (function (t, e) {
5279
- const i = gt[t.type] || { scales: {} },
5280
  s = e.scales || {},
5281
- n = $s(t.type, e),
5282
- o = Object.create(null),
5283
- a = Object.create(null);
5284
  return (
5285
  Object.keys(s).forEach((t) => {
5286
  const e = s[t];
5287
- if (!U(e))
5288
  return console.error(
5289
  `Invalid scale configuration for scale: ${t}`
5290
  );
@@ -5292,18 +5431,18 @@
5292
  return console.warn(
5293
  `Ignoring resolver passed as options for scale: ${t}`
5294
  );
5295
- const r = Ys(t, e),
5296
- l = (function (t, e) {
5297
  return t === e ? "_index_" : "_value_";
5298
- })(r, n),
5299
- h = i.scales || {};
5300
- (o[r] = o[r] || t),
5301
- (a[t] = ot(Object.create(null), [{ axis: r }, e, h[r], h[l]]));
5302
  }),
5303
  t.data.datasets.forEach((i) => {
5304
  const n = i.type || t.type,
5305
- r = i.indexAxis || $s(n, e),
5306
- l = (gt[n] || {}).scales || {};
5307
  Object.keys(l).forEach((t) => {
5308
  const e = (function (t, e) {
5309
  let i = t;
@@ -5313,41 +5452,41 @@
5313
  : "_value_" === t && (i = "x" === e ? "y" : "x"),
5314
  i
5315
  );
5316
- })(t, r),
5317
- n = i[e + "AxisID"] || o[e] || e;
5318
- (a[n] = a[n] || Object.create(null)),
5319
- ot(a[n], [{ axis: e }, s[n], l[t]]);
5320
  });
5321
  }),
5322
- Object.keys(a).forEach((t) => {
5323
- const e = a[t];
5324
- ot(e, [bt.scales[e.type], bt.scale]);
5325
  }),
5326
- a
5327
  );
5328
  })(t, e));
5329
  }
5330
- function Xs(t) {
5331
  return (
5332
  ((t = t || {}).datasets = t.datasets || []),
5333
  (t.labels = t.labels || []),
5334
  t
5335
  );
5336
  }
5337
- const qs = new Map(),
5338
- Ks = new Set();
5339
- function Gs(t, e) {
5340
- let i = qs.get(t);
5341
- return i || ((i = e()), qs.set(t, i), Ks.add(i)), i;
5342
  }
5343
- const Zs = (t, e, i) => {
5344
- const s = lt(e, i);
5345
  void 0 !== s && t.add(s);
5346
  };
5347
- class Js {
5348
  constructor(t) {
5349
  (this._config = (function (t) {
5350
- return ((t = t || {}).data = Xs(t.data)), Us(t), t;
5351
  })(t)),
5352
  (this._scopeCache = new Map()),
5353
  (this._resolverCache = new Map());
@@ -5365,7 +5504,7 @@
5365
  return this._config.data;
5366
  }
5367
  set data(t) {
5368
- this._config.data = Xs(t);
5369
  }
5370
  get options() {
5371
  return this._config.options;
@@ -5378,28 +5517,28 @@
5378
  }
5379
  update() {
5380
  const t = this._config;
5381
- this.clearCache(), Us(t);
5382
  }
5383
  clearCache() {
5384
  this._scopeCache.clear(), this._resolverCache.clear();
5385
  }
5386
  datasetScopeKeys(t) {
5387
- return Gs(t, () => [[`datasets.${t}`, ""]]);
5388
  }
5389
  datasetAnimationScopeKeys(t, e) {
5390
- return Gs(`${t}.transition.${e}`, () => [
5391
  [`datasets.${t}.transitions.${e}`, `transitions.${e}`],
5392
  [`datasets.${t}`, ""],
5393
  ]);
5394
  }
5395
  datasetElementScopeKeys(t, e) {
5396
- return Gs(`${t}-${e}`, () => [
5397
  [`datasets.${t}.elements.${e}`, `datasets.${t}`, `elements.${e}`, ""],
5398
  ]);
5399
  }
5400
  pluginScopeKeys(t) {
5401
  const e = t.id;
5402
- return Gs(`${this.type}-plugin-${e}`, () => [
5403
  [`plugins.${e}`, ...(t.additionalOptionScopes || [])],
5404
  ]);
5405
  }
@@ -5415,102 +5554,102 @@
5415
  if (a) return a;
5416
  const r = new Set();
5417
  e.forEach((e) => {
5418
- t && (r.add(t), e.forEach((e) => Zs(r, t, e))),
5419
- e.forEach((t) => Zs(r, s, t)),
5420
- e.forEach((t) => Zs(r, gt[n] || {}, t)),
5421
- e.forEach((t) => Zs(r, bt, t)),
5422
- e.forEach((t) => Zs(r, pt, t));
5423
  });
5424
  const l = Array.from(r);
5425
  return (
5426
  0 === l.length && l.push(Object.create(null)),
5427
- Ks.has(e) && o.set(e, l),
5428
  l
5429
  );
5430
  }
5431
  chartOptionScopes() {
5432
  const { options: t, type: e } = this;
5433
- return [t, gt[e] || {}, bt.datasets[e] || {}, { type: e }, bt, pt];
5434
  }
5435
- resolveNamedOptions(t, e, i, s = [""]) {
5436
- const n = { $shared: !0 },
5437
- { resolver: o, subPrefixes: a } = Qs(this._resolverCache, t, s);
5438
- let r = o;
5439
  if (
5440
  (function (t, e) {
5441
- const { isScriptable: i, isIndexable: s } = ri(t);
5442
- for (const n of e) {
5443
- const e = i(n),
5444
- o = s(n),
5445
- a = (o || e) && t[n];
5446
- if ((e && (dt(a) || tn(a))) || (o && Y(a))) return !0;
5447
  }
5448
  return !1;
5449
- })(o, e)
5450
  ) {
5451
- n.$shared = !1;
5452
- r = ai(o, (i = dt(i) ? i() : i), this.createResolver(t, i, a));
5453
  }
5454
- for (const t of e) n[t] = r[t];
5455
- return n;
5456
  }
5457
  createResolver(t, e, i = [""], s) {
5458
- const { resolver: n } = Qs(this._resolverCache, t, i);
5459
- return U(e) ? ai(n, e, void 0, s) : n;
5460
  }
5461
  }
5462
- function Qs(t, e, i) {
5463
  let s = t.get(e);
5464
  s || ((s = new Map()), t.set(e, s));
5465
  const n = i.join();
5466
  let o = s.get(n);
5467
  if (!o) {
5468
  (o = {
5469
- resolver: oi(e, i),
5470
  subPrefixes: i.filter((t) => !t.toLowerCase().includes("hover")),
5471
  }),
5472
  s.set(n, o);
5473
  }
5474
  return o;
5475
  }
5476
- const tn = (t) =>
5477
- U(t) && Object.getOwnPropertyNames(t).reduce((e, i) => e || dt(t[i]), !1);
5478
- const en = ["top", "bottom", "left", "right", "chartArea"];
5479
- function sn(t, e) {
5480
- return "top" === t || "bottom" === t || (-1 === en.indexOf(t) && "x" === e);
5481
  }
5482
- function nn(t, e) {
5483
  return function (i, s) {
5484
  return i[t] === s[t] ? i[e] - s[e] : i[t] - s[t];
5485
  };
5486
  }
5487
- function on(t) {
5488
  const e = t.chart,
5489
  i = e.options.animation;
5490
- e.notifyPlugins("afterRender"), J(i && i.onComplete, [t], e);
5491
  }
5492
- function an(t) {
5493
  const e = t.chart,
5494
  i = e.options.animation;
5495
- J(i && i.onProgress, [t], e);
5496
  }
5497
- function rn(t) {
5498
  return (
5499
- ge() && "string" == typeof t
5500
  ? (t = document.getElementById(t))
5501
  : t && t.length && (t = t[0]),
5502
  t && t.canvas && (t = t.canvas),
5503
  t
5504
  );
5505
  }
5506
- const ln = {},
5507
- hn = (t) => {
5508
- const e = rn(t);
5509
- return Object.values(ln)
5510
  .filter((t) => t.canvas === e)
5511
  .pop();
5512
  };
5513
- function cn(t, e, i) {
5514
  const s = Object.keys(t);
5515
  for (const n of s) {
5516
  const s = +n;
@@ -5520,30 +5659,32 @@
5520
  }
5521
  }
5522
  }
5523
- class dn {
5524
- constructor(t, e) {
5525
- const s = (this.config = new Js(e)),
5526
- n = rn(t),
5527
- o = hn(n);
5528
  if (o)
5529
  throw new Error(
5530
  "Canvas is already in use. Chart with ID '" +
5531
  o.id +
5532
- "' must be destroyed before the canvas can be reused."
 
 
5533
  );
5534
- const r = s.createResolver(s.chartOptionScopes(), this.getContext());
5535
- (this.platform = new (s.platform || ls(n))()),
5536
  this.platform.updateConfig(s);
5537
- const l = this.platform.acquireContext(n, r.aspectRatio),
5538
- h = l && l.canvas,
5539
- c = h && h.height,
5540
- d = h && h.width;
5541
- (this.id = j()),
5542
- (this.ctx = l),
5543
- (this.canvas = h),
5544
- (this.width = d),
5545
- (this.height = c),
5546
- (this._options = r),
5547
  (this._aspectRatio = this.aspectRatio),
5548
  (this._layers = []),
5549
  (this._metasets = []),
@@ -5557,18 +5698,18 @@
5557
  (this._responsiveListeners = void 0),
5558
  (this._sortedMetasets = []),
5559
  (this.scales = {}),
5560
- (this._plugins = new Ns()),
5561
  (this.$proxies = {}),
5562
  (this._hiddenIndices = {}),
5563
  (this.attached = !1),
5564
  (this._animationsDisabled = void 0),
5565
  (this.$context = void 0),
5566
- (this._doResize = i((t) => this.update(t), r.resizeDelay || 0)),
5567
  (this._dataChanges = []),
5568
- (ln[this.id] = this),
5569
- l && h
5570
- ? (a.listen(this, "complete", on),
5571
- a.listen(this, "progress", an),
5572
  this._initialize(),
5573
  this.attached && this.update())
5574
  : console.error(
@@ -5578,11 +5719,11 @@
5578
  get aspectRatio() {
5579
  const {
5580
  options: { aspectRatio: t, maintainAspectRatio: e },
5581
- width: i,
5582
- height: s,
5583
- _aspectRatio: n,
5584
  } = this;
5585
- return $(t) ? (e && n ? n : s ? i / s : null) : t;
5586
  }
5587
  get data() {
5588
  return this.config.data;
@@ -5601,20 +5742,20 @@
5601
  this.notifyPlugins("beforeInit"),
5602
  this.options.responsive
5603
  ? this.resize()
5604
- : ke(this, this.options.devicePixelRatio),
5605
  this.bindEvents(),
5606
  this.notifyPlugins("afterInit"),
5607
  this
5608
  );
5609
  }
5610
  clear() {
5611
- return Gt(this.canvas, this.ctx), this;
5612
  }
5613
  stop() {
5614
- return a.stop(this), this;
5615
  }
5616
  resize(t, e) {
5617
- a.running(this)
5618
  ? (this._resizeBeforeDraw = { width: t, height: e })
5619
  : this._resize(t, e);
5620
  }
@@ -5628,13 +5769,13 @@
5628
  (this.width = o.width),
5629
  (this.height = o.height),
5630
  (this._aspectRatio = this.aspectRatio),
5631
- ke(this, a, !0) &&
5632
  (this.notifyPlugins("resize", { size: o }),
5633
- J(i.onResize, [this, o], this),
5634
  this.attached && this._doResize(r) && this.render());
5635
  }
5636
  ensureScalesHaveIDs() {
5637
- Q(this.options.scales || {}, (t, e) => {
5638
  t.id = e;
5639
  });
5640
  }
@@ -5648,7 +5789,7 @@
5648
  (n = n.concat(
5649
  Object.keys(e).map((t) => {
5650
  const i = e[t],
5651
- s = Ys(t, i),
5652
  n = "r" === s,
5653
  o = "x" === s;
5654
  return {
@@ -5658,32 +5799,32 @@
5658
  };
5659
  })
5660
  )),
5661
- Q(n, (e) => {
5662
  const n = e.options,
5663
  o = n.id,
5664
- a = Ys(o, n),
5665
- r = K(n.type, e.dtype);
5666
- (void 0 !== n.position && sn(n.position, a) === sn(e.dposition)) ||
5667
  (n.position = e.dposition),
5668
  (s[o] = !0);
5669
- let l = null;
5670
- if (o in i && i[o].type === r) l = i[o];
5671
  else {
5672
- (l = new (Ws.getScale(r))({
5673
  id: o,
5674
- type: r,
5675
  ctx: this.ctx,
5676
  chart: this,
5677
  })),
5678
- (i[l.id] = l);
5679
  }
5680
- l.init(n, t);
5681
  }),
5682
- Q(s, (t, e) => {
5683
  t || delete i[e];
5684
  }),
5685
- Q(i, (t) => {
5686
- ni.configure(this, t, t.options), ni.addBox(this, t);
5687
  });
5688
  }
5689
  _updateMetasets() {
@@ -5694,7 +5835,7 @@
5694
  for (let t = e; t < i; ++t) this._destroyDatasetMeta(t);
5695
  t.splice(e, i - e);
5696
  }
5697
- this._sortedMetasets = t.slice(0).sort(nn("order", "index"));
5698
  }
5699
  _removeUnreferencedMetasets() {
5700
  const {
@@ -5724,7 +5865,7 @@
5724
  n.type !== o &&
5725
  (this._destroyDatasetMeta(i), (n = this.getDatasetMeta(i))),
5726
  (n.type = o),
5727
- (n.indexAxis = s.indexAxis || $s(o, this.options)),
5728
  (n.order = s.order || 0),
5729
  (n.index = i),
5730
  (n.label = "" + s.label),
@@ -5733,11 +5874,11 @@
5733
  )
5734
  n.controller.updateIndex(i), n.controller.linkScales();
5735
  else {
5736
- const e = Ws.getController(o),
5737
- { datasetElementType: s, dataElementType: a } = bt.datasets[o];
5738
  Object.assign(e.prototype, {
5739
- dataElementType: Ws.getElement(a),
5740
- datasetElementType: s && Ws.getElement(s),
5741
  }),
5742
  (n.controller = new e(this, i)),
5743
  t.push(n.controller);
@@ -5746,7 +5887,7 @@
5746
  return this._updateMetasets(), t;
5747
  }
5748
  _resetElements() {
5749
- Q(
5750
  this.data.datasets,
5751
  (t, e) => {
5752
  this.getDatasetMeta(e).controller.reset();
@@ -5784,12 +5925,12 @@
5784
  (o = this._minPadding = i.layout.autoPadding ? o : 0),
5785
  this._updateLayout(o),
5786
  s ||
5787
- Q(n, (t) => {
5788
  t.reset();
5789
  }),
5790
  this._updateDatasets(t),
5791
  this.notifyPlugins("afterUpdate", { mode: t }),
5792
- this._layers.sort(nn("z", "_idx"));
5793
  const { _active: a, _lastEvent: r } = this;
5794
  r
5795
  ? this._eventHandler(r, !0)
@@ -5797,8 +5938,8 @@
5797
  this.render();
5798
  }
5799
  _updateScales() {
5800
- Q(this.scales, (t) => {
5801
- ni.removeBox(this, t);
5802
  }),
5803
  this.ensureScalesHaveIDs(),
5804
  this.buildOrUpdateScales();
@@ -5807,14 +5948,14 @@
5807
  const t = this.options,
5808
  e = new Set(Object.keys(this._listeners)),
5809
  i = new Set(t.events);
5810
- (ut(e, i) && !!this._responsiveListeners === t.responsive) ||
5811
  (this.unbindEvents(), this.bindEvents());
5812
  }
5813
  _updateHiddenIndices() {
5814
  const { _hiddenIndices: t } = this,
5815
  e = this._getUniformDataChanges() || [];
5816
  for (const { method: i, start: s, count: n } of e) {
5817
- cn(t, s, "_removeElements" === i ? -n : n);
5818
  }
5819
  }
5820
  _getUniformDataChanges() {
@@ -5829,18 +5970,18 @@
5829
  .map((t, e) => e + "," + t.splice(1).join(","))
5830
  ),
5831
  s = i(0);
5832
- for (let t = 1; t < e; t++) if (!ut(s, i(t))) return;
5833
  return Array.from(s)
5834
  .map((t) => t.split(","))
5835
  .map((t) => ({ method: t[1], start: +t[2], count: +t[3] }));
5836
  }
5837
  _updateLayout(t) {
5838
  if (!1 === this.notifyPlugins("beforeLayout", { cancelable: !0 })) return;
5839
- ni.update(this, this.width, this.height, t);
5840
  const e = this.chartArea,
5841
  i = e.width <= 0 || e.height <= 0;
5842
  (this._layers = []),
5843
- Q(
5844
  this.boxes,
5845
  (t) => {
5846
  (i && "chartArea" === t.position) ||
@@ -5861,7 +6002,7 @@
5861
  for (let t = 0, e = this.data.datasets.length; t < e; ++t)
5862
  this.getDatasetMeta(t).controller.configure();
5863
  for (let e = 0, i = this.data.datasets.length; e < i; ++e)
5864
- this._updateDataset(e, dt(t) ? t({ datasetIndex: e }) : t);
5865
  this.notifyPlugins("afterDatasetsUpdate", { mode: t });
5866
  }
5867
  }
@@ -5875,9 +6016,9 @@
5875
  }
5876
  render() {
5877
  !1 !== this.notifyPlugins("beforeRender", { cancelable: !0 }) &&
5878
- (a.has(this)
5879
- ? this.attached && !a.running(this) && a.start(this)
5880
- : (this.draw(), on({ chart: this })));
5881
  }
5882
  draw() {
5883
  let t;
@@ -5920,19 +6061,22 @@
5920
  o = { meta: t, index: t.index, cancelable: !0 };
5921
  !1 !== this.notifyPlugins("beforeDatasetDraw", o) &&
5922
  (s &&
5923
- Qt(e, {
5924
  left: !1 === i.left ? 0 : n.left - i.left,
5925
  right: !1 === i.right ? this.width : n.right + i.right,
5926
  top: !1 === i.top ? 0 : n.top - i.top,
5927
  bottom: !1 === i.bottom ? this.height : n.bottom + i.bottom,
5928
  }),
5929
  t.controller.draw(),
5930
- s && te(e),
5931
  (o.cancelable = !1),
5932
  this.notifyPlugins("afterDatasetDraw", o));
5933
  }
 
 
 
5934
  getElementsAtEventForMode(t, e, i, s) {
5935
- const n = Ee.modes[e];
5936
  return "function" == typeof n ? n(this, t, i, s) : [];
5937
  }
5938
  getDatasetMeta(t) {
@@ -5962,7 +6106,7 @@
5962
  getContext() {
5963
  return (
5964
  this.$context ||
5965
- (this.$context = Ye(null, { chart: this, type: "chart" }))
5966
  );
5967
  }
5968
  getVisibleDatasetCount() {
@@ -5987,7 +6131,7 @@
5987
  const s = i ? "show" : "hide",
5988
  n = this.getDatasetMeta(t),
5989
  o = n.controller._resolveAnimations(void 0, s);
5990
- ct(e)
5991
  ? ((n.data[e].hidden = !i), this.update())
5992
  : (this.setDatasetVisibility(t, i),
5993
  o.update(n, { visible: i }),
@@ -6006,7 +6150,7 @@
6006
  _stop() {
6007
  let t, e;
6008
  for (
6009
- this.stop(), a.remove(this), t = 0, e = this.data.datasets.length;
6010
  t < e;
6011
  ++t
6012
  )
@@ -6019,12 +6163,12 @@
6019
  this.config.clearCache(),
6020
  t &&
6021
  (this.unbindEvents(),
6022
- Gt(t, e),
6023
  this.platform.releaseContext(e),
6024
  (this.canvas = null),
6025
  (this.ctx = null)),
6026
  this.notifyPlugins("destroy"),
6027
- delete ln[this.id],
6028
  this.notifyPlugins("afterDestroy");
6029
  }
6030
  toBase64Image(...t) {
@@ -6045,7 +6189,7 @@
6045
  s = (t, e, i) => {
6046
  (t.offsetX = e), (t.offsetY = i), this._eventHandler(t);
6047
  };
6048
- Q(this.options.events, (t) => i(t, s));
6049
  }
6050
  bindResponsiveEvents() {
6051
  this._responsiveListeners || (this._responsiveListeners = {});
@@ -6078,11 +6222,11 @@
6078
  e.isAttached(this.canvas) ? a() : o();
6079
  }
6080
  unbindEvents() {
6081
- Q(this._listeners, (t, e) => {
6082
  this.platform.removeEventListener(this, e, t);
6083
  }),
6084
  (this._listeners = {}),
6085
- Q(this._responsiveListeners, (t, e) => {
6086
  this.platform.removeEventListener(this, e, t);
6087
  }),
6088
  (this._responsiveListeners = void 0);
@@ -6114,7 +6258,7 @@
6114
  if (!i) throw new Error("No dataset found at index " + t);
6115
  return { datasetIndex: t, element: i.data[e], index: e };
6116
  });
6117
- !tt(i, e) &&
6118
  ((this._active = i),
6119
  (this._lastEvent = null),
6120
  this._updateHoverStyles(i, e));
@@ -6141,7 +6285,7 @@
6141
  event: t,
6142
  replay: e,
6143
  cancelable: !0,
6144
- inChartArea: Jt(t, this.chartArea, this._minPadding),
6145
  },
6146
  s = (e) =>
6147
  (e.options.events || this.options.events).includes(t.native.type);
@@ -6158,15 +6302,15 @@
6158
  const { _active: s = [], options: n } = this,
6159
  o = e,
6160
  a = this._getActiveElements(t, s, i, o),
6161
- r = ft(t),
6162
  l = (function (t, e, i, s) {
6163
  return i && "mouseout" !== t.type ? (s ? e : t) : null;
6164
  })(t, this._lastEvent, i, r);
6165
  i &&
6166
  ((this._lastEvent = null),
6167
- J(n.onHover, [t, a, this], this),
6168
- r && J(n.onClick, [t, a, this], this));
6169
- const h = !tt(a, s);
6170
  return (
6171
  (h || e) && ((this._active = a), this._updateHoverStyles(a, s, e)),
6172
  (this._lastEvent = l),
@@ -6180,64 +6324,65 @@
6180
  return this.getElementsAtEventForMode(t, n.mode, n, s);
6181
  }
6182
  }
6183
- const un = () => Q(dn.instances, (t) => t._plugins.invalidate()),
6184
- fn = !0;
6185
- function gn() {
6186
  throw new Error(
6187
  "This method is not implemented: Check that a complete date adapter is provided."
6188
  );
6189
  }
6190
- Object.defineProperties(dn, {
6191
- defaults: { enumerable: fn, value: bt },
6192
- instances: { enumerable: fn, value: ln },
6193
- overrides: { enumerable: fn, value: gt },
6194
- registry: { enumerable: fn, value: Ws },
6195
- version: { enumerable: fn, value: "3.7.1" },
6196
- getChart: { enumerable: fn, value: hn },
6197
  register: {
6198
- enumerable: fn,
6199
  value: (...t) => {
6200
- Ws.add(...t), un();
6201
  },
6202
  },
6203
  unregister: {
6204
- enumerable: fn,
6205
  value: (...t) => {
6206
- Ws.remove(...t), un();
6207
  },
6208
  },
6209
  });
6210
- class pn {
6211
  constructor(t) {
6212
  this.options = t || {};
6213
  }
 
6214
  formats() {
6215
- return gn();
6216
  }
6217
  parse(t, e) {
6218
- return gn();
6219
  }
6220
  format(t, e) {
6221
- return gn();
6222
  }
6223
  add(t, e, i) {
6224
- return gn();
6225
  }
6226
  diff(t, e, i) {
6227
- return gn();
6228
  }
6229
  startOf(t, e, i) {
6230
- return gn();
6231
  }
6232
  endOf(t, e) {
6233
- return gn();
6234
  }
6235
  }
6236
- pn.override = function (t) {
6237
- Object.assign(pn.prototype, t);
6238
  };
6239
- var mn = { _date: pn };
6240
- function xn(t) {
6241
  const e = t.iScale,
6242
  i = (function (t, e) {
6243
  if (!t._cache.$bar) {
@@ -6245,7 +6390,7 @@
6245
  let s = [];
6246
  for (let e = 0, n = i.length; e < n; e++)
6247
  s = s.concat(i[e].controller.getAllParsedValues(t));
6248
- t._cache.$bar = fe(s.sort((t, e) => t - e));
6249
  }
6250
  return t._cache.$bar;
6251
  })(e, t.type);
@@ -6257,16 +6402,16 @@
6257
  const l = () => {
6258
  32767 !== o &&
6259
  -32768 !== o &&
6260
- (ct(a) && (r = Math.min(r, Math.abs(o - a) || r)), (a = o));
6261
  };
6262
  for (s = 0, n = i.length; s < n; ++s) (o = e.getPixelForValue(i[s])), l();
6263
  for (a = void 0, s = 0, n = e.ticks.length; s < n; ++s)
6264
  (o = e.getPixelForTick(s)), l();
6265
  return r;
6266
  }
6267
- function bn(t, e, i, s) {
6268
  return (
6269
- Y(t)
6270
  ? (function (t, e, i, s) {
6271
  const n = i.parse(t[0], s),
6272
  o = i.parse(t[1], s),
@@ -6284,12 +6429,12 @@
6284
  min: a,
6285
  max: r,
6286
  });
6287
- })(t, e, i, s)
6288
- : (e[i.axis] = i.parse(t, s)),
6289
  e
6290
  );
6291
  }
6292
- function _n(t, e, i, s) {
6293
  const n = t.iScale,
6294
  o = t.vScale,
6295
  a = n.getLabels(),
@@ -6300,16 +6445,23 @@
6300
  (u = e[h]),
6301
  (d = {}),
6302
  (d[n.axis] = r || n.parse(a[h], h)),
6303
- l.push(bn(u, d, o, h));
6304
  return l;
6305
  }
6306
- function yn(t) {
6307
  return t && void 0 !== t.barStart && void 0 !== t.barEnd;
6308
  }
6309
- function vn(t, e, i, s) {
6310
  let n = e.borderSkipped;
6311
  const o = {};
6312
  if (!n) return void (t.borderSkipped = o);
 
 
 
 
 
 
 
6313
  const {
6314
  start: a,
6315
  end: r,
@@ -6333,32 +6485,32 @@
6333
  ? (n = h)
6334
  : (i._bottom || 0) === s
6335
  ? (n = c)
6336
- : ((o[wn(c, a, r, l)] = !0), (n = h))),
6337
- (o[wn(n, a, r, l)] = !0),
6338
  (t.borderSkipped = o);
6339
  }
6340
- function wn(t, e, i, s) {
6341
  var n, o, a;
6342
  return (
6343
  s
6344
  ? ((a = i),
6345
- (t = Mn((t = (n = t) === (o = e) ? a : n === a ? o : n), i, e)))
6346
- : (t = Mn(t, e, i)),
6347
  t
6348
  );
6349
  }
6350
- function Mn(t, e, i) {
6351
  return "start" === t ? e : "end" === t ? i : t;
6352
  }
6353
- function kn(t, { inflateAmount: e }, i) {
6354
  t.inflateAmount = "auto" === e ? (1 === i ? 0.33 : 0) : e;
6355
  }
6356
- class Sn extends Ps {
6357
  parsePrimitiveData(t, e, i, s) {
6358
- return _n(t, e, i, s);
6359
  }
6360
  parseArrayData(t, e, i, s) {
6361
- return _n(t, e, i, s);
6362
  }
6363
  parseObjectData(t, e, i, s) {
6364
  const { iScale: n, vScale: o } = t,
@@ -6370,8 +6522,8 @@
6370
  for (d = i, u = i + s; d < u; ++d)
6371
  (g = e[d]),
6372
  (f = {}),
6373
- (f[n.axis] = n.parse(lt(g, l), d)),
6374
- c.push(bn(lt(g, h), f, o, d));
6375
  return c;
6376
  }
6377
  updateRangeFromParsed(t, e, i, s) {
@@ -6389,7 +6541,7 @@
6389
  { iScale: i, vScale: s } = e,
6390
  n = this.getParsed(t),
6391
  o = n._custom,
6392
- a = yn(o)
6393
  ? "[" + o.start + ", " + o.end + "]"
6394
  : "" + s.getLabelForValue(n[s.axis]);
6395
  return { label: "" + i.getLabelForValue(n[i.axis]), value: a };
@@ -6402,67 +6554,63 @@
6402
  const e = this._cachedMeta;
6403
  this.updateElements(e.data, 0, e.data.length, t);
6404
  }
6405
- updateElements(t, e, i, s) {
6406
- const n = "reset" === s,
6407
  {
6408
- index: o,
6409
- _cachedMeta: { vScale: a },
6410
  } = this,
6411
- r = a.getBasePixel(),
6412
- l = a.isHorizontal(),
6413
- h = this._getRuler(),
6414
- c = this.resolveDataElementOptions(e, s),
6415
- d = this.getSharedOptions(c),
6416
- u = this.includeOptions(s, d);
6417
- this.updateSharedOptions(d, s, c);
6418
- for (let c = e; c < e + i; c++) {
6419
- const e = this.getParsed(c),
6420
- i =
6421
- n || $(e[a.axis])
6422
- ? { base: r, head: r }
6423
- : this._calculateBarValuePixels(c),
6424
- f = this._calculateBarIndexPixels(c, h),
6425
- g = (e._stacks || {})[a.axis],
6426
- p = {
6427
- horizontal: l,
6428
- base: i.base,
6429
  enableBorderRadius:
6430
- !g || yn(e._custom) || o === g._top || o === g._bottom,
6431
- x: l ? i.head : f.center,
6432
- y: l ? f.center : i.head,
6433
- height: l ? f.size : Math.abs(i.size),
6434
- width: l ? Math.abs(i.size) : f.size,
6435
  };
6436
  u &&
6437
- (p.options =
6438
- d || this.resolveDataElementOptions(c, t[c].active ? "active" : s));
6439
- const m = p.options || t[c].options;
6440
- vn(p, m, g, o), kn(p, m, h.ratio), this.updateElement(t[c], c, p, s);
6441
  }
6442
  }
6443
  _getStacks(t, e) {
6444
- const i = this._cachedMeta.iScale,
6445
- s = i.getMatchingVisibleMetas(this._type),
6446
- n = i.options.stacked,
6447
- o = s.length,
6448
- a = [];
6449
- let r, l;
6450
- for (r = 0; r < o; ++r)
6451
- if (((l = s[r]), l.controller.options.grouped)) {
6452
- if (void 0 !== e) {
6453
- const t =
6454
- l.controller.getParsed(e)[l.controller._cachedMeta.vScale.axis];
6455
- if ($(t) || isNaN(t)) continue;
6456
- }
6457
- if (
6458
- ((!1 === n ||
6459
- -1 === a.indexOf(l.stack) ||
6460
- (void 0 === n && void 0 === l.stack)) &&
6461
- a.push(l.stack),
6462
- l.index === t)
6463
- )
6464
- break;
6465
- }
6466
  return a.length || a.push(void 0), a;
6467
  }
6468
  _getStackCount(t) {
@@ -6483,7 +6631,7 @@
6483
  s.push(i.getPixelForValue(this.getParsed(n)[i.axis], n));
6484
  const a = t.barThickness;
6485
  return {
6486
- min: a || xn(e),
6487
  pixels: s,
6488
  start: i._startPixel,
6489
  end: i._endPixel,
@@ -6495,55 +6643,60 @@
6495
  }
6496
  _calculateBarValuePixels(t) {
6497
  const {
6498
- _cachedMeta: { vScale: e, _stacked: i },
6499
- options: { base: s, minBarLength: n },
6500
  } = this,
6501
- o = s || 0,
6502
- a = this.getParsed(t),
6503
- r = a._custom,
6504
- l = yn(r);
6505
- let h,
6506
- c,
6507
- d = a[e.axis],
6508
- u = 0,
6509
- f = i ? this.applyStack(e, a, i) : d;
6510
- f !== d && ((u = f - d), (f = d)),
6511
- l &&
6512
- ((d = r.barStart),
6513
- (f = r.barEnd - r.barStart),
6514
- 0 !== d && Ct(d) !== Ct(r.barEnd) && (u = 0),
6515
- (u += d));
6516
- const g = $(s) || l ? u : s;
6517
- let p = e.getPixelForValue(g);
6518
  if (
6519
- ((h = this.chart.getDataVisibility(t) ? e.getPixelForValue(u + f) : p),
6520
- (c = h - p),
6521
- Math.abs(c) < n &&
6522
- ((c =
6523
- (function (t, e, i) {
6524
- return 0 !== t
6525
- ? Ct(t)
6526
- : (e.isHorizontal() ? 1 : -1) * (e.min >= i ? 1 : -1);
6527
- })(c, e, o) * n),
6528
- d === o && (p -= c / 2),
6529
- (h = p + c)),
6530
- p === e.getPixelForValue(o))
6531
  ) {
6532
- const t = (Ct(c) * e.getLineWidthForValue(o)) / 2;
6533
- (p += t), (c -= t);
 
 
 
 
 
 
 
 
 
 
6534
  }
6535
- return { size: c, base: p, head: h, center: h + c / 2 };
 
 
 
 
6536
  }
6537
  _calculateBarIndexPixels(t, e) {
6538
- const i = e.scale,
6539
- s = this.options,
6540
- n = s.skipNull,
6541
- o = K(s.maxBarThickness, 1 / 0);
6542
- let a, r;
6543
  if (e.grouped) {
6544
- const i = n ? this._getStackCount(t) : e.stackCount,
6545
- l =
6546
- "flex" === s.barThickness
6547
  ? (function (t, e, i, s) {
6548
  const n = e.pixels,
6549
  o = n[t];
@@ -6559,27 +6712,27 @@
6559
  ratio: i.barPercentage,
6560
  start: h,
6561
  };
6562
- })(t, e, s, i)
6563
- : (function (t, e, i, s) {
6564
- const n = i.barThickness;
6565
- let o, a;
6566
  return (
6567
- $(n)
6568
- ? ((o = e.min * i.categoryPercentage),
6569
- (a = i.barPercentage))
6570
- : ((o = n * s), (a = 1)),
6571
- { chunk: o / s, ratio: a, start: e.pixels[t] - o / 2 }
6572
  );
6573
- })(t, e, s, i),
6574
- h = this._getStackIndex(
6575
  this.index,
6576
  this._cachedMeta.stack,
6577
- n ? t : void 0
6578
  );
6579
- (a = l.start + l.chunk * h + l.chunk / 2),
6580
- (r = Math.min(o, l.chunk * l.ratio));
6581
- } else (a = i.getPixelForValue(this.getParsed(t)[i.axis], t)), (r = Math.min(o, e.min * e.ratio));
6582
- return { base: a - r / 2, head: a + r / 2, center: a, size: r };
6583
  }
6584
  draw() {
6585
  const t = this._cachedMeta,
@@ -6591,8 +6744,8 @@
6591
  null !== this.getParsed(n)[e.axis] && i[n].draw(this._ctx);
6592
  }
6593
  }
6594
- (Sn.id = "bar"),
6595
- (Sn.defaults = {
6596
  datasetElementType: !1,
6597
  dataElementType: "bar",
6598
  categoryPercentage: 0.8,
@@ -6605,13 +6758,13 @@
6605
  },
6606
  },
6607
  }),
6608
- (Sn.overrides = {
6609
  scales: {
6610
  _index_: { type: "category", offset: !0, grid: { offset: !0 } },
6611
  _value_: { type: "linear", beginAtZero: !0 },
6612
  },
6613
  });
6614
- class Pn extends Ps {
6615
  initialize() {
6616
  (this.enableOptionSharing = !0), super.initialize();
6617
  }
@@ -6625,7 +6778,7 @@
6625
  const n = super.parseArrayData(t, e, i, s);
6626
  for (let t = 0; t < n.length; t++) {
6627
  const s = e[i + t];
6628
- n[t]._custom = K(s[2], this.resolveDataElementOptions(t + i).radius);
6629
  }
6630
  return n;
6631
  }
@@ -6633,7 +6786,7 @@
6633
  const n = super.parseObjectData(t, e, i, s);
6634
  for (let t = 0; t < n.length; t++) {
6635
  const s = e[i + t];
6636
- n[t]._custom = K(
6637
  s && s.r && +s.r,
6638
  this.resolveDataElementOptions(t + i).radius
6639
  );
@@ -6666,27 +6819,22 @@
6666
  updateElements(t, e, i, s) {
6667
  const n = "reset" === s,
6668
  { iScale: o, vScale: a } = this._cachedMeta,
6669
- r = this.resolveDataElementOptions(e, s),
6670
- l = this.getSharedOptions(r),
6671
- h = this.includeOptions(s, l),
6672
- c = o.axis,
6673
- d = a.axis;
6674
- for (let r = e; r < e + i; r++) {
6675
- const e = t[r],
6676
- i = !n && this.getParsed(r),
6677
- l = {},
6678
- u = (l[c] = n ? o.getPixelForDecimal(0.5) : o.getPixelForValue(i[c])),
6679
- f = (l[d] = n ? a.getBasePixel() : a.getPixelForValue(i[d]));
6680
- (l.skip = isNaN(u) || isNaN(f)),
6681
- h &&
6682
- ((l.options = this.resolveDataElementOptions(
6683
- r,
6684
- e.active ? "active" : s
6685
- )),
6686
- n && (l.options.radius = 0)),
6687
- this.updateElement(e, r, l, s);
6688
  }
6689
- this.updateSharedOptions(l, s, r);
6690
  }
6691
  resolveDataElementOptions(t, e) {
6692
  const i = this.getParsed(t);
@@ -6694,12 +6842,12 @@
6694
  s.$shared && (s = Object.assign({}, s, { $shared: !1 }));
6695
  const n = s.radius;
6696
  return (
6697
- "active" !== e && (s.radius = 0), (s.radius += K(i && i._custom, n)), s
6698
  );
6699
  }
6700
  }
6701
- (Pn.id = "bubble"),
6702
- (Pn.defaults = {
6703
  datasetElementType: !1,
6704
  dataElementType: "point",
6705
  animations: {
@@ -6709,11 +6857,11 @@
6709
  },
6710
  },
6711
  }),
6712
- (Pn.overrides = {
6713
  scales: { x: { type: "linear" }, y: { type: "linear" } },
6714
  plugins: { tooltip: { callbacks: { title: () => "" } } },
6715
  });
6716
- class Dn extends Ps {
6717
  constructor(t, e) {
6718
  super(t, e),
6719
  (this.enableOptionSharing = !0),
@@ -6728,25 +6876,25 @@
6728
  s = this._cachedMeta;
6729
  if (!1 === this._parsing) s._parsed = i;
6730
  else {
6731
- let n,
6732
- o,
6733
- a = (t) => +i[t];
6734
- if (U(i[t])) {
6735
  const { key: t = "value" } = this._parsing;
6736
- a = (e) => +lt(i[e], t);
6737
  }
6738
- for (n = t, o = t + e; n < o; ++n) s._parsed[n] = a(n);
6739
  }
6740
  }
6741
  _getRotation() {
6742
- return It(this.options.rotation - 90);
6743
  }
6744
  _getCircumference() {
6745
- return It(this.options.circumference);
6746
  }
6747
  _getRotationExtents() {
6748
- let t = yt,
6749
- e = -yt;
6750
  for (let i = 0; i < this.chart.data.datasets.length; ++i)
6751
  if (this.chart.isDatasetVisible(i)) {
6752
  const s = this.chart.getDatasetMeta(i).controller,
@@ -6766,20 +6914,20 @@
6766
  this.getMaxOffset(n) +
6767
  this.options.spacing,
6768
  a = Math.max((Math.min(i.width, i.height) - o) / 2, 0),
6769
- r = Math.min(G(this.options.cutout, a), 1),
6770
- l = this._getRingWeight(this.index),
6771
- { circumference: h, rotation: c } = this._getRotationExtents(),
6772
  {
6773
- ratioX: d,
6774
- ratioY: u,
6775
- offsetX: f,
6776
- offsetY: g,
6777
  } = (function (t, e, i) {
6778
  let s = 1,
6779
  n = 1,
6780
  o = 0,
6781
  a = 0;
6782
- if (e < yt) {
6783
  const r = t,
6784
  l = r + e,
6785
  h = Math.cos(r),
@@ -6787,30 +6935,30 @@
6787
  d = Math.cos(l),
6788
  u = Math.sin(l),
6789
  f = (t, e, s) =>
6790
- Ht(t, r, l, !0) ? 1 : Math.max(e, e * i, s, s * i),
6791
  g = (t, e, s) =>
6792
- Ht(t, r, l, !0) ? -1 : Math.min(e, e * i, s, s * i),
6793
  p = f(0, h, d),
6794
- m = f(kt, c, u),
6795
- x = g(_t, h, d),
6796
- b = g(_t + kt, c, u);
6797
- (s = (p - x) / 2),
6798
- (n = (m - b) / 2),
6799
- (o = -(p + x) / 2),
6800
- (a = -(m + b) / 2);
6801
  }
6802
  return { ratioX: s, ratioY: n, offsetX: o, offsetY: a };
6803
- })(c, h, r),
6804
- p = (i.width - o) / d,
6805
- m = (i.height - o) / u,
6806
- x = Math.max(Math.min(p, m) / 2, 0),
6807
- b = Z(this.options.radius, x),
6808
- _ = (b - Math.max(b * r, 0)) / this._getVisibleDatasetWeightTotal();
6809
- (this.offsetX = f * b),
6810
- (this.offsetY = g * b),
6811
  (s.total = this.calculateTotal()),
6812
- (this.outerRadius = b - _ * this._getRingWeightOffset(this.index)),
6813
- (this.innerRadius = Math.max(this.outerRadius - _ * l, 0)),
6814
  this.updateElements(n, 0, n.length, t);
6815
  }
6816
  _circumference(t, e) {
@@ -6822,7 +6970,7 @@
6822
  null === s._parsed[t] ||
6823
  s.data[t].hidden
6824
  ? 0
6825
- : this.calculateCircumference((s._parsed[t] * n) / yt);
6826
  }
6827
  updateElements(t, e, i, s) {
6828
  const n = "reset" === s,
@@ -6834,31 +6982,28 @@
6834
  c = n && r.animateScale,
6835
  d = c ? 0 : this.innerRadius,
6836
  u = c ? 0 : this.outerRadius,
6837
- f = this.resolveDataElementOptions(e, s),
6838
- g = this.getSharedOptions(f),
6839
- p = this.includeOptions(s, g);
6840
- let m,
6841
- x = this._getRotation();
6842
- for (m = 0; m < e; ++m) x += this._circumference(m, n);
6843
- for (m = e; m < e + i; ++m) {
6844
- const e = this._circumference(m, n),
6845
- i = t[m],
6846
  o = {
6847
  x: l + this.offsetX,
6848
  y: h + this.offsetY,
6849
- startAngle: x,
6850
- endAngle: x + e,
6851
  circumference: e,
6852
  outerRadius: u,
6853
  innerRadius: d,
6854
  };
6855
- p &&
6856
  (o.options =
6857
- g || this.resolveDataElementOptions(m, i.active ? "active" : s)),
6858
- (x += e),
6859
- this.updateElement(i, m, o, s);
6860
  }
6861
- this.updateSharedOptions(g, s, f);
6862
  }
6863
  calculateTotal() {
6864
  const t = this._cachedMeta,
@@ -6877,13 +7022,13 @@
6877
  }
6878
  calculateCircumference(t) {
6879
  const e = this._cachedMeta.total;
6880
- return e > 0 && !isNaN(t) ? yt * (Math.abs(t) / e) : 0;
6881
  }
6882
  getLabelAndValue(t) {
6883
  const e = this._cachedMeta,
6884
  i = this.chart,
6885
  s = i.data.labels || [],
6886
- n = Ri(e._parsed[t], i.options.locale);
6887
  return { label: s[t] || "", value: n };
6888
  }
6889
  getMaxBorderWidth(t) {
@@ -6918,14 +7063,14 @@
6918
  return e;
6919
  }
6920
  _getRingWeight(t) {
6921
- return Math.max(K(this.chart.data.datasets[t].weight, 1), 0);
6922
  }
6923
  _getVisibleDatasetWeightTotal() {
6924
  return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;
6925
  }
6926
  }
6927
- (Dn.id = "doughnut"),
6928
- (Dn.defaults = {
6929
  datasetElementType: !1,
6930
  dataElementType: "arc",
6931
  animation: { animateRotate: !0, animateScale: !1 },
@@ -6953,11 +7098,11 @@
6953
  spacing: 0,
6954
  indexAxis: "r",
6955
  }),
6956
- (Dn.descriptors = {
6957
  _scriptable: (t) => "spacing" !== t,
6958
  _indexable: (t) => "spacing" !== t,
6959
  }),
6960
- (Dn.overrides = {
6961
  aspectRatio: 1,
6962
  plugins: {
6963
  legend: {
@@ -6994,68 +7139,26 @@
6994
  label(t) {
6995
  let e = t.label;
6996
  const i = ": " + t.formattedValue;
6997
- return Y(e) ? ((e = e.slice()), (e[0] += i)) : (e += i), e;
6998
  },
6999
  },
7000
  },
7001
  },
7002
  });
7003
- class Cn extends Ps {
7004
  initialize() {
7005
- (this.enableOptionSharing = !0), super.initialize();
 
 
7006
  }
7007
  update(t) {
7008
  const e = this._cachedMeta,
7009
  { dataset: i, data: s = [], _dataset: n } = e,
7010
  o = this.chart._animationsDisabled;
7011
- let { start: a, count: r } = (function (t, e, i) {
7012
- const s = e.length;
7013
- let n = 0,
7014
- o = s;
7015
- if (t._sorted) {
7016
- const { iScale: a, _parsed: r } = t,
7017
- l = a.axis,
7018
- {
7019
- min: h,
7020
- max: c,
7021
- minDefined: d,
7022
- maxDefined: u,
7023
- } = a.getUserBounds();
7024
- d &&
7025
- (n = jt(
7026
- Math.min(
7027
- re(r, a.axis, h).lo,
7028
- i ? s : re(e, l, a.getPixelForValue(h)).lo
7029
- ),
7030
- 0,
7031
- s - 1
7032
- )),
7033
- (o = u
7034
- ? jt(
7035
- Math.max(
7036
- re(r, a.axis, c).hi + 1,
7037
- i ? 0 : re(e, l, a.getPixelForValue(c)).hi + 1
7038
- ),
7039
- n,
7040
- s
7041
- ) - n
7042
- : s - n);
7043
- }
7044
- return { start: n, count: o };
7045
- })(e, s, o);
7046
  (this._drawStart = a),
7047
  (this._drawCount = r),
7048
- (function (t) {
7049
- const { xScale: e, yScale: i, _scaleRanges: s } = t,
7050
- n = { xmin: e.min, xmax: e.max, ymin: i.min, ymax: i.max };
7051
- if (!s) return (t._scaleRanges = n), !0;
7052
- const o =
7053
- s.xmin !== e.min ||
7054
- s.xmax !== e.max ||
7055
- s.ymin !== i.min ||
7056
- s.ymax !== i.max;
7057
- return Object.assign(s, n), o;
7058
- })(e) && ((a = 0), (r = s.length)),
7059
  (i._chart = this.chart),
7060
  (i._datasetIndex = this.index),
7061
  (i._decimated = !!n._decimated),
@@ -7066,38 +7169,35 @@
7066
  this.updateElement(i, void 0, { animated: !o, options: l }, t),
7067
  this.updateElements(s, a, r, t);
7068
  }
7069
- updateElements(t, e, i, s) {
7070
- const n = "reset" === s,
7071
- { iScale: o, vScale: a, _stacked: r, _dataset: l } = this._cachedMeta,
7072
- h = this.resolveDataElementOptions(e, s),
7073
- c = this.getSharedOptions(h),
7074
- d = this.includeOptions(s, c),
7075
- u = o.axis,
7076
- f = a.axis,
7077
  { spanGaps: g, segment: p } = this.options,
7078
- m = Tt(g) ? g : Number.POSITIVE_INFINITY,
7079
- x = this.chart._animationsDisabled || n || "none" === s;
7080
- let b = e > 0 && this.getParsed(e - 1);
7081
- for (let h = e; h < e + i; ++h) {
7082
- const e = t[h],
7083
- i = this.getParsed(h),
7084
- g = x ? e : {},
7085
- _ = $(i[f]),
7086
- y = (g[u] = o.getPixelForValue(i[u], h)),
7087
- v = (g[f] =
7088
- n || _
7089
- ? a.getBasePixel()
7090
- : a.getPixelForValue(r ? this.applyStack(a, i, r) : i[f], h));
7091
- (g.skip = isNaN(y) || isNaN(v) || _),
7092
- (g.stop = h > 0 && i[u] - b[u] > m),
7093
- p && ((g.parsed = i), (g.raw = l.data[h])),
7094
  d &&
7095
- (g.options =
7096
- c || this.resolveDataElementOptions(h, e.active ? "active" : s)),
7097
- x || this.updateElement(e, h, g, s),
7098
- (b = i);
7099
  }
7100
- this.updateSharedOptions(c, s, h);
7101
  }
7102
  getMaxOverflow() {
7103
  const t = this._cachedMeta,
@@ -7115,17 +7215,17 @@
7115
  super.draw();
7116
  }
7117
  }
7118
- (Cn.id = "line"),
7119
- (Cn.defaults = {
7120
  datasetElementType: "line",
7121
  dataElementType: "point",
7122
  showLine: !0,
7123
  spanGaps: !1,
7124
  }),
7125
- (Cn.overrides = {
7126
  scales: { _index_: { type: "category" }, _value_: { type: "linear" } },
7127
  });
7128
- class On extends Ps {
7129
  constructor(t, e) {
7130
  super(t, e), (this.innerRadius = void 0), (this.outerRadius = void 0);
7131
  }
@@ -7133,13 +7233,29 @@
7133
  const e = this._cachedMeta,
7134
  i = this.chart,
7135
  s = i.data.labels || [],
7136
- n = Ri(e._parsed[t].r, i.options.locale);
7137
  return { label: s[t] || "", value: n };
7138
  }
 
 
 
7139
  update(t) {
7140
  const e = this._cachedMeta.data;
7141
  this._updateRadius(), this.updateElements(e, 0, e.length, t);
7142
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
7143
  _updateRadius() {
7144
  const t = this.chart,
7145
  e = t.chartArea,
@@ -7159,56 +7275,54 @@
7159
  updateElements(t, e, i, s) {
7160
  const n = "reset" === s,
7161
  o = this.chart,
7162
- a = this.getDataset(),
7163
- r = o.options.animation,
7164
- l = this._cachedMeta.rScale,
7165
- h = l.xCenter,
7166
- c = l.yCenter,
7167
- d = l.getIndexAngle(0) - 0.5 * _t;
7168
- let u,
7169
- f = d;
7170
- const g = 360 / this.countVisibleElements();
7171
- for (u = 0; u < e; ++u) f += this._computeAngle(u, s, g);
7172
- for (u = e; u < e + i; u++) {
7173
- const e = t[u];
7174
- let i = f,
7175
- p = f + this._computeAngle(u, s, g),
7176
- m = o.getDataVisibility(u)
7177
- ? l.getDistanceFromCenterForValue(a.data[u])
7178
  : 0;
7179
- (f = p),
7180
- n && (r.animateScale && (m = 0), r.animateRotate && (i = p = d));
7181
- const x = {
7182
- x: h,
7183
- y: c,
7184
  innerRadius: 0,
7185
- outerRadius: m,
7186
  startAngle: i,
7187
- endAngle: p,
7188
- options: this.resolveDataElementOptions(u, e.active ? "active" : s),
7189
  };
7190
- this.updateElement(e, u, x, s);
7191
  }
7192
  }
7193
  countVisibleElements() {
7194
- const t = this.getDataset(),
7195
- e = this._cachedMeta;
7196
- let i = 0;
7197
  return (
7198
- e.data.forEach((e, s) => {
7199
- !isNaN(t.data[s]) && this.chart.getDataVisibility(s) && i++;
7200
  }),
7201
- i
7202
  );
7203
  }
7204
  _computeAngle(t, e, i) {
7205
  return this.chart.getDataVisibility(t)
7206
- ? It(this.resolveDataElementOptions(t, e).angle || i)
7207
  : 0;
7208
  }
7209
  }
7210
- (On.id = "polarArea"),
7211
- (On.defaults = {
7212
  dataElementType: "arc",
7213
  animation: { animateRotate: !0, animateScale: !0 },
7214
  animations: {
@@ -7227,7 +7341,7 @@
7227
  indexAxis: "r",
7228
  startAngle: 0,
7229
  }),
7230
- (On.overrides = {
7231
  aspectRatio: 1,
7232
  plugins: {
7233
  legend: {
@@ -7277,15 +7391,15 @@
7277
  },
7278
  },
7279
  });
7280
- class An extends Dn {}
7281
- (An.id = "pie"),
7282
- (An.defaults = {
7283
  cutout: 0,
7284
  rotation: 0,
7285
  circumference: 360,
7286
  radius: "100%",
7287
  });
7288
- class Tn extends Ps {
7289
  getLabelAndValue(t) {
7290
  const e = this._cachedMeta.vScale,
7291
  i = this.getParsed(t);
@@ -7294,6 +7408,9 @@
7294
  value: "" + e.getLabelForValue(i[e.axis]),
7295
  };
7296
  }
 
 
 
7297
  update(t) {
7298
  const e = this._cachedMeta,
7299
  i = e.dataset,
@@ -7308,42 +7425,125 @@
7308
  this.updateElements(s, 0, s.length, t);
7309
  }
7310
  updateElements(t, e, i, s) {
7311
- const n = this.getDataset(),
7312
- o = this._cachedMeta.rScale,
7313
- a = "reset" === s;
7314
- for (let r = e; r < e + i; r++) {
7315
- const e = t[r],
7316
- i = this.resolveDataElementOptions(r, e.active ? "active" : s),
7317
- l = o.getPointPositionForValue(r, n.data[r]),
7318
- h = a ? o.xCenter : l.x,
7319
- c = a ? o.yCenter : l.y,
7320
- d = {
7321
- x: h,
7322
- y: c,
7323
- angle: l.angle,
7324
- skip: isNaN(h) || isNaN(c),
7325
  options: i,
7326
  };
7327
- this.updateElement(e, r, d, s);
7328
  }
7329
  }
7330
  }
7331
- (Tn.id = "radar"),
7332
- (Tn.defaults = {
7333
  datasetElementType: "line",
7334
  dataElementType: "point",
7335
  indexAxis: "r",
7336
  showLine: !0,
7337
  elements: { line: { fill: "start" } },
7338
  }),
7339
- (Tn.overrides = {
7340
  aspectRatio: 1,
7341
  scales: { r: { type: "radialLinear" } },
7342
  });
7343
- class Ln extends Cn {}
7344
- (Ln.id = "scatter"),
7345
- (Ln.defaults = { showLine: !1, fill: !1 }),
7346
- (Ln.overrides = {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7347
  interaction: { mode: "point" },
7348
  plugins: {
7349
  tooltip: {
@@ -7355,18 +7555,18 @@
7355
  },
7356
  scales: { x: { type: "linear" }, y: { type: "linear" } },
7357
  });
7358
- var Rn = Object.freeze({
7359
  __proto__: null,
7360
- BarController: Sn,
7361
- BubbleController: Pn,
7362
- DoughnutController: Dn,
7363
- LineController: Cn,
7364
- PolarAreaController: On,
7365
- PieController: An,
7366
- RadarController: Tn,
7367
- ScatterController: Ln,
7368
  });
7369
- function En(t, e, i) {
7370
  const {
7371
  startAngle: s,
7372
  pixelMargin: n,
@@ -7380,12 +7580,12 @@
7380
  t.arc(o, a, r, s - h, i + h),
7381
  l > n
7382
  ? ((h = n / l), t.arc(o, a, l, i + h, s - h, !0))
7383
- : t.arc(o, a, n, i + kt, s - kt),
7384
  t.closePath(),
7385
  t.clip();
7386
  }
7387
- function In(t, e, i, s) {
7388
- const n = Be(t.options.borderRadius, [
7389
  "outerStart",
7390
  "outerEnd",
7391
  "innerStart",
@@ -7395,73 +7595,83 @@
7395
  a = Math.min(o, (s * e) / 2),
7396
  r = (t) => {
7397
  const e = ((i - Math.min(o, t)) * s) / 2;
7398
- return jt(t, 0, Math.min(o, e));
7399
  };
7400
  return {
7401
  outerStart: r(n.outerStart),
7402
  outerEnd: r(n.outerEnd),
7403
- innerStart: jt(n.innerStart, 0, a),
7404
- innerEnd: jt(n.innerEnd, 0, a),
7405
  };
7406
  }
7407
- function zn(t, e, i, s) {
7408
  return { x: i + t * Math.cos(e), y: s + t * Math.sin(e) };
7409
  }
7410
- function Fn(t, e, i, s, n) {
7411
- const { x: o, y: a, startAngle: r, pixelMargin: l, innerRadius: h } = e,
7412
- c = Math.max(e.outerRadius + s + i - l, 0),
7413
- d = h > 0 ? h + s + i + l : 0;
7414
- let u = 0;
7415
- const f = n - r;
7416
  if (s) {
7417
- const t = ((h > 0 ? h - s : 0) + (c > 0 ? c - s : 0)) / 2;
7418
- u = (f - (0 !== t ? (f * t) / (t + s) : f)) / 2;
7419
  }
7420
- const g = (f - Math.max(0.001, f * c - i / _t) / c) / 2,
7421
- p = r + g + u,
7422
- m = n - g - u,
7423
  {
7424
  outerStart: x,
7425
- outerEnd: b,
7426
- innerStart: _,
7427
- innerEnd: y,
7428
- } = In(e, d, c, m - p),
7429
- v = c - x,
7430
- w = c - b,
7431
- M = p + x / v,
7432
- k = m - b / w,
7433
- S = d + _,
7434
- P = d + y,
7435
- D = p + _ / S,
7436
- C = m - y / P;
7437
- if ((t.beginPath(), t.arc(o, a, c, M, k), b > 0)) {
7438
- const e = zn(w, k, o, a);
7439
- t.arc(e.x, e.y, b, k, m + kt);
7440
- }
7441
- const O = zn(P, m, o, a);
7442
- if ((t.lineTo(O.x, O.y), y > 0)) {
7443
- const e = zn(P, C, o, a);
7444
- t.arc(e.x, e.y, y, m + kt, C + Math.PI);
7445
- }
7446
- if ((t.arc(o, a, d, m - y / d, p + _ / d, !0), _ > 0)) {
7447
- const e = zn(S, D, o, a);
7448
- t.arc(e.x, e.y, _, D + Math.PI, p - kt);
7449
- }
7450
- const A = zn(v, p, o, a);
7451
- if ((t.lineTo(A.x, A.y), x > 0)) {
7452
- const e = zn(v, M, o, a);
7453
- t.arc(e.x, e.y, x, p - kt, M);
 
 
 
 
 
 
 
 
 
 
7454
  }
7455
  t.closePath();
7456
  }
7457
- function Bn(t, e, i, s, n) {
7458
- const { options: o } = e,
7459
- { borderWidth: a, borderJoinStyle: r } = o,
7460
- l = "inner" === o.borderAlign;
7461
- a &&
7462
- (l
7463
- ? ((t.lineWidth = 2 * a), (t.lineJoin = r || "round"))
7464
- : ((t.lineWidth = a), (t.lineJoin = r || "bevel")),
7465
  e.fullCircles &&
7466
  (function (t, e, i) {
7467
  const {
@@ -7475,22 +7685,22 @@
7475
  h = e.innerRadius + a;
7476
  let c;
7477
  for (
7478
- i && En(t, e, o + yt),
7479
  t.beginPath(),
7480
- t.arc(s, n, h, o + yt, o, !0),
7481
  c = 0;
7482
  c < r;
7483
  ++c
7484
  )
7485
  t.stroke();
7486
- for (t.beginPath(), t.arc(s, n, l, o, o + yt), c = 0; c < r; ++c)
7487
  t.stroke();
7488
- })(t, e, l),
7489
- l && En(t, e, n),
7490
- Fn(t, e, i, s, n),
7491
  t.stroke());
7492
  }
7493
- class Vn extends Ds {
7494
  constructor(t) {
7495
  super(),
7496
  (this.options = void 0),
@@ -7505,13 +7715,13 @@
7505
  }
7506
  inRange(t, e, i) {
7507
  const s = this.getProps(["x", "y"], i),
7508
- { angle: n, distance: o } = Bt(s, { x: t, y: e }),
7509
  {
7510
  startAngle: a,
7511
- endAngle: r,
7512
- innerRadius: l,
7513
- outerRadius: h,
7514
- circumference: c,
7515
  } = this.getProps(
7516
  [
7517
  "startAngle",
@@ -7522,10 +7732,10 @@
7522
  ],
7523
  i
7524
  ),
7525
- d = this.options.spacing / 2,
7526
- u = K(c, r - a) >= yt || Ht(n, a, r),
7527
- f = Yt(o, l + d, h + d);
7528
- return u && f;
7529
  }
7530
  getCenterPoint(t) {
7531
  const {
@@ -7558,47 +7768,48 @@
7558
  draw(t) {
7559
  const { options: e, circumference: i } = this,
7560
  s = (e.offset || 0) / 2,
7561
- n = (e.spacing || 0) / 2;
 
7562
  if (
7563
  ((this.pixelMargin = "inner" === e.borderAlign ? 0.33 : 0),
7564
- (this.fullCircles = i > yt ? Math.floor(i / yt) : 0),
7565
  0 === i || this.innerRadius < 0 || this.outerRadius < 0)
7566
  )
7567
  return;
7568
  t.save();
7569
- let o = 0;
7570
  if (s) {
7571
- o = s / 2;
7572
  const e = (this.startAngle + this.endAngle) / 2;
7573
- t.translate(Math.cos(e) * o, Math.sin(e) * o),
7574
- this.circumference >= _t && (o = s);
7575
  }
7576
  (t.fillStyle = e.backgroundColor), (t.strokeStyle = e.borderColor);
7577
- const a = (function (t, e, i, s) {
7578
- const { fullCircles: n, startAngle: o, circumference: a } = e;
7579
- let r = e.endAngle;
7580
- if (n) {
7581
- Fn(t, e, i, s, o + yt);
7582
- for (let e = 0; e < n; ++e) t.fill();
7583
- isNaN(a) || ((r = o + (a % yt)), a % yt == 0 && (r += yt));
7584
  }
7585
- return Fn(t, e, i, s, r), t.fill(), r;
7586
- })(t, this, o, n);
7587
- Bn(t, this, o, n, a), t.restore();
7588
  }
7589
  }
7590
- function Wn(t, e, i = e) {
7591
- (t.lineCap = K(i.borderCapStyle, e.borderCapStyle)),
7592
- t.setLineDash(K(i.borderDash, e.borderDash)),
7593
- (t.lineDashOffset = K(i.borderDashOffset, e.borderDashOffset)),
7594
- (t.lineJoin = K(i.borderJoinStyle, e.borderJoinStyle)),
7595
- (t.lineWidth = K(i.borderWidth, e.borderWidth)),
7596
- (t.strokeStyle = K(i.borderColor, e.borderColor));
7597
  }
7598
- function Nn(t, e, i) {
7599
  t.lineTo(i.x, i.y);
7600
  }
7601
- function Hn(t, e, i = {}) {
7602
  const s = t.length,
7603
  { start: n = 0, end: o = s - 1 } = i,
7604
  { start: a, end: r } = e,
@@ -7612,15 +7823,15 @@
7612
  ilen: h < l && !c ? s + h - l : h - l,
7613
  };
7614
  }
7615
- function jn(t, e, i, s) {
7616
  const { points: n, options: o } = e,
7617
- { count: a, start: r, loop: l, ilen: h } = Hn(n, i, s),
7618
  c = (function (t) {
7619
  return t.stepped
7620
- ? ee
7621
  : t.tension || "monotone" === t.cubicInterpolationMode
7622
- ? ie
7623
- : Nn;
7624
  })(o);
7625
  let d,
7626
  u,
@@ -7633,9 +7844,9 @@
7633
  (f = u));
7634
  return l && ((u = n[(r + (p ? h : 0)) % a]), c(t, f, u, p, o.stepped)), !!l;
7635
  }
7636
- function $n(t, e, i, s) {
7637
  const n = e.points,
7638
- { count: o, start: a, ilen: r } = Hn(n, i, s),
7639
  { move: l = !0, reverse: h } = s || {};
7640
  let c,
7641
  d,
@@ -7644,24 +7855,24 @@
7644
  g,
7645
  p,
7646
  m = 0,
7647
- x = 0;
7648
- const b = (t) => (a + (h ? r - t : t)) % o,
7649
  _ = () => {
7650
  f !== g && (t.lineTo(m, g), t.lineTo(m, f), t.lineTo(m, p));
7651
  };
7652
- for (l && ((d = n[b(0)]), t.moveTo(d.x, d.y)), c = 0; c <= r; ++c) {
7653
- if (((d = n[b(c)]), d.skip)) continue;
7654
  const e = d.x,
7655
  i = d.y,
7656
  s = 0 | e;
7657
  s === u
7658
- ? (i < f ? (f = i) : i > g && (g = i), (m = (x * m + e) / ++x))
7659
- : (_(), t.lineTo(e, i), (u = s), (x = 0), (f = g = i)),
7660
  (p = i);
7661
  }
7662
  _();
7663
  }
7664
- function Yn(t) {
7665
  const e = t.options,
7666
  i = e.borderDash && e.borderDash.length;
7667
  return !(
@@ -7672,11 +7883,11 @@
7672
  e.stepped ||
7673
  i
7674
  )
7675
- ? $n
7676
- : jn;
7677
  }
7678
- (Vn.id = "arc"),
7679
- (Vn.defaults = {
7680
  borderAlign: "center",
7681
  borderColor: "#fff",
7682
  borderJoinStyle: void 0,
@@ -7685,28 +7896,29 @@
7685
  offset: 0,
7686
  spacing: 0,
7687
  angle: void 0,
 
7688
  }),
7689
- (Vn.defaultRoutes = { backgroundColor: "backgroundColor" });
7690
- const Un = "function" == typeof Path2D;
7691
- function Xn(t, e, i, s) {
7692
- Un && !e.options.segment
7693
  ? (function (t, e, i, s) {
7694
  let n = e._path;
7695
  n || ((n = e._path = new Path2D()), e.path(n, i, s) && n.closePath()),
7696
- Wn(t, e.options),
7697
  t.stroke(n);
7698
  })(t, e, i, s)
7699
  : (function (t, e, i, s) {
7700
  const { segments: n, options: o } = e,
7701
- a = Yn(e);
7702
  for (const r of n)
7703
- Wn(t, o, r.style),
7704
  t.beginPath(),
7705
  a(t, e, r, { start: i, end: i + s - 1 }) && t.closePath(),
7706
  t.stroke();
7707
  })(t, e, i, s);
7708
  }
7709
- class qn extends Ds {
7710
  constructor(t) {
7711
  super(),
7712
  (this.animated = !0),
@@ -7730,7 +7942,7 @@
7730
  !this._pointsUpdated
7731
  ) {
7732
  const s = i.spanGaps ? this._loop : this._fullLoop;
7733
- ki(this._points, i, t, s, e), (this._pointsUpdated = !0);
7734
  }
7735
  }
7736
  set points(t) {
@@ -7744,7 +7956,7 @@
7744
  }
7745
  get segments() {
7746
  return (
7747
- this._segments || (this._segments = Ni(this, this.options.segment))
7748
  );
7749
  }
7750
  first() {
@@ -7762,15 +7974,15 @@
7762
  const i = this.options,
7763
  s = t[e],
7764
  n = this.points,
7765
- o = Wi(this, { property: e, start: s, end: s });
7766
  if (!o.length) return;
7767
  const a = [],
7768
  r = (function (t) {
7769
  return t.stepped
7770
- ? Ai
7771
  : t.tension || "monotone" === t.cubicInterpolationMode
7772
- ? Ti
7773
- : Oi;
7774
  })(i);
7775
  let l, h;
7776
  for (l = 0, h = o.length; l < h; ++l) {
@@ -7787,11 +7999,11 @@
7787
  return 1 === a.length ? a[0] : a;
7788
  }
7789
  pathSegment(t, e, i) {
7790
- return Yn(this)(t, this, e, i);
7791
  }
7792
  path(t, e, i) {
7793
  const s = this.segments,
7794
- n = Yn(this);
7795
  let o = this._loop;
7796
  (e = e || 0), (i = i || this.points.length - e);
7797
  for (const a of s) o &= n(t, this, a, { start: e, end: e + i - 1 });
@@ -7801,17 +8013,17 @@
7801
  const n = this.options || {};
7802
  (this.points || []).length &&
7803
  n.borderWidth &&
7804
- (t.save(), Xn(t, this, i, s), t.restore()),
7805
  this.animated && ((this._pointsUpdated = !1), (this._path = void 0));
7806
  }
7807
  }
7808
- function Kn(t, e, i, s) {
7809
  const n = t.options,
7810
  { [i]: o } = t.getProps([i], s);
7811
  return Math.abs(e - o) < n.radius + n.hitRadius;
7812
  }
7813
- (qn.id = "line"),
7814
- (qn.defaults = {
7815
  borderCapStyle: "butt",
7816
  borderDash: [],
7817
  borderDashOffset: 0,
@@ -7824,15 +8036,15 @@
7824
  stepped: !1,
7825
  tension: 0,
7826
  }),
7827
- (qn.defaultRoutes = {
7828
  backgroundColor: "backgroundColor",
7829
  borderColor: "borderColor",
7830
  }),
7831
- (qn.descriptors = {
7832
  _scriptable: !0,
7833
  _indexable: (t) => "borderDash" !== t && "fill" !== t,
7834
  });
7835
- class Gn extends Ds {
7836
  constructor(t) {
7837
  super(),
7838
  (this.options = void 0),
@@ -7850,10 +8062,10 @@
7850
  );
7851
  }
7852
  inXRange(t, e) {
7853
- return Kn(this, t, "x", e);
7854
  }
7855
  inYRange(t, e) {
7856
- return Kn(this, t, "y", e);
7857
  }
7858
  getCenterPoint(t) {
7859
  const { x: e, y: i } = this.getProps(["x", "y"], t);
@@ -7868,18 +8080,18 @@
7868
  const i = this.options;
7869
  this.skip ||
7870
  i.radius < 0.1 ||
7871
- !Jt(this, e, this.size(i) / 2) ||
7872
  ((t.strokeStyle = i.borderColor),
7873
  (t.lineWidth = i.borderWidth),
7874
  (t.fillStyle = i.backgroundColor),
7875
- Zt(t, i, this.x, this.y));
7876
  }
7877
  getRange() {
7878
  const t = this.options || {};
7879
  return t.radius + t.hitRadius;
7880
  }
7881
  }
7882
- function Zn(t, e) {
7883
  const {
7884
  x: i,
7885
  y: s,
@@ -7903,72 +8115,72 @@
7903
  { left: r, top: h, right: l, bottom: c }
7904
  );
7905
  }
7906
- function Jn(t, e, i, s) {
7907
- return t ? 0 : jt(e, i, s);
7908
  }
7909
- function Qn(t) {
7910
- const e = Zn(t),
7911
  i = e.right - e.left,
7912
  s = e.bottom - e.top,
7913
- n = (function (t, e, i) {
7914
  const s = t.options.borderWidth,
7915
  n = t.borderSkipped,
7916
- o = Ve(s);
7917
  return {
7918
- t: Jn(n.top, o.top, 0, i),
7919
- r: Jn(n.right, o.right, 0, e),
7920
- b: Jn(n.bottom, o.bottom, 0, i),
7921
- l: Jn(n.left, o.left, 0, e),
7922
  };
7923
  })(t, i / 2, s / 2),
7924
- o = (function (t, e, i) {
7925
  const { enableBorderRadius: s } = t.getProps(["enableBorderRadius"]),
7926
- n = t.options.borderRadius,
7927
- o = We(n),
7928
- a = Math.min(e, i),
7929
- r = t.borderSkipped,
7930
- l = s || U(n);
7931
  return {
7932
- topLeft: Jn(!l || r.top || r.left, o.topLeft, 0, a),
7933
- topRight: Jn(!l || r.top || r.right, o.topRight, 0, a),
7934
- bottomLeft: Jn(!l || r.bottom || r.left, o.bottomLeft, 0, a),
7935
- bottomRight: Jn(!l || r.bottom || r.right, o.bottomRight, 0, a),
7936
  };
7937
  })(t, i / 2, s / 2);
7938
  return {
7939
- outer: { x: e.left, y: e.top, w: i, h: s, radius: o },
7940
  inner: {
7941
- x: e.left + n.l,
7942
- y: e.top + n.t,
7943
- w: i - n.l - n.r,
7944
- h: s - n.t - n.b,
7945
  radius: {
7946
- topLeft: Math.max(0, o.topLeft - Math.max(n.t, n.l)),
7947
- topRight: Math.max(0, o.topRight - Math.max(n.t, n.r)),
7948
- bottomLeft: Math.max(0, o.bottomLeft - Math.max(n.b, n.l)),
7949
- bottomRight: Math.max(0, o.bottomRight - Math.max(n.b, n.r)),
7950
  },
7951
  },
7952
  };
7953
  }
7954
- function to(t, e, i, s) {
7955
  const n = null === e,
7956
  o = null === i,
7957
- a = t && !(n && o) && Zn(t, s);
7958
- return a && (n || Yt(e, a.left, a.right)) && (o || Yt(i, a.top, a.bottom));
7959
  }
7960
- function eo(t, e) {
7961
  t.rect(e.x, e.y, e.w, e.h);
7962
  }
7963
- function io(t, e, i = {}) {
7964
  const s = t.x !== i.x ? -e : 0,
7965
  n = t.y !== i.y ? -e : 0,
7966
  o = (t.x + t.w !== i.x + i.w ? e : 0) - s,
7967
  a = (t.y + t.h !== i.y + i.h ? e : 0) - n;
7968
  return { x: t.x + s, y: t.y + n, w: t.w + o, h: t.h + a, radius: t.radius };
7969
  }
7970
- (Gn.id = "point"),
7971
- (Gn.defaults = {
7972
  borderWidth: 1,
7973
  hitRadius: 1,
7974
  hoverBorderWidth: 1,
@@ -7977,11 +8189,11 @@
7977
  radius: 3,
7978
  rotation: 0,
7979
  }),
7980
- (Gn.defaultRoutes = {
7981
  backgroundColor: "backgroundColor",
7982
  borderColor: "borderColor",
7983
  });
7984
- class so extends Ds {
7985
  constructor(t) {
7986
  super(),
7987
  (this.options = void 0),
@@ -7997,34 +8209,34 @@
7997
  inflateAmount: e,
7998
  options: { borderColor: i, backgroundColor: s },
7999
  } = this,
8000
- { inner: n, outer: o } = Qn(this),
8001
  a =
8002
  (r = o.radius).topLeft || r.topRight || r.bottomLeft || r.bottomRight
8003
- ? oe
8004
- : eo;
8005
  var r;
8006
  t.save(),
8007
  (o.w === n.w && o.h === n.h) ||
8008
  (t.beginPath(),
8009
- a(t, io(o, e, n)),
8010
  t.clip(),
8011
- a(t, io(n, -e, o)),
8012
  (t.fillStyle = i),
8013
  t.fill("evenodd")),
8014
  t.beginPath(),
8015
- a(t, io(n, e)),
8016
  (t.fillStyle = s),
8017
  t.fill(),
8018
  t.restore();
8019
  }
8020
  inRange(t, e, i) {
8021
- return to(this, t, e, i);
8022
  }
8023
  inXRange(t, e) {
8024
- return to(this, t, null, e);
8025
  }
8026
  inYRange(t, e) {
8027
- return to(this, null, t, e);
8028
  }
8029
  getCenterPoint(t) {
8030
  const {
@@ -8039,26 +8251,26 @@
8039
  return "x" === t ? this.width / 2 : this.height / 2;
8040
  }
8041
  }
8042
- (so.id = "bar"),
8043
- (so.defaults = {
8044
  borderSkipped: "start",
8045
  borderWidth: 0,
8046
  borderRadius: 0,
8047
  inflateAmount: "auto",
8048
  pointStyle: void 0,
8049
  }),
8050
- (so.defaultRoutes = {
8051
  backgroundColor: "backgroundColor",
8052
  borderColor: "borderColor",
8053
  });
8054
- var no = Object.freeze({
8055
  __proto__: null,
8056
- ArcElement: Vn,
8057
- LineElement: qn,
8058
- PointElement: Gn,
8059
- BarElement: so,
8060
  });
8061
- function oo(t) {
8062
  if (t._decimated) {
8063
  const e = t._data;
8064
  delete t._decimated,
@@ -8066,27 +8278,27 @@
8066
  Object.defineProperty(t, "data", { value: e });
8067
  }
8068
  }
8069
- function ao(t) {
8070
  t.data.datasets.forEach((t) => {
8071
- oo(t);
8072
  });
8073
  }
8074
- var ro = {
8075
  id: "decimation",
8076
  defaults: { algorithm: "min-max", enabled: !1 },
8077
- beforeElementsUpdate: (t, e, i) => {
8078
- if (!i.enabled) return void ao(t);
8079
- const s = t.width;
8080
- t.data.datasets.forEach((e, n) => {
8081
- const { _data: o, indexAxis: a } = e,
8082
- r = t.getDatasetMeta(n),
8083
- l = o || e.data;
8084
- if ("y" === je([a, t.options.indexAxis])) return;
8085
- if ("line" !== r.type) return;
8086
- const h = t.scales[r.xAxisID];
8087
- if ("linear" !== h.type && "time" !== h.type) return;
8088
  if (t.options.parsing) return;
8089
- let { start: c, count: d } = (function (t, e) {
8090
  const i = e.length;
8091
  let s,
8092
  n = 0;
@@ -8098,16 +8310,16 @@
8098
  maxDefined: h,
8099
  } = o.getUserBounds();
8100
  return (
8101
- l && (n = jt(re(e, o.axis, a).lo, 0, i - 1)),
8102
- (s = h ? jt(re(e, o.axis, r).hi + 1, n, i) - n : i - n),
8103
  { start: n, count: s }
8104
  );
8105
- })(r, l);
8106
- if (d <= (i.threshold || 4 * s)) return void oo(e);
8107
- let u;
8108
  switch (
8109
- ($(o) &&
8110
- ((e._data = l),
8111
  delete e.data,
8112
  Object.defineProperty(e, "data", {
8113
  configurable: !0,
@@ -8119,10 +8331,10 @@
8119
  this._data = t;
8120
  },
8121
  })),
8122
- i.algorithm)
8123
  ) {
8124
  case "lttb":
8125
- u = (function (t, e, i, s, n) {
8126
  const o = n.samples || s;
8127
  if (o >= i) return t.slice(e, e + i);
8128
  const a = [],
@@ -8141,13 +8353,13 @@
8141
  o = 0;
8142
  const h = Math.floor((c + 1) * r) + 1 + e,
8143
  m = Math.min(Math.floor((c + 2) * r) + 1, i) + e,
8144
- x = m - h;
8145
  for (s = h; s < m; s++) (n += t[s].x), (o += t[s].y);
8146
- (n /= x), (o /= x);
8147
- const b = Math.floor(c * r) + 1 + e,
8148
  _ = Math.min(Math.floor((c + 1) * r) + 1, i) + e,
8149
  { x: y, y: v } = t[p];
8150
- for (u = f = -1, s = b; s < _; s++)
8151
  (f =
8152
  0.5 *
8153
  Math.abs((y - n) * (t[s].y - v) - (y - t[s].x) * (o - v))),
@@ -8155,12 +8367,11 @@
8155
  (a[l++] = d), (p = g);
8156
  }
8157
  return (a[l++] = t[h]), a;
8158
- })(l, c, d, s, i);
8159
  break;
8160
  case "min-max":
8161
- u = (function (t, e, i, s) {
8162
- let n,
8163
- o,
8164
  a,
8165
  r,
8166
  l,
@@ -8169,153 +8380,145 @@
8169
  d,
8170
  u,
8171
  f,
8172
- g = 0,
8173
- p = 0;
8174
- const m = [],
8175
- x = e + i - 1,
8176
- b = t[e].x,
8177
- _ = t[x].x - b;
8178
- for (n = e; n < e + i; ++n) {
8179
- (o = t[n]), (a = ((o.x - b) / _) * s), (r = o.y);
8180
- const e = 0 | a;
8181
- if (e === l)
8182
- r < u ? ((u = r), (h = n)) : r > f && ((f = r), (c = n)),
8183
- (g = (p * g + o.x) / ++p);
 
8184
  else {
8185
- const i = n - 1;
8186
- if (!$(h) && !$(c)) {
8187
- const e = Math.min(h, c),
8188
- s = Math.max(h, c);
8189
- e !== d && e !== i && m.push({ ...t[e], x: g }),
8190
- s !== d && s !== i && m.push({ ...t[s], x: g });
8191
  }
8192
- n > 0 && i !== d && m.push(t[i]),
8193
- m.push(o),
8194
- (l = e),
8195
- (p = 0),
8196
- (u = f = r),
8197
- (h = c = d = n);
8198
  }
8199
  }
8200
- return m;
8201
- })(l, c, d, s);
8202
  break;
8203
  default:
8204
  throw new Error(
8205
- `Unsupported decimation algorithm '${i.algorithm}'`
8206
  );
8207
  }
8208
- e._decimated = u;
8209
  });
8210
  },
8211
  destroy(t) {
8212
- ao(t);
8213
  },
8214
  };
8215
- function lo(t, e, i) {
8216
- const s = (function (t) {
8217
- const e = t.options,
8218
- i = e.fill;
8219
- let s = K(i && i.target, i);
8220
- return (
8221
- void 0 === s && (s = !!e.backgroundColor),
8222
- !1 !== s && null !== s && (!0 === s ? "origin" : s)
8223
- );
8224
- })(t);
8225
- if (U(s)) return !isNaN(s.value) && s;
8226
- let n = parseFloat(s);
8227
- return X(n) && Math.floor(n) === n
8228
- ? (("-" !== s[0] && "+" !== s[0]) || (n = e + n),
8229
- !(n === e || n < 0 || n >= i) && n)
8230
- : ["origin", "start", "end", "stack", "shape"].indexOf(s) >= 0 && s;
8231
  }
8232
- class ho {
8233
- constructor(t) {
8234
- (this.x = t.x), (this.y = t.y), (this.radius = t.radius);
8235
- }
8236
- pathSegment(t, e, i) {
8237
- const { x: s, y: n, radius: o } = this;
8238
- return (
8239
- (e = e || { start: 0, end: yt }),
8240
- t.arc(s, n, o, e.end, e.start, !0),
8241
- !i.bounds
8242
- );
8243
- }
8244
- interpolate(t) {
8245
- const { x: e, y: i, radius: s } = this,
8246
- n = t.angle;
8247
- return { x: e + Math.cos(n) * s, y: i + Math.sin(n) * s, angle: n };
8248
  }
 
8249
  }
8250
- function co(t) {
8251
- return (t.scale || {}).getPointPositionForValue
8252
- ? (function (t) {
8253
- const { scale: e, fill: i } = t,
8254
- s = e.options,
8255
- n = e.getLabels().length,
8256
- o = [],
8257
- a = s.reverse ? e.max : e.min,
8258
- r = s.reverse ? e.min : e.max;
8259
- let l, h, c;
8260
- if (
8261
- ((c =
8262
- "start" === i
8263
- ? a
8264
- : "end" === i
8265
- ? r
8266
- : U(i)
8267
- ? i.value
8268
- : e.getBaseValue()),
8269
- s.grid.circular)
8270
- )
8271
  return (
8272
- (h = e.getPointPositionForValue(0, a)),
8273
- new ho({
8274
- x: h.x,
8275
- y: h.y,
8276
- radius: e.getDistanceFromCenterForValue(c),
8277
- })
 
 
 
 
8278
  );
8279
- for (l = 0; l < n; ++l) o.push(e.getPointPositionForValue(l, c));
8280
- return o;
8281
- })(t)
8282
- : (function (t) {
8283
- const { scale: e = {}, fill: i } = t;
8284
- let s,
8285
- n = null;
8286
- return (
8287
- "start" === i
8288
- ? (n = e.bottom)
8289
- : "end" === i
8290
- ? (n = e.top)
8291
- : U(i)
8292
- ? (n = e.getPixelForValue(i.value))
8293
- : e.getBasePixel && (n = e.getBasePixel()),
8294
- X(n)
8295
- ? ((s = e.isHorizontal()), { x: s ? n : null, y: s ? null : n })
8296
- : null
8297
- );
8298
- })(t);
8299
  }
8300
- function uo(t, e, i) {
8301
- for (; e > t; e--) {
8302
- const t = i[e];
8303
- if (!isNaN(t.x) && !isNaN(t.y)) break;
 
 
 
 
 
 
 
 
 
8304
  }
8305
- return e;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8306
  }
8307
- function fo(t, e, i) {
8308
  const s = [];
8309
  for (let n = 0; n < i.length; n++) {
8310
  const o = i[n],
8311
- { first: a, last: r, point: l } = go(o, e, "x");
8312
  if (!(!l || (a && r)))
8313
  if (a) s.unshift(l);
8314
  else if ((t.push(l), !r)) break;
8315
  }
8316
  t.push(...s);
8317
  }
8318
- function go(t, e, i) {
8319
  const s = t.interpolate(e, i);
8320
  if (!s) return {};
8321
  const n = s[i],
@@ -8327,16 +8530,34 @@
8327
  const e = o[t],
8328
  s = a[e.start][i],
8329
  h = a[e.end][i];
8330
- if (Yt(n, s, h)) {
8331
  (r = n === s), (l = n === h);
8332
  break;
8333
  }
8334
  }
8335
  return { first: r, last: l, point: s };
8336
  }
8337
- function po(t) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8338
  const { chart: e, fill: i, line: s } = t;
8339
- if (X(i))
8340
  return (function (t, e) {
8341
  const i = t.getDatasetMeta(e);
8342
  return i && t.isDatasetVisible(e) ? i.dataset : null;
@@ -8357,59 +8578,108 @@
8357
  }
8358
  return i;
8359
  })(e, i);
8360
- r.push(mo({ x: null, y: e.bottom }, s));
8361
  for (let t = 0; t < o.length; t++) {
8362
  const e = o[t];
8363
- for (let t = e.start; t <= e.end; t++) fo(n, a[t], r);
8364
  }
8365
- return new qn({ points: n, options: {} });
8366
  })(t);
8367
  if ("shape" === i) return !0;
8368
- const n = co(t);
8369
- return n instanceof ho ? n : mo(n, s);
8370
- }
8371
- function mo(t, e) {
8372
- let i = [],
8373
- s = !1;
8374
- return (
8375
- Y(t)
8376
- ? ((s = !0), (i = t))
8377
- : (i = (function (t, e) {
8378
- const { x: i = null, y: s = null } = t || {},
8379
- n = e.points,
8380
- o = [];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8381
  return (
8382
- e.segments.forEach(({ start: t, end: e }) => {
8383
- e = uo(t, e, n);
8384
- const a = n[t],
8385
- r = n[e];
8386
- null !== s
8387
- ? (o.push({ x: a.x, y: s }), o.push({ x: r.x, y: s }))
8388
- : null !== i &&
8389
- (o.push({ x: i, y: a.y }), o.push({ x: i, y: r.y }));
8390
- }),
8391
- o
8392
  );
8393
- })(t, e)),
8394
- i.length
8395
- ? new qn({ points: i, options: { tension: 0 }, _loop: s, _fullLoop: s })
8396
- : null
8397
- );
 
 
 
 
8398
  }
8399
- function xo(t, e, i) {
8400
- let s = t[e].fill;
8401
- const n = [e];
8402
- let o;
8403
- if (!i) return s;
8404
- for (; !1 !== s && -1 === n.indexOf(s); ) {
8405
- if (!X(s)) return s;
8406
- if (((o = t[s]), !o)) return !1;
8407
- if (o.visible) return s;
8408
- n.push(s), (s = o.fill);
8409
- }
8410
- return !1;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8411
  }
8412
- function bo(t, e, i) {
8413
  const { segments: s, points: n } = e;
8414
  let o = !0,
8415
  a = !1;
@@ -8417,7 +8687,7 @@
8417
  for (const r of s) {
8418
  const { start: s, end: l } = r,
8419
  h = n[s],
8420
- c = n[uo(s, l, n)];
8421
  o
8422
  ? (t.moveTo(h.x, h.y), (o = !1))
8423
  : (t.lineTo(h.x, i), t.lineTo(h.x, h.y)),
@@ -8426,28 +8696,7 @@
8426
  }
8427
  t.lineTo(e.first().x, i), t.closePath(), t.clip();
8428
  }
8429
- function _o(t, e, i, s) {
8430
- if (s) return;
8431
- let n = e[t],
8432
- o = i[t];
8433
- return (
8434
- "angle" === t && ((n = Nt(n)), (o = Nt(o))),
8435
- { property: t, start: n, end: o }
8436
- );
8437
- }
8438
- function yo(t, e, i, s) {
8439
- return t && e ? s(t[i], e[i]) : t ? t[i] : e ? e[i] : 0;
8440
- }
8441
- function vo(t, e, i) {
8442
- const { top: s, bottom: n } = e.chart.chartArea,
8443
- { property: o, start: a, end: r } = i || {};
8444
- "x" === o && (t.beginPath(), t.rect(a, s, r - a, n - s), t.clip());
8445
- }
8446
- function wo(t, e, i, s) {
8447
- const n = e.interpolate(i, s);
8448
- n && t.lineTo(n.x, n.y);
8449
- }
8450
- function Mo(t, e) {
8451
  const { line: i, target: s, property: n, color: o, scale: a } = e,
8452
  r = (function (t, e, i) {
8453
  const s = t.segments,
@@ -8456,22 +8705,22 @@
8456
  a = [];
8457
  for (const t of s) {
8458
  let { start: s, end: r } = t;
8459
- r = uo(s, r, n);
8460
- const l = _o(i, n[s], n[r], t.loop);
8461
  if (!e.segments) {
8462
  a.push({ source: t, target: l, start: n[s], end: n[r] });
8463
  continue;
8464
  }
8465
- const h = Wi(e, l);
8466
  for (const e of h) {
8467
- const s = _o(i, o[e.start], o[e.end], e.loop),
8468
- r = Vi(t, n, s);
8469
  for (const t of r)
8470
  a.push({
8471
  source: t,
8472
  target: e,
8473
- start: { [i]: yo(l, s, "start", Math.max) },
8474
- end: { [i]: yo(l, s, "end", Math.min) },
8475
  });
8476
  }
8477
  }
@@ -8480,52 +8729,27 @@
8480
  for (const { source: e, target: l, start: h, end: c } of r) {
8481
  const { style: { backgroundColor: r = o } = {} } = e,
8482
  d = !0 !== s;
8483
- t.save(), (t.fillStyle = r), vo(t, a, d && _o(n, h, c)), t.beginPath();
8484
  const u = !!i.pathSegment(t, e);
8485
  let f;
8486
  if (d) {
8487
- u ? t.closePath() : wo(t, s, c, n);
8488
  const e = !!s.pathSegment(t, l, { move: u, reverse: !0 });
8489
- (f = u && e), f || wo(t, s, h, n);
8490
  }
8491
  t.closePath(), t.fill(f ? "evenodd" : "nonzero"), t.restore();
8492
  }
8493
  }
8494
- function ko(t, e, i) {
8495
- const s = po(e),
8496
- { line: n, scale: o, axis: a } = e,
8497
- r = n.options,
8498
- l = r.fill,
8499
- h = r.backgroundColor,
8500
- { above: c = h, below: d = h } = l || {};
8501
- s &&
8502
- n.points.length &&
8503
- (Qt(t, i),
8504
- (function (t, e) {
8505
- const { line: i, target: s, above: n, below: o, area: a, scale: r } = e,
8506
- l = i._loop ? "angle" : e.axis;
8507
- t.save(),
8508
- "x" === l &&
8509
- o !== n &&
8510
- (bo(t, s, a.top),
8511
- Mo(t, { line: i, target: s, color: n, scale: r, property: l }),
8512
- t.restore(),
8513
- t.save(),
8514
- bo(t, s, a.bottom)),
8515
- Mo(t, { line: i, target: s, color: o, scale: r, property: l }),
8516
- t.restore();
8517
- })(t, {
8518
- line: n,
8519
- target: s,
8520
- above: c,
8521
- below: d,
8522
- area: i,
8523
- scale: o,
8524
- axis: a,
8525
- }),
8526
- te(t));
8527
  }
8528
- var So = {
8529
  id: "filler",
8530
  afterDatasetsUpdate(t, e, i) {
8531
  const s = (t.data.datasets || []).length,
@@ -8537,11 +8761,11 @@
8537
  (l = null),
8538
  r &&
8539
  r.options &&
8540
- r instanceof qn &&
8541
  (l = {
8542
  visible: t.isDatasetVisible(a),
8543
  index: a,
8544
- fill: lo(r, a, s),
8545
  chart: t,
8546
  axis: o.controller.options.indexAxis,
8547
  scale: o.vScale,
@@ -8550,7 +8774,7 @@
8550
  (o.$filler = l),
8551
  n.push(l);
8552
  for (a = 0; a < s; ++a)
8553
- (l = n[a]), l && !1 !== l.fill && (l.fill = xo(n, a, i.propagate));
8554
  },
8555
  beforeDraw(t, e, i) {
8556
  const s = "beforeDraw" === i.drawTime,
@@ -8558,7 +8782,9 @@
8558
  o = t.chartArea;
8559
  for (let e = n.length - 1; e >= 0; --e) {
8560
  const i = n[e].$filler;
8561
- i && (i.line.updateControlPoints(o, i.axis), s && ko(t.ctx, i, o));
 
 
8562
  }
8563
  },
8564
  beforeDatasetsDraw(t, e, i) {
@@ -8566,26 +8792,24 @@
8566
  const s = t.getSortedVisibleDatasetMetas();
8567
  for (let e = s.length - 1; e >= 0; --e) {
8568
  const i = s[e].$filler;
8569
- i && ko(t.ctx, i, t.chartArea);
8570
  }
8571
  },
8572
  beforeDatasetDraw(t, e, i) {
8573
  const s = e.meta.$filler;
8574
- s &&
8575
- !1 !== s.fill &&
8576
- "beforeDatasetDraw" === i.drawTime &&
8577
- ko(t.ctx, s, t.chartArea);
8578
  },
8579
  defaults: { propagate: !0, drawTime: "beforeDatasetDraw" },
8580
  };
8581
- const Po = (t, e) => {
8582
  let { boxHeight: i = e, boxWidth: s = e } = t;
8583
  return (
8584
- t.usePointStyle && ((i = Math.min(i, e)), (s = Math.min(s, e))),
 
8585
  { boxWidth: s, boxHeight: i, itemHeight: Math.max(e, i) }
8586
  );
8587
  };
8588
- class Do extends Ds {
8589
  constructor(t) {
8590
  super(),
8591
  (this._added = !1),
@@ -8630,7 +8854,7 @@
8630
  }
8631
  buildLabels() {
8632
  const t = this.options.labels || {};
8633
- let e = J(t.generateLabels, [this.chart], this) || [];
8634
  t.filter && (e = e.filter((e) => t.filter(e, this.chart.data))),
8635
  t.sort && (e = e.sort((e, i) => t.sort(e, i, this.chart.data))),
8636
  this.options.reverse && e.reverse(),
@@ -8640,10 +8864,10 @@
8640
  const { options: t, ctx: e } = this;
8641
  if (!t.display) return void (this.width = this.height = 0);
8642
  const i = t.labels,
8643
- s = He(i.font),
8644
  n = s.size,
8645
  o = this._computeTitleHeight(),
8646
- { boxWidth: a, itemHeight: r } = Po(i, n);
8647
  let l, h;
8648
  (e.font = s.string),
8649
  this.isHorizontal()
@@ -8721,35 +8945,35 @@
8721
  options: {
8722
  align: i,
8723
  labels: { padding: s },
8724
- rtl: o,
8725
  },
8726
  } = this,
8727
- a = Ei(o, this.left, this.width);
8728
  if (this.isHorizontal()) {
8729
- let o = 0,
8730
- r = n(i, this.left + s, this.right - this.lineWidths[o]);
8731
- for (const l of e)
8732
- o !== l.row &&
8733
- ((o = l.row),
8734
- (r = n(i, this.left + s, this.right - this.lineWidths[o]))),
8735
- (l.top += this.top + t + s),
8736
- (l.left = a.leftForLtr(a.x(r), l.width)),
8737
- (r += l.width + s);
8738
  } else {
8739
- let o = 0,
8740
- r = n(i, this.top + t + s, this.bottom - this.columnSizes[o].height);
8741
- for (const l of e)
8742
- l.col !== o &&
8743
- ((o = l.col),
8744
- (r = n(
8745
  i,
8746
  this.top + t + s,
8747
- this.bottom - this.columnSizes[o].height
8748
  ))),
8749
- (l.top = r),
8750
- (l.left += this.left + s),
8751
- (l.left = a.leftForLtr(a.x(l.left), l.width)),
8752
- (r += l.height + s);
8753
  }
8754
  }
8755
  isHorizontal() {
@@ -8760,155 +8984,155 @@
8760
  draw() {
8761
  if (this.options.display) {
8762
  const t = this.ctx;
8763
- Qt(t, this), this._draw(), te(t);
8764
  }
8765
  }
8766
  _draw() {
8767
  const { options: t, columnSizes: e, lineWidths: i, ctx: s } = this,
8768
- { align: a, labels: r } = t,
8769
- l = bt.color,
8770
- h = Ei(t.rtl, this.left, this.width),
8771
- c = He(r.font),
8772
- { color: d, padding: u } = r,
8773
- f = c.size,
8774
- g = f / 2;
8775
- let p;
8776
  this.drawTitle(),
8777
- (s.textAlign = h.textAlign("left")),
8778
  (s.textBaseline = "middle"),
8779
  (s.lineWidth = 0.5),
8780
- (s.font = c.string);
8781
- const { boxWidth: m, boxHeight: x, itemHeight: b } = Po(r, f),
8782
- _ = this.isHorizontal(),
8783
- y = this._computeTitleHeight();
8784
- (p = _
8785
  ? {
8786
- x: n(a, this.left + u, this.right - i[0]),
8787
- y: this.top + u + y,
8788
  line: 0,
8789
  }
8790
  : {
8791
- x: this.left + u,
8792
- y: n(a, this.top + y + u, this.bottom - e[0].height),
8793
  line: 0,
8794
  }),
8795
- Ii(this.ctx, t.textDirection);
8796
- const v = b + u;
8797
- this.legendItems.forEach((w, M) => {
8798
- (s.strokeStyle = w.fontColor || d), (s.fillStyle = w.fontColor || d);
8799
- const k = s.measureText(w.text).width,
8800
- S = h.textAlign(w.textAlign || (w.textAlign = r.textAlign)),
8801
- P = m + g + k;
8802
- let D = p.x,
8803
- C = p.y;
8804
- h.setWidth(this.width),
8805
- _
8806
- ? M > 0 &&
8807
- D + P + u > this.right &&
8808
- ((C = p.y += v),
8809
- p.line++,
8810
- (D = p.x = n(a, this.left + u, this.right - i[p.line])))
8811
- : M > 0 &&
8812
- C + v > this.bottom &&
8813
- ((D = p.x = D + e[p.line].width + u),
8814
- p.line++,
8815
- (C = p.y =
8816
- n(a, this.top + y + u, this.bottom - e[p.line].height)));
8817
  !(function (t, e, i) {
8818
- if (isNaN(m) || m <= 0 || isNaN(x) || x < 0) return;
8819
  s.save();
8820
- const n = K(i.lineWidth, 1);
8821
  if (
8822
- ((s.fillStyle = K(i.fillStyle, l)),
8823
- (s.lineCap = K(i.lineCap, "butt")),
8824
- (s.lineDashOffset = K(i.lineDashOffset, 0)),
8825
- (s.lineJoin = K(i.lineJoin, "miter")),
8826
  (s.lineWidth = n),
8827
- (s.strokeStyle = K(i.strokeStyle, l)),
8828
- s.setLineDash(K(i.lineDash, [])),
8829
- r.usePointStyle)
8830
  ) {
8831
- const o = {
8832
  radius: (m * Math.SQRT2) / 2,
8833
  pointStyle: i.pointStyle,
8834
  rotation: i.rotation,
8835
  borderWidth: n,
8836
  },
8837
- a = h.xPlus(t, m / 2);
8838
- Zt(s, o, a, e + g);
8839
  } else {
8840
- const o = e + Math.max((f - x) / 2, 0),
8841
- a = h.leftForLtr(t, m),
8842
- r = We(i.borderRadius);
8843
  s.beginPath(),
8844
  Object.values(r).some((t) => 0 !== t)
8845
- ? oe(s, { x: a, y: o, w: m, h: x, radius: r })
8846
- : s.rect(a, o, m, x),
8847
  s.fill(),
8848
  0 !== n && s.stroke();
8849
  }
8850
  s.restore();
8851
- })(h.x(D), C, w),
8852
- (D = o(S, D + m + g, _ ? D + P : this.right, t.rtl)),
8853
  (function (t, e, i) {
8854
- se(s, i.text, t, e + b / 2, c, {
8855
  strikethrough: i.hidden,
8856
- textAlign: h.textAlign(i.textAlign),
8857
  });
8858
- })(h.x(D), C, w),
8859
- _ ? (p.x += P + u) : (p.y += v);
8860
  }),
8861
- zi(this.ctx, t.textDirection);
8862
  }
8863
  drawTitle() {
8864
  const t = this.options,
8865
  e = t.title,
8866
- i = He(e.font),
8867
- o = Ne(e.padding);
8868
  if (!e.display) return;
8869
- const a = Ei(t.rtl, this.left, this.width),
8870
- r = this.ctx,
8871
- l = e.position,
8872
- h = i.size / 2,
8873
- c = o.top + h;
8874
- let d,
8875
- u = this.left,
8876
- f = this.width;
8877
  if (this.isHorizontal())
8878
- (f = Math.max(...this.lineWidths)),
8879
- (d = this.top + c),
8880
- (u = n(t.align, u, this.right - f));
8881
  else {
8882
  const e = this.columnSizes.reduce((t, e) => Math.max(t, e.height), 0);
8883
- d =
8884
- c +
8885
- n(
8886
  t.align,
8887
  this.top,
8888
  this.bottom - e - t.labels.padding - this._computeTitleHeight()
8889
  );
8890
  }
8891
- const g = n(l, u, u + f);
8892
- (r.textAlign = a.textAlign(s(l))),
8893
- (r.textBaseline = "middle"),
8894
- (r.strokeStyle = e.color),
8895
- (r.fillStyle = e.color),
8896
- (r.font = i.string),
8897
- se(r, e.text, g, d, i);
8898
  }
8899
  _computeTitleHeight() {
8900
  const t = this.options.title,
8901
- e = He(t.font),
8902
- i = Ne(t.padding);
8903
  return t.display ? e.lineHeight + i.height : 0;
8904
  }
8905
  _getLegendItemAt(t, e) {
8906
  let i, s, n;
8907
- if (Yt(t, this.left, this.right) && Yt(e, this.top, this.bottom))
8908
  for (n = this.legendHitBoxes, i = 0; i < n.length; ++i)
8909
  if (
8910
  ((s = n[i]),
8911
- Yt(t, s.left, s.left + s.width) && Yt(e, s.top, s.top + s.height))
8912
  )
8913
  return this.legendItems[i];
8914
  return null;
@@ -8917,14 +9141,18 @@
8917
  const e = this.options;
8918
  if (
8919
  !(function (t, e) {
8920
- if ("mousemove" === t && (e.onHover || e.onLeave)) return !0;
 
 
 
 
8921
  if (e.onClick && ("click" === t || "mouseup" === t)) return !0;
8922
  return !1;
8923
  })(t.type, e)
8924
  )
8925
  return;
8926
  const i = this._getLegendItemAt(t.x, t.y);
8927
- if ("mousemove" === t.type) {
8928
  const o = this._hoveredItem,
8929
  a =
8930
  ((n = i),
@@ -8932,26 +9160,26 @@
8932
  null !== n &&
8933
  s.datasetIndex === n.datasetIndex &&
8934
  s.index === n.index);
8935
- o && !a && J(e.onLeave, [t, o, this], this),
8936
  (this._hoveredItem = i),
8937
- i && !a && J(e.onHover, [t, i, this], this);
8938
- } else i && J(e.onClick, [t, i, this], this);
8939
  var s, n;
8940
  }
8941
  }
8942
- var Co = {
8943
  id: "legend",
8944
- _element: Do,
8945
  start(t, e, i) {
8946
- const s = (t.legend = new Do({ ctx: t.ctx, options: i, chart: t }));
8947
- ni.configure(t, s, i), ni.addBox(t, s);
8948
  },
8949
  stop(t) {
8950
- ni.removeBox(t, t.legend), delete t.legend;
8951
  },
8952
  beforeUpdate(t, e, i) {
8953
  const s = t.legend;
8954
- ni.configure(t, s, i), (s.options = i);
8955
  },
8956
  afterUpdate(t) {
8957
  const e = t.legend;
@@ -8992,7 +9220,7 @@
8992
  } = t.legend.options;
8993
  return t._getSortedDatasetMetas().map((t) => {
8994
  const a = t.controller.getStyle(i ? 0 : void 0),
8995
- r = Ne(a.borderWidth);
8996
  return {
8997
  text: e[t.index].label,
8998
  fillStyle: a.backgroundColor,
@@ -9027,7 +9255,7 @@
9027
  },
9028
  },
9029
  };
9030
- class Oo extends Ds {
9031
  constructor(t) {
9032
  super(),
9033
  (this.chart = t.chart),
@@ -9049,65 +9277,65 @@
9049
  if (((this.left = 0), (this.top = 0), !i.display))
9050
  return void (this.width = this.height = this.right = this.bottom = 0);
9051
  (this.width = this.right = t), (this.height = this.bottom = e);
9052
- const s = Y(i.text) ? i.text.length : 1;
9053
- this._padding = Ne(i.padding);
9054
- const n = s * He(i.font).lineHeight + this._padding.height;
9055
- this.isHorizontal() ? (this.height = n) : (this.width = n);
9056
  }
9057
  isHorizontal() {
9058
  const t = this.options.position;
9059
  return "top" === t || "bottom" === t;
9060
  }
9061
  _drawArgs(t) {
9062
- const { top: e, left: i, bottom: s, right: o, options: a } = this,
9063
- r = a.align;
9064
- let l,
 
9065
  h,
9066
- c,
9067
- d = 0;
9068
  return (
9069
  this.isHorizontal()
9070
- ? ((h = n(r, i, o)), (c = e + t), (l = o - i))
9071
- : ("left" === a.position
9072
- ? ((h = i + t), (c = n(r, s, e)), (d = -0.5 * _t))
9073
- : ((h = o - t), (c = n(r, e, s)), (d = 0.5 * _t)),
9074
- (l = s - e)),
9075
- { titleX: h, titleY: c, maxWidth: l, rotation: d }
9076
  );
9077
  }
9078
  draw() {
9079
  const t = this.ctx,
9080
  e = this.options;
9081
  if (!e.display) return;
9082
- const i = He(e.font),
9083
- n = i.lineHeight / 2 + this._padding.top,
9084
- { titleX: o, titleY: a, maxWidth: r, rotation: l } = this._drawArgs(n);
9085
- se(t, e.text, 0, 0, i, {
9086
  color: e.color,
9087
- maxWidth: r,
9088
- rotation: l,
9089
- textAlign: s(e.align),
9090
  textBaseline: "middle",
9091
- translation: [o, a],
9092
  });
9093
  }
9094
  }
9095
- var Ao = {
9096
  id: "title",
9097
- _element: Oo,
9098
  start(t, e, i) {
9099
  !(function (t, e) {
9100
- const i = new Oo({ ctx: t.ctx, options: e, chart: t });
9101
- ni.configure(t, i, e), ni.addBox(t, i), (t.titleBlock = i);
9102
  })(t, i);
9103
  },
9104
  stop(t) {
9105
  const e = t.titleBlock;
9106
- ni.removeBox(t, e), delete t.titleBlock;
9107
  },
9108
  beforeUpdate(t, e, i) {
9109
  const s = t.titleBlock;
9110
- ni.configure(t, s, i), (s.options = i);
9111
  },
9112
  defaults: {
9113
  align: "center",
@@ -9122,19 +9350,19 @@
9122
  defaultRoutes: { color: "color" },
9123
  descriptors: { _scriptable: !0, _indexable: !1 },
9124
  };
9125
- const To = new WeakMap();
9126
- var Lo = {
9127
  id: "subtitle",
9128
  start(t, e, i) {
9129
- const s = new Oo({ ctx: t.ctx, options: i, chart: t });
9130
- ni.configure(t, s, i), ni.addBox(t, s), To.set(t, s);
9131
  },
9132
  stop(t) {
9133
- ni.removeBox(t, To.get(t)), To.delete(t);
9134
  },
9135
  beforeUpdate(t, e, i) {
9136
- const s = To.get(t);
9137
- ni.configure(t, s, i), (s.options = i);
9138
  },
9139
  defaults: {
9140
  align: "center",
@@ -9149,7 +9377,7 @@
9149
  defaultRoutes: { color: "color" },
9150
  descriptors: { _scriptable: !0, _indexable: !1 },
9151
  };
9152
- const Ro = {
9153
  average(t) {
9154
  if (!t.length) return !1;
9155
  let e,
@@ -9177,7 +9405,7 @@
9177
  for (i = 0, s = t.length; i < s; ++i) {
9178
  const s = t[i].element;
9179
  if (s && s.hasValue()) {
9180
- const t = Vt(e, s.getCenterPoint());
9181
  t < r && ((r = t), (n = s));
9182
  }
9183
  }
@@ -9188,15 +9416,15 @@
9188
  return { x: o, y: a };
9189
  },
9190
  };
9191
- function Eo(t, e) {
9192
- return e && (Y(e) ? Array.prototype.push.apply(t, e) : t.push(e)), t;
9193
  }
9194
- function Io(t) {
9195
  return ("string" == typeof t || t instanceof String) && t.indexOf("\n") > -1
9196
  ? t.split("\n")
9197
  : t;
9198
  }
9199
- function zo(t, e) {
9200
  const { element: i, datasetIndex: s, index: n } = e,
9201
  o = t.getDatasetMeta(s).controller,
9202
  { label: a, value: r } = o.getLabelAndValue(n);
@@ -9212,60 +9440,60 @@
9212
  element: i,
9213
  };
9214
  }
9215
- function Fo(t, e) {
9216
  const i = t.chart.ctx,
9217
  { body: s, footer: n, title: o } = t,
9218
  { boxWidth: a, boxHeight: r } = e,
9219
- l = He(e.bodyFont),
9220
- h = He(e.titleFont),
9221
- c = He(e.footerFont),
9222
- d = o.length,
9223
- u = n.length,
9224
- f = s.length,
9225
- g = Ne(e.padding);
9226
- let p = g.height,
9227
- m = 0,
9228
  x = s.reduce(
9229
  (t, e) => t + e.before.length + e.lines.length + e.after.length,
9230
  0
9231
  );
9232
  if (
9233
  ((x += t.beforeBody.length + t.afterBody.length),
9234
- d &&
9235
- (p +=
9236
- d * h.lineHeight + (d - 1) * e.titleSpacing + e.titleMarginBottom),
9237
  x)
9238
  ) {
9239
- p +=
9240
- f * (e.displayColors ? Math.max(r, l.lineHeight) : l.lineHeight) +
9241
- (x - f) * l.lineHeight +
9242
  (x - 1) * e.bodySpacing;
9243
  }
9244
- u &&
9245
- (p += e.footerMarginTop + u * c.lineHeight + (u - 1) * e.footerSpacing);
9246
- let b = 0;
9247
- const _ = function (t) {
9248
- m = Math.max(m, i.measureText(t).width + b);
9249
  };
9250
  return (
9251
  i.save(),
9252
  (i.font = h.string),
9253
- Q(t.title, _),
9254
  (i.font = l.string),
9255
- Q(t.beforeBody.concat(t.afterBody), _),
9256
- (b = e.displayColors ? a + 2 + e.boxPadding : 0),
9257
- Q(s, (t) => {
9258
- Q(t.before, _), Q(t.lines, _), Q(t.after, _);
9259
  }),
9260
- (b = 0),
9261
  (i.font = c.string),
9262
- Q(t.footer, _),
9263
  i.restore(),
9264
- (m += g.width),
9265
- { width: m, height: p }
9266
  );
9267
  }
9268
- function Bo(t, e, i, s) {
9269
  const { x: n, width: o } = i,
9270
  {
9271
  width: a,
@@ -9290,7 +9518,7 @@
9290
  h
9291
  );
9292
  }
9293
- function Vo(t, e, i) {
9294
  const s =
9295
  i.yAlign ||
9296
  e.yAlign ||
@@ -9298,13 +9526,13 @@
9298
  const { y: i, height: s } = e;
9299
  return i < s / 2 ? "top" : i > t.height - s / 2 ? "bottom" : "center";
9300
  })(t, i);
9301
- return { xAlign: i.xAlign || e.xAlign || Bo(t, e, i, s), yAlign: s };
9302
  }
9303
- function Wo(t, e, i, s) {
9304
  const { caretSize: n, caretPadding: o, cornerRadius: a } = t,
9305
  { xAlign: r, yAlign: l } = i,
9306
  h = n + o,
9307
- { topLeft: c, topRight: d, bottomLeft: u, bottomRight: f } = We(a);
9308
  let g = (function (t, e) {
9309
  let { x: i, width: s } = t;
9310
  return "right" === e ? (i -= s) : "center" === e && (i -= s / 2), i;
@@ -9321,26 +9549,26 @@
9321
  : "left" === r
9322
  ? (g -= Math.max(c, u) + n)
9323
  : "right" === r && (g += Math.max(d, f) + n),
9324
- { x: jt(g, 0, s.width - e.width), y: jt(p, 0, s.height - e.height) }
9325
  );
9326
  }
9327
- function No(t, e, i) {
9328
- const s = Ne(i.padding);
9329
  return "center" === e
9330
  ? t.x + t.width / 2
9331
  : "right" === e
9332
  ? t.x + t.width - s.right
9333
  : t.x + s.left;
9334
  }
9335
- function Ho(t) {
9336
- return Eo([], Io(t));
9337
  }
9338
- function jo(t, e) {
9339
  const i =
9340
  e && e.dataset && e.dataset.tooltip && e.dataset.tooltip.callbacks;
9341
  return i ? t.override(i) : t;
9342
  }
9343
- class $o extends Ds {
9344
  constructor(t) {
9345
  super(),
9346
  (this.opacity = 0),
@@ -9383,7 +9611,7 @@
9383
  const e = this.chart,
9384
  i = this.options.setContext(this.getContext()),
9385
  s = i.enabled && e.options.animation && i.animations,
9386
- n = new gs(this.chart, s);
9387
  return s._cacheable && (this._cachedAnimations = Object.freeze(n)), n;
9388
  }
9389
  getContext() {
@@ -9393,7 +9621,7 @@
9393
  ((t = this.chart.getContext()),
9394
  (e = this),
9395
  (i = this._tooltipItems),
9396
- Ye(t, { tooltip: e, tooltipItems: i, type: "tooltip" })))
9397
  );
9398
  var t, e, i;
9399
  }
@@ -9403,28 +9631,28 @@
9403
  n = i.title.apply(this, [t]),
9404
  o = i.afterTitle.apply(this, [t]);
9405
  let a = [];
9406
- return (a = Eo(a, Io(s))), (a = Eo(a, Io(n))), (a = Eo(a, Io(o))), a;
9407
  }
9408
  getBeforeBody(t, e) {
9409
- return Ho(e.callbacks.beforeBody.apply(this, [t]));
9410
  }
9411
  getBody(t, e) {
9412
  const { callbacks: i } = e,
9413
  s = [];
9414
  return (
9415
- Q(t, (t) => {
9416
  const e = { before: [], lines: [], after: [] },
9417
- n = jo(i, t);
9418
- Eo(e.before, Io(n.beforeLabel.call(this, t))),
9419
- Eo(e.lines, n.label.call(this, t)),
9420
- Eo(e.after, Io(n.afterLabel.call(this, t))),
9421
  s.push(e);
9422
  }),
9423
  s
9424
  );
9425
  }
9426
  getAfterBody(t, e) {
9427
- return Ho(e.callbacks.afterBody.apply(this, [t]));
9428
  }
9429
  getFooter(t, e) {
9430
  const { callbacks: i } = e,
@@ -9432,7 +9660,7 @@
9432
  n = i.footer.apply(this, [t]),
9433
  o = i.afterFooter.apply(this, [t]);
9434
  let a = [];
9435
- return (a = Eo(a, Io(s))), (a = Eo(a, Io(n))), (a = Eo(a, Io(o))), a;
9436
  }
9437
  _createItems(t) {
9438
  const e = this._active,
@@ -9443,12 +9671,12 @@
9443
  let a,
9444
  r,
9445
  l = [];
9446
- for (a = 0, r = e.length; a < r; ++a) l.push(zo(this.chart, e[a]));
9447
  return (
9448
  t.filter && (l = l.filter((e, s, n) => t.filter(e, s, n, i))),
9449
  t.itemSort && (l = l.sort((e, s) => t.itemSort(e, s, i))),
9450
- Q(l, (e) => {
9451
- const i = jo(t.callbacks, e);
9452
  s.push(i.labelColor.call(this, e)),
9453
  n.push(i.labelPointStyle.call(this, e)),
9454
  o.push(i.labelTextColor.call(this, e));
@@ -9466,17 +9694,17 @@
9466
  let n,
9467
  o = [];
9468
  if (s.length) {
9469
- const t = Ro[i.position].call(this, s, this._eventPosition);
9470
  (o = this._createItems(i)),
9471
  (this.title = this.getTitle(o, i)),
9472
  (this.beforeBody = this.getBeforeBody(o, i)),
9473
  (this.body = this.getBody(o, i)),
9474
  (this.afterBody = this.getAfterBody(o, i)),
9475
  (this.footer = this.getFooter(o, i));
9476
- const e = (this._size = Fo(this, i)),
9477
  a = Object.assign({}, t, e),
9478
- r = Vo(this.chart, i, a),
9479
- l = Wo(i, a, r, this.chart);
9480
  (this.xAlign = r.xAlign),
9481
  (this.yAlign = r.yAlign),
9482
  (n = {
@@ -9507,17 +9735,17 @@
9507
  getCaretPosition(t, e, i) {
9508
  const { xAlign: s, yAlign: n } = this,
9509
  { caretSize: o, cornerRadius: a } = i,
9510
- { topLeft: r, topRight: l, bottomLeft: h, bottomRight: c } = We(a),
9511
  { x: d, y: u } = t,
9512
  { width: f, height: g } = e;
9513
- let p, m, x, b, _, y;
9514
  return (
9515
  "center" === n
9516
  ? ((_ = u + g / 2),
9517
  "left" === s
9518
- ? ((p = d), (m = p - o), (b = _ + o), (y = _ - o))
9519
- : ((p = d + f), (m = p + o), (b = _ - o), (y = _ + o)),
9520
- (x = p))
9521
  : ((m =
9522
  "left" === s
9523
  ? d + Math.max(r, h) + o
@@ -9525,10 +9753,10 @@
9525
  ? d + f - Math.max(l, c) - o
9526
  : this.caretX),
9527
  "top" === n
9528
- ? ((b = u), (_ = b - o), (p = m - o), (x = m + o))
9529
- : ((b = u + g), (_ = b + o), (p = m + o), (x = m - o)),
9530
- (y = b)),
9531
- { x1: p, x2: m, x3: x, y1: b, y2: _, y3: y }
9532
  );
9533
  }
9534
  drawTitle(t, e, i) {
@@ -9536,12 +9764,12 @@
9536
  n = s.length;
9537
  let o, a, r;
9538
  if (n) {
9539
- const l = Ei(i.rtl, this.x, this.width);
9540
  for (
9541
- t.x = No(this, i.titleAlign, i),
9542
  e.textAlign = l.textAlign(i.titleAlign),
9543
  e.textBaseline = "middle",
9544
- o = He(i.titleFont),
9545
  a = i.titleSpacing,
9546
  e.fillStyle = i.titleColor,
9547
  e.font = o.string,
@@ -9554,53 +9782,55 @@
9554
  r + 1 === n && (t.y += i.titleMarginBottom - a);
9555
  }
9556
  }
9557
- _drawColorBox(t, e, i, s, n) {
9558
- const o = this.labelColors[i],
9559
- a = this.labelPointStyles[i],
9560
- { boxHeight: r, boxWidth: l, boxPadding: h } = n,
9561
- c = He(n.bodyFont),
9562
- d = No(this, "left", n),
9563
- u = s.x(d),
9564
- f = r < c.lineHeight ? (c.lineHeight - r) / 2 : 0,
9565
- g = e.y + f;
9566
- if (n.usePointStyle) {
9567
  const e = {
9568
- radius: Math.min(l, r) / 2,
9569
- pointStyle: a.pointStyle,
9570
- rotation: a.rotation,
9571
  borderWidth: 1,
9572
  },
9573
- i = s.leftForLtr(u, l) + l / 2,
9574
- h = g + r / 2;
9575
- (t.strokeStyle = n.multiKeyBackground),
9576
- (t.fillStyle = n.multiKeyBackground),
9577
- Zt(t, e, i, h),
9578
- (t.strokeStyle = o.borderColor),
9579
- (t.fillStyle = o.backgroundColor),
9580
- Zt(t, e, i, h);
9581
  } else {
9582
- (t.lineWidth = o.borderWidth || 1),
9583
- (t.strokeStyle = o.borderColor),
9584
- t.setLineDash(o.borderDash || []),
9585
- (t.lineDashOffset = o.borderDashOffset || 0);
9586
- const e = s.leftForLtr(u, l - h),
9587
- i = s.leftForLtr(s.xPlus(u, 1), l - h - 2),
9588
- a = We(o.borderRadius);
9589
- Object.values(a).some((t) => 0 !== t)
 
 
9590
  ? (t.beginPath(),
9591
- (t.fillStyle = n.multiKeyBackground),
9592
- oe(t, { x: e, y: g, w: l, h: r, radius: a }),
9593
  t.fill(),
9594
  t.stroke(),
9595
- (t.fillStyle = o.backgroundColor),
9596
  t.beginPath(),
9597
- oe(t, { x: i, y: g + 1, w: l - 2, h: r - 2, radius: a }),
9598
  t.fill())
9599
- : ((t.fillStyle = n.multiKeyBackground),
9600
- t.fillRect(e, g, l, r),
9601
- t.strokeRect(e, g, l, r),
9602
- (t.fillStyle = o.backgroundColor),
9603
- t.fillRect(i, g + 1, l - 2, r - 2));
9604
  }
9605
  t.fillStyle = this.labelTextColors[i];
9606
  }
@@ -9614,60 +9844,60 @@
9614
  boxWidth: l,
9615
  boxPadding: h,
9616
  } = i,
9617
- c = He(i.bodyFont);
9618
- let d = c.lineHeight,
9619
- u = 0;
9620
- const f = Ei(i.rtl, this.x, this.width),
9621
- g = function (i) {
9622
- e.fillText(i, f.x(t.x + u), t.y + d / 2), (t.y += d + n);
9623
  },
9624
- p = f.textAlign(o);
9625
- let m, x, b, _, y, v, w;
9626
  for (
9627
  e.textAlign = o,
9628
  e.textBaseline = "middle",
9629
  e.font = c.string,
9630
- t.x = No(this, p, i),
9631
  e.fillStyle = i.bodyColor,
9632
- Q(this.beforeBody, g),
9633
- u = a && "right" !== p ? ("center" === o ? l / 2 + h : l + 2 + h) : 0,
9634
- _ = 0,
9635
- v = s.length;
9636
- _ < v;
9637
- ++_
9638
  ) {
9639
  for (
9640
- m = s[_],
9641
- x = this.labelTextColors[_],
9642
  e.fillStyle = x,
9643
- Q(m.before, g),
9644
- b = m.lines,
9645
  a &&
9646
- b.length &&
9647
- (this._drawColorBox(e, t, _, f, i),
9648
- (d = Math.max(c.lineHeight, r))),
9649
- y = 0,
9650
- w = b.length;
9651
- y < w;
9652
- ++y
9653
  )
9654
- g(b[y]), (d = c.lineHeight);
9655
- Q(m.after, g);
9656
  }
9657
- (u = 0), (d = c.lineHeight), Q(this.afterBody, g), (t.y -= n);
9658
  }
9659
  drawFooter(t, e, i) {
9660
  const s = this.footer,
9661
  n = s.length;
9662
  let o, a;
9663
  if (n) {
9664
- const r = Ei(i.rtl, this.x, this.width);
9665
  for (
9666
- t.x = No(this, i.footerAlign, i),
9667
  t.y += i.footerMarginTop,
9668
  e.textAlign = r.textAlign(i.footerAlign),
9669
  e.textBaseline = "middle",
9670
- o = He(i.footerFont),
9671
  e.fillStyle = i.footerColor,
9672
  e.font = o.string,
9673
  a = 0;
@@ -9687,7 +9917,7 @@
9687
  topRight: d,
9688
  bottomLeft: u,
9689
  bottomRight: f,
9690
- } = We(s.cornerRadius);
9691
  (e.fillStyle = s.backgroundColor),
9692
  (e.strokeStyle = s.borderColor),
9693
  (e.lineWidth = s.borderWidth),
@@ -9715,12 +9945,12 @@
9715
  s = i && i.x,
9716
  n = i && i.y;
9717
  if (s || n) {
9718
- const i = Ro[t.position].call(this, this._active, this._eventPosition);
9719
  if (!i) return;
9720
- const o = (this._size = Fo(this, t)),
9721
  a = Object.assign({}, i, this._size),
9722
- r = Vo(e, t, a),
9723
- l = Wo(t, a, r, e);
9724
  (s._to === l.x && n._to === l.y) ||
9725
  ((this.xAlign = r.xAlign),
9726
  (this.yAlign = r.yAlign),
@@ -9731,6 +9961,9 @@
9731
  this._resolveAnimations().update(this, l));
9732
  }
9733
  }
 
 
 
9734
  draw(t) {
9735
  const e = this.options.setContext(this.getContext());
9736
  let i = this.opacity;
@@ -9739,7 +9972,7 @@
9739
  const s = { width: this.width, height: this.height },
9740
  n = { x: this.x, y: this.y };
9741
  i = Math.abs(i) < 0.001 ? 0 : i;
9742
- const o = Ne(e.padding),
9743
  a =
9744
  this.title.length ||
9745
  this.beforeBody.length ||
@@ -9751,12 +9984,12 @@
9751
  (t.save(),
9752
  (t.globalAlpha = i),
9753
  this.drawBackground(n, t, s, e),
9754
- Ii(t, e.textDirection),
9755
  (n.y += o.top),
9756
  this.drawTitle(n, t, e),
9757
  this.drawBody(n, t, e),
9758
  this.drawFooter(n, t, e),
9759
- zi(t, e.textDirection),
9760
  t.restore());
9761
  }
9762
  getActiveElements() {
@@ -9769,7 +10002,7 @@
9769
  if (!i) throw new Error("Cannot find a dataset at index " + t);
9770
  return { datasetIndex: t, element: i.data[e], index: e };
9771
  }),
9772
- n = !tt(i, s),
9773
  o = this._positionChanged(s, e);
9774
  (n || o) &&
9775
  ((this._active = s),
@@ -9784,7 +10017,7 @@
9784
  n = this._active || [],
9785
  o = this._getActiveElements(t, n, e, i),
9786
  a = this._positionChanged(o, t),
9787
- r = e || !tt(o, n) || a;
9788
  return (
9789
  r &&
9790
  ((this._active = o),
@@ -9802,17 +10035,17 @@
9802
  }
9803
  _positionChanged(t, e) {
9804
  const { caretX: i, caretY: s, options: n } = this,
9805
- o = Ro[n.position].call(this, t, e);
9806
  return !1 !== o && (i !== o.x || s !== o.y);
9807
  }
9808
  }
9809
- $o.positioners = Ro;
9810
- var Yo = {
9811
  id: "tooltip",
9812
- _element: $o,
9813
- positioners: Ro,
9814
  afterInit(t, e, i) {
9815
- i && (t.tooltip = new $o({ chart: t, options: i }));
9816
  },
9817
  beforeUpdate(t, e, i) {
9818
  t.tooltip && t.tooltip.initialize(i);
@@ -9821,10 +10054,12 @@
9821
  t.tooltip && t.tooltip.initialize(i);
9822
  },
9823
  afterDraw(t) {
9824
- const e = t.tooltip,
9825
- i = { tooltip: e };
9826
- !1 !== t.notifyPlugins("beforeTooltipDraw", i) &&
9827
- (e && e.draw(t.ctx), t.notifyPlugins("afterTooltipDraw", i));
 
 
9828
  },
9829
  afterEvent(t, e) {
9830
  if (t.tooltip) {
@@ -9871,7 +10106,7 @@
9871
  opacity: { easing: "linear", duration: 200 },
9872
  },
9873
  callbacks: {
9874
- beforeTitle: H,
9875
  title(t) {
9876
  if (t.length > 0) {
9877
  const e = t[0],
@@ -9884,16 +10119,16 @@
9884
  }
9885
  return "";
9886
  },
9887
- afterTitle: H,
9888
- beforeBody: H,
9889
- beforeLabel: H,
9890
  label(t) {
9891
  if (this && this.options && "dataset" === this.options.mode)
9892
  return t.label + ": " + t.formattedValue || t.formattedValue;
9893
  let e = t.dataset.label || "";
9894
  e && (e += ": ");
9895
- const i = t.formattedValue;
9896
- return $(i) || (e += i), e;
9897
  },
9898
  labelColor(t) {
9899
  const e = t.chart
@@ -9917,11 +10152,11 @@
9917
  .controller.getStyle(t.dataIndex);
9918
  return { pointStyle: e.pointStyle, rotation: e.rotation };
9919
  },
9920
- afterLabel: H,
9921
- afterBody: H,
9922
- beforeFooter: H,
9923
- footer: H,
9924
- afterFooter: H,
9925
  },
9926
  },
9927
  defaultRoutes: {
@@ -9939,16 +10174,16 @@
9939
  },
9940
  additionalOptionScopes: ["interaction"],
9941
  },
9942
- Uo = Object.freeze({
9943
  __proto__: null,
9944
- Decimation: ro,
9945
- Filler: So,
9946
- Legend: Co,
9947
- SubTitle: Lo,
9948
- Title: Ao,
9949
- Tooltip: Yo,
9950
  });
9951
- function Xo(t, e, i, s) {
9952
  const n = t.indexOf(e);
9953
  if (-1 === n)
9954
  return ((t, e, i, s) => (
@@ -9959,7 +10194,7 @@
9959
  ))(t, e, i, s);
9960
  return n !== t.lastIndexOf(e) ? i : n;
9961
  }
9962
- class qo extends Bs {
9963
  constructor(t) {
9964
  super(t),
9965
  (this._startValue = void 0),
@@ -9976,16 +10211,16 @@
9976
  super.init(t);
9977
  }
9978
  parse(t, e) {
9979
- if ($(t)) return null;
9980
- const i = this.getLabels();
9981
  return ((t, e) =>
9982
  null === t
9983
  ? null
9984
- : jt(
9985
  Math.round(t),
9986
  0,
9987
  e
9988
- ))((e = isFinite(e) && i[e] === t ? e : Xo(i, t, K(e, t), this._addedLabels)), i.length - 1);
9989
  }
9990
  determineDataLimits() {
9991
  const { minDefined: t, maxDefined: e } = this.getUserBounds();
@@ -10038,15 +10273,15 @@
10038
  return this.bottom;
10039
  }
10040
  }
10041
- function Ko(t, e, { horizontal: i, minRotation: s }) {
10042
- const n = It(s),
10043
  o = (i ? Math.sin(n) : Math.cos(n)) || 0.001,
10044
  a = 0.75 * e * ("" + t).length;
10045
  return Math.min(e / o, a);
10046
  }
10047
- (qo.id = "category"),
10048
- (qo.defaults = { ticks: { callback: qo.prototype.getLabelForValue } });
10049
- class Go extends Bs {
10050
  constructor(t) {
10051
  super(t),
10052
  (this.start = void 0),
@@ -10056,7 +10291,7 @@
10056
  (this._valueRange = 0);
10057
  }
10058
  parse(t, e) {
10059
- return $(t) ||
10060
  (("number" == typeof t || t instanceof Number) && !isFinite(+t))
10061
  ? null
10062
  : +t;
@@ -10068,8 +10303,8 @@
10068
  const o = (t) => (s = e ? s : t),
10069
  a = (t) => (n = i ? n : t);
10070
  if (t) {
10071
- const t = Ct(s),
10072
- e = Ct(n);
10073
  t < 0 && e < 0 ? a(0) : t > 0 && e > 0 && o(0);
10074
  }
10075
  if (s === n) {
@@ -10104,78 +10339,78 @@
10104
  buildTicks() {
10105
  const t = this.options,
10106
  e = t.ticks;
10107
- let i = this.getTickLimit();
10108
- i = Math.max(2, i);
10109
- const s = (function (t, e) {
10110
- const i = [],
10111
  {
10112
- bounds: s,
10113
- step: n,
10114
- min: o,
10115
- max: a,
10116
- precision: r,
10117
- count: l,
10118
- maxTicks: h,
10119
- maxDigits: c,
10120
- includeBounds: d,
10121
  } = t,
10122
- u = n || 1,
10123
- f = h - 1,
10124
- { min: g, max: p } = e,
10125
- m = !$(o),
10126
- x = !$(a),
10127
- b = !$(l),
10128
- _ = (p - g) / (c + 1);
10129
- let y,
10130
- v,
10131
  w,
10132
  M,
10133
- k = Ot((p - g) / f / u) * u;
10134
- if (k < 1e-14 && !m && !x) return [{ value: g }, { value: p }];
10135
- (M = Math.ceil(p / k) - Math.floor(g / k)),
10136
- M > f && (k = Ot((M * k) / f / u) * u),
10137
- $(r) || ((y = Math.pow(10, r)), (k = Math.ceil(k * y) / y)),
10138
- "ticks" === s
10139
- ? ((v = Math.floor(g / k) * k), (w = Math.ceil(p / k) * k))
10140
- : ((v = g), (w = p)),
10141
- m && x && n && Rt((a - o) / n, k / 1e3)
10142
- ? ((M = Math.round(Math.min((a - o) / k, h))),
10143
- (k = (a - o) / M),
10144
- (v = o),
10145
- (w = a))
10146
- : b
10147
- ? ((v = m ? o : v), (w = x ? a : w), (M = l - 1), (k = (w - v) / M))
10148
- : ((M = (w - v) / k),
10149
- (M = Lt(M, Math.round(M), k / 1e3)
10150
- ? Math.round(M)
10151
- : Math.ceil(M)));
10152
- const S = Math.max(Ft(k), Ft(v));
10153
- (y = Math.pow(10, $(r) ? S : r)),
10154
- (v = Math.round(v * y) / y),
10155
- (w = Math.round(w * y) / y);
10156
- let P = 0;
 
10157
  for (
10158
- m &&
10159
- (d && v !== o
10160
- ? (i.push({ value: o }),
10161
- v < o && P++,
10162
- Lt(Math.round((v + P * k) * y) / y, o, Ko(o, _, t)) && P++)
10163
- : v < o && P++);
10164
- P < M;
10165
- ++P
10166
  )
10167
- i.push({ value: Math.round((v + P * k) * y) / y });
10168
  return (
10169
- x && d && w !== a
10170
- ? i.length && Lt(i[i.length - 1].value, a, Ko(a, _, t))
10171
- ? (i[i.length - 1].value = a)
10172
- : i.push({ value: a })
10173
- : (x && w !== a) || i.push({ value: w }),
10174
- i
10175
  );
10176
  })(
10177
  {
10178
- maxTicks: i,
10179
  bounds: t.bounds,
10180
  min: t.min,
10181
  max: t.max,
@@ -10190,11 +10425,11 @@
10190
  this._range || this
10191
  );
10192
  return (
10193
- "ticks" === t.bounds && Et(s, this, "value"),
10194
  t.reverse
10195
- ? (s.reverse(), (this.start = this.max), (this.end = this.min))
10196
  : ((this.start = this.min), (this.end = this.max)),
10197
- s
10198
  );
10199
  }
10200
  configure() {
@@ -10208,20 +10443,20 @@
10208
  (this._startValue = e), (this._endValue = i), (this._valueRange = i - e);
10209
  }
10210
  getLabelForValue(t) {
10211
- return Ri(t, this.chart.options.locale, this.options.ticks.format);
10212
  }
10213
  }
10214
- class Zo extends Go {
10215
  determineDataLimits() {
10216
  const { min: t, max: e } = this.getMinMax(!0);
10217
- (this.min = X(t) ? t : 0),
10218
- (this.max = X(e) ? e : 1),
10219
  this.handleTickRangeOptions();
10220
  }
10221
  computeTickLimit() {
10222
  const t = this.isHorizontal(),
10223
  e = t ? this.width : this.height,
10224
- i = It(this.options.ticks.minRotation),
10225
  s = (t ? Math.sin(i) : Math.cos(i)) || 0.001,
10226
  n = this._resolveTickFontOptions(0);
10227
  return Math.ceil(e / Math.min(40, n.lineHeight / s));
@@ -10235,12 +10470,12 @@
10235
  return this._startValue + this.getDecimalForPixel(t) * this._valueRange;
10236
  }
10237
  }
10238
- function Jo(t) {
10239
- return 1 === t / Math.pow(10, Math.floor(Dt(t)));
10240
  }
10241
- (Zo.id = "linear"),
10242
- (Zo.defaults = { ticks: { callback: Os.formatters.numeric } });
10243
- class Qo extends Bs {
10244
  constructor(t) {
10245
  super(t),
10246
  (this.start = void 0),
@@ -10249,14 +10484,14 @@
10249
  (this._valueRange = 0);
10250
  }
10251
  parse(t, e) {
10252
- const i = Go.prototype.parse.apply(this, [t, e]);
10253
- if (0 !== i) return X(i) && i > 0 ? i : null;
10254
  this._zero = !0;
10255
  }
10256
  determineDataLimits() {
10257
  const { min: t, max: e } = this.getMinMax(!0);
10258
- (this.min = X(t) ? Math.max(0, t) : null),
10259
- (this.max = X(e) ? Math.max(0, e) : null),
10260
  this.options.beginAtZero && (this._zero = !0),
10261
  this.handleTickRangeOptions();
10262
  }
@@ -10266,7 +10501,7 @@
10266
  s = this.max;
10267
  const n = (e) => (i = t ? i : e),
10268
  o = (t) => (s = e ? s : t),
10269
- a = (t, e) => Math.pow(10, Math.floor(Dt(t)) + e);
10270
  i === s && (i <= 0 ? (n(1), o(10)) : (n(a(i, -1)), o(a(s, 1)))),
10271
  i <= 0 && n(a(s, -1)),
10272
  s <= 0 && o(a(i, 1)),
@@ -10280,24 +10515,24 @@
10280
  buildTicks() {
10281
  const t = this.options,
10282
  e = (function (t, e) {
10283
- const i = Math.floor(Dt(e.max)),
10284
  s = Math.ceil(e.max / Math.pow(10, i)),
10285
  n = [];
10286
- let o = q(t.min, Math.pow(10, Math.floor(Dt(e.min)))),
10287
- a = Math.floor(Dt(o)),
10288
- r = Math.floor(o / Math.pow(10, a)),
10289
- l = a < 0 ? Math.pow(10, Math.abs(a)) : 1;
10290
  do {
10291
- n.push({ value: o, major: Jo(o) }),
10292
- ++r,
10293
- 10 === r && ((r = 1), ++a, (l = a >= 0 ? 1 : l)),
10294
- (o = Math.round(r * Math.pow(10, a) * l) / l);
10295
- } while (a < i || (a === i && r < s));
10296
- const h = q(t.max, o);
10297
- return n.push({ value: h, major: Jo(o) }), n;
10298
  })({ min: this._userMin, max: this._userMax }, this);
10299
  return (
10300
- "ticks" === t.bounds && Et(e, this, "value"),
10301
  t.reverse
10302
  ? (e.reverse(), (this.start = this.max), (this.end = this.min))
10303
  : ((this.start = this.min), (this.end = this.max)),
@@ -10307,13 +10542,13 @@
10307
  getLabelForValue(t) {
10308
  return void 0 === t
10309
  ? "0"
10310
- : Ri(t, this.chart.options.locale, this.options.ticks.format);
10311
  }
10312
  configure() {
10313
  const t = this.min;
10314
  super.configure(),
10315
- (this._startValue = Dt(t)),
10316
- (this._valueRange = Dt(this.max) - Dt(t));
10317
  }
10318
  getPixelForValue(t) {
10319
  return (
@@ -10321,7 +10556,7 @@
10321
  null === t || isNaN(t)
10322
  ? NaN
10323
  : this.getPixelForDecimal(
10324
- t === this.min ? 0 : (Dt(t) - this._startValue) / this._valueRange
10325
  )
10326
  );
10327
  }
@@ -10330,22 +10565,22 @@
10330
  return Math.pow(10, this._startValue + e * this._valueRange);
10331
  }
10332
  }
10333
- function ta(t) {
10334
  const e = t.ticks;
10335
  if (e.display && t.display) {
10336
- const t = Ne(e.backdropPadding);
10337
- return K(e.font && e.font.size, bt.font.size) + t.height;
10338
  }
10339
  return 0;
10340
  }
10341
- function ea(t, e, i, s, n) {
10342
  return t === s || t === n
10343
  ? { start: e - i / 2, end: e + i / 2 }
10344
  : t < s || t > n
10345
  ? { start: e - i, end: e }
10346
  : { start: e, end: e + i };
10347
  }
10348
- function ia(t) {
10349
  const e = {
10350
  l: t.left + t._padding.left,
10351
  r: t.right - t._padding.right,
@@ -10353,42 +10588,42 @@
10353
  b: t.bottom - t._padding.bottom,
10354
  },
10355
  i = Object.assign({}, e),
10356
- s = [],
10357
  n = [],
10358
- o = t._pointLabels.length,
10359
- a = t.options.pointLabels,
10360
- r = a.centerPointLabels ? _t / o : 0;
10361
- for (let d = 0; d < o; d++) {
10362
- const o = a.setContext(t.getPointLabelContext(d));
10363
- n[d] = o.padding;
10364
- const u = t.getPointPosition(d, t.drawingArea + n[d], r),
10365
- f = He(o.font),
10366
- g =
10367
- ((l = t.ctx),
10368
- (h = f),
10369
- (c = Y((c = t._pointLabels[d])) ? c : [c]),
10370
- { w: qt(l, h.string, c), h: c.length * h.lineHeight });
10371
- s[d] = g;
10372
- const p = Nt(t.getIndexAngle(d) + r),
10373
- m = Math.round(zt(p));
10374
- sa(i, e, p, ea(m, u.x, g.w, 0, 180), ea(m, u.y, g.h, 90, 270));
10375
- }
10376
- var l, h, c;
 
10377
  t.setCenterPoint(e.l - i.l, i.r - e.r, e.t - i.t, i.b - e.b),
10378
  (t._pointLabelItems = (function (t, e, i) {
10379
  const s = [],
10380
  n = t._pointLabels.length,
10381
  o = t.options,
10382
- a = ta(o) / 2,
10383
  r = t.drawingArea,
10384
- l = o.pointLabels.centerPointLabels ? _t / n : 0;
10385
  for (let o = 0; o < n; o++) {
10386
  const n = t.getPointPosition(o, r + a + i[o], l),
10387
- h = Math.round(zt(Nt(n.angle + kt))),
10388
  c = e[o],
10389
- d = aa(n.y, c.h, h),
10390
- u = na(h),
10391
- f = oa(n.x, c.w, u);
10392
  s.push({
10393
  x: n.x,
10394
  y: d,
@@ -10400,9 +10635,9 @@
10400
  });
10401
  }
10402
  return s;
10403
- })(t, s, n));
10404
  }
10405
- function sa(t, e, i, s, n) {
10406
  const o = Math.abs(Math.sin(i)),
10407
  a = Math.abs(Math.cos(i));
10408
  let r = 0,
@@ -10416,20 +10651,20 @@
10416
  : n.end > e.b &&
10417
  ((l = (n.end - e.b) / a), (t.b = Math.max(t.b, e.b + l)));
10418
  }
10419
- function na(t) {
10420
  return 0 === t || 180 === t ? "center" : t < 180 ? "left" : "right";
10421
  }
10422
- function oa(t, e, i) {
10423
  return "right" === i ? (t -= e) : "center" === i && (t -= e / 2), t;
10424
  }
10425
- function aa(t, e, i) {
10426
  return (
10427
  90 === i || 270 === i ? (t -= e / 2) : (i > 270 || i < 90) && (t -= e), t
10428
  );
10429
  }
10430
- function ra(t, e, i, s) {
10431
  const { ctx: n } = t;
10432
- if (i) n.arc(t.xCenter, t.yCenter, e, 0, yt);
10433
  else {
10434
  let i = t.getPointPosition(0, e);
10435
  n.moveTo(i.x, i.y);
@@ -10437,11 +10672,11 @@
10437
  (i = t.getPointPosition(o, e)), n.lineTo(i.x, i.y);
10438
  }
10439
  }
10440
- (Qo.id = "logarithmic"),
10441
- (Qo.defaults = {
10442
- ticks: { callback: Os.formatters.logarithmic, major: { enabled: !0 } },
10443
  });
10444
- class la extends Go {
10445
  constructor(t) {
10446
  super(t),
10447
  (this.xCenter = void 0),
@@ -10451,7 +10686,7 @@
10451
  (this._pointLabelItems = []);
10452
  }
10453
  setDimensions() {
10454
- const t = (this._padding = Ne(ta(this.options) / 2)),
10455
  e = (this.width = this.maxWidth - t.width),
10456
  i = (this.height = this.maxHeight - t.height);
10457
  (this.xCenter = Math.floor(this.left + e / 2 + t.left)),
@@ -10460,18 +10695,18 @@
10460
  }
10461
  determineDataLimits() {
10462
  const { min: t, max: e } = this.getMinMax(!1);
10463
- (this.min = X(t) && !isNaN(t) ? t : 0),
10464
- (this.max = X(e) && !isNaN(e) ? e : 0),
10465
  this.handleTickRangeOptions();
10466
  }
10467
  computeTickLimit() {
10468
- return Math.ceil(this.drawingArea / ta(this.options));
10469
  }
10470
  generateTickLabels(t) {
10471
- Go.prototype.generateTickLabels.call(this, t),
10472
  (this._pointLabels = this.getLabels()
10473
  .map((t, e) => {
10474
- const i = J(this.options.pointLabels.callback, [t, e], this);
10475
  return i || 0 === i ? i : "";
10476
  })
10477
  .filter((t, e) => this.chart.getDataVisibility(e)));
@@ -10479,7 +10714,7 @@
10479
  fit() {
10480
  const t = this.options;
10481
  t.display && t.pointLabels.display
10482
- ? ia(this)
10483
  : this.setCenterPoint(0, 0, 0, 0);
10484
  }
10485
  setCenterPoint(t, e, i, s) {
@@ -10491,18 +10726,18 @@
10491
  ));
10492
  }
10493
  getIndexAngle(t) {
10494
- return Nt(
10495
- t * (yt / (this._pointLabels.length || 1)) +
10496
- It(this.options.startAngle || 0)
10497
  );
10498
  }
10499
  getDistanceFromCenterForValue(t) {
10500
- if ($(t)) return NaN;
10501
  const e = this.drawingArea / (this.max - this.min);
10502
  return this.options.reverse ? (this.max - t) * e : (t - this.min) * e;
10503
  }
10504
  getValueForDistanceFromCenter(t) {
10505
- if ($(t)) return NaN;
10506
  const e = t / (this.drawingArea / (this.max - this.min));
10507
  return this.options.reverse ? this.max - e : this.min + e;
10508
  }
@@ -10511,12 +10746,12 @@
10511
  if (t >= 0 && t < e.length) {
10512
  const i = e[t];
10513
  return (function (t, e, i) {
10514
- return Ye(t, { label: i, index: e, type: "pointLabel" });
10515
  })(this.getContext(), t, i);
10516
  }
10517
  }
10518
  getPointPosition(t, e, i = 0) {
10519
- const s = this.getIndexAngle(t) - kt + i;
10520
  return {
10521
  x: Math.cos(s) * e + this.xCenter,
10522
  y: Math.sin(s) * e + this.yCenter,
@@ -10542,7 +10777,7 @@
10542
  const i = this.ctx;
10543
  i.save(),
10544
  i.beginPath(),
10545
- ra(
10546
  this,
10547
  this.getDistanceFromCenterForValue(this._endValue),
10548
  e,
@@ -10557,50 +10792,54 @@
10557
  drawGrid() {
10558
  const t = this.ctx,
10559
  e = this.options,
10560
- { angleLines: i, grid: s } = e,
10561
- n = this._pointLabels.length;
10562
- let o, a, r;
10563
  if (
10564
  (e.pointLabels.display &&
10565
  (function (t, e) {
10566
  const {
10567
- ctx: i,
10568
- options: { pointLabels: s },
10569
  } = t;
10570
- for (let n = e - 1; n >= 0; n--) {
10571
- const e = s.setContext(t.getPointLabelContext(n)),
10572
- o = He(e.font),
10573
  {
10574
- x: a,
10575
- y: r,
10576
- textAlign: l,
10577
- left: h,
10578
- top: c,
10579
- right: d,
10580
- bottom: u,
10581
- } = t._pointLabelItems[n],
10582
- { backdropColor: f } = e;
10583
- if (!$(f)) {
10584
- const t = Ne(e.backdropPadding);
10585
- (i.fillStyle = f),
10586
- i.fillRect(
10587
- h - t.left,
10588
- c - t.top,
10589
- d - h + t.width,
10590
- u - c + t.height
10591
- );
 
 
 
 
10592
  }
10593
- se(i, t._pointLabels[n], a, r + o.lineHeight / 2, o, {
10594
  color: e.color,
10595
- textAlign: l,
10596
  textBaseline: "middle",
10597
  });
10598
  }
10599
- })(this, n),
10600
- s.display &&
10601
  this.ticks.forEach((t, e) => {
10602
  if (0 !== e) {
10603
- a = this.getDistanceFromCenterForValue(t.value);
10604
  !(function (t, e, i, s) {
10605
  const n = t.ctx,
10606
  o = e.circular,
@@ -10615,31 +10854,31 @@
10615
  n.setLineDash(e.borderDash),
10616
  (n.lineDashOffset = e.borderDashOffset),
10617
  n.beginPath(),
10618
- ra(t, i, o, s),
10619
  n.closePath(),
10620
  n.stroke(),
10621
  n.restore());
10622
- })(this, s.setContext(this.getContext(e - 1)), a, n);
10623
  }
10624
  }),
10625
- i.display)
10626
  ) {
10627
- for (t.save(), o = n - 1; o >= 0; o--) {
10628
- const s = i.setContext(this.getPointLabelContext(o)),
10629
- { color: n, lineWidth: l } = s;
10630
- l &&
10631
  n &&
10632
- ((t.lineWidth = l),
10633
  (t.strokeStyle = n),
10634
- t.setLineDash(s.borderDash),
10635
- (t.lineDashOffset = s.borderDashOffset),
10636
- (a = this.getDistanceFromCenterForValue(
10637
  e.ticks.reverse ? this.min : this.max
10638
  )),
10639
- (r = this.getPointPosition(o, a)),
10640
  t.beginPath(),
10641
  t.moveTo(this.xCenter, this.yCenter),
10642
- t.lineTo(r.x, r.y),
10643
  t.stroke());
10644
  }
10645
  t.restore();
@@ -10661,7 +10900,7 @@
10661
  this.ticks.forEach((s, a) => {
10662
  if (0 === a && !e.reverse) return;
10663
  const r = i.setContext(this.getContext(a)),
10664
- l = He(r.font);
10665
  if (
10666
  ((n = this.getDistanceFromCenterForValue(this.ticks[a].value)),
10667
  r.showLabelBackdrop)
@@ -10669,7 +10908,7 @@
10669
  (t.font = l.string),
10670
  (o = t.measureText(s.label).width),
10671
  (t.fillStyle = r.backdropColor);
10672
- const e = Ne(r.backdropPadding);
10673
  t.fillRect(
10674
  -o / 2 - e.left,
10675
  -n - l.size / 2 - e.top,
@@ -10677,14 +10916,14 @@
10677
  l.size + e.height
10678
  );
10679
  }
10680
- se(t, s.label, 0, -n, l, { color: r.color });
10681
  }),
10682
  t.restore();
10683
  }
10684
  drawTitle() {}
10685
  }
10686
- (la.id = "radialLinear"),
10687
- (la.defaults = {
10688
  display: !0,
10689
  animate: !0,
10690
  position: "chartArea",
@@ -10696,7 +10935,7 @@
10696
  },
10697
  grid: { circular: !1 },
10698
  startAngle: 0,
10699
- ticks: { showLabelBackdrop: !0, callback: Os.formatters.numeric },
10700
  pointLabels: {
10701
  backdropColor: void 0,
10702
  backdropPadding: 2,
@@ -10707,13 +10946,13 @@
10707
  centerPointLabels: !1,
10708
  },
10709
  }),
10710
- (la.defaultRoutes = {
10711
  "angleLines.color": "borderColor",
10712
  "pointLabels.color": "color",
10713
  "ticks.color": "color",
10714
  }),
10715
- (la.descriptors = { angleLines: { _fallback: "grid" } });
10716
- const ha = {
10717
  millisecond: { common: !0, size: 1, steps: 1e3 },
10718
  second: { common: !0, size: 1e3, steps: 60 },
10719
  minute: { common: !0, size: 6e4, steps: 60 },
@@ -10724,46 +10963,46 @@
10724
  quarter: { common: !1, size: 7884e6, steps: 4 },
10725
  year: { common: !0, size: 3154e7 },
10726
  },
10727
- ca = Object.keys(ha);
10728
- function da(t, e) {
10729
  return t - e;
10730
  }
10731
- function ua(t, e) {
10732
- if ($(e)) return null;
10733
- const i = t._adapter,
10734
- { parser: s, round: n, isoWeekday: o } = t._parseOpts;
10735
- let a = e;
10736
  return (
10737
- "function" == typeof s && (a = s(a)),
10738
- X(a) || (a = "string" == typeof s ? i.parse(a, s) : i.parse(a)),
10739
- null === a
10740
  ? null
10741
- : (n &&
10742
- (a =
10743
- "week" !== n || (!Tt(o) && !0 !== o)
10744
- ? i.startOf(a, n)
10745
- : i.startOf(a, "isoWeek", o)),
10746
- +a)
10747
  );
10748
  }
10749
- function fa(t, e, i, s) {
10750
- const n = ca.length;
10751
- for (let o = ca.indexOf(t); o < n - 1; ++o) {
10752
- const t = ha[ca[o]],
10753
  n = t.steps ? t.steps : Number.MAX_SAFE_INTEGER;
10754
- if (t.common && Math.ceil((i - e) / (n * t.size)) <= s) return ca[o];
10755
  }
10756
- return ca[n - 1];
10757
  }
10758
- function ga(t, e, i) {
10759
  if (i) {
10760
  if (i.length) {
10761
- const { lo: s, hi: n } = ae(i, e);
10762
  t[i[s] >= e ? i[s] : i[n]] = !0;
10763
  }
10764
  } else t[e] = !0;
10765
  }
10766
- function pa(t, e, i) {
10767
  const s = [],
10768
  n = {},
10769
  o = e.length;
@@ -10782,7 +11021,7 @@
10782
  })(t, s, n, i)
10783
  : s;
10784
  }
10785
- class ma extends Bs {
10786
  constructor(t) {
10787
  super(t),
10788
  (this._cache = { data: [], labels: [], all: [] }),
@@ -10794,8 +11033,9 @@
10794
  }
10795
  init(t, e) {
10796
  const i = t.time || (t.time = {}),
10797
- s = (this._adapter = new mn._date(t.adapters.date));
10798
- ot(i.displayFormats, s.formats()),
 
10799
  (this._parseOpts = {
10800
  parser: i.parser,
10801
  round: i.round,
@@ -10805,7 +11045,7 @@
10805
  (this._normalized = e.normalized);
10806
  }
10807
  parse(t, e) {
10808
- return void 0 === t ? null : ua(this, t);
10809
  }
10810
  beforeLayout() {
10811
  super.beforeLayout(), (this._cache = { data: [], labels: [], all: [] });
@@ -10817,19 +11057,19 @@
10817
  let {
10818
  min: s,
10819
  max: n,
10820
- minDefined: o,
10821
- maxDefined: a,
10822
  } = this.getUserBounds();
10823
- function r(t) {
10824
- o || isNaN(t.min) || (s = Math.min(s, t.min)),
10825
- a || isNaN(t.max) || (n = Math.max(n, t.max));
10826
  }
10827
- (o && a) ||
10828
- (r(this._getLabelBounds()),
10829
  ("ticks" === t.bounds && "labels" === t.ticks.source) ||
10830
- r(this.getMinMax(!1))),
10831
- (s = X(s) && !isNaN(s) ? s : +e.startOf(Date.now(), i)),
10832
- (n = X(n) && !isNaN(n) ? n : +e.endOf(Date.now(), i) + 1),
10833
  (this.min = Math.min(s, n - 1)),
10834
  (this.max = Math.max(s + 1, n));
10835
  }
@@ -10852,32 +11092,36 @@
10852
  ((this.min = this._userMin || s[0]),
10853
  (this.max = this._userMax || s[s.length - 1]));
10854
  const n = this.min,
10855
- o = he(s, n, this.max);
10856
  return (
10857
  (this._unit =
10858
  e.unit ||
10859
  (i.autoSkip
10860
- ? fa(e.minUnit, this.min, this.max, this._getLabelCapacity(n))
10861
  : (function (t, e, i, s, n) {
10862
- for (let o = ca.length - 1; o >= ca.indexOf(i); o--) {
10863
- const i = ca[o];
10864
- if (ha[i].common && t._adapter.diff(n, s, i) >= e - 1)
10865
  return i;
10866
  }
10867
- return ca[i ? ca.indexOf(i) : 0];
10868
  })(this, o.length, e.minUnit, this.min, this.max))),
10869
  (this._majorUnit =
10870
  i.major.enabled && "year" !== this._unit
10871
  ? (function (t) {
10872
- for (let e = ca.indexOf(t) + 1, i = ca.length; e < i; ++e)
10873
- if (ha[ca[e]].common) return ca[e];
10874
  })(this._unit)
10875
  : void 0),
10876
  this.initOffsets(s),
10877
  t.reverse && o.reverse(),
10878
- pa(this, o, this._majorUnit)
10879
  );
10880
  }
 
 
 
 
10881
  initOffsets(t) {
10882
  let e,
10883
  i,
@@ -10893,8 +11137,8 @@
10893
  ? i
10894
  : (i - this.getDecimalForValue(t[t.length - 2])) / 2));
10895
  const o = t.length < 3 ? 0.5 : 0.25;
10896
- (s = jt(s, 0, o)),
10897
- (n = jt(n, 0, o)),
10898
  (this._offsets = { start: s, end: n, factor: 1 / (s + 1 + n) });
10899
  }
10900
  _generate() {
@@ -10903,27 +11147,27 @@
10903
  i = this.max,
10904
  s = this.options,
10905
  n = s.time,
10906
- o = n.unit || fa(n.minUnit, e, i, this._getLabelCapacity(e)),
10907
- a = K(n.stepSize, 1),
10908
- r = "week" === o && n.isoWeekday,
10909
- l = Tt(r) || !0 === r,
10910
- h = {};
10911
- let c,
10912
- d,
10913
- u = e;
10914
  if (
10915
- (l && (u = +t.startOf(u, "isoWeek", r)),
10916
- (u = +t.startOf(u, l ? "day" : o)),
10917
  t.diff(i, e, o) > 1e5 * a)
10918
  )
10919
  throw new Error(
10920
  e + " and " + i + " are too far apart with stepSize of " + a + " " + o
10921
  );
10922
- const f = "data" === s.ticks.source && this.getDataTimestamps();
10923
- for (c = u, d = 0; c < i; c = +t.add(c, a, o), d++) ga(h, c, f);
10924
  return (
10925
- (c !== i && "ticks" !== s.bounds && 1 !== d) || ga(h, c, f),
10926
- Object.keys(h)
10927
  .sort((t, e) => t - e)
10928
  .map((t) => +t)
10929
  );
@@ -10942,11 +11186,11 @@
10942
  r = this._majorUnit,
10943
  l = a && o[a],
10944
  h = r && o[r],
10945
- c = i[e],
10946
- d = r && h && c && c.major,
10947
- u = this._adapter.format(t, s || (d ? h : l)),
10948
- f = n.ticks.callback;
10949
- return f ? J(f, [u, e, i], this) : u;
10950
  }
10951
  generateTickLabels(t) {
10952
  let e, i, s;
@@ -10969,7 +11213,7 @@
10969
  _getLabelSize(t) {
10970
  const e = this.options.ticks,
10971
  i = this.ctx.measureText(t).width,
10972
- s = It(this.isHorizontal() ? e.maxRotation : e.minRotation),
10973
  n = Math.cos(s),
10974
  o = Math.sin(s),
10975
  a = this._resolveTickFontOptions(0).size;
@@ -10979,7 +11223,7 @@
10979
  const e = this.options.time,
10980
  i = e.displayFormats,
10981
  s = i[e.unit] || i.millisecond,
10982
- n = this._tickFormatFunction(t, 0, pa(this, [t], this._majorUnit), s),
10983
  o = this._getLabelSize(n),
10984
  a =
10985
  Math.floor(
@@ -11004,14 +11248,14 @@
11004
  let e, i;
11005
  if (t.length) return t;
11006
  const s = this.getLabels();
11007
- for (e = 0, i = s.length; e < i; ++e) t.push(ua(this, s[e]));
11008
  return (this._cache.labels = this._normalized ? t : this.normalize(t));
11009
  }
11010
  normalize(t) {
11011
- return fe(t.sort(da));
11012
  }
11013
  }
11014
- function xa(t, e, i) {
11015
  let s,
11016
  n,
11017
  o,
@@ -11019,19 +11263,19 @@
11019
  r = 0,
11020
  l = t.length - 1;
11021
  i
11022
- ? (e >= t[r].pos && e <= t[l].pos && ({ lo: r, hi: l } = re(t, "pos", e)),
11023
  ({ pos: s, time: o } = t[r]),
11024
  ({ pos: n, time: a } = t[l]))
11025
  : (e >= t[r].time &&
11026
  e <= t[l].time &&
11027
- ({ lo: r, hi: l } = re(t, "time", e)),
11028
  ({ time: s, pos: o } = t[r]),
11029
  ({ time: n, pos: a } = t[l]));
11030
  const h = n - s;
11031
  return h ? o + ((a - o) * (e - s)) / h : o;
11032
  }
11033
- (ma.id = "time"),
11034
- (ma.defaults = {
11035
  bounds: "data",
11036
  adapters: {},
11037
  time: {
@@ -11044,7 +11288,7 @@
11044
  },
11045
  ticks: { source: "auto", major: { enabled: !1 } },
11046
  });
11047
- class ba extends ma {
11048
  constructor(t) {
11049
  super(t),
11050
  (this._table = []),
@@ -11054,8 +11298,8 @@
11054
  initOffsets() {
11055
  const t = this._getTimestampsForTable(),
11056
  e = (this._table = this.buildLookupTable(t));
11057
- (this._minPos = xa(e, this.min)),
11058
- (this._tableRange = xa(e, this.max) - this._minPos),
11059
  super.initOffsets(t);
11060
  }
11061
  buildLookupTable(t) {
@@ -11095,43 +11339,43 @@
11095
  );
11096
  }
11097
  getDecimalForValue(t) {
11098
- return (xa(this._table, t) - this._minPos) / this._tableRange;
11099
  }
11100
  getValueForPixel(t) {
11101
  const e = this._offsets,
11102
  i = this.getDecimalForPixel(t) / e.factor - e.end;
11103
- return xa(this._table, i * this._tableRange + this._minPos, !0);
11104
  }
11105
  }
11106
- (ba.id = "timeseries"), (ba.defaults = ma.defaults);
11107
- var _a = Object.freeze({
11108
  __proto__: null,
11109
- CategoryScale: qo,
11110
- LinearScale: Zo,
11111
- LogarithmicScale: Qo,
11112
- RadialLinearScale: la,
11113
- TimeScale: ma,
11114
- TimeSeriesScale: ba,
11115
  });
11116
  return (
11117
- dn.register(Rn, _a, no, Uo),
11118
- (dn.helpers = { ...Yi }),
11119
- (dn._adapters = mn),
11120
- (dn.Animation = us),
11121
- (dn.Animations = gs),
11122
- (dn.animator = a),
11123
- (dn.controllers = Ws.controllers.items),
11124
- (dn.DatasetController = Ps),
11125
- (dn.Element = Ds),
11126
- (dn.elements = no),
11127
- (dn.Interaction = Ee),
11128
- (dn.layouts = ni),
11129
- (dn.platforms = hs),
11130
- (dn.Scale = Bs),
11131
- (dn.Ticks = Os),
11132
- Object.assign(dn, Rn, _a, no, Uo, hs),
11133
- (dn.Chart = dn),
11134
- "undefined" != typeof window && (window.Chart = dn),
11135
- dn
11136
  );
11137
  });
1
  /*!
2
+ * Chart.js v3.9.1
3
  * https://www.chartjs.org
4
  * (c) 2022 Chart.js Contributors
5
  * Released under the MIT License
13
  e());
14
  })(this, function () {
15
  "use strict";
16
+ function t() {}
17
+ const e = (function () {
18
+ let t = 0;
19
+ return function () {
20
+ return t++;
21
+ };
22
+ })();
23
+ function i(t) {
24
+ return null == t;
25
+ }
26
+ function s(t) {
27
+ if (Array.isArray && Array.isArray(t)) return !0;
28
+ const e = Object.prototype.toString.call(t);
29
+ return "[object" === e.slice(0, 7) && "Array]" === e.slice(-6);
30
+ }
31
+ function n(t) {
32
+ return (
33
+ null !== t && "[object Object]" === Object.prototype.toString.call(t)
34
+ );
35
+ }
36
+ const o = (t) =>
37
+ ("number" == typeof t || t instanceof Number) && isFinite(+t);
38
+ function a(t, e) {
39
+ return o(t) ? t : e;
40
+ }
41
+ function r(t, e) {
42
+ return void 0 === t ? e : t;
43
+ }
44
+ const l = (t, e) =>
45
+ "string" == typeof t && t.endsWith("%") ? parseFloat(t) / 100 : t / e,
46
+ h = (t, e) =>
47
+ "string" == typeof t && t.endsWith("%") ? (parseFloat(t) / 100) * e : +t;
48
+ function c(t, e, i) {
49
+ if (t && "function" == typeof t.call) return t.apply(i, e);
50
+ }
51
+ function d(t, e, i, o) {
52
+ let a, r, l;
53
+ if (s(t))
54
+ if (((r = t.length), o)) for (a = r - 1; a >= 0; a--) e.call(i, t[a], a);
55
+ else for (a = 0; a < r; a++) e.call(i, t[a], a);
56
+ else if (n(t))
57
+ for (l = Object.keys(t), r = l.length, a = 0; a < r; a++)
58
+ e.call(i, t[l[a]], l[a]);
59
+ }
60
+ function u(t, e) {
61
+ let i, s, n, o;
62
+ if (!t || !e || t.length !== e.length) return !1;
63
+ for (i = 0, s = t.length; i < s; ++i)
64
+ if (
65
+ ((n = t[i]),
66
+ (o = e[i]),
67
+ n.datasetIndex !== o.datasetIndex || n.index !== o.index)
68
+ )
69
+ return !1;
70
+ return !0;
71
+ }
72
+ function f(t) {
73
+ if (s(t)) return t.map(f);
74
+ if (n(t)) {
75
+ const e = Object.create(null),
76
+ i = Object.keys(t),
77
+ s = i.length;
78
+ let n = 0;
79
+ for (; n < s; ++n) e[i[n]] = f(t[i[n]]);
80
+ return e;
81
+ }
82
+ return t;
83
+ }
84
+ function g(t) {
85
+ return -1 === ["__proto__", "prototype", "constructor"].indexOf(t);
86
+ }
87
+ function p(t, e, i, s) {
88
+ if (!g(t)) return;
89
+ const o = e[t],
90
+ a = i[t];
91
+ n(o) && n(a) ? m(o, a, s) : (e[t] = f(a));
92
+ }
93
+ function m(t, e, i) {
94
+ const o = s(e) ? e : [e],
95
+ a = o.length;
96
+ if (!n(t)) return t;
97
+ const r = (i = i || {}).merger || p;
98
+ for (let s = 0; s < a; ++s) {
99
+ if (!n((e = o[s]))) continue;
100
+ const a = Object.keys(e);
101
+ for (let s = 0, n = a.length; s < n; ++s) r(a[s], t, e, i);
102
+ }
103
+ return t;
104
+ }
105
+ function b(t, e) {
106
+ return m(t, e, { merger: x });
107
+ }
108
+ function x(t, e, i) {
109
+ if (!g(t)) return;
110
+ const s = e[t],
111
+ o = i[t];
112
+ n(s) && n(o)
113
+ ? b(s, o)
114
+ : Object.prototype.hasOwnProperty.call(e, t) || (e[t] = f(o));
115
+ }
116
+ const _ = { "": (t) => t, x: (t) => t.x, y: (t) => t.y };
117
+ function y(t, e) {
118
+ const i =
119
+ _[e] ||
120
+ (_[e] = (function (t) {
121
+ const e = v(t);
122
+ return (t) => {
123
+ for (const i of e) {
124
+ if ("" === i) break;
125
+ t = t && t[i];
126
+ }
127
+ return t;
128
+ };
129
+ })(e));
130
+ return i(t);
131
+ }
132
+ function v(t) {
133
+ const e = t.split("."),
134
+ i = [];
135
+ let s = "";
136
+ for (const t of e)
137
+ (s += t),
138
+ s.endsWith("\\") ? (s = s.slice(0, -1) + ".") : (i.push(s), (s = ""));
139
+ return i;
140
+ }
141
+ function w(t) {
142
+ return t.charAt(0).toUpperCase() + t.slice(1);
143
+ }
144
+ const M = (t) => void 0 !== t,
145
+ k = (t) => "function" == typeof t,
146
+ S = (t, e) => {
147
+ if (t.size !== e.size) return !1;
148
+ for (const i of t) if (!e.has(i)) return !1;
149
+ return !0;
150
+ };
151
+ function P(t) {
152
+ return (
153
+ "mouseup" === t.type || "click" === t.type || "contextmenu" === t.type
154
+ );
155
+ }
156
+ const D = Math.PI,
157
+ O = 2 * D,
158
+ C = O + D,
159
+ A = Number.POSITIVE_INFINITY,
160
+ T = D / 180,
161
+ L = D / 2,
162
+ E = D / 4,
163
+ R = (2 * D) / 3,
164
+ I = Math.log10,
165
+ z = Math.sign;
166
+ function F(t) {
167
+ const e = Math.round(t);
168
+ t = N(t, e, t / 1e3) ? e : t;
169
+ const i = Math.pow(10, Math.floor(I(t))),
170
+ s = t / i;
171
+ return (s <= 1 ? 1 : s <= 2 ? 2 : s <= 5 ? 5 : 10) * i;
172
+ }
173
+ function V(t) {
174
+ const e = [],
175
+ i = Math.sqrt(t);
176
+ let s;
177
+ for (s = 1; s < i; s++) t % s == 0 && (e.push(s), e.push(t / s));
178
+ return i === (0 | i) && e.push(i), e.sort((t, e) => t - e).pop(), e;
179
+ }
180
+ function B(t) {
181
+ return !isNaN(parseFloat(t)) && isFinite(t);
182
+ }
183
+ function N(t, e, i) {
184
+ return Math.abs(t - e) < i;
185
+ }
186
+ function W(t, e) {
187
+ const i = Math.round(t);
188
+ return i - e <= t && i + e >= t;
189
+ }
190
+ function j(t, e, i) {
191
+ let s, n, o;
192
+ for (s = 0, n = t.length; s < n; s++)
193
+ (o = t[s][i]),
194
+ isNaN(o) ||
195
+ ((e.min = Math.min(e.min, o)), (e.max = Math.max(e.max, o)));
196
+ }
197
+ function H(t) {
198
+ return t * (D / 180);
199
+ }
200
+ function $(t) {
201
+ return t * (180 / D);
202
+ }
203
+ function Y(t) {
204
+ if (!o(t)) return;
205
+ let e = 1,
206
+ i = 0;
207
+ for (; Math.round(t * e) / e !== t; ) (e *= 10), i++;
208
+ return i;
209
+ }
210
+ function U(t, e) {
211
+ const i = e.x - t.x,
212
+ s = e.y - t.y,
213
+ n = Math.sqrt(i * i + s * s);
214
+ let o = Math.atan2(s, i);
215
+ return o < -0.5 * D && (o += O), { angle: o, distance: n };
216
+ }
217
+ function X(t, e) {
218
+ return Math.sqrt(Math.pow(e.x - t.x, 2) + Math.pow(e.y - t.y, 2));
219
+ }
220
+ function q(t, e) {
221
+ return ((t - e + C) % O) - D;
222
+ }
223
+ function K(t) {
224
+ return ((t % O) + O) % O;
225
+ }
226
+ function G(t, e, i, s) {
227
+ const n = K(t),
228
+ o = K(e),
229
+ a = K(i),
230
+ r = K(o - n),
231
+ l = K(a - n),
232
+ h = K(n - o),
233
+ c = K(n - a);
234
+ return n === o || n === a || (s && o === a) || (r > l && h < c);
235
+ }
236
+ function Z(t, e, i) {
237
+ return Math.max(e, Math.min(i, t));
238
+ }
239
+ function J(t) {
240
+ return Z(t, -32768, 32767);
241
+ }
242
+ function Q(t, e, i, s = 1e-6) {
243
+ return t >= Math.min(e, i) - s && t <= Math.max(e, i) + s;
244
+ }
245
+ function tt(t, e, i) {
246
+ i = i || ((i) => t[i] < e);
247
+ let s,
248
+ n = t.length - 1,
249
+ o = 0;
250
+ for (; n - o > 1; ) (s = (o + n) >> 1), i(s) ? (o = s) : (n = s);
251
+ return { lo: o, hi: n };
252
+ }
253
+ const et = (t, e, i, s) =>
254
+ tt(t, i, s ? (s) => t[s][e] <= i : (s) => t[s][e] < i),
255
+ it = (t, e, i) => tt(t, i, (s) => t[s][e] >= i);
256
+ function st(t, e, i) {
257
+ let s = 0,
258
+ n = t.length;
259
+ for (; s < n && t[s] < e; ) s++;
260
+ for (; n > s && t[n - 1] > i; ) n--;
261
+ return s > 0 || n < t.length ? t.slice(s, n) : t;
262
+ }
263
+ const nt = ["push", "pop", "shift", "splice", "unshift"];
264
+ function ot(t, e) {
265
+ t._chartjs
266
+ ? t._chartjs.listeners.push(e)
267
+ : (Object.defineProperty(t, "_chartjs", {
268
+ configurable: !0,
269
+ enumerable: !1,
270
+ value: { listeners: [e] },
271
+ }),
272
+ nt.forEach((e) => {
273
+ const i = "_onData" + w(e),
274
+ s = t[e];
275
+ Object.defineProperty(t, e, {
276
+ configurable: !0,
277
+ enumerable: !1,
278
+ value(...e) {
279
+ const n = s.apply(this, e);
280
+ return (
281
+ t._chartjs.listeners.forEach((t) => {
282
+ "function" == typeof t[i] && t[i](...e);
283
+ }),
284
+ n
285
+ );
286
+ },
287
+ });
288
+ }));
289
+ }
290
+ function at(t, e) {
291
+ const i = t._chartjs;
292
+ if (!i) return;
293
+ const s = i.listeners,
294
+ n = s.indexOf(e);
295
+ -1 !== n && s.splice(n, 1),
296
+ s.length > 0 ||
297
+ (nt.forEach((e) => {
298
+ delete t[e];
299
+ }),
300
+ delete t._chartjs);
301
+ }
302
+ function rt(t) {
303
+ const e = new Set();
304
+ let i, s;
305
+ for (i = 0, s = t.length; i < s; ++i) e.add(t[i]);
306
+ return e.size === s ? t : Array.from(e);
307
+ }
308
+ const lt =
309
  "undefined" == typeof window
310
  ? function (t) {
311
  return t();
312
  }
313
  : window.requestAnimationFrame;
314
+ function ht(t, e, i) {
315
+ const s = i || ((t) => Array.prototype.slice.call(t));
316
+ let n = !1,
317
+ o = [];
318
+ return function (...i) {
319
+ (o = s(i)),
320
+ n ||
321
+ ((n = !0),
322
+ lt.call(window, () => {
323
+ (n = !1), t.apply(e, o);
324
  }));
325
  };
326
  }
327
+ function ct(t, e) {
328
  let i;
329
  return function (...s) {
330
  return (
332
  );
333
  };
334
  }
335
+ const dt = (t) => ("start" === t ? "left" : "end" === t ? "right" : "center"),
336
+ ut = (t, e, i) => ("start" === t ? e : "end" === t ? i : (e + i) / 2),
337
+ ft = (t, e, i, s) =>
338
  t === (s ? "left" : "right") ? i : "center" === t ? (e + i) / 2 : e;
339
+ function gt(t, e, i) {
340
+ const s = e.length;
341
+ let n = 0,
342
+ o = s;
343
+ if (t._sorted) {
344
+ const { iScale: a, _parsed: r } = t,
345
+ l = a.axis,
346
+ { min: h, max: c, minDefined: d, maxDefined: u } = a.getUserBounds();
347
+ d &&
348
+ (n = Z(
349
+ Math.min(
350
+ et(r, a.axis, h).lo,
351
+ i ? s : et(e, l, a.getPixelForValue(h)).lo
352
+ ),
353
+ 0,
354
+ s - 1
355
+ )),
356
+ (o = u
357
+ ? Z(
358
+ Math.max(
359
+ et(r, a.axis, c, !0).hi + 1,
360
+ i ? 0 : et(e, l, a.getPixelForValue(c), !0).hi + 1
361
+ ),
362
+ n,
363
+ s
364
+ ) - n
365
+ : s - n);
366
+ }
367
+ return { start: n, count: o };
368
+ }
369
+ function pt(t) {
370
+ const { xScale: e, yScale: i, _scaleRanges: s } = t,
371
+ n = { xmin: e.min, xmax: e.max, ymin: i.min, ymax: i.max };
372
+ if (!s) return (t._scaleRanges = n), !0;
373
+ const o =
374
+ s.xmin !== e.min ||
375
+ s.xmax !== e.max ||
376
+ s.ymin !== i.min ||
377
+ s.ymax !== i.max;
378
+ return Object.assign(s, n), o;
379
+ }
380
+ var mt = new (class {
381
  constructor() {
382
  (this._request = null),
383
  (this._charts = new Map()),
399
  _refresh() {
400
  this._request ||
401
  ((this._running = !0),
402
+ (this._request = lt.call(window, () => {
403
  this._update(),
404
  (this._request = null),
405
  this._running && this._refresh();
480
  }
481
  })();
482
  /*!
483
+ * @kurkle/color v0.2.1
484
  * https://github.com/kurkle/color#readme
485
+ * (c) 2022 Jukka Kurkela
486
  * Released under the MIT License
487
+ */ function bt(t) {
488
+ return (t + 0.5) | 0;
489
+ }
490
+ const xt = (t, e, i) => Math.max(Math.min(t, i), e);
491
+ function _t(t) {
492
+ return xt(bt(2.55 * t), 0, 255);
493
+ }
494
+ function yt(t) {
495
+ return xt(bt(255 * t), 0, 255);
496
+ }
497
+ function vt(t) {
498
+ return xt(bt(t / 2.55) / 100, 0, 1);
499
+ }
500
+ function wt(t) {
501
+ return xt(bt(100 * t), 0, 100);
502
+ }
503
+ const Mt = {
504
  0: 0,
505
  1: 1,
506
  2: 2,
524
  e: 14,
525
  f: 15,
526
  },
527
+ kt = [..."0123456789ABCDEF"],
528
+ St = (t) => kt[15 & t],
529
+ Pt = (t) => kt[(240 & t) >> 4] + kt[15 & t],
530
+ Dt = (t) => (240 & t) >> 4 == (15 & t);
531
+ function Ot(t) {
532
+ var e = ((t) => Dt(t.r) && Dt(t.g) && Dt(t.b) && Dt(t.a))(t) ? St : Pt;
533
+ return t
534
+ ? "#" +
535
+ e(t.r) +
536
+ e(t.g) +
537
+ e(t.b) +
538
+ ((t, e) => (t < 255 ? e(t) : ""))(t.a, e)
539
+ : void 0;
540
+ }
541
+ const Ct =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
542
  /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
543
+ function At(t, e, i) {
544
  const s = e * Math.min(i, 1 - i),
545
  n = (e, n = (e + t / 30) % 12) =>
546
  i - s * Math.max(Math.min(n - 3, 9 - n, 1), -1);
547
  return [n(0), n(8), n(4)];
548
  }
549
+ function Tt(t, e, i) {
550
  const s = (s, n = (s + t / 60) % 6) =>
551
  i - i * e * Math.max(Math.min(n, 4 - n, 1), 0);
552
  return [s(5), s(3), s(1)];
553
  }
554
+ function Lt(t, e, i) {
555
+ const s = At(t, 1, 0.5);
556
  let n;
557
  for (
558
  e + i > 1 && ((n = 1 / (e + i)), (e *= n), (i *= n)), n = 0;
562
  (s[n] *= 1 - e - i), (s[n] += e);
563
  return s;
564
  }
565
+ function Et(t) {
566
  const e = t.r / 255,
567
  i = t.g / 255,
568
  s = t.b / 255,
574
  n !== o &&
575
  ((h = n - o),
576
  (l = a > 0.5 ? h / (2 - n - o) : h / (n + o)),
577
+ (r = (function (t, e, i, s, n) {
578
+ return t === n
579
+ ? (e - i) / s + (e < i ? 6 : 0)
580
+ : e === n
581
+ ? (i - t) / s + 2
582
+ : (t - e) / s + 4;
583
+ })(e, i, s, h, n)),
584
  (r = 60 * r + 0.5)),
585
  [0 | r, l || 0, a]
586
  );
587
  }
588
+ function Rt(t, e, i, s) {
589
+ return (Array.isArray(e) ? t(e[0], e[1], e[2]) : t(e, i, s)).map(yt);
590
  }
591
+ function It(t, e, i) {
592
+ return Rt(At, t, e, i);
593
  }
594
+ function zt(t) {
595
  return ((t % 360) + 360) % 360;
596
  }
597
+ function Ft(t) {
598
+ const e = Ct.exec(t);
599
  let i,
600
  s = 255;
601
  if (!e) return;
602
+ e[5] !== i && (s = e[6] ? _t(+e[5]) : yt(+e[5]));
603
+ const n = zt(+e[2]),
604
  o = +e[3] / 100,
605
  a = +e[4] / 100;
606
  return (
607
  (i =
608
  "hwb" === e[1]
609
  ? (function (t, e, i) {
610
+ return Rt(Lt, t, e, i);
611
  })(n, o, a)
612
  : "hsv" === e[1]
613
  ? (function (t, e, i) {
614
+ return Rt(Tt, t, e, i);
615
  })(n, o, a)
616
+ : It(n, o, a)),
617
  { r: i[0], g: i[1], b: i[2], a: s }
618
  );
619
  }
620
+ const Vt = {
621
  x: "dark",
622
  Z: "light",
623
  Y: "re",
646
  I: "ightg",
647
  J: "wh",
648
  },
649
+ Bt = {
650
  OiceXe: "f0f8ff",
651
  antiquewEte: "faebd7",
652
  aqua: "ffff",
796
  Lw: "ffff00",
797
  LwgYF: "9acd32",
798
  };
799
+ let Nt;
800
+ function Wt(t) {
801
+ Nt ||
802
+ ((Nt = (function () {
803
  const t = {},
804
+ e = Object.keys(Bt),
805
+ i = Object.keys(Vt);
806
  let s, n, o, a, r;
807
  for (s = 0; s < e.length; s++) {
808
  for (a = r = e[s], n = 0; n < i.length; n++)
809
+ (o = i[n]), (r = r.replace(o, Vt[o]));
810
+ (o = parseInt(Bt[a], 16)),
811
  (t[r] = [(o >> 16) & 255, (o >> 8) & 255, 255 & o]);
812
  }
813
  return t;
814
  })()),
815
+ (Nt.transparent = [0, 0, 0, 0]));
816
+ const e = Nt[t.toLowerCase()];
817
  return e && { r: e[0], g: e[1], b: e[2], a: 4 === e.length ? e[3] : 255 };
818
  }
819
+ const jt =
820
+ /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
821
+ const Ht = (t) =>
822
+ t <= 0.0031308 ? 12.92 * t : 1.055 * Math.pow(t, 1 / 2.4) - 0.055,
823
+ $t = (t) => (t <= 0.04045 ? t / 12.92 : Math.pow((t + 0.055) / 1.055, 2.4));
824
+ function Yt(t, e, i) {
825
  if (t) {
826
+ let s = Et(t);
827
  (s[e] = Math.max(0, Math.min(s[e] + s[e] * i, 0 === e ? 360 : 1))),
828
+ (s = It(s)),
829
  (t.r = s[0]),
830
  (t.g = s[1]),
831
  (t.b = s[2]);
832
  }
833
  }
834
+ function Ut(t, e) {
835
  return t ? Object.assign(e || {}, t) : t;
836
  }
837
+ function Xt(t) {
838
  var e = { r: 0, g: 0, b: 0, a: 255 };
839
  return (
840
  Array.isArray(t)
841
  ? t.length >= 3 &&
842
  ((e = { r: t[0], g: t[1], b: t[2], a: 255 }),
843
+ t.length > 3 && (e.a = yt(t[3])))
844
+ : ((e = Ut(t, { r: 0, g: 0, b: 0, a: 1 })).a = yt(e.a)),
845
  e
846
  );
847
  }
848
+ function qt(t) {
849
  return "r" === t.charAt(0)
850
  ? (function (t) {
851
+ const e = jt.exec(t);
852
  let i,
853
  s,
854
  n,
856
  if (e) {
857
  if (e[7] !== i) {
858
  const t = +e[7];
859
+ o = e[8] ? _t(t) : xt(255 * t, 0, 255);
860
  }
861
  return (
862
  (i = +e[1]),
863
  (s = +e[3]),
864
  (n = +e[5]),
865
+ (i = 255 & (e[2] ? _t(i) : xt(i, 0, 255))),
866
+ (s = 255 & (e[4] ? _t(s) : xt(s, 0, 255))),
867
+ (n = 255 & (e[6] ? _t(n) : xt(n, 0, 255))),
868
  { r: i, g: s, b: n, a: o }
869
  );
870
  }
871
  })(t)
872
+ : Ft(t);
873
  }
874
+ class Kt {
875
  constructor(t) {
876
+ if (t instanceof Kt) return t;
877
  const e = typeof t;
878
  let i;
879
  var s, n, o;
880
  "object" === e
881
+ ? (i = Xt(t))
882
  : "string" === e &&
883
  ((o = (s = t).length),
884
  "#" === s[0] &&
885
  (4 === o || 5 === o
886
  ? (n = {
887
+ r: 255 & (17 * Mt[s[1]]),
888
+ g: 255 & (17 * Mt[s[2]]),
889
+ b: 255 & (17 * Mt[s[3]]),
890
+ a: 5 === o ? 17 * Mt[s[4]] : 255,
891
  })
892
  : (7 !== o && 9 !== o) ||
893
  (n = {
894
+ r: (Mt[s[1]] << 4) | Mt[s[2]],
895
+ g: (Mt[s[3]] << 4) | Mt[s[4]],
896
+ b: (Mt[s[5]] << 4) | Mt[s[6]],
897
+ a: 9 === o ? (Mt[s[7]] << 4) | Mt[s[8]] : 255,
898
  })),
899
+ (i = n || Wt(t) || qt(t))),
900
  (this._rgb = i),
901
  (this._valid = !!i);
902
  }
904
  return this._valid;
905
  }
906
  get rgb() {
907
+ var t = Ut(this._rgb);
908
+ return t && (t.a = vt(t.a)), t;
909
  }
910
  set rgb(t) {
911
+ this._rgb = Xt(t);
912
  }
913
  rgbString() {
914
  return this._valid
915
  ? (t = this._rgb) &&
916
  (t.a < 255
917
+ ? `rgba(${t.r}, ${t.g}, ${t.b}, ${vt(t.a)})`
918
  : `rgb(${t.r}, ${t.g}, ${t.b})`)
919
+ : void 0;
920
  var t;
921
  }
922
  hexString() {
923
+ return this._valid ? Ot(this._rgb) : void 0;
924
  }
925
  hslString() {
926
  return this._valid
927
  ? (function (t) {
928
  if (!t) return;
929
+ const e = Et(t),
930
  i = e[0],
931
+ s = wt(e[1]),
932
+ n = wt(e[2]);
933
  return t.a < 255
934
+ ? `hsla(${i}, ${s}%, ${n}%, ${vt(t.a)})`
935
  : `hsl(${i}, ${s}%, ${n}%)`;
936
  })(this._rgb)
937
+ : void 0;
938
  }
939
  mix(t, e) {
 
940
  if (t) {
941
+ const i = this.rgb,
942
+ s = t.rgb;
943
+ let n;
944
+ const o = e === n ? 0.5 : e,
945
+ a = 2 * o - 1,
946
+ r = i.a - s.a,
947
+ l = ((a * r == -1 ? a : (a + r) / (1 + a * r)) + 1) / 2;
948
+ (n = 1 - l),
949
+ (i.r = 255 & (l * i.r + n * s.r + 0.5)),
950
+ (i.g = 255 & (l * i.g + n * s.g + 0.5)),
951
+ (i.b = 255 & (l * i.b + n * s.b + 0.5)),
952
+ (i.a = o * i.a + (1 - o) * s.a),
953
+ (this.rgb = i);
954
  }
955
+ return this;
956
+ }
957
+ interpolate(t, e) {
958
+ return (
959
+ t &&
960
+ (this._rgb = (function (t, e, i) {
961
+ const s = $t(vt(t.r)),
962
+ n = $t(vt(t.g)),
963
+ o = $t(vt(t.b));
964
+ return {
965
+ r: yt(Ht(s + i * ($t(vt(e.r)) - s))),
966
+ g: yt(Ht(n + i * ($t(vt(e.g)) - n))),
967
+ b: yt(Ht(o + i * ($t(vt(e.b)) - o))),
968
+ a: t.a + i * (e.a - t.a),
969
+ };
970
+ })(this._rgb, t._rgb, e)),
971
+ this
972
+ );
973
  }
974
  clone() {
975
+ return new Kt(this.rgb);
976
  }
977
  alpha(t) {
978
+ return (this._rgb.a = yt(t)), this;
979
  }
980
  clearer(t) {
981
  return (this._rgb.a *= 1 - t), this;
982
  }
983
  greyscale() {
984
  const t = this._rgb,
985
+ e = bt(0.3 * t.r + 0.59 * t.g + 0.11 * t.b);
986
  return (t.r = t.g = t.b = e), this;
987
  }
988
  opaquer(t) {
993
  return (t.r = 255 - t.r), (t.g = 255 - t.g), (t.b = 255 - t.b), this;
994
  }
995
  lighten(t) {
996
+ return Yt(this._rgb, 2, t), this;
997
  }
998
  darken(t) {
999
+ return Yt(this._rgb, 2, -t), this;
1000
  }
1001
  saturate(t) {
1002
+ return Yt(this._rgb, 1, t), this;
1003
  }
1004
  desaturate(t) {
1005
+ return Yt(this._rgb, 1, -t), this;
1006
  }
1007
  rotate(t) {
1008
  return (
1009
  (function (t, e) {
1010
+ var i = Et(t);
1011
+ (i[0] = zt(i[0] + e)),
1012
+ (i = It(i)),
1013
  (t.r = i[0]),
1014
  (t.g = i[1]),
1015
  (t.b = i[2]);
1018
  );
1019
  }
1020
  }
1021
+ function Gt(t) {
1022
+ return new Kt(t);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1023
  }
1024
+ function Zt(t) {
1025
+ if (t && "object" == typeof t) {
1026
+ const e = t.toString();
1027
+ return "[object CanvasPattern]" === e || "[object CanvasGradient]" === e;
1028
+ }
1029
+ return !1;
1030
  }
1031
+ function Jt(t) {
1032
+ return Zt(t) ? t : Gt(t);
 
 
 
 
 
 
1033
  }
1034
+ function Qt(t) {
1035
+ return Zt(t) ? t : Gt(t).saturate(0.5).darken(0.1).hexString();
 
 
 
 
 
 
 
 
 
1036
  }
1037
+ const te = Object.create(null),
1038
+ ee = Object.create(null);
1039
+ function ie(t, e) {
1040
+ if (!e) return t;
1041
+ const i = e.split(".");
1042
+ for (let e = 0, s = i.length; e < s; ++e) {
1043
+ const s = i[e];
1044
+ t = t[s] || (t[s] = Object.create(null));
 
1045
  }
1046
  return t;
1047
  }
1048
+ function se(t, e, i) {
1049
+ return "string" == typeof e ? m(ie(t, e), i) : m(ie(t, ""), e);
1050
  }
1051
+ var ne = new (class {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1052
  constructor(t) {
1053
  (this.animation = void 0),
1054
  (this.backgroundColor = "rgba(0,0,0,0.1)"),
1072
  weight: null,
1073
  }),
1074
  (this.hover = {}),
1075
+ (this.hoverBackgroundColor = (t, e) => Qt(e.backgroundColor)),
1076
+ (this.hoverBorderColor = (t, e) => Qt(e.borderColor)),
1077
+ (this.hoverColor = (t, e) => Qt(e.color)),
1078
  (this.indexAxis = "x"),
1079
+ (this.interaction = {
1080
+ mode: "nearest",
1081
+ intersect: !0,
1082
+ includeInvisible: !1,
1083
+ }),
1084
  (this.maintainAspectRatio = !0),
1085
  (this.onHover = null),
1086
  (this.onClick = null),
1094
  this.describe(t);
1095
  }
1096
  set(t, e) {
1097
+ return se(this, t, e);
1098
  }
1099
  get(t) {
1100
+ return ie(this, t);
1101
  }
1102
  describe(t, e) {
1103
+ return se(ee, t, e);
1104
  }
1105
  override(t, e) {
1106
+ return se(te, t, e);
1107
  }
1108
  route(t, e, i, s) {
1109
+ const o = ie(this, t),
1110
+ a = ie(this, i),
1111
+ l = "_" + e;
1112
+ Object.defineProperties(o, {
1113
+ [l]: { value: o[e], writable: !0 },
1114
  [e]: {
1115
  enumerable: !0,
1116
  get() {
1117
+ const t = this[l],
1118
+ e = a[s];
1119
+ return n(t) ? Object.assign({}, e, t) : r(t, e);
1120
  },
1121
  set(t) {
1122
+ this[l] = t;
1123
  },
1124
  },
1125
  });
1130
  hover: { _fallback: "interaction" },
1131
  interaction: { _scriptable: !1, _indexable: !1 },
1132
  });
1133
+ function oe() {
1134
+ return "undefined" != typeof window && "undefined" != typeof document;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1135
  }
1136
+ function ae(t) {
1137
+ let e = t.parentNode;
1138
+ return e && "[object ShadowRoot]" === e.toString() && (e = e.host), e;
 
 
 
1139
  }
1140
+ function re(t, e, i) {
1141
+ let s;
1142
+ return (
1143
+ "string" == typeof t
1144
+ ? ((s = parseInt(t, 10)),
1145
+ -1 !== t.indexOf("%") && (s = (s / 100) * e.parentNode[i]))
1146
+ : (s = t),
1147
+ s
1148
+ );
1149
  }
1150
+ const le = (t) => window.getComputedStyle(t, null);
1151
+ function he(t, e) {
1152
+ return le(t).getPropertyValue(e);
1153
  }
1154
+ const ce = ["top", "right", "bottom", "left"];
1155
+ function de(t, e, i) {
1156
+ const s = {};
1157
+ i = i ? "-" + i : "";
1158
+ for (let n = 0; n < 4; n++) {
1159
+ const o = ce[n];
1160
+ s[o] = parseFloat(t[e + "-" + o + i]) || 0;
1161
+ }
1162
+ return (s.width = s.left + s.right), (s.height = s.top + s.bottom), s;
1163
  }
1164
+ function ue(t, e) {
1165
+ if ("native" in t) return t;
1166
+ const { canvas: i, currentDevicePixelRatio: s } = e,
1167
+ n = le(i),
1168
+ o = "border-box" === n.boxSizing,
1169
+ a = de(n, "padding"),
1170
+ r = de(n, "border", "width"),
1171
+ {
1172
+ x: l,
1173
+ y: h,
1174
+ box: c,
1175
+ } = (function (t, e) {
1176
+ const i = t.touches,
1177
+ s = i && i.length ? i[0] : t,
1178
+ { offsetX: n, offsetY: o } = s;
1179
+ let a,
1180
+ r,
1181
+ l = !1;
1182
+ if (
1183
+ ((t, e, i) => (t > 0 || e > 0) && (!i || !i.shadowRoot))(
1184
+ n,
1185
+ o,
1186
+ t.target
1187
+ )
1188
+ )
1189
+ (a = n), (r = o);
1190
+ else {
1191
+ const t = e.getBoundingClientRect();
1192
+ (a = s.clientX - t.left), (r = s.clientY - t.top), (l = !0);
1193
+ }
1194
+ return { x: a, y: r, box: l };
1195
+ })(t, i),
1196
+ d = a.left + (c && r.left),
1197
+ u = a.top + (c && r.top);
1198
+ let { width: f, height: g } = e;
1199
+ return (
1200
+ o && ((f -= a.width + r.width), (g -= a.height + r.height)),
1201
+ {
1202
+ x: Math.round((((l - d) / f) * i.width) / s),
1203
+ y: Math.round((((h - u) / g) * i.height) / s),
1204
+ }
1205
+ );
1206
  }
1207
+ const fe = (t) => Math.round(10 * t) / 10;
1208
+ function ge(t, e, i, s) {
1209
+ const n = le(t),
1210
+ o = de(n, "margin"),
1211
+ a = re(n.maxWidth, t, "clientWidth") || A,
1212
+ r = re(n.maxHeight, t, "clientHeight") || A,
1213
+ l = (function (t, e, i) {
1214
+ let s, n;
1215
+ if (void 0 === e || void 0 === i) {
1216
+ const o = ae(t);
1217
+ if (o) {
1218
+ const t = o.getBoundingClientRect(),
1219
+ a = le(o),
1220
+ r = de(a, "border", "width"),
1221
+ l = de(a, "padding");
1222
+ (e = t.width - l.width - r.width),
1223
+ (i = t.height - l.height - r.height),
1224
+ (s = re(a.maxWidth, o, "clientWidth")),
1225
+ (n = re(a.maxHeight, o, "clientHeight"));
1226
+ } else (e = t.clientWidth), (i = t.clientHeight);
1227
+ }
1228
+ return { width: e, height: i, maxWidth: s || A, maxHeight: n || A };
1229
+ })(t, e, i);
1230
+ let { width: h, height: c } = l;
1231
+ if ("content-box" === n.boxSizing) {
1232
+ const t = de(n, "border", "width"),
1233
+ e = de(n, "padding");
1234
+ (h -= e.width + t.width), (c -= e.height + t.height);
1235
+ }
1236
+ return (
1237
+ (h = Math.max(0, h - o.width)),
1238
+ (c = Math.max(0, s ? Math.floor(h / s) : c - o.height)),
1239
+ (h = fe(Math.min(h, a, l.maxWidth))),
1240
+ (c = fe(Math.min(c, r, l.maxHeight))),
1241
+ h && !c && (c = fe(h / 2)),
1242
+ { width: h, height: c }
1243
+ );
1244
  }
1245
+ function pe(t, e, i) {
1246
+ const s = e || 1,
1247
+ n = Math.floor(t.height * s),
1248
+ o = Math.floor(t.width * s);
1249
+ (t.height = n / s), (t.width = o / s);
1250
+ const a = t.canvas;
1251
+ return (
1252
+ a.style &&
1253
+ (i || (!a.style.height && !a.style.width)) &&
1254
+ ((a.style.height = `${t.height}px`), (a.style.width = `${t.width}px`)),
1255
+ (t.currentDevicePixelRatio !== s || a.height !== n || a.width !== o) &&
1256
+ ((t.currentDevicePixelRatio = s),
1257
+ (a.height = n),
1258
+ (a.width = o),
1259
+ t.ctx.setTransform(s, 0, 0, s, 0, 0),
1260
+ !0)
1261
+ );
1262
  }
1263
+ const me = (function () {
1264
+ let t = !1;
1265
+ try {
1266
+ const e = {
1267
+ get passive() {
1268
+ return (t = !0), !1;
1269
+ },
1270
+ };
1271
+ window.addEventListener("test", null, e),
1272
+ window.removeEventListener("test", null, e);
1273
+ } catch (t) {}
1274
+ return t;
1275
+ })();
1276
+ function be(t, e) {
1277
+ const i = he(t, e),
1278
+ s = i && i.match(/^(\d+)(\.\d+)?px$/);
1279
+ return s ? +s[1] : void 0;
1280
  }
1281
+ function xe(t) {
1282
+ return !t || i(t.size) || i(t.family)
1283
  ? null
1284
  : (t.style ? t.style + " " : "") +
1285
  (t.weight ? t.weight + " " : "") +
1287
  "px " +
1288
  t.family;
1289
  }
1290
+ function _e(t, e, i, s, n) {
1291
  let o = e[n];
1292
  return (
1293
  o || ((o = e[n] = t.measureText(n).width), i.push(n)), o > s && (s = o), s
1294
  );
1295
  }
1296
+ function ye(t, e, i, n) {
1297
+ let o = ((n = n || {}).data = n.data || {}),
1298
+ a = (n.garbageCollect = n.garbageCollect || []);
1299
+ n.font !== e &&
1300
+ ((o = n.data = {}), (a = n.garbageCollect = []), (n.font = e)),
1301
  t.save(),
1302
  (t.font = e);
1303
+ let r = 0;
1304
+ const l = i.length;
1305
+ let h, c, d, u, f;
1306
+ for (h = 0; h < l; h++)
1307
+ if (((u = i[h]), null != u && !0 !== s(u))) r = _e(t, o, a, r, u);
1308
+ else if (s(u))
1309
+ for (c = 0, d = u.length; c < d; c++)
1310
+ (f = u[c]), null == f || s(f) || (r = _e(t, o, a, r, f));
1311
  t.restore();
1312
+ const g = a.length / 2;
1313
+ if (g > i.length) {
1314
+ for (h = 0; h < g; h++) delete o[a[h]];
1315
+ a.splice(0, g);
1316
  }
1317
+ return r;
1318
  }
1319
+ function ve(t, e, i) {
1320
  const s = t.currentDevicePixelRatio,
1321
  n = 0 !== i ? Math.max(i / 2, 0.5) : 0;
1322
  return Math.round((e - n) * s) / s + n;
1323
  }
1324
+ function we(t, e) {
1325
  (e = e || t.getContext("2d")).save(),
1326
  e.resetTransform(),
1327
  e.clearRect(0, 0, t.width, t.height),
1328
  e.restore();
1329
  }
1330
+ function Me(t, e, i, s) {
1331
+ ke(t, e, i, s, null);
1332
+ }
1333
+ function ke(t, e, i, s, n) {
1334
+ let o, a, r, l, h, c;
1335
+ const d = e.pointStyle,
1336
+ u = e.rotation,
1337
+ f = e.radius;
1338
+ let g = (u || 0) * T;
1339
  if (
1340
+ d &&
1341
+ "object" == typeof d &&
1342
+ ((o = d.toString()),
1343
+ "[object HTMLImageElement]" === o || "[object HTMLCanvasElement]" === o)
1344
  )
1345
  return (
1346
  t.save(),
1347
  t.translate(i, s),
1348
+ t.rotate(g),
1349
+ t.drawImage(d, -d.width / 2, -d.height / 2, d.width, d.height),
1350
  void t.restore()
1351
  );
1352
+ if (!(isNaN(f) || f <= 0)) {
1353
+ switch ((t.beginPath(), d)) {
1354
  default:
1355
+ n ? t.ellipse(i, s, n / 2, f, 0, 0, O) : t.arc(i, s, f, 0, O),
1356
+ t.closePath();
1357
  break;
1358
  case "triangle":
1359
+ t.moveTo(i + Math.sin(g) * f, s - Math.cos(g) * f),
1360
+ (g += R),
1361
+ t.lineTo(i + Math.sin(g) * f, s - Math.cos(g) * f),
1362
+ (g += R),
1363
+ t.lineTo(i + Math.sin(g) * f, s - Math.cos(g) * f),
1364
  t.closePath();
1365
  break;
1366
  case "rectRounded":
1367
+ (h = 0.516 * f),
1368
+ (l = f - h),
1369
+ (a = Math.cos(g + E) * l),
1370
+ (r = Math.sin(g + E) * l),
1371
+ t.arc(i - a, s - r, h, g - D, g - L),
1372
+ t.arc(i + r, s - a, h, g - L, g),
1373
+ t.arc(i + a, s + r, h, g, g + L),
1374
+ t.arc(i - r, s + a, h, g + L, g + D),
1375
  t.closePath();
1376
  break;
1377
  case "rect":
1378
+ if (!u) {
1379
+ (l = Math.SQRT1_2 * f),
1380
+ (c = n ? n / 2 : l),
1381
+ t.rect(i - c, s - l, 2 * c, 2 * l);
1382
  break;
1383
  }
1384
+ g += E;
1385
  case "rectRot":
1386
+ (a = Math.cos(g) * f),
1387
+ (r = Math.sin(g) * f),
1388
+ t.moveTo(i - a, s - r),
1389
+ t.lineTo(i + r, s - a),
1390
+ t.lineTo(i + a, s + r),
1391
+ t.lineTo(i - r, s + a),
1392
  t.closePath();
1393
  break;
1394
  case "crossRot":
1395
+ g += E;
1396
  case "cross":
1397
+ (a = Math.cos(g) * f),
1398
+ (r = Math.sin(g) * f),
1399
+ t.moveTo(i - a, s - r),
1400
+ t.lineTo(i + a, s + r),
1401
+ t.moveTo(i + r, s - a),
1402
+ t.lineTo(i - r, s + a);
1403
  break;
1404
  case "star":
1405
+ (a = Math.cos(g) * f),
1406
+ (r = Math.sin(g) * f),
1407
+ t.moveTo(i - a, s - r),
1408
+ t.lineTo(i + a, s + r),
1409
+ t.moveTo(i + r, s - a),
1410
+ t.lineTo(i - r, s + a),
1411
+ (g += E),
1412
+ (a = Math.cos(g) * f),
1413
+ (r = Math.sin(g) * f),
1414
+ t.moveTo(i - a, s - r),
1415
+ t.lineTo(i + a, s + r),
1416
+ t.moveTo(i + r, s - a),
1417
+ t.lineTo(i - r, s + a);
1418
  break;
1419
  case "line":
1420
+ (a = n ? n / 2 : Math.cos(g) * f),
1421
+ (r = Math.sin(g) * f),
1422
+ t.moveTo(i - a, s - r),
1423
+ t.lineTo(i + a, s + r);
1424
  break;
1425
  case "dash":
1426
+ t.moveTo(i, s), t.lineTo(i + Math.cos(g) * f, s + Math.sin(g) * f);
1427
  }
1428
  t.fill(), e.borderWidth > 0 && t.stroke();
1429
  }
1430
  }
1431
+ function Se(t, e, i) {
1432
  return (
1433
  (i = i || 0.5),
1434
  !e ||
1439
  t.y < e.bottom + i)
1440
  );
1441
  }
1442
+ function Pe(t, e) {
1443
  t.save(),
1444
  t.beginPath(),
1445
  t.rect(e.left, e.top, e.right - e.left, e.bottom - e.top),
1446
  t.clip();
1447
  }
1448
+ function De(t) {
1449
  t.restore();
1450
  }
1451
+ function Oe(t, e, i, s, n) {
1452
  if (!e) return t.lineTo(i.x, i.y);
1453
  if ("middle" === n) {
1454
  const s = (e.x + i.x) / 2;
1456
  } else ("after" === n) != !!s ? t.lineTo(e.x, i.y) : t.lineTo(i.x, e.y);
1457
  t.lineTo(i.x, i.y);
1458
  }
1459
+ function Ce(t, e, i, s) {
1460
  if (!e) return t.lineTo(i.x, i.y);
1461
  t.bezierCurveTo(
1462
  s ? e.cp1x : e.cp2x,
1467
  i.y
1468
  );
1469
  }
1470
+ function Ae(t, e, n, o, a, r = {}) {
1471
+ const l = s(e) ? e : [e],
1472
+ h = r.strokeWidth > 0 && "" !== r.strokeColor;
1473
+ let c, d;
1474
  for (
1475
  t.save(),
1476
+ t.font = a.string,
1477
  (function (t, e) {
1478
  e.translation && t.translate(e.translation[0], e.translation[1]);
1479
+ i(e.rotation) || t.rotate(e.rotation);
1480
  e.color && (t.fillStyle = e.color);
1481
  e.textAlign && (t.textAlign = e.textAlign);
1482
  e.textBaseline && (t.textBaseline = e.textBaseline);
1483
+ })(t, r),
1484
+ c = 0;
1485
+ c < l.length;
1486
+ ++c
1487
  )
1488
+ (d = l[c]),
1489
+ h &&
1490
+ (r.strokeColor && (t.strokeStyle = r.strokeColor),
1491
+ i(r.strokeWidth) || (t.lineWidth = r.strokeWidth),
1492
+ t.strokeText(d, n, o, r.maxWidth)),
1493
+ t.fillText(d, n, o, r.maxWidth),
1494
+ Te(t, n, o, d, r),
1495
+ (o += a.lineHeight);
1496
  t.restore();
1497
  }
1498
+ function Te(t, e, i, s, n) {
1499
  if (n.strikethrough || n.underline) {
1500
  const o = t.measureText(s),
1501
  a = e - o.actualBoundingBoxLeft,
1511
  t.stroke();
1512
  }
1513
  }
1514
+ function Le(t, e) {
1515
  const { x: i, y: s, w: n, h: o, radius: a } = e;
1516
+ t.arc(i + a.topLeft, s + a.topLeft, a.topLeft, -L, D, !0),
1517
  t.lineTo(i, s + o - a.bottomLeft),
1518
+ t.arc(i + a.bottomLeft, s + o - a.bottomLeft, a.bottomLeft, D, L, !0),
1519
  t.lineTo(i + n - a.bottomRight, s + o),
1520
  t.arc(
1521
  i + n - a.bottomRight,
1522
  s + o - a.bottomRight,
1523
  a.bottomRight,
1524
+ L,
1525
  0,
1526
  !0
1527
  ),
1528
  t.lineTo(i + n, s + a.topRight),
1529
+ t.arc(i + n - a.topRight, s + a.topRight, a.topRight, 0, -L, !0),
1530
  t.lineTo(i + a.topLeft, s);
1531
  }
1532
+ function Ee(t, e = [""], i = t, s, n = () => t[0]) {
1533
+ M(s) || (s = $e("_fallback", t));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1534
  const o = {
1535
  [Symbol.toStringTag]: "Object",
1536
  _cacheable: !0,
1538
  _rootScopes: i,
1539
  _fallback: s,
1540
  _getTarget: n,
1541
+ override: (n) => Ee([n, ...t], e, i, s),
1542
  };
1543
  return new Proxy(o, {
1544
  deleteProperty: (e, i) => (
1545
  delete e[i], delete e._keys, delete t[0][i], !0
1546
  ),
1547
  get: (i, s) =>
1548
+ Ve(i, s, () =>
1549
  (function (t, e, i, s) {
1550
  let n;
1551
  for (const o of e)
1552
+ if (((n = $e(ze(o, t), i)), M(n)))
1553
+ return Fe(t, n) ? je(i, s, t, n) : n;
1554
  })(s, e, t, i)
1555
  ),
1556
  getOwnPropertyDescriptor: (t, e) =>
1557
  Reflect.getOwnPropertyDescriptor(t._scopes[0], e),
1558
  getPrototypeOf: () => Reflect.getPrototypeOf(t[0]),
1559
+ has: (t, e) => Ye(t).includes(e),
1560
+ ownKeys: (t) => Ye(t),
1561
  set(t, e, i) {
1562
  const s = t._storage || (t._storage = n());
1563
  return (t[e] = s[e] = i), delete t._keys, !0;
1564
  },
1565
  });
1566
  }
1567
+ function Re(t, e, i, o) {
1568
+ const a = {
1569
  _cacheable: !1,
1570
  _proxy: t,
1571
  _context: e,
1572
  _subProxy: i,
1573
  _stack: new Set(),
1574
+ _descriptors: Ie(t, o),
1575
+ setContext: (e) => Re(t, e, i, o),
1576
+ override: (s) => Re(t.override(s), e, i, o),
1577
  };
1578
+ return new Proxy(a, {
1579
  deleteProperty: (e, i) => (delete e[i], delete t[i], !0),
1580
  get: (t, e, i) =>
1581
+ Ve(t, e, () =>
1582
  (function (t, e, i) {
1583
+ const { _proxy: o, _context: a, _subProxy: r, _descriptors: l } = t;
1584
+ let h = o[e];
1585
+ k(h) &&
1586
+ l.isScriptable(e) &&
1587
+ (h = (function (t, e, i, s) {
1588
  const { _proxy: n, _context: o, _subProxy: a, _stack: r } = i;
1589
  if (r.has(t))
1590
  throw new Error(
1593
  r.add(t),
1594
  (e = e(o, a || s)),
1595
  r.delete(t),
1596
+ Fe(t, e) && (e = je(n._scopes, n, t, e));
1597
  return e;
1598
+ })(e, h, t, i));
1599
+ s(h) &&
1600
+ h.length &&
1601
+ (h = (function (t, e, i, s) {
1602
  const {
1603
+ _proxy: o,
1604
+ _context: a,
1605
+ _subProxy: r,
1606
+ _descriptors: l,
1607
  } = i;
1608
+ if (M(a.index) && s(t)) e = e[a.index % e.length];
1609
+ else if (n(e[0])) {
1610
  const i = e,
1611
+ s = o._scopes.filter((t) => t !== i);
1612
  e = [];
1613
+ for (const n of i) {
1614
+ const i = je(s, o, t, n);
1615
+ e.push(Re(i, a, r && r[t], l));
1616
  }
1617
  }
1618
  return e;
1619
+ })(e, h, t, l.isIndexable));
1620
+ Fe(e, h) && (h = Re(h, a, r && r[e], l));
1621
+ return h;
1622
  })(t, e, i)
1623
  ),
1624
  getOwnPropertyDescriptor: (e, i) =>
1633
  set: (e, i, s) => ((t[i] = s), delete e[i], !0),
1634
  });
1635
  }
1636
+ function Ie(t, e = { scriptable: !0, indexable: !0 }) {
1637
  const {
1638
  _scriptable: i = e.scriptable,
1639
  _indexable: s = e.indexable,
1643
  allKeys: n,
1644
  scriptable: i,
1645
  indexable: s,
1646
+ isScriptable: k(i) ? i : () => i,
1647
+ isIndexable: k(s) ? s : () => s,
1648
  };
1649
  }
1650
+ const ze = (t, e) => (t ? t + w(e) : e),
1651
+ Fe = (t, e) =>
1652
+ n(e) &&
1653
  "adapters" !== t &&
1654
  (null === Object.getPrototypeOf(e) || e.constructor === Object);
1655
+ function Ve(t, e, i) {
1656
  if (Object.prototype.hasOwnProperty.call(t, e)) return t[e];
1657
  const s = i();
1658
  return (t[e] = s), s;
1659
  }
1660
+ function Be(t, e, i) {
1661
+ return k(t) ? t(e, i) : t;
1662
  }
1663
+ const Ne = (t, e) => (!0 === t ? e : "string" == typeof t ? y(e, t) : void 0);
1664
+ function We(t, e, i, s, n) {
 
1665
  for (const o of e) {
1666
+ const e = Ne(i, o);
1667
  if (e) {
1668
  t.add(e);
1669
+ const o = Be(e._fallback, i, n);
1670
+ if (M(o) && o !== i && o !== s) return o;
1671
+ } else if (!1 === e && M(s) && i !== s) return null;
1672
  }
1673
  return !1;
1674
  }
1675
+ function je(t, e, i, o) {
1676
+ const a = e._rootScopes,
1677
+ r = Be(e._fallback, i, o),
1678
+ l = [...t, ...a],
1679
+ h = new Set();
1680
+ h.add(o);
1681
+ let c = He(h, l, i, r || i, o);
1682
  return (
1683
+ null !== c &&
1684
+ (!M(r) || r === i || ((c = He(h, l, r, c, o)), null !== c)) &&
1685
+ Ee(Array.from(h), [""], a, r, () =>
1686
  (function (t, e, i) {
1687
+ const o = t._getTarget();
1688
+ e in o || (o[e] = {});
1689
+ const a = o[e];
1690
+ if (s(a) && n(i)) return i;
1691
+ return a;
1692
+ })(e, i, o)
1693
  )
1694
  );
1695
  }
1696
+ function He(t, e, i, s, n) {
1697
+ for (; i; ) i = We(t, e, i, s, n);
1698
  return i;
1699
  }
1700
+ function $e(t, e) {
1701
  for (const i of e) {
1702
  if (!i) continue;
1703
  const e = i[t];
1704
+ if (M(e)) return e;
1705
  }
1706
  }
1707
+ function Ye(t) {
1708
  let e = t._keys;
1709
  return (
1710
  e ||
1719
  e
1720
  );
1721
  }
1722
+ function Ue(t, e, i, s) {
1723
+ const { iScale: n } = t,
1724
+ { key: o = "r" } = this._parsing,
1725
+ a = new Array(s);
1726
+ let r, l, h, c;
1727
+ for (r = 0, l = s; r < l; ++r)
1728
+ (h = r + i), (c = e[h]), (a[r] = { r: n.parse(y(c, o), h) });
1729
+ return a;
1730
+ }
1731
+ const Xe = Number.EPSILON || 1e-14,
1732
+ qe = (t, e) => e < t.length && !t[e].skip && t[e],
1733
+ Ke = (t) => ("x" === t ? "y" : "x");
1734
+ function Ge(t, e, i, s) {
1735
  const n = t.skip ? e : t,
1736
  o = e,
1737
  a = i.skip ? e : i,
1738
+ r = X(o, n),
1739
+ l = X(a, o);
1740
  let h = r / (r + l),
1741
  c = l / (r + l);
1742
  (h = isNaN(h) ? 0 : h), (c = isNaN(c) ? 0 : c);
1747
  next: { x: o.x + u * (a.x - n.x), y: o.y + u * (a.y - n.y) },
1748
  };
1749
  }
1750
+ function Ze(t, e = "x") {
1751
+ const i = Ke(e),
1752
  s = t.length,
1753
  n = Array(s).fill(0),
1754
  o = Array(s);
1755
  let a,
1756
  r,
1757
  l,
1758
+ h = qe(t, 0);
1759
  for (a = 0; a < s; ++a)
1760
+ if (((r = l), (l = h), (h = qe(t, a + 1)), l)) {
1761
  if (h) {
1762
  const t = h[e] - l[e];
1763
  n[a] = 0 !== t ? (h[i] - l[i]) / t : 0;
1764
  }
1765
  o[a] = r
1766
  ? h
1767
+ ? z(n[a - 1]) !== z(n[a])
1768
  ? 0
1769
  : (n[a - 1] + n[a]) / 2
1770
  : n[a - 1]
1777
  a,
1778
  r,
1779
  l,
1780
+ h = qe(t, 0);
1781
  for (let c = 0; c < s - 1; ++c)
1782
  (l = h),
1783
+ (h = qe(t, c + 1)),
1784
  l &&
1785
  h &&
1786
+ (N(e[c], 0, Xe)
1787
  ? (i[c] = i[c + 1] = 0)
1788
  : ((n = i[c] / e[c]),
1789
  (o = i[c + 1] / e[c]),
1794
  (i[c + 1] = o * a * e[c]))));
1795
  })(t, n, o),
1796
  (function (t, e, i = "x") {
1797
+ const s = Ke(i),
1798
  n = t.length;
1799
  let o,
1800
  a,
1801
  r,
1802
+ l = qe(t, 0);
1803
  for (let h = 0; h < n; ++h) {
1804
+ if (((a = r), (r = l), (l = qe(t, h + 1)), !r)) continue;
1805
  const n = r[i],
1806
  c = r[s];
1807
  a &&
1815
  }
1816
  })(t, o, e);
1817
  }
1818
+ function Je(t, e, i) {
1819
  return Math.max(Math.min(t, i), e);
1820
  }
1821
+ function Qe(t, e, i, s, n) {
1822
  let o, a, r, l;
1823
  if (
1824
  (e.spanGaps && (t = t.filter((t) => !t.skip)),
1825
  "monotone" === e.cubicInterpolationMode)
1826
  )
1827
+ Ze(t, n);
1828
  else {
1829
  let i = s ? t[t.length - 1] : t[0];
1830
  for (o = 0, a = t.length; o < a; ++o)
1831
  (r = t[o]),
1832
+ (l = Ge(i, r, t[Math.min(o + 1, a - (s ? 0 : 1)) % a], e.tension)),
1833
  (r.cp1x = l.previous.x),
1834
  (r.cp1y = l.previous.y),
1835
  (r.cp2x = l.next.x),
1843
  n,
1844
  o,
1845
  a,
1846
+ r = Se(t[0], e);
1847
  for (i = 0, s = t.length; i < s; ++i)
1848
  (a = o),
1849
  (o = r),
1850
+ (r = i < s - 1 && Se(t[i + 1], e)),
1851
  o &&
1852
  ((n = t[i]),
1853
  a &&
1854
+ ((n.cp1x = Je(n.cp1x, e.left, e.right)),
1855
+ (n.cp1y = Je(n.cp1y, e.top, e.bottom))),
1856
  r &&
1857
+ ((n.cp2x = Je(n.cp2x, e.left, e.right)),
1858
+ (n.cp2y = Je(n.cp2y, e.top, e.bottom))));
1859
  })(t, i);
1860
  }
1861
+ const ti = (t) => 0 === t || 1 === t,
1862
+ ei = (t, e, i) => -Math.pow(2, 10 * (t -= 1)) * Math.sin(((t - e) * O) / i),
1863
+ ii = (t, e, i) => Math.pow(2, -10 * t) * Math.sin(((t - e) * O) / i) + 1,
1864
+ si = {
 
1865
  linear: (t) => t,
1866
  easeInQuad: (t) => t * t,
1867
  easeOutQuad: (t) => -t * (t - 2),
1883
  (t /= 0.5) < 1
1884
  ? 0.5 * t * t * t * t * t
1885
  : 0.5 * ((t -= 2) * t * t * t * t + 2),
1886
+ easeInSine: (t) => 1 - Math.cos(t * L),
1887
+ easeOutSine: (t) => Math.sin(t * L),
1888
+ easeInOutSine: (t) => -0.5 * (Math.cos(D * t) - 1),
1889
  easeInExpo: (t) => (0 === t ? 0 : Math.pow(2, 10 * (t - 1))),
1890
  easeOutExpo: (t) => (1 === t ? 1 : 1 - Math.pow(2, -10 * t)),
1891
  easeInOutExpo: (t) =>
1892
+ ti(t)
1893
  ? t
1894
  : t < 0.5
1895
  ? 0.5 * Math.pow(2, 10 * (2 * t - 1))
1900
  (t /= 0.5) < 1
1901
  ? -0.5 * (Math.sqrt(1 - t * t) - 1)
1902
  : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),
1903
+ easeInElastic: (t) => (ti(t) ? t : ei(t, 0.075, 0.3)),
1904
+ easeOutElastic: (t) => (ti(t) ? t : ii(t, 0.075, 0.3)),
1905
  easeInOutElastic(t) {
1906
  const e = 0.1125;
1907
+ return ti(t)
1908
  ? t
1909
  : t < 0.5
1910
+ ? 0.5 * ei(2 * t, e, 0.45)
1911
+ : 0.5 + 0.5 * ii(2 * t - 1, e, 0.45);
1912
  },
1913
  easeInBack(t) {
1914
  const e = 1.70158;
1924
  ? t * t * ((1 + (e *= 1.525)) * t - e) * 0.5
1925
  : 0.5 * ((t -= 2) * t * ((1 + (e *= 1.525)) * t + e) + 2);
1926
  },
1927
+ easeInBounce: (t) => 1 - si.easeOutBounce(1 - t),
1928
  easeOutBounce(t) {
1929
  const e = 7.5625,
1930
  i = 2.75;
1938
  },
1939
  easeInOutBounce: (t) =>
1940
  t < 0.5
1941
+ ? 0.5 * si.easeInBounce(2 * t)
1942
+ : 0.5 * si.easeOutBounce(2 * t - 1) + 0.5,
1943
  };
1944
+ function ni(t, e, i, s) {
1945
  return { x: t.x + i * (e.x - t.x), y: t.y + i * (e.y - t.y) };
1946
  }
1947
+ function oi(t, e, i, s) {
1948
  return {
1949
  x: t.x + i * (e.x - t.x),
1950
  y:
1961
  : t.y,
1962
  };
1963
  }
1964
+ function ai(t, e, i, s) {
1965
  const n = { x: t.cp2x, y: t.cp2y },
1966
  o = { x: e.cp1x, y: e.cp1y },
1967
+ a = ni(t, n, i),
1968
+ r = ni(n, o, i),
1969
+ l = ni(o, e, i),
1970
+ h = ni(a, r, i),
1971
+ c = ni(r, l, i);
1972
+ return ni(h, c, i);
1973
+ }
1974
+ const ri = new Map();
1975
+ function li(t, e, i) {
1976
  return (function (t, e) {
1977
  e = e || {};
1978
  const i = t + JSON.stringify(e);
1979
+ let s = ri.get(i);
1980
+ return s || ((s = new Intl.NumberFormat(t, e)), ri.set(i, s)), s;
1981
  })(e, i).format(t);
1982
  }
1983
+ const hi = new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/),
1984
+ ci = new RegExp(
1985
+ /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/
1986
+ );
1987
+ function di(t, e) {
1988
+ const i = ("" + t).match(hi);
1989
+ if (!i || "normal" === i[1]) return 1.2 * e;
1990
+ switch (((t = +i[2]), i[3])) {
1991
+ case "px":
1992
+ return t;
1993
+ case "%":
1994
+ t /= 100;
1995
+ }
1996
+ return e * t;
1997
+ }
1998
+ function ui(t, e) {
1999
+ const i = {},
2000
+ s = n(e),
2001
+ o = s ? Object.keys(e) : e,
2002
+ a = n(t) ? (s ? (i) => r(t[i], t[e[i]]) : (e) => t[e]) : () => t;
2003
+ for (const t of o) i[t] = +a(t) || 0;
2004
+ return i;
2005
+ }
2006
+ function fi(t) {
2007
+ return ui(t, { top: "y", right: "x", bottom: "y", left: "x" });
2008
+ }
2009
+ function gi(t) {
2010
+ return ui(t, ["topLeft", "topRight", "bottomLeft", "bottomRight"]);
2011
+ }
2012
+ function pi(t) {
2013
+ const e = fi(t);
2014
+ return (e.width = e.left + e.right), (e.height = e.top + e.bottom), e;
2015
+ }
2016
+ function mi(t, e) {
2017
+ (t = t || {}), (e = e || ne.font);
2018
+ let i = r(t.size, e.size);
2019
+ "string" == typeof i && (i = parseInt(i, 10));
2020
+ let s = r(t.style, e.style);
2021
+ s &&
2022
+ !("" + s).match(ci) &&
2023
+ (console.warn('Invalid font style specified: "' + s + '"'), (s = ""));
2024
+ const n = {
2025
+ family: r(t.family, e.family),
2026
+ lineHeight: di(r(t.lineHeight, e.lineHeight), i),
2027
+ size: i,
2028
+ style: s,
2029
+ weight: r(t.weight, e.weight),
2030
+ string: "",
2031
+ };
2032
+ return (n.string = xe(n)), n;
2033
+ }
2034
+ function bi(t, e, i, n) {
2035
+ let o,
2036
+ a,
2037
+ r,
2038
+ l = !0;
2039
+ for (o = 0, a = t.length; o < a; ++o)
2040
+ if (
2041
+ ((r = t[o]),
2042
+ void 0 !== r &&
2043
+ (void 0 !== e && "function" == typeof r && ((r = r(e)), (l = !1)),
2044
+ void 0 !== i && s(r) && ((r = r[i % r.length]), (l = !1)),
2045
+ void 0 !== r))
2046
+ )
2047
+ return n && !l && (n.cacheable = !1), r;
2048
+ }
2049
+ function xi(t, e, i) {
2050
+ const { min: s, max: n } = t,
2051
+ o = h(e, (n - s) / 2),
2052
+ a = (t, e) => (i && 0 === t ? 0 : t + e);
2053
+ return { min: a(s, -Math.abs(o)), max: a(n, o) };
2054
+ }
2055
+ function _i(t, e) {
2056
+ return Object.assign(Object.create(t), e);
2057
+ }
2058
+ function yi(t, e, i) {
2059
  return t
2060
  ? (function (t, e) {
2061
  return {
2077
  leftForLtr: (t, e) => t,
2078
  };
2079
  }
2080
+ function vi(t, e) {
2081
  let i, s;
2082
  ("ltr" !== e && "rtl" !== e) ||
2083
  ((i = t.canvas.style),
2088
  i.setProperty("direction", e, "important"),
2089
  (t.prevTextDirection = s));
2090
  }
2091
+ function wi(t, e) {
2092
  void 0 !== e &&
2093
  (delete t.prevTextDirection,
2094
  t.canvas.style.setProperty("direction", e[0], e[1]));
2095
  }
2096
+ function Mi(t) {
2097
  return "angle" === t
2098
+ ? { between: G, compare: q, normalize: K }
2099
+ : { between: Q, compare: (t, e) => t - e, normalize: (t) => t };
2100
  }
2101
+ function ki({ start: t, end: e, count: i, loop: s, style: n }) {
2102
  return {
2103
  start: t % i,
2104
  end: e % i,
2106
  style: n,
2107
  };
2108
  }
2109
+ function Si(t, e, i) {
2110
  if (!i) return [t];
2111
  const { property: s, start: n, end: o } = i,
2112
  a = e.length,
2113
+ { compare: r, between: l, normalize: h } = Mi(s),
2114
  {
2115
  start: c,
2116
  end: d,
2118
  style: f,
2119
  } = (function (t, e, i) {
2120
  const { property: s, start: n, end: o } = i,
2121
+ { between: a, normalize: r } = Mi(s),
2122
  l = e.length;
2123
  let h,
2124
  c,
2137
  g = [];
2138
  let p,
2139
  m,
2140
+ b,
2141
+ x = !1,
2142
  _ = null;
2143
+ const y = () => x || (l(n, b, p) && 0 !== r(n, b)),
2144
+ v = () => !x || 0 === r(o, p) || l(o, b, p);
2145
  for (let t = c, i = c; t <= d; ++t)
2146
  (m = e[t % a]),
2147
  m.skip ||
2148
  ((p = h(m[s])),
2149
+ p !== b &&
2150
+ ((x = l(p, n, o)),
2151
  null === _ && y() && (_ = 0 === r(p, n) ? t : i),
2152
  null !== _ &&
2153
  v() &&
2154
+ (g.push(ki({ start: _, end: t, loop: u, count: a, style: f })),
2155
  (_ = null)),
2156
  (i = t),
2157
+ (b = p)));
2158
  return (
2159
  null !== _ &&
2160
+ g.push(ki({ start: _, end: d, loop: u, count: a, style: f })),
2161
  g
2162
  );
2163
  }
2164
+ function Pi(t, e) {
2165
  const i = [],
2166
  s = t.segments;
2167
  for (let n = 0; n < s.length; n++) {
2168
+ const o = Si(s[n], t.points, e);
2169
  o.length && i.push(...o);
2170
  }
2171
  return i;
2172
  }
2173
+ function Di(t, e) {
2174
  const i = t.points,
2175
  s = t.options.spanGaps,
2176
  n = i.length;
2184
  for (n %= e, i && (o += n); o > n && t[o % e].skip; ) o--;
2185
  return (o %= e), { start: n, end: o };
2186
  })(i, n, o, s);
2187
+ if (!0 === s) return Oi(t, [{ start: a, end: r, loop: o }], i, e);
2188
+ return Oi(
2189
  t,
2190
  (function (t, e, i, s) {
2191
  const n = t.length,
2209
  e
2210
  );
2211
  }
2212
+ function Oi(t, e, i, s) {
2213
  return s && s.setContext && i
2214
  ? (function (t, e, i, s) {
2215
  const n = t._chart.getContext(),
2216
+ o = Ci(t.options),
2217
  {
2218
  _datasetIndex: a,
2219
  options: { spanGaps: r },
2240
  o = i[d % l];
2241
  for (u = d + 1; u <= t.end; u++) {
2242
  const r = i[u % l];
2243
+ (e = Ci(
2244
  s.setContext(
2245
+ _i(n, {
2246
  type: "segment",
2247
  p0: o,
2248
  p1: r,
2252
  })
2253
  )
2254
  )),
2255
+ Ai(e, c) && f(d, u - 1, t.loop, c),
2256
  (o = r),
2257
  (c = e);
2258
  }
2262
  })(t, e, i, s)
2263
  : e;
2264
  }
2265
+ function Ci(t) {
2266
  return {
2267
  backgroundColor: t.backgroundColor,
2268
  borderCapStyle: t.borderCapStyle,
2273
  borderColor: t.borderColor,
2274
  };
2275
  }
2276
+ function Ai(t, e) {
2277
  return e && JSON.stringify(t) !== JSON.stringify(e);
2278
  }
2279
+ var Ti = Object.freeze({
2280
  __proto__: null,
2281
+ easingEffects: si,
2282
+ isPatternOrGradient: Zt,
2283
+ color: Jt,
2284
+ getHoverColor: Qt,
2285
+ noop: t,
2286
+ uid: e,
2287
+ isNullOrUndef: i,
2288
+ isArray: s,
2289
+ isObject: n,
2290
+ isFinite: o,
2291
+ finiteOrDefault: a,
2292
+ valueOrDefault: r,
2293
+ toPercentage: l,
2294
+ toDimension: h,
2295
+ callback: c,
2296
+ each: d,
2297
+ _elementsEqual: u,
2298
+ clone: f,
2299
+ _merger: p,
2300
+ merge: m,
2301
+ mergeIf: b,
2302
+ _mergerIf: x,
2303
  _deprecated: function (t, e, i, s) {
2304
  void 0 !== e &&
2305
  console.warn(
2306
  t + ': "' + i + '" is deprecated. Please use "' + s + '" instead'
2307
  );
2308
  },
2309
+ resolveObjectKey: y,
2310
+ _splitKey: v,
2311
+ _capitalize: w,
2312
+ defined: M,
2313
+ isFunction: k,
2314
+ setsEqual: S,
2315
+ _isClickEvent: P,
2316
+ toFontString: xe,
2317
+ _measureText: _e,
2318
+ _longestText: ye,
2319
+ _alignPixel: ve,
2320
+ clearCanvas: we,
2321
+ drawPoint: Me,
2322
+ drawPointLegend: ke,
2323
+ _isPointInArea: Se,
2324
+ clipArea: Pe,
2325
+ unclipArea: De,
2326
+ _steppedLineTo: Oe,
2327
+ _bezierCurveTo: Ce,
2328
+ renderText: Ae,
2329
+ addRoundedRectPath: Le,
2330
+ _lookup: tt,
2331
+ _lookupByKey: et,
2332
+ _rlookupByKey: it,
2333
+ _filterBetween: st,
2334
+ listenArrayEvents: ot,
2335
+ unlistenArrayEvents: at,
2336
+ _arrayUnique: rt,
2337
+ _createResolver: Ee,
2338
+ _attachContext: Re,
2339
+ _descriptors: Ie,
2340
+ _parseObjectDataRadialScale: Ue,
2341
+ splineCurve: Ge,
2342
+ splineCurveMonotone: Ze,
2343
+ _updateBezierControlPoints: Qe,
2344
+ _isDomSupported: oe,
2345
+ _getParentNode: ae,
2346
+ getStyle: he,
2347
+ getRelativePosition: ue,
2348
+ getMaximumSize: ge,
2349
+ retinaScale: pe,
2350
+ supportsEventListenerOptions: me,
2351
+ readUsedSize: be,
2352
+ fontString: function (t, e, i) {
2353
+ return e + " " + t + "px " + i;
2354
+ },
2355
+ requestAnimFrame: lt,
2356
+ throttled: ht,
2357
+ debounce: ct,
2358
+ _toLeftRightCenter: dt,
2359
+ _alignStartEnd: ut,
2360
+ _textX: ft,
2361
+ _getStartAndCountOfVisiblePoints: gt,
2362
+ _scaleRangesChanged: pt,
2363
+ _pointInLine: ni,
2364
+ _steppedInterpolation: oi,
2365
+ _bezierInterpolation: ai,
2366
+ formatNumber: li,
2367
+ toLineHeight: di,
2368
+ _readValueToProps: ui,
2369
+ toTRBL: fi,
2370
+ toTRBLCorners: gi,
2371
+ toPadding: pi,
2372
+ toFont: mi,
2373
+ resolve: bi,
2374
+ _addGrace: xi,
2375
+ createContext: _i,
2376
+ PI: D,
2377
+ TAU: O,
2378
+ PITAU: C,
2379
+ INFINITY: A,
2380
+ RAD_PER_DEG: T,
2381
+ HALF_PI: L,
2382
+ QUARTER_PI: E,
2383
+ TWO_THIRDS_PI: R,
2384
+ log10: I,
2385
+ sign: z,
2386
+ niceNum: F,
2387
+ _factorize: V,
2388
+ isNumber: B,
2389
+ almostEquals: N,
2390
+ almostWhole: W,
2391
+ _setMinAndMaxByKey: j,
2392
+ toRadians: H,
2393
+ toDegrees: $,
2394
+ _decimalPlaces: Y,
2395
+ getAngleFromPoint: U,
2396
+ distanceBetweenPoints: X,
2397
+ _angleDiff: q,
2398
+ _normalizeAngle: K,
2399
+ _angleBetween: G,
2400
+ _limitValue: Z,
2401
+ _int16Range: J,
2402
+ _isBetween: Q,
2403
+ getRtlAdapter: yi,
2404
+ overrideTextDirection: vi,
2405
+ restoreTextDirection: wi,
2406
+ _boundSegment: Si,
2407
+ _boundSegments: Pi,
2408
+ _computeSegments: Di,
2409
+ });
2410
+ function Li(t, e, i, s) {
2411
+ const { controller: n, data: o, _sorted: a } = t,
2412
+ r = n._cachedMeta.iScale;
2413
+ if (r && e === r.axis && "r" !== e && a && o.length) {
2414
+ const t = r._reversePixels ? it : et;
2415
+ if (!s) return t(o, e, i);
2416
+ if (n._sharedOptions) {
2417
+ const s = o[0],
2418
+ n = "function" == typeof s.getRange && s.getRange(e);
2419
+ if (n) {
2420
+ const s = t(o, e, i - n),
2421
+ a = t(o, e, i + n);
2422
+ return { lo: s.lo, hi: a.hi };
2423
+ }
2424
+ }
2425
+ }
2426
+ return { lo: 0, hi: o.length - 1 };
2427
+ }
2428
+ function Ei(t, e, i, s, n) {
2429
+ const o = t.getSortedVisibleDatasetMetas(),
2430
+ a = i[e];
2431
+ for (let t = 0, i = o.length; t < i; ++t) {
2432
+ const { index: i, data: r } = o[t],
2433
+ { lo: l, hi: h } = Li(o[t], e, a, n);
2434
+ for (let t = l; t <= h; ++t) {
2435
+ const e = r[t];
2436
+ e.skip || s(e, i, t);
2437
+ }
2438
+ }
2439
+ }
2440
+ function Ri(t, e, i, s, n) {
2441
+ const o = [];
2442
+ if (!n && !t.isPointInArea(e)) return o;
2443
+ return (
2444
+ Ei(
2445
+ t,
2446
+ i,
2447
+ e,
2448
+ function (i, a, r) {
2449
+ (n || Se(i, t.chartArea, 0)) &&
2450
+ i.inRange(e.x, e.y, s) &&
2451
+ o.push({ element: i, datasetIndex: a, index: r });
2452
+ },
2453
+ !0
2454
+ ),
2455
+ o
2456
+ );
2457
+ }
2458
+ function Ii(t, e, i, s, n, o) {
2459
+ let a = [];
2460
+ const r = (function (t) {
2461
+ const e = -1 !== t.indexOf("x"),
2462
+ i = -1 !== t.indexOf("y");
2463
+ return function (t, s) {
2464
+ const n = e ? Math.abs(t.x - s.x) : 0,
2465
+ o = i ? Math.abs(t.y - s.y) : 0;
2466
+ return Math.sqrt(Math.pow(n, 2) + Math.pow(o, 2));
2467
+ };
2468
+ })(i);
2469
+ let l = Number.POSITIVE_INFINITY;
2470
+ return (
2471
+ Ei(t, i, e, function (i, h, c) {
2472
+ const d = i.inRange(e.x, e.y, n);
2473
+ if (s && !d) return;
2474
+ const u = i.getCenterPoint(n);
2475
+ if (!(!!o || t.isPointInArea(u)) && !d) return;
2476
+ const f = r(e, u);
2477
+ f < l
2478
+ ? ((a = [{ element: i, datasetIndex: h, index: c }]), (l = f))
2479
+ : f === l && a.push({ element: i, datasetIndex: h, index: c });
2480
+ }),
2481
+ a
2482
+ );
2483
+ }
2484
+ function zi(t, e, i, s, n, o) {
2485
+ return o || t.isPointInArea(e)
2486
+ ? "r" !== i || s
2487
+ ? Ii(t, e, i, s, n, o)
2488
+ : (function (t, e, i, s) {
2489
+ let n = [];
2490
+ return (
2491
+ Ei(t, i, e, function (t, i, o) {
2492
+ const { startAngle: a, endAngle: r } = t.getProps(
2493
+ ["startAngle", "endAngle"],
2494
+ s
2495
+ ),
2496
+ { angle: l } = U(t, { x: e.x, y: e.y });
2497
+ G(l, a, r) && n.push({ element: t, datasetIndex: i, index: o });
2498
+ }),
2499
+ n
2500
+ );
2501
+ })(t, e, i, n)
2502
+ : [];
2503
+ }
2504
+ function Fi(t, e, i, s, n) {
2505
+ const o = [],
2506
+ a = "x" === i ? "inXRange" : "inYRange";
2507
+ let r = !1;
2508
+ return (
2509
+ Ei(t, i, e, (t, s, l) => {
2510
+ t[a](e[i], n) &&
2511
+ (o.push({ element: t, datasetIndex: s, index: l }),
2512
+ (r = r || t.inRange(e.x, e.y, n)));
2513
+ }),
2514
+ s && !r ? [] : o
2515
+ );
2516
+ }
2517
+ var Vi = {
2518
+ evaluateInteractionItems: Ei,
2519
+ modes: {
2520
+ index(t, e, i, s) {
2521
+ const n = ue(e, t),
2522
+ o = i.axis || "x",
2523
+ a = i.includeInvisible || !1,
2524
+ r = i.intersect ? Ri(t, n, o, s, a) : zi(t, n, o, !1, s, a),
2525
+ l = [];
2526
+ return r.length
2527
+ ? (t.getSortedVisibleDatasetMetas().forEach((t) => {
2528
+ const e = r[0].index,
2529
+ i = t.data[e];
2530
+ i &&
2531
+ !i.skip &&
2532
+ l.push({ element: i, datasetIndex: t.index, index: e });
2533
+ }),
2534
+ l)
2535
+ : [];
2536
+ },
2537
+ dataset(t, e, i, s) {
2538
+ const n = ue(e, t),
2539
+ o = i.axis || "xy",
2540
+ a = i.includeInvisible || !1;
2541
+ let r = i.intersect ? Ri(t, n, o, s, a) : zi(t, n, o, !1, s, a);
2542
+ if (r.length > 0) {
2543
+ const e = r[0].datasetIndex,
2544
+ i = t.getDatasetMeta(e).data;
2545
+ r = [];
2546
+ for (let t = 0; t < i.length; ++t)
2547
+ r.push({ element: i[t], datasetIndex: e, index: t });
2548
+ }
2549
+ return r;
2550
+ },
2551
+ point: (t, e, i, s) =>
2552
+ Ri(t, ue(e, t), i.axis || "xy", s, i.includeInvisible || !1),
2553
+ nearest(t, e, i, s) {
2554
+ const n = ue(e, t),
2555
+ o = i.axis || "xy",
2556
+ a = i.includeInvisible || !1;
2557
+ return zi(t, n, o, i.intersect, s, a);
2558
+ },
2559
+ x: (t, e, i, s) => Fi(t, ue(e, t), "x", i.intersect, s),
2560
+ y: (t, e, i, s) => Fi(t, ue(e, t), "y", i.intersect, s),
2561
+ },
2562
+ };
2563
+ const Bi = ["left", "top", "right", "bottom"];
2564
+ function Ni(t, e) {
2565
+ return t.filter((t) => t.pos === e);
2566
+ }
2567
+ function Wi(t, e) {
2568
+ return t.filter((t) => -1 === Bi.indexOf(t.pos) && t.box.axis === e);
2569
+ }
2570
+ function ji(t, e) {
2571
+ return t.sort((t, i) => {
2572
+ const s = e ? i : t,
2573
+ n = e ? t : i;
2574
+ return s.weight === n.weight ? s.index - n.index : s.weight - n.weight;
2575
+ });
2576
+ }
2577
+ function Hi(t, e) {
2578
+ const i = (function (t) {
2579
+ const e = {};
2580
+ for (const i of t) {
2581
+ const { stack: t, pos: s, stackWeight: n } = i;
2582
+ if (!t || !Bi.includes(s)) continue;
2583
+ const o =
2584
+ e[t] || (e[t] = { count: 0, placed: 0, weight: 0, size: 0 });
2585
+ o.count++, (o.weight += n);
2586
+ }
2587
+ return e;
2588
+ })(t),
2589
+ { vBoxMaxWidth: s, hBoxMaxHeight: n } = e;
2590
+ let o, a, r;
2591
+ for (o = 0, a = t.length; o < a; ++o) {
2592
+ r = t[o];
2593
+ const { fullSize: a } = r.box,
2594
+ l = i[r.stack],
2595
+ h = l && r.stackWeight / l.weight;
2596
+ r.horizontal
2597
+ ? ((r.width = h ? h * s : a && e.availableWidth), (r.height = n))
2598
+ : ((r.width = s), (r.height = h ? h * n : a && e.availableHeight));
2599
+ }
2600
+ return i;
2601
+ }
2602
+ function $i(t, e, i, s) {
2603
+ return Math.max(t[i], e[i]) + Math.max(t[s], e[s]);
2604
+ }
2605
+ function Yi(t, e) {
2606
+ (t.top = Math.max(t.top, e.top)),
2607
+ (t.left = Math.max(t.left, e.left)),
2608
+ (t.bottom = Math.max(t.bottom, e.bottom)),
2609
+ (t.right = Math.max(t.right, e.right));
2610
+ }
2611
+ function Ui(t, e, i, s) {
2612
+ const { pos: o, box: a } = i,
2613
+ r = t.maxPadding;
2614
+ if (!n(o)) {
2615
+ i.size && (t[o] -= i.size);
2616
+ const e = s[i.stack] || { size: 0, count: 1 };
2617
+ (e.size = Math.max(e.size, i.horizontal ? a.height : a.width)),
2618
+ (i.size = e.size / e.count),
2619
+ (t[o] += i.size);
2620
+ }
2621
+ a.getPadding && Yi(r, a.getPadding());
2622
+ const l = Math.max(0, e.outerWidth - $i(r, t, "left", "right")),
2623
+ h = Math.max(0, e.outerHeight - $i(r, t, "top", "bottom")),
2624
+ c = l !== t.w,
2625
+ d = h !== t.h;
2626
+ return (
2627
+ (t.w = l),
2628
+ (t.h = h),
2629
+ i.horizontal ? { same: c, other: d } : { same: d, other: c }
2630
+ );
2631
+ }
2632
+ function Xi(t, e) {
2633
+ const i = e.maxPadding;
2634
+ function s(t) {
2635
+ const s = { left: 0, top: 0, right: 0, bottom: 0 };
2636
+ return (
2637
+ t.forEach((t) => {
2638
+ s[t] = Math.max(e[t], i[t]);
2639
+ }),
2640
+ s
2641
+ );
2642
+ }
2643
+ return s(t ? ["left", "right"] : ["top", "bottom"]);
2644
+ }
2645
+ function qi(t, e, i, s) {
2646
+ const n = [];
2647
+ let o, a, r, l, h, c;
2648
+ for (o = 0, a = t.length, h = 0; o < a; ++o) {
2649
+ (r = t[o]),
2650
+ (l = r.box),
2651
+ l.update(r.width || e.w, r.height || e.h, Xi(r.horizontal, e));
2652
+ const { same: a, other: d } = Ui(e, i, r, s);
2653
+ (h |= a && n.length), (c = c || d), l.fullSize || n.push(r);
2654
+ }
2655
+ return (h && qi(n, e, i, s)) || c;
2656
+ }
2657
+ function Ki(t, e, i, s, n) {
2658
+ (t.top = i),
2659
+ (t.left = e),
2660
+ (t.right = e + s),
2661
+ (t.bottom = i + n),
2662
+ (t.width = s),
2663
+ (t.height = n);
2664
+ }
2665
+ function Gi(t, e, i, s) {
2666
+ const n = i.padding;
2667
+ let { x: o, y: a } = e;
2668
+ for (const r of t) {
2669
+ const t = r.box,
2670
+ l = s[r.stack] || { count: 1, placed: 0, weight: 1 },
2671
+ h = r.stackWeight / l.weight || 1;
2672
+ if (r.horizontal) {
2673
+ const s = e.w * h,
2674
+ o = l.size || t.height;
2675
+ M(l.start) && (a = l.start),
2676
+ t.fullSize
2677
+ ? Ki(t, n.left, a, i.outerWidth - n.right - n.left, o)
2678
+ : Ki(t, e.left + l.placed, a, s, o),
2679
+ (l.start = a),
2680
+ (l.placed += s),
2681
+ (a = t.bottom);
2682
+ } else {
2683
+ const s = e.h * h,
2684
+ a = l.size || t.width;
2685
+ M(l.start) && (o = l.start),
2686
+ t.fullSize
2687
+ ? Ki(t, o, n.top, a, i.outerHeight - n.bottom - n.top)
2688
+ : Ki(t, o, e.top + l.placed, a, s),
2689
+ (l.start = o),
2690
+ (l.placed += s),
2691
+ (o = t.right);
2692
+ }
2693
+ }
2694
+ (e.x = o), (e.y = a);
2695
+ }
2696
+ ne.set("layout", {
2697
+ autoPadding: !0,
2698
+ padding: { top: 0, right: 0, bottom: 0, left: 0 },
2699
+ });
2700
+ var Zi = {
2701
+ addBox(t, e) {
2702
+ t.boxes || (t.boxes = []),
2703
+ (e.fullSize = e.fullSize || !1),
2704
+ (e.position = e.position || "top"),
2705
+ (e.weight = e.weight || 0),
2706
+ (e._layers =
2707
+ e._layers ||
2708
+ function () {
2709
+ return [
2710
+ {
2711
+ z: 0,
2712
+ draw(t) {
2713
+ e.draw(t);
2714
+ },
2715
+ },
2716
+ ];
2717
+ }),
2718
+ t.boxes.push(e);
2719
+ },
2720
+ removeBox(t, e) {
2721
+ const i = t.boxes ? t.boxes.indexOf(e) : -1;
2722
+ -1 !== i && t.boxes.splice(i, 1);
2723
  },
2724
+ configure(t, e, i) {
2725
+ (e.fullSize = i.fullSize),
2726
+ (e.position = i.position),
2727
+ (e.weight = i.weight);
2728
+ },
2729
+ update(t, e, i, s) {
2730
+ if (!t) return;
2731
+ const n = pi(t.options.layout.padding),
2732
+ o = Math.max(e - n.width, 0),
2733
+ a = Math.max(i - n.height, 0),
2734
+ r = (function (t) {
2735
+ const e = (function (t) {
2736
+ const e = [];
2737
+ let i, s, n, o, a, r;
2738
+ for (i = 0, s = (t || []).length; i < s; ++i)
2739
+ (n = t[i]),
2740
+ ({
2741
+ position: o,
2742
+ options: { stack: a, stackWeight: r = 1 },
2743
+ } = n),
2744
+ e.push({
2745
+ index: i,
2746
+ box: n,
2747
+ pos: o,
2748
+ horizontal: n.isHorizontal(),
2749
+ weight: n.weight,
2750
+ stack: a && o + a,
2751
+ stackWeight: r,
2752
+ });
2753
+ return e;
2754
+ })(t),
2755
+ i = ji(
2756
+ e.filter((t) => t.box.fullSize),
2757
+ !0
2758
+ ),
2759
+ s = ji(Ni(e, "left"), !0),
2760
+ n = ji(Ni(e, "right")),
2761
+ o = ji(Ni(e, "top"), !0),
2762
+ a = ji(Ni(e, "bottom")),
2763
+ r = Wi(e, "x"),
2764
+ l = Wi(e, "y");
2765
+ return {
2766
+ fullSize: i,
2767
+ leftAndTop: s.concat(o),
2768
+ rightAndBottom: n.concat(l).concat(a).concat(r),
2769
+ chartArea: Ni(e, "chartArea"),
2770
+ vertical: s.concat(n).concat(l),
2771
+ horizontal: o.concat(a).concat(r),
2772
+ };
2773
+ })(t.boxes),
2774
+ l = r.vertical,
2775
+ h = r.horizontal;
2776
+ d(t.boxes, (t) => {
2777
+ "function" == typeof t.beforeLayout && t.beforeLayout();
2778
+ });
2779
+ const c =
2780
+ l.reduce(
2781
+ (t, e) =>
2782
+ e.box.options && !1 === e.box.options.display ? t : t + 1,
2783
+ 0
2784
+ ) || 1,
2785
+ u = Object.freeze({
2786
+ outerWidth: e,
2787
+ outerHeight: i,
2788
+ padding: n,
2789
+ availableWidth: o,
2790
+ availableHeight: a,
2791
+ vBoxMaxWidth: o / 2 / c,
2792
+ hBoxMaxHeight: a / 2,
2793
+ }),
2794
+ f = Object.assign({}, n);
2795
+ Yi(f, pi(s));
2796
+ const g = Object.assign(
2797
+ { maxPadding: f, w: o, h: a, x: n.left, y: n.top },
2798
+ n
2799
+ ),
2800
+ p = Hi(l.concat(h), u);
2801
+ qi(r.fullSize, g, u, p),
2802
+ qi(l, g, u, p),
2803
+ qi(h, g, u, p) && qi(l, g, u, p),
2804
+ (function (t) {
2805
+ const e = t.maxPadding;
2806
+ function i(i) {
2807
+ const s = Math.max(e[i] - t[i], 0);
2808
+ return (t[i] += s), s;
2809
+ }
2810
+ (t.y += i("top")), (t.x += i("left")), i("right"), i("bottom");
2811
+ })(g),
2812
+ Gi(r.leftAndTop, g, u, p),
2813
+ (g.x += g.w),
2814
+ (g.y += g.h),
2815
+ Gi(r.rightAndBottom, g, u, p),
2816
+ (t.chartArea = {
2817
+ left: g.left,
2818
+ top: g.top,
2819
+ right: g.left + g.w,
2820
+ bottom: g.top + g.h,
2821
+ height: g.h,
2822
+ width: g.w,
2823
+ }),
2824
+ d(r.chartArea, (e) => {
2825
+ const i = e.box;
2826
+ Object.assign(i, t.chartArea),
2827
+ i.update(g.w, g.h, { left: 0, top: 0, right: 0, bottom: 0 });
2828
+ });
2829
+ },
2830
+ };
2831
+ class Ji {
2832
  acquireContext(t, e) {}
2833
  releaseContext(t) {
2834
  return !1;
2850
  }
2851
  updateConfig(t) {}
2852
  }
2853
+ class Qi extends Ji {
2854
  acquireContext(t) {
2855
  return (t && t.getContext && t.getContext("2d")) || null;
2856
  }
2858
  t.options.animation = !1;
2859
  }
2860
  }
2861
+ const ts = {
2862
  touchstart: "mousedown",
2863
  touchmove: "mousemove",
2864
  touchend: "mouseup",
2869
  pointerleave: "mouseout",
2870
  pointerout: "mouseout",
2871
  },
2872
+ es = (t) => null === t || "" === t;
2873
+ const is = !!me && { passive: !0 };
2874
+ function ss(t, e, i) {
2875
+ t.canvas.removeEventListener(e, i, is);
2876
  }
2877
+ function ns(t, e) {
2878
  for (const i of t) if (i === e || i.contains(e)) return !0;
2879
  }
2880
+ function os(t, e, i) {
2881
  const s = t.canvas,
2882
  n = new MutationObserver((t) => {
2883
  let e = !1;
2884
  for (const i of t)
2885
+ (e = e || ns(i.addedNodes, s)), (e = e && !ns(i.removedNodes, s));
2886
  e && i();
2887
  });
2888
  return n.observe(document, { childList: !0, subtree: !0 }), n;
2889
  }
2890
+ function as(t, e, i) {
2891
  const s = t.canvas,
2892
  n = new MutationObserver((t) => {
2893
  let e = !1;
2894
  for (const i of t)
2895
+ (e = e || ns(i.removedNodes, s)), (e = e && !ns(i.addedNodes, s));
2896
  e && i();
2897
  });
2898
  return n.observe(document, { childList: !0, subtree: !0 }), n;
2899
  }
2900
+ const rs = new Map();
2901
+ let ls = 0;
2902
+ function hs() {
2903
  const t = window.devicePixelRatio;
2904
+ t !== ls &&
2905
+ ((ls = t),
2906
+ rs.forEach((e, i) => {
2907
  i.currentDevicePixelRatio !== t && e();
2908
  }));
2909
  }
2910
+ function cs(t, e, i) {
2911
+ const s = t.canvas,
2912
+ n = s && ae(s);
2913
+ if (!n) return;
2914
+ const o = ht((t, e) => {
2915
+ const s = n.clientWidth;
2916
+ i(t, e), s < n.clientWidth && i();
2917
  }, window),
2918
+ a = new ResizeObserver((t) => {
2919
  const e = t[0],
2920
  i = e.contentRect.width,
2921
  s = e.contentRect.height;
2922
+ (0 === i && 0 === s) || o(i, s);
2923
  });
2924
  return (
2925
+ a.observe(n),
2926
  (function (t, e) {
2927
+ rs.size || window.addEventListener("resize", hs), rs.set(t, e);
2928
+ })(t, o),
2929
+ a
2930
  );
2931
  }
2932
+ function ds(t, e, i) {
2933
  i && i.disconnect(),
2934
  "resize" === e &&
2935
  (function (t) {
2936
+ rs.delete(t), rs.size || window.removeEventListener("resize", hs);
2937
  })(t);
2938
  }
2939
+ function us(t, e, i) {
2940
+ const s = t.canvas,
2941
+ n = ht(
2942
  (e) => {
2943
  null !== t.ctx &&
2944
+ i(
2945
  (function (t, e) {
2946
+ const i = ts[t.type] || t.type,
2947
+ { x: s, y: n } = ue(t, e);
2948
  return {
2949
  type: i,
2950
  chart: e,
2963
  );
2964
  return (
2965
  (function (t, e, i) {
2966
+ t.addEventListener(e, i, is);
2967
+ })(s, e, n),
2968
+ n
2969
  );
2970
  }
2971
+ class fs extends Ji {
2972
  acquireContext(t, e) {
2973
  const i = t && t.getContext && t.getContext("2d");
2974
  return i && i.canvas === t
2990
  }),
2991
  (i.display = i.display || "block"),
2992
  (i.boxSizing = i.boxSizing || "border-box"),
2993
+ es(n))
2994
  ) {
2995
+ const e = be(t, "width");
2996
  void 0 !== e && (t.width = e);
2997
  }
2998
+ if (es(s))
2999
  if ("" === t.style.height) t.height = t.width / (e || 2);
3000
  else {
3001
+ const e = be(t, "height");
3002
  void 0 !== e && (t.height = e);
3003
  }
3004
  })(t, e),
3008
  releaseContext(t) {
3009
  const e = t.canvas;
3010
  if (!e.$chartjs) return !1;
3011
+ const s = e.$chartjs.initial;
3012
  ["height", "width"].forEach((t) => {
3013
+ const n = s[t];
3014
+ i(n) ? e.removeAttribute(t) : e.setAttribute(t, n);
3015
  });
3016
+ const n = s.style || {};
3017
  return (
3018
+ Object.keys(n).forEach((t) => {
3019
+ e.style[t] = n[t];
3020
  }),
3021
  (e.width = e.width),
3022
  delete e.$chartjs,
3026
  addEventListener(t, e, i) {
3027
  this.removeEventListener(t, e);
3028
  const s = t.$proxies || (t.$proxies = {}),
3029
+ n = { attach: os, detach: as, resize: cs }[e] || us;
3030
  s[e] = n(t, e, i);
3031
  }
3032
  removeEventListener(t, e) {
3033
  const i = t.$proxies || (t.$proxies = {}),
3034
  s = i[e];
3035
  if (!s) return;
3036
+ (({ attach: ds, detach: ds, resize: ds }[e] || ss)(t, e, s),
3037
  (i[e] = void 0));
3038
  }
3039
  getDevicePixelRatio() {
3040
  return window.devicePixelRatio;
3041
  }
3042
  getMaximumSize(t, e, i, s) {
3043
+ return ge(t, e, i, s);
3044
  }
3045
  isAttached(t) {
3046
+ const e = ae(t);
3047
  return !(!e || !e.isConnected);
3048
  }
3049
  }
3050
+ function gs(t) {
3051
+ return !oe() ||
3052
  ("undefined" != typeof OffscreenCanvas && t instanceof OffscreenCanvas)
3053
+ ? Qi
3054
+ : fs;
3055
  }
3056
+ var ps = Object.freeze({
3057
  __proto__: null,
3058
+ _detectPlatform: gs,
3059
+ BasePlatform: Ji,
3060
+ BasicPlatform: Qi,
3061
+ DomPlatform: fs,
3062
  });
3063
+ const ms = "transparent",
3064
+ bs = {
3065
  boolean: (t, e, i) => (i > 0.5 ? e : t),
3066
  color(t, e, i) {
3067
+ const s = Jt(t || ms),
3068
+ n = s.valid && Jt(e || ms);
3069
  return n && n.valid ? n.mix(s, i).hexString() : e;
3070
  },
3071
  number: (t, e, i) => t + (e - t) * i,
3072
  };
3073
+ class xs {
3074
  constructor(t, e, i, s) {
3075
  const n = e[i];
3076
+ s = bi([t.to, s, n, t.from]);
3077
+ const o = bi([t.from, n, s]);
3078
  (this._active = !0),
3079
+ (this._fn = t.fn || bs[t.type || typeof o]),
3080
+ (this._easing = si[t.easing] || si.linear),
3081
  (this._start = Math.floor(Date.now() + (t.delay || 0))),
3082
  (this._duration = this._total = Math.floor(t.duration)),
3083
  (this._loop = !!t.loop),
3100
  (this._duration = Math.floor(Math.max(o, t.duration))),
3101
  (this._total += n),
3102
  (this._loop = !!t.loop),
3103
+ (this._to = bi([t.to, e, s, t.from])),
3104
+ (this._from = bi([t.from, s, e]));
3105
  }
3106
  }
3107
  cancel() {
3137
  for (let t = 0; t < i.length; t++) i[t][e]();
3138
  }
3139
  }
3140
+ ne.set("animation", {
3141
  delay: void 0,
3142
  duration: 1e3,
3143
  easing: "easeOutQuart",
3147
  to: void 0,
3148
  type: void 0,
3149
  });
3150
+ const _s = Object.keys(ne.animation);
3151
+ ne.describe("animation", {
3152
  _fallback: !1,
3153
  _indexable: !1,
3154
  _scriptable: (t) => "onProgress" !== t && "onComplete" !== t && "fn" !== t,
3155
  }),
3156
+ ne.set("animations", {
3157
  colors: {
3158
  type: "color",
3159
  properties: ["color", "borderColor", "backgroundColor"],
3163
  properties: ["x", "y", "borderWidth", "radius", "tension"],
3164
  },
3165
  }),
3166
+ ne.describe("animations", { _fallback: "animation" }),
3167
+ ne.set("transitions", {
3168
  active: { animation: { duration: 400 } },
3169
  resize: { animation: { duration: 0 } },
3170
  show: {
3180
  },
3181
  },
3182
  });
3183
+ class ys {
3184
  constructor(t, e) {
3185
  (this._chart = t), (this._properties = new Map()), this.configure(e);
3186
  }
3187
  configure(t) {
3188
+ if (!n(t)) return;
3189
  const e = this._properties;
3190
  Object.getOwnPropertyNames(t).forEach((i) => {
3191
+ const o = t[i];
3192
+ if (!n(o)) return;
3193
+ const a = {};
3194
+ for (const t of _s) a[t] = o[t];
3195
+ ((s(o.properties) && o.properties) || [i]).forEach((t) => {
3196
+ (t !== i && e.has(t)) || e.set(t, a);
3197
  });
3198
  });
3199
  }
3254
  c.cancel();
3255
  }
3256
  d && d.duration
3257
+ ? ((n[l] = c = new xs(d, t, l, h)), s.push(c))
3258
  : (t[l] = h);
3259
  }
3260
  return s;
3262
  update(t, e) {
3263
  if (0 === this._properties.size) return void Object.assign(t, e);
3264
  const i = this._createAnimations(t, e);
3265
+ return i.length ? (mt.add(this._chart, i), !0) : void 0;
3266
  }
3267
  }
3268
+ function vs(t, e) {
3269
  const i = (t && t.options) || {},
3270
  s = i.reverse,
3271
  n = void 0 === i.min ? e : 0,
3272
  o = void 0 === i.max ? e : 0;
3273
  return { start: s ? o : n, end: s ? n : o };
3274
  }
3275
+ function ws(t, e) {
3276
  const i = [],
3277
  s = t._getSortedDatasetMetas(e);
3278
  let n, o;
3279
  for (n = 0, o = s.length; n < o; ++n) i.push(s[n].index);
3280
  return i;
3281
  }
3282
+ function Ms(t, e, i, s = {}) {
3283
  const n = t.keys,
3284
+ a = "single" === s.mode;
3285
+ let r, l, h, c;
3286
  if (null !== e) {
3287
+ for (r = 0, l = n.length; r < l; ++r) {
3288
+ if (((h = +n[r]), h === i)) {
3289
  if (s.all) continue;
3290
  break;
3291
  }
3292
+ (c = t.values[h]), o(c) && (a || 0 === e || z(e) === z(c)) && (e += c);
 
3293
  }
3294
  return e;
3295
  }
3296
  }
3297
+ function ks(t, e) {
3298
  const i = t && t.options.stacked;
3299
  return i || (void 0 === i && void 0 !== e.stack);
3300
  }
3301
+ function Ss(t, e, i) {
3302
  const s = t[e] || (t[e] = {});
3303
  return s[i] || (s[i] = {});
3304
  }
3305
+ function Ps(t, e, i, s) {
3306
  for (const n of e.getMatchingVisibleMetas(s).reverse()) {
3307
  const e = t[n.index];
3308
  if ((i && e > 0) || (!i && e < 0)) return n.index;
3309
  }
3310
  return null;
3311
  }
3312
+ function Ds(t, e) {
3313
  const { chart: i, _cachedMeta: s } = t,
3314
  n = i._stacks || (i._stacks = {}),
3315
  { iScale: o, vScale: a, index: r } = s,
3323
  for (let t = 0; t < d; ++t) {
3324
  const i = e[t],
3325
  { [l]: o, [h]: d } = i;
3326
+ (u = (i._stacks || (i._stacks = {}))[h] = Ss(n, c, o)),
3327
  (u[r] = d),
3328
+ (u._top = Ps(u, a, !0, s.type)),
3329
+ (u._bottom = Ps(u, a, !1, s.type));
3330
  }
3331
  }
3332
+ function Os(t, e) {
3333
  const i = t.scales;
3334
  return Object.keys(i)
3335
  .filter((t) => i[t].axis === e)
3336
  .shift();
3337
  }
3338
+ function Cs(t, e) {
3339
  const i = t.controller.index,
3340
  s = t.vScale && t.vScale.axis;
3341
  if (s) {
3347
  }
3348
  }
3349
  }
3350
+ const As = (t) => "reset" === t || "none" === t,
3351
+ Ts = (t, e) => (e ? t : Object.assign({}, t));
3352
+ class Ls {
3353
  constructor(t, e) {
3354
  (this.chart = t),
3355
  (this._ctx = t.ctx),
3365
  (this._drawStart = void 0),
3366
  (this._drawCount = void 0),
3367
  (this.enableOptionSharing = !1),
3368
+ (this.supportsDecimation = !1),
3369
  (this.$context = void 0),
3370
  (this._syncList = []),
3371
  this.initialize();
3374
  const t = this._cachedMeta;
3375
  this.configure(),
3376
  this.linkScales(),
3377
+ (t._stacked = ks(t.vScale, t)),
3378
  this.addElements();
3379
  }
3380
  updateIndex(t) {
3381
+ this.index !== t && Cs(this._cachedMeta), (this.index = t);
3382
  }
3383
  linkScales() {
3384
  const t = this.chart,
3385
  e = this._cachedMeta,
3386
  i = this.getDataset(),
3387
  s = (t, e, i, s) => ("x" === t ? e : "r" === t ? s : i),
3388
+ n = (e.xAxisID = r(i.xAxisID, Os(t, "x"))),
3389
+ o = (e.yAxisID = r(i.yAxisID, Os(t, "y"))),
3390
+ a = (e.rAxisID = r(i.rAxisID, Os(t, "r"))),
3391
+ l = e.indexAxis,
3392
+ h = (e.iAxisID = s(l, n, o, a)),
3393
+ c = (e.vAxisID = s(l, o, n, a));
3394
  (e.xScale = this.getScaleForId(n)),
3395
  (e.yScale = this.getScaleForId(o)),
3396
  (e.rScale = this.getScaleForId(a)),
3397
+ (e.iScale = this.getScaleForId(h)),
3398
+ (e.vScale = this.getScaleForId(c));
3399
  }
3400
  getDataset() {
3401
  return this.chart.data.datasets[this.index];
3415
  }
3416
  _destroy() {
3417
  const t = this._cachedMeta;
3418
+ this._data && at(this._data, this), t._stacked && Cs(t);
3419
  }
3420
  _dataCheck() {
3421
  const t = this.getDataset(),
3422
  e = t.data || (t.data = []),
3423
  i = this._data;
3424
+ if (n(e))
3425
  this._data = (function (t) {
3426
  const e = Object.keys(t),
3427
  i = new Array(e.length);
3432
  })(e);
3433
  else if (i !== e) {
3434
  if (i) {
3435
+ at(i, this);
3436
  const t = this._cachedMeta;
3437
+ Cs(t), (t._parsed = []);
3438
  }
3439
+ e && Object.isExtensible(e) && ot(e, this),
3440
  (this._syncList = []),
3441
  (this._data = e);
3442
  }
3452
  let s = !1;
3453
  this._dataCheck();
3454
  const n = e._stacked;
3455
+ (e._stacked = ks(e.vScale, e)),
3456
+ e.stack !== i.stack && ((s = !0), Cs(e), (e.stack = i.stack)),
3457
  this._resyncElements(t),
3458
+ (s || n !== e._stacked) && Ds(this, e._parsed);
3459
  }
3460
  configure() {
3461
  const t = this.chart.config,
3466
  (this._cachedDataOpts = {});
3467
  }
3468
  parse(t, e) {
3469
+ const { _cachedMeta: i, _data: o } = this,
3470
+ { iScale: a, _stacked: r } = i,
3471
+ l = a.axis;
3472
+ let h,
3473
+ c,
3474
+ d,
3475
+ u = (0 === t && e === o.length) || i._sorted,
3476
+ f = t > 0 && i._parsed[t - 1];
3477
+ if (!1 === this._parsing) (i._parsed = o), (i._sorted = !0), (d = o);
3478
  else {
3479
+ d = s(o[t])
3480
+ ? this.parseArrayData(i, o, t, e)
3481
+ : n(o[t])
3482
+ ? this.parseObjectData(i, o, t, e)
3483
+ : this.parsePrimitiveData(i, o, t, e);
3484
+ const a = () => null === c[l] || (f && c[l] < f[l]);
3485
+ for (h = 0; h < e; ++h)
3486
+ (i._parsed[h + t] = c = d[h]), u && (a() && (u = !1), (f = c));
3487
+ i._sorted = u;
3488
  }
3489
+ r && Ds(this, d);
3490
  }
3491
  parsePrimitiveData(t, e, i, s) {
3492
  const { iScale: n, vScale: o } = t,
3519
  for (h = 0, c = s; h < c; ++h)
3520
  (d = h + i),
3521
  (u = e[d]),
3522
+ (l[h] = { x: n.parse(y(u, a), d), y: o.parse(y(u, r), d) });
3523
  return l;
3524
  }
3525
  getParsed(t) {
3532
  const s = this.chart,
3533
  n = this._cachedMeta,
3534
  o = e[t.axis];
3535
+ return Ms({ keys: ws(s, !0), values: e._stacks[t.axis] }, o, n.index, {
3536
  mode: i,
3537
  });
3538
  }
3540
  const n = i[e.axis];
3541
  let o = null === n ? NaN : n;
3542
  const a = s && i._stacks[e.axis];
3543
+ s && a && ((s.values = a), (o = Ms(s, n, this._cachedMeta.index))),
3544
  (t.min = Math.min(t.min, o)),
3545
  (t.max = Math.max(t.max, o));
3546
  }
3548
  const i = this._cachedMeta,
3549
  s = i._parsed,
3550
  n = i._sorted && t === i.iScale,
3551
+ a = s.length,
3552
+ r = this._getOtherScale(t),
3553
+ l = ((t, e, i) =>
3554
+ t && !e.hidden && e._stacked && { keys: ws(i, !0), values: null })(
3555
  e,
3556
  i,
3557
  this.chart
3558
  ),
3559
+ h = { min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY },
3560
+ { min: c, max: d } = (function (t) {
3561
  const {
3562
  min: e,
3563
  max: i,
3568
  min: s ? e : Number.NEGATIVE_INFINITY,
3569
  max: n ? i : Number.POSITIVE_INFINITY,
3570
  };
3571
+ })(r);
3572
+ let u, f;
3573
+ function g() {
3574
+ f = s[u];
3575
+ const e = f[r.axis];
3576
+ return !o(f[t.axis]) || c > e || d < e;
3577
  }
3578
  for (
3579
+ u = 0;
3580
+ u < a && (g() || (this.updateRangeFromParsed(h, t, f, l), !n));
3581
+ ++u
3582
  );
3583
  if (n)
3584
+ for (u = a - 1; u >= 0; --u)
3585
+ if (!g()) {
3586
+ this.updateRangeFromParsed(h, t, f, l);
3587
  break;
3588
  }
3589
+ return h;
3590
  }
3591
  getAllParsedValues(t) {
3592
  const e = this._cachedMeta._parsed,
3593
  i = [];
3594
+ let s, n, a;
3595
  for (s = 0, n = e.length; s < n; ++s)
3596
+ (a = e[s][t.axis]), o(a) && i.push(a);
3597
  return i;
3598
  }
3599
  getMaxOverflow() {
3613
  const e = this._cachedMeta;
3614
  this.update(t || "default"),
3615
  (e._clip = (function (t) {
3616
+ let e, i, s, o;
3617
  return (
3618
+ n(t)
3619
+ ? ((e = t.top), (i = t.right), (s = t.bottom), (o = t.left))
3620
+ : (e = i = s = o = t),
3621
+ { top: e, right: i, bottom: s, left: o, disabled: !1 === t }
3622
  );
3623
  })(
3624
+ r(
3625
  this.options.clip,
3626
  (function (t, e, i) {
3627
  if (!1 === i) return !1;
3628
+ const s = vs(t, i),
3629
+ n = vs(e, i);
3630
  return {
3631
  top: n.end,
3632
  right: s.end,
3669
  (n =
3670
  e.$context ||
3671
  (e.$context = (function (t, e, i) {
3672
+ return _i(t, {
3673
  active: !1,
3674
  dataIndex: e,
3675
  parsed: void 0,
3687
  (n =
3688
  this.$context ||
3689
  (this.$context = (function (t, e) {
3690
+ return _i(t, {
3691
  active: !1,
3692
  dataset: void 0,
3693
  datasetIndex: e,
3711
  n = this._cachedDataOpts,
3712
  o = t + "-" + e,
3713
  a = n[o],
3714
+ r = this.enableOptionSharing && M(i);
3715
+ if (a) return Ts(a, r);
3716
  const l = this.chart.config,
3717
  h = l.datasetElementScopeKeys(this._type, t),
3718
  c = s ? [`${t}Hover`, "hover", t, ""] : [t, ""],
3719
  d = l.getOptionScopes(this.getDataset(), h),
3720
+ u = Object.keys(ne.elements[t]),
3721
  f = l.resolveNamedOptions(d, u, () => this.getContext(i, s), c);
3722
  return (
3723
+ f.$shared && ((f.$shared = r), (n[o] = Object.freeze(Ts(f, r)))), f
3724
  );
3725
  }
3726
  _resolveAnimations(t, e, i) {
3736
  o = s.getOptionScopes(this.getDataset(), n);
3737
  r = s.createResolver(o, this.getContext(t, i, e));
3738
  }
3739
+ const l = new ys(s, r && r.animations);
3740
  return r && r._cacheable && (n[o] = Object.freeze(l)), l;
3741
  }
3742
  getSharedOptions(t) {
3746
  );
3747
  }
3748
  includeOptions(t, e) {
3749
+ return !e || As(t) || this.chart._animationsDisabled;
3750
+ }
3751
+ _getSharedOptions(t, e) {
3752
+ const i = this.resolveDataElementOptions(t, e),
3753
+ s = this._sharedOptions,
3754
+ n = this.getSharedOptions(i),
3755
+ o = this.includeOptions(e, n) || n !== s;
3756
+ return (
3757
+ this.updateSharedOptions(n, e, i),
3758
+ { sharedOptions: n, includeOptions: o }
3759
+ );
3760
  }
3761
  updateElement(t, e, i, s) {
3762
+ As(s) ? Object.assign(t, i) : this._resolveAnimations(e, s).update(t, i);
3763
  }
3764
  updateSharedOptions(t, e, i) {
3765
+ t && !As(e) && this._resolveAnimations(void 0, e).update(t, i);
3766
  }
3767
  _setStyle(t, e, i, s) {
3768
  t.active = s;
3816
  const i = this._cachedMeta;
3817
  if (this._parsing) {
3818
  const s = i._parsed.splice(t, e);
3819
+ i._stacked && Cs(i, s);
3820
  }
3821
  i.data.splice(t, e);
3822
  }
3847
  this._sync(["_insertElements", 0, arguments.length]);
3848
  }
3849
  }
3850
+ (Ls.defaults = {}),
3851
+ (Ls.prototype.datasetElementType = null),
3852
+ (Ls.prototype.dataElementType = null);
3853
+ class Es {
3854
  constructor() {
3855
  (this.x = void 0),
3856
  (this.y = void 0),
3863
  return { x: e, y: i };
3864
  }
3865
  hasValue() {
3866
+ return B(this.x) && B(this.y);
3867
  }
3868
  getProps(t, e) {
3869
  const i = this.$animations;
3877
  );
3878
  }
3879
  }
3880
+ (Es.defaults = {}), (Es.defaultRoutes = void 0);
3881
+ const Rs = {
3882
+ values: (t) => (s(t) ? t : "" + t),
3883
  numeric(t, e, i) {
3884
  if (0 === t) return "0";
3885
  const s = this.chart.options.locale;
3898
  return i;
3899
  })(t, i));
3900
  }
3901
+ const a = I(Math.abs(o)),
3902
  r = Math.max(Math.min(-1 * Math.floor(a), 20), 0),
3903
  l = { notation: n, minimumFractionDigits: r, maximumFractionDigits: r };
3904
+ return Object.assign(l, this.options.ticks.format), li(t, s, l);
3905
  },
3906
  logarithmic(t, e, i) {
3907
  if (0 === t) return "0";
3908
+ const s = t / Math.pow(10, Math.floor(I(t)));
3909
  return 1 === s || 2 === s || 5 === s
3910
+ ? Rs.numeric.call(this, t, e, i)
3911
  : "";
3912
  },
3913
  };
3914
+ var Is = { formatters: Rs };
3915
+ function zs(t, e) {
3916
+ const s = t.options.ticks,
3917
+ n =
3918
+ s.maxTicksLimit ||
3919
  (function (t) {
3920
  const e = t.options.offset,
3921
  i = t._tickSize(),
3923
  n = t._maxLength / i;
3924
  return Math.floor(Math.min(s, n));
3925
  })(t),
3926
+ o = s.major.enabled
3927
  ? (function (t) {
3928
  const e = [];
3929
  let i, s;
3931
  return e;
3932
  })(e)
3933
  : [],
3934
+ a = o.length,
3935
+ r = o[0],
3936
+ l = o[a - 1],
3937
+ h = [];
3938
+ if (a > n)
3939
  return (
3940
  (function (t, e, i, s) {
3941
  let n,
3943
  a = i[0];
3944
  for (s = Math.ceil(s), n = 0; n < t.length; n++)
3945
  n === a && (e.push(t[n]), o++, (a = i[o * s]));
3946
+ })(e, h, o, a / n),
3947
+ h
3948
  );
3949
+ const c = (function (t, e, i) {
3950
  const s = (function (t) {
3951
  const e = t.length;
3952
  let i, s;
3957
  })(t),
3958
  n = e.length / i;
3959
  if (!s) return Math.max(n, 1);
3960
+ const o = V(s);
3961
  for (let t = 0, e = o.length - 1; t < e; t++) {
3962
  const e = o[t];
3963
  if (e > n) return e;
3964
  }
3965
  return Math.max(n, 1);
3966
+ })(o, e, n);
3967
+ if (a > 0) {
3968
+ let t, s;
3969
+ const n = a > 1 ? Math.round((l - r) / (a - 1)) : null;
3970
+ for (Fs(e, h, c, i(n) ? 0 : r - n, r), t = 0, s = a - 1; t < s; t++)
3971
+ Fs(e, h, c, o[t], o[t + 1]);
3972
+ return Fs(e, h, c, l, i(n) ? e.length : l + n), h;
3973
+ }
3974
+ return Fs(e, h, c), h;
3975
+ }
3976
+ function Fs(t, e, i, s, n) {
3977
+ const o = r(s, 0),
3978
+ a = Math.min(r(n, t.length), t.length);
3979
+ let l,
 
3980
  h,
3981
+ c,
3982
+ d = 0;
3983
  for (
3984
+ i = Math.ceil(i), n && ((l = n - s), (i = l / Math.floor(l / i))), c = o;
3985
+ c < 0;
3986
 
3987
  )
3988
+ d++, (c = Math.round(o + d * i));
3989
+ for (h = Math.max(o, 0); h < a; h++)
3990
+ h === c && (e.push(t[h]), d++, (c = Math.round(o + d * i)));
3991
  }
3992
+ ne.set("scale", {
3993
  display: !0,
3994
  offset: !1,
3995
  reverse: !1,
4022
  autoSkip: !0,
4023
  autoSkipPadding: 3,
4024
  labelOffset: 0,
4025
+ callback: Is.formatters.values,
4026
  minor: {},
4027
  major: {},
4028
  align: "center",
4032
  backdropPadding: 2,
4033
  },
4034
  }),
4035
+ ne.route("scale.ticks", "color", "", "color"),
4036
+ ne.route("scale.grid", "color", "", "borderColor"),
4037
+ ne.route("scale.grid", "borderColor", "", "borderColor"),
4038
+ ne.route("scale.title", "color", "", "color"),
4039
+ ne.describe("scale", {
4040
  _fallback: !1,
4041
  _scriptable: (t) =>
4042
  !t.startsWith("before") &&
4045
  "parser" !== t,
4046
  _indexable: (t) => "borderDash" !== t && "tickBorderDash" !== t,
4047
  }),
4048
+ ne.describe("scales", { _fallback: "scale" }),
4049
+ ne.describe("scale.ticks", {
4050
  _scriptable: (t) => "backdropPadding" !== t && "callback" !== t,
4051
  _indexable: (t) => "backdropPadding" !== t,
4052
  });
4053
+ const Vs = (t, e, i) => ("top" === e || "left" === e ? t[e] + i : t[e] - i);
4054
+ function Bs(t, e) {
4055
  const i = [],
4056
  s = t.length / e,
4057
  n = t.length;
4059
  for (; o < n; o += s) i.push(t[Math.floor(o)]);
4060
  return i;
4061
  }
4062
+ function Ns(t, e, i) {
4063
  const s = t.ticks.length,
4064
  n = Math.min(e, s - 1),
4065
  o = t._startPixel,
4082
  )
4083
  return h;
4084
  }
4085
+ function Ws(t) {
4086
  return t.drawTicks ? t.tickLength : 0;
4087
  }
4088
+ function js(t, e) {
4089
  if (!t.display) return 0;
4090
+ const i = mi(t.font, e),
4091
+ n = pi(t.padding);
4092
+ return (s(t.text) ? t.text.length : 1) * i.lineHeight + n.height;
4093
  }
4094
+ function Hs(t, e, i) {
4095
+ let s = dt(t);
4096
  return (
4097
  ((i && "right" !== e) || (!i && "right" === e)) &&
4098
+ (s = ((t) => ("left" === t ? "right" : "right" === t ? "left" : t))(s)),
4099
+ s
4100
  );
4101
  }
4102
+ class $s extends Es {
4103
  constructor(t) {
4104
  super(),
4105
  (this.id = t.id),
4164
  _suggestedMax: s,
4165
  } = this;
4166
  return (
4167
+ (t = a(t, Number.POSITIVE_INFINITY)),
4168
+ (e = a(e, Number.NEGATIVE_INFINITY)),
4169
+ (i = a(i, Number.POSITIVE_INFINITY)),
4170
+ (s = a(s, Number.NEGATIVE_INFINITY)),
4171
+ { min: a(t, i), max: a(e, s), minDefined: o(t), maxDefined: o(e) }
4172
  );
4173
  }
4174
  getMinMax(t) {
4175
  let e,
4176
  { min: i, max: s, minDefined: n, maxDefined: o } = this.getUserBounds();
4177
  if (n && o) return { min: i, max: s };
4178
+ const r = this.getMatchingVisibleMetas();
4179
+ for (let a = 0, l = r.length; a < l; ++a)
4180
+ (e = r[a].controller.getMinMax(this, t)),
4181
  n || (i = Math.min(i, e.min)),
4182
  o || (s = Math.max(s, e.max));
4183
  return (
4184
  (i = o && i > s ? s : i),
4185
  (s = n && i > s ? i : s),
4186
+ { min: a(i, a(s, i)), max: a(s, a(i, s)) }
4187
  );
4188
  }
4189
  getPadding() {
4210
  (this._cache = {}), (this._dataLimitsCached = !1);
4211
  }
4212
  beforeUpdate() {
4213
+ c(this.options.beforeUpdate, [this]);
4214
  }
4215
  update(t, e, i) {
4216
  const { beginAtZero: s, grace: n, ticks: o } = this.options,
4234
  (this.beforeDataLimits(),
4235
  this.determineDataLimits(),
4236
  this.afterDataLimits(),
4237
+ (this._range = xi(this, n, s)),
4238
  (this._dataLimitsCached = !0)),
4239
  this.beforeBuildTicks(),
4240
  (this.ticks = this.buildTicks() || []),
4241
  this.afterBuildTicks();
4242
  const r = a < this.ticks.length;
4243
+ this._convertTicksToLabels(r ? Bs(this.ticks, a) : this.ticks),
4244
  this.configure(),
4245
  this.beforeCalculateLabelRotation(),
4246
  this.calculateLabelRotation(),
4247
  this.afterCalculateLabelRotation(),
4248
  o.display &&
4249
  (o.autoSkip || "auto" === o.source) &&
4250
+ ((this.ticks = zs(this, this.ticks)),
4251
+ (this._labelSizes = null),
4252
+ this.afterAutoSkip()),
4253
  r && this._convertTicksToLabels(this.ticks),
4254
  this.beforeFit(),
4255
  this.fit(),
4270
  (this._alignToPixels = this.options.alignToPixels);
4271
  }
4272
  afterUpdate() {
4273
+ c(this.options.afterUpdate, [this]);
4274
  }
4275
  beforeSetDimensions() {
4276
+ c(this.options.beforeSetDimensions, [this]);
4277
  }
4278
  setDimensions() {
4279
  this.isHorizontal()
4289
  (this.paddingBottom = 0);
4290
  }
4291
  afterSetDimensions() {
4292
+ c(this.options.afterSetDimensions, [this]);
4293
  }
4294
  _callHooks(t) {
4295
  this.chart.notifyPlugins(t, this.getContext()),
4296
+ c(this.options[t], [this]);
4297
  }
4298
  beforeDataLimits() {
4299
  this._callHooks("beforeDataLimits");
4312
  this._callHooks("afterBuildTicks");
4313
  }
4314
  beforeTickToLabelConversion() {
4315
+ c(this.options.beforeTickToLabelConversion, [this]);
4316
  }
4317
  generateTickLabels(t) {
4318
  const e = this.options.ticks;
4319
  let i, s, n;
4320
  for (i = 0, s = t.length; i < s; i++)
4321
+ (n = t[i]), (n.label = c(e.callback, [n.value, i, t], this));
4322
  }
4323
  afterTickToLabelConversion() {
4324
+ c(this.options.afterTickToLabelConversion, [this]);
4325
  }
4326
  beforeCalculateLabelRotation() {
4327
+ c(this.options.beforeCalculateLabelRotation, [this]);
4328
  }
4329
  calculateLabelRotation() {
4330
  const t = this.options,
4347
  const h = this._getLabelSizes(),
4348
  c = h.widest.width,
4349
  d = h.highest.height,
4350
+ u = Z(this.chart.width - c, 0, this.maxWidth);
4351
  (o = t.offset ? this.maxWidth / i : u / (i - 1)),
4352
  c + 6 > o &&
4353
  ((o = u / (i - (t.offset ? 0.5 : 1))),
4354
  (a =
4355
  this.maxHeight -
4356
+ Ws(t.grid) -
4357
  e.padding -
4358
+ js(t.title, this.chart.options.font)),
4359
  (r = Math.sqrt(c * c + d * d)),
4360
+ (l = $(
4361
  Math.min(
4362
+ Math.asin(Z((h.highest.height + 6) / o, -1, 1)),
4363
+ Math.asin(Z(a / r, -1, 1)) - Math.asin(Z(d / r, -1, 1))
4364
  )
4365
  )),
4366
  (l = Math.max(s, Math.min(n, l)))),
4367
  (this.labelRotation = l);
4368
  }
4369
  afterCalculateLabelRotation() {
4370
+ c(this.options.afterCalculateLabelRotation, [this]);
4371
  }
4372
+ afterAutoSkip() {}
4373
  beforeFit() {
4374
+ c(this.options.beforeFit, [this]);
4375
  }
4376
  fit() {
4377
  const t = { width: 0, height: 0 },
4382
  o = this._isVisible(),
4383
  a = this.isHorizontal();
4384
  if (o) {
4385
+ const o = js(s, e.options.font);
4386
  if (
4387
  (a
4388
+ ? ((t.width = this.maxWidth), (t.height = Ws(n) + o))
4389
+ : ((t.height = this.maxHeight), (t.width = Ws(n) + o)),
4390
  i.display && this.ticks.length)
4391
  ) {
4392
  const {
4396
  highest: o,
4397
  } = this._getLabelSizes(),
4398
  r = 2 * i.padding,
4399
+ l = H(this.labelRotation),
4400
  h = Math.cos(l),
4401
  c = Math.sin(l);
4402
  if (a) {
4438
  ? (d = e.width)
4439
  : "end" === n
4440
  ? (c = t.width)
4441
+ : "inner" !== n && ((c = t.width / 2), (d = e.width / 2)),
4442
  (this.paddingLeft = Math.max(
4443
  ((c - a + o) * this.width) / (this.width - a),
4444
  0
4471
  )));
4472
  }
4473
  afterFit() {
4474
+ c(this.options.afterFit, [this]);
4475
  }
4476
  isHorizontal() {
4477
  const { axis: t, position: e } = this.options;
4481
  return this.options.fullSize;
4482
  }
4483
  _convertTicksToLabels(t) {
4484
+ let e, s;
4485
  for (
4486
  this.beforeTickToLabelConversion(),
4487
  this.generateTickLabels(t),
4488
  e = 0,
4489
+ s = t.length;
4490
+ e < s;
4491
  e++
4492
  )
4493
+ i(t[e].label) && (t.splice(e, 1), s--, e--);
4494
  this.afterTickToLabelConversion();
4495
  }
4496
  _getLabelSizes() {
4498
  if (!t) {
4499
  const e = this.options.ticks.sampleSize;
4500
  let i = this.ticks;
4501
+ e < i.length && (i = Bs(i, e)),
4502
  (this._labelSizes = t = this._computeLabelSizes(i, i.length));
4503
  }
4504
  return t;
4505
  }
4506
  _computeLabelSizes(t, e) {
4507
+ const { ctx: n, _longestTextCache: o } = this,
4508
+ a = [],
4509
+ r = [];
4510
+ let l,
 
 
4511
  h,
4512
  c,
 
4513
  u,
4514
  f,
4515
  g,
4516
  p,
4517
  m,
4518
+ b,
4519
+ x,
4520
+ _,
4521
+ y = 0,
4522
+ v = 0;
4523
+ for (l = 0; l < e; ++l) {
4524
  if (
4525
+ ((u = t[l].label),
4526
+ (f = this._resolveTickFontOptions(l)),
4527
+ (n.font = g = f.string),
4528
+ (p = o[g] = o[g] || { data: {}, gc: [] }),
4529
+ (m = f.lineHeight),
4530
+ (b = x = 0),
4531
+ i(u) || s(u))
4532
  ) {
4533
+ if (s(u))
4534
+ for (h = 0, c = u.length; h < c; ++h)
4535
+ (_ = u[h]),
4536
+ i(_) || s(_) || ((b = _e(n, p.data, p.gc, b, _)), (x += m));
4537
+ } else (b = _e(n, p.data, p.gc, b, u)), (x = m);
4538
+ a.push(b), r.push(x), (y = Math.max(b, y)), (v = Math.max(x, v));
4539
  }
4540
  !(function (t, e) {
4541
+ d(t, (t) => {
4542
  const i = t.gc,
4543
  s = i.length / 2;
4544
  let n;
4547
  i.splice(0, s);
4548
  }
4549
  });
4550
+ })(o, e);
4551
+ const w = a.indexOf(y),
4552
+ M = r.indexOf(v),
4553
+ k = (t) => ({ width: a[t] || 0, height: r[t] || 0 });
4554
  return {
4555
+ first: k(0),
4556
+ last: k(e - 1),
4557
+ widest: k(w),
4558
+ highest: k(M),
4559
+ widths: a,
4560
+ heights: r,
4561
  };
4562
  }
4563
  getLabelForValue(t) {
4576
  getPixelForDecimal(t) {
4577
  this._reversePixels && (t = 1 - t);
4578
  const e = this._startPixel + t * this._length;
4579
+ return J(this._alignToPixels ? ve(this.chart, e, 0) : e);
4580
  }
4581
  getDecimalForPixel(t) {
4582
  const e = (t - this._startPixel) / this._length;
4596
  return (
4597
  i.$context ||
4598
  (i.$context = (function (t, e, i) {
4599
+ return _i(t, { tick: i, index: e, type: "tick" });
4600
  })(this.getContext(), t, i))
4601
  );
4602
  }
4603
  return (
4604
  this.$context ||
4605
+ (this.$context = _i(this.chart.getContext(), {
4606
  scale: this,
4607
  type: "scale",
4608
  }))
4610
  }
4611
  _tickSize() {
4612
  const t = this.options.ticks,
4613
+ e = H(this.labelRotation),
4614
  i = Math.abs(Math.cos(e)),
4615
  s = Math.abs(Math.sin(e)),
4616
  n = this._getLabelSizes(),
4633
  const e = this.axis,
4634
  i = this.chart,
4635
  s = this.options,
4636
+ { grid: o, position: a } = s,
4637
+ l = o.offset,
4638
+ h = this.isHorizontal(),
4639
+ c = this.ticks.length + (l ? 1 : 0),
4640
+ d = Ws(o),
4641
+ u = [],
4642
+ f = o.setContext(this.getContext()),
4643
+ g = f.drawBorder ? f.borderWidth : 0,
4644
+ p = g / 2,
4645
+ m = function (t) {
4646
+ return ve(i, t, g);
4647
  };
4648
+ let b, x, _, y, v, w, M, k, S, P, D, O;
4649
+ if ("top" === a)
4650
+ (b = m(this.bottom)),
4651
+ (w = this.bottom - d),
4652
+ (k = b - p),
4653
+ (P = m(t.top) + p),
4654
+ (O = t.bottom);
4655
+ else if ("bottom" === a)
4656
+ (b = m(this.top)),
4657
+ (P = t.top),
4658
+ (O = m(t.bottom) - p),
4659
+ (w = b + p),
4660
+ (k = this.top + d);
4661
+ else if ("left" === a)
4662
+ (b = m(this.right)),
4663
+ (v = this.right - d),
4664
+ (M = b - p),
4665
+ (S = m(t.left) + p),
4666
+ (D = t.right);
4667
+ else if ("right" === a)
4668
+ (b = m(this.left)),
4669
+ (S = t.left),
4670
+ (D = m(t.right) - p),
4671
+ (v = b + p),
4672
+ (M = this.left + d);
4673
  else if ("x" === e) {
4674
+ if ("center" === a) b = m((t.top + t.bottom) / 2 + 0.5);
4675
+ else if (n(a)) {
4676
+ const t = Object.keys(a)[0],
4677
+ e = a[t];
4678
+ b = m(this.chart.scales[t].getPixelForValue(e));
4679
  }
4680
+ (P = t.top), (O = t.bottom), (w = b + p), (k = w + d);
4681
  } else if ("y" === e) {
4682
+ if ("center" === a) b = m((t.left + t.right) / 2);
4683
+ else if (n(a)) {
4684
+ const t = Object.keys(a)[0],
4685
+ e = a[t];
4686
+ b = m(this.chart.scales[t].getPixelForValue(e));
4687
  }
4688
+ (v = b - p), (M = v - d), (S = t.left), (D = t.right);
4689
  }
4690
+ const C = r(s.ticks.maxTicksLimit, c),
4691
+ A = Math.max(1, Math.ceil(c / C));
4692
+ for (x = 0; x < c; x += A) {
4693
+ const t = o.setContext(this.getContext(x)),
4694
  e = t.lineWidth,
4695
  s = t.color,
4696
+ n = t.borderDash || [],
4697
+ a = t.borderDashOffset,
4698
+ r = t.tickWidth,
4699
+ c = t.tickColor,
4700
+ d = t.tickBorderDash || [],
4701
  f = t.tickBorderDashOffset;
4702
+ (_ = Ns(this, x, l)),
4703
+ void 0 !== _ &&
4704
+ ((y = ve(i, _, e)),
4705
+ h ? (v = M = S = D = y) : (w = k = P = O = y),
4706
+ u.push({
4707
+ tx1: v,
4708
+ ty1: w,
4709
+ tx2: M,
4710
+ ty2: k,
4711
+ x1: S,
4712
+ y1: P,
4713
+ x2: D,
4714
+ y2: O,
4715
  width: e,
4716
  color: s,
4717
+ borderDash: n,
4718
+ borderDashOffset: a,
4719
+ tickWidth: r,
4720
+ tickColor: c,
4721
+ tickBorderDash: d,
4722
  tickBorderDashOffset: f,
4723
  }));
4724
  }
4725
+ return (this._ticksLength = c), (this._borderValue = b), u;
4726
  }
4727
  _computeLabelItems(t) {
4728
  const e = this.axis,
4729
  i = this.options,
4730
+ { position: o, ticks: a } = i,
4731
+ r = this.isHorizontal(),
4732
+ l = this.ticks,
4733
+ { align: h, crossAlign: c, padding: d, mirror: u } = a,
4734
+ f = Ws(i.grid),
4735
+ g = f + d,
4736
+ p = u ? -d : g,
4737
+ m = -H(this.labelRotation),
4738
+ b = [];
4739
+ let x,
 
 
4740
  _,
4741
  y,
4742
  v,
4746
  S,
4747
  P,
4748
  D,
4749
+ O,
4750
+ C,
4751
+ A = "middle";
4752
+ if ("top" === o)
4753
+ (M = this.bottom - p), (k = this._getXAxisLabelAlignment());
4754
+ else if ("bottom" === o)
4755
+ (M = this.top + p), (k = this._getXAxisLabelAlignment());
4756
+ else if ("left" === o) {
4757
+ const t = this._getYAxisLabelAlignment(f);
4758
+ (k = t.textAlign), (w = t.x);
4759
+ } else if ("right" === o) {
4760
+ const t = this._getYAxisLabelAlignment(f);
4761
+ (k = t.textAlign), (w = t.x);
4762
  } else if ("x" === e) {
4763
+ if ("center" === o) M = (t.top + t.bottom) / 2 + g;
4764
+ else if (n(o)) {
4765
+ const t = Object.keys(o)[0],
4766
+ e = o[t];
4767
+ M = this.chart.scales[t].getPixelForValue(e) + g;
4768
  }
4769
+ k = this._getXAxisLabelAlignment();
4770
  } else if ("y" === e) {
4771
+ if ("center" === o) w = (t.left + t.right) / 2 - g;
4772
+ else if (n(o)) {
4773
+ const t = Object.keys(o)[0],
4774
+ e = o[t];
4775
+ w = this.chart.scales[t].getPixelForValue(e);
4776
  }
4777
+ k = this._getYAxisLabelAlignment(f).textAlign;
4778
  }
4779
  "y" === e &&
4780
+ ("start" === h ? (A = "top") : "end" === h && (A = "bottom"));
4781
+ const T = this._getLabelSizes();
4782
+ for (x = 0, _ = l.length; x < _; ++x) {
4783
+ (y = l[x]), (v = y.label);
4784
+ const t = a.setContext(this.getContext(x));
4785
+ (S = this.getPixelForTick(x) + a.labelOffset),
4786
+ (P = this._resolveTickFontOptions(x)),
4787
+ (D = P.lineHeight),
4788
+ (O = s(v) ? v.length : 1);
4789
+ const e = O / 2,
4790
  i = t.color,
4791
+ n = t.textStrokeColor,
4792
  h = t.textStrokeWidth;
4793
+ let d,
4794
+ f = k;
4795
  if (
4796
+ (r
4797
+ ? ((w = S),
4798
+ "inner" === k &&
4799
+ (f =
4800
+ x === _ - 1
4801
+ ? this.options.reverse
4802
+ ? "left"
4803
+ : "right"
4804
+ : 0 === x
4805
+ ? this.options.reverse
4806
+ ? "right"
4807
+ : "left"
4808
+ : "center"),
4809
+ (C =
4810
+ "top" === o
4811
+ ? "near" === c || 0 !== m
4812
+ ? -O * D + D / 2
4813
+ : "center" === c
4814
+ ? -T.highest.height / 2 - e * D + D
4815
+ : -T.highest.height + D / 2
4816
+ : "near" === c || 0 !== m
4817
+ ? D / 2
4818
+ : "center" === c
4819
+ ? T.highest.height / 2 - e * D
4820
+ : T.highest.height - O * D),
4821
+ u && (C *= -1))
4822
+ : ((M = S), (C = ((1 - O) * D) / 2)),
4823
  t.showLabelBackdrop)
4824
  ) {
4825
+ const e = pi(t.backdropPadding),
4826
+ i = T.heights[x],
4827
+ s = T.widths[x];
4828
+ let n = M + C - e.top,
4829
+ o = w - e.left;
4830
+ switch (A) {
4831
  case "middle":
4832
  n -= i / 2;
4833
  break;
4834
  case "bottom":
4835
  n -= i;
4836
  }
4837
+ switch (k) {
4838
  case "center":
4839
  o -= s / 2;
4840
  break;
4849
  color: t.backdropColor,
4850
  };
4851
  }
4852
+ b.push({
4853
+ rotation: m,
4854
+ label: v,
4855
+ font: P,
4856
  color: i,
4857
+ strokeColor: n,
4858
  strokeWidth: h,
4859
+ textOffset: C,
4860
+ textAlign: f,
4861
+ textBaseline: A,
4862
+ translation: [w, M],
4863
  backdrop: d,
4864
  });
4865
  }
4866
+ return b;
4867
  }
4868
  _getXAxisLabelAlignment() {
4869
  const { position: t, ticks: e } = this.options;
4870
+ if (-H(this.labelRotation)) return "top" === t ? "left" : "right";
4871
  let i = "center";
4872
  return (
4873
+ "start" === e.align
4874
+ ? (i = "left")
4875
+ : "end" === e.align
4876
+ ? (i = "right")
4877
+ : "inner" === e.align && (i = "inner"),
4878
  i
4879
  );
4880
  }
5000
  a = this._borderValue;
5001
  let r, l, h, c;
5002
  this.isHorizontal()
5003
+ ? ((r = ve(t, this.left, n) - n / 2),
5004
+ (l = ve(t, this.right, o) + o / 2),
5005
  (h = c = a))
5006
+ : ((h = ve(t, this.top, n) - n / 2),
5007
+ (c = ve(t, this.bottom, o) + o / 2),
5008
  (r = l = a)),
5009
  e.save(),
5010
  (e.lineWidth = s.borderWidth),
5019
  if (!this.options.ticks.display) return;
5020
  const e = this.ctx,
5021
  i = this._computeLabelArea();
5022
+ i && Pe(e, i);
5023
  const s =
5024
  this._labelItems || (this._labelItems = this._computeLabelItems(t));
5025
  let n, o;
5035
  t.backdrop.width,
5036
  t.backdrop.height
5037
  )),
5038
+ Ae(e, o, 0, t.textOffset, i, t);
5039
  }
5040
+ i && De(e);
5041
  }
5042
  drawTitle() {
5043
  const {
5044
  ctx: t,
5045
+ options: { position: e, title: i, reverse: o },
5046
  } = this;
5047
  if (!i.display) return;
5048
+ const a = mi(i.font),
5049
+ r = pi(i.padding),
5050
+ l = i.align;
5051
+ let h = a.lineHeight / 2;
5052
+ "bottom" === e || "center" === e || n(e)
5053
+ ? ((h += r.bottom),
5054
+ s(i.text) && (h += a.lineHeight * (i.text.length - 1)))
5055
+ : (h += r.top);
5056
  const {
5057
+ titleX: c,
5058
+ titleY: d,
5059
+ maxWidth: u,
5060
+ rotation: f,
5061
  } = (function (t, e, i, s) {
5062
  const { top: o, left: a, bottom: r, right: l, chart: h } = t,
5063
  { chartArea: c, scales: d } = h;
5066
  g,
5067
  p = 0;
5068
  const m = r - o,
5069
+ b = l - a;
5070
  if (t.isHorizontal()) {
5071
+ if (((f = ut(s, a, l)), n(i))) {
5072
  const t = Object.keys(i)[0],
5073
  s = i[t];
5074
  g = d[t].getPixelForValue(s) + m - e;
5075
  } else
5076
+ g = "center" === i ? (c.bottom + c.top) / 2 + m - e : Vs(t, i, e);
5077
  u = l - a;
5078
  } else {
5079
+ if (n(i)) {
5080
  const t = Object.keys(i)[0],
5081
  s = i[t];
5082
+ f = d[t].getPixelForValue(s) - b + e;
5083
  } else
5084
+ f = "center" === i ? (c.left + c.right) / 2 - b + e : Vs(t, i, e);
5085
+ (g = ut(s, r, o)), (p = "left" === i ? -L : L);
5086
  }
5087
  return { titleX: f, titleY: g, maxWidth: u, rotation: p };
5088
+ })(this, h, e, l);
5089
+ Ae(t, i.text, 0, 0, a, {
5090
  color: i.color,
5091
+ maxWidth: u,
5092
+ rotation: f,
5093
+ textAlign: Hs(l, e, o),
5094
  textBaseline: "middle",
5095
+ translation: [c, d],
5096
  });
5097
  }
5098
  draw(t) {
5106
  _layers() {
5107
  const t = this.options,
5108
  e = (t.ticks && t.ticks.z) || 0,
5109
+ i = r(t.grid && t.grid.z, -1);
5110
+ return this._isVisible() && this.draw === $s.prototype.draw
5111
  ? [
5112
  {
5113
  z: i,
5149
  return s;
5150
  }
5151
  _resolveTickFontOptions(t) {
5152
+ return mi(this.options.ticks.setContext(this.getContext(t)).font);
5153
  }
5154
  _maxDigits() {
5155
  const t = this._resolveTickFontOptions(0).lineHeight;
5156
  return (this.isHorizontal() ? this.width : this.height) / t;
5157
  }
5158
  }
5159
+ class Ys {
5160
  constructor(t, e, i) {
5161
  (this.type = t),
5162
  (this.scope = e),
5183
  n in s ||
5184
  ((s[n] = t),
5185
  (function (t, e, i) {
5186
+ const s = m(Object.create(null), [
5187
+ i ? ne.get(i) : {},
5188
+ ne.get(e),
5189
  t.defaults,
5190
  ]);
5191
+ ne.set(e, s),
5192
  t.defaultRoutes &&
5193
  (function (t, e) {
5194
  Object.keys(e).forEach((i) => {
5198
  a = e[i].split("."),
5199
  r = a.pop(),
5200
  l = a.join(".");
5201
+ ne.route(o, n, l, r);
5202
  });
5203
  })(e, t.defaultRoutes);
5204
+ t.descriptors && ne.describe(e, t.descriptors);
5205
  })(t, o, i),
5206
+ this.override && ne.override(t.id, t.overrides)),
5207
  o
5208
  );
5209
  }
5215
  i = t.id,
5216
  s = this.scope;
5217
  i in e && delete e[i],
5218
+ s && i in ne[s] && (delete ne[s][i], this.override && delete te[i]);
5219
  }
5220
  }
5221
+ var Us = new (class {
5222
  constructor() {
5223
+ (this.controllers = new Ys(Ls, "datasets", !0)),
5224
+ (this.elements = new Ys(Es, "elements")),
5225
+ (this.plugins = new Ys(Object, "plugins")),
5226
+ (this.scales = new Ys($s, "scales")),
5227
  (this._typedRegistries = [
5228
  this.controllers,
5229
  this.scales,
5277
  const s = i || this._getRegistryForType(e);
5278
  i || s.isForType(e) || (s === this.plugins && e.id)
5279
  ? this._exec(t, s, e)
5280
+ : d(e, (e) => {
5281
  const s = i || this._getRegistryForType(e);
5282
  this._exec(t, s, e);
5283
  });
5284
  });
5285
  }
5286
  _exec(t, e, i) {
5287
+ const s = w(t);
5288
+ c(i["before" + s], [], i), e[t](i), c(i["after" + s], [], i);
5289
  }
5290
  _getRegistryForType(t) {
5291
  for (let e = 0; e < this._typedRegistries.length; e++) {
5301
  return s;
5302
  }
5303
  })();
5304
+ class Xs {
5305
  constructor() {
5306
  this._init = [];
5307
  }
5322
  s = s || {};
5323
  for (const n of t) {
5324
  const t = n.plugin;
5325
+ if (!1 === c(t[i], [e, s, n.options], t) && s.cancelable) return !1;
5326
  }
5327
  return !0;
5328
  }
5329
  invalidate() {
5330
+ i(this._cache) ||
5331
  ((this._oldCache = this._cache), (this._cache = void 0));
5332
  }
5333
  _descriptors(t) {
5337
  }
5338
  _createDescriptors(t, e) {
5339
  const i = t && t.config,
5340
+ s = r(i.options && i.options.plugins, {}),
5341
  n = (function (t) {
5342
+ const e = {},
5343
+ i = [],
5344
+ s = Object.keys(Us.plugins.items);
5345
+ for (let t = 0; t < s.length; t++) i.push(Us.getPlugin(s[t]));
5346
+ const n = t.plugins || [];
5347
+ for (let t = 0; t < n.length; t++) {
5348
+ const s = n[t];
5349
+ -1 === i.indexOf(s) && (i.push(s), (e[s.id] = !0));
5350
  }
5351
+ return { plugins: i, localIds: e };
5352
  })(i);
5353
  return !1 !== s || e
5354
+ ? (function (t, { plugins: e, localIds: i }, s, n) {
5355
+ const o = [],
5356
+ a = t.getContext();
5357
+ for (const r of e) {
5358
+ const e = r.id,
5359
+ l = qs(s[e], n);
5360
  null !== l &&
5361
+ o.push({
5362
+ plugin: r,
5363
+ options: Ks(t.config, { plugin: r, local: i[e] }, l, a),
5364
+ });
5365
  }
5366
+ return o;
5367
  })(t, n, s, e)
5368
  : [];
5369
  }
5375
  this._notify(s(e, i), t, "stop"), this._notify(s(i, e), t, "start");
5376
  }
5377
  }
5378
+ function qs(t, e) {
5379
  return e || !1 !== t ? (!0 === t ? {} : t) : null;
5380
  }
5381
+ function Ks(t, { plugin: e, local: i }, s, n) {
5382
+ const o = t.pluginScopeKeys(e),
5383
+ a = t.getOptionScopes(s, o);
5384
+ return (
5385
+ i && e.defaults && a.push(e.defaults),
5386
+ t.createResolver(a, n, [""], {
5387
+ scriptable: !1,
5388
+ indexable: !1,
5389
+ allKeys: !0,
5390
+ })
5391
+ );
5392
  }
5393
+ function Gs(t, e) {
5394
+ const i = ne.datasets[t] || {};
5395
  return (
5396
  ((e.datasets || {})[t] || {}).indexAxis ||
5397
  e.indexAxis ||
5399
  "x"
5400
  );
5401
  }
5402
+ function Zs(t, e) {
5403
  return "x" === t || "y" === t
5404
  ? t
5405
  : e.axis ||
5411
  t.charAt(0).toLowerCase();
5412
  var i;
5413
  }
5414
+ function Js(t) {
5415
  const e = t.options || (t.options = {});
5416
+ (e.plugins = r(e.plugins, {})),
5417
  (e.scales = (function (t, e) {
5418
+ const i = te[t.type] || { scales: {} },
5419
  s = e.scales || {},
5420
+ o = Gs(t.type, e),
5421
+ a = Object.create(null),
5422
+ r = Object.create(null);
5423
  return (
5424
  Object.keys(s).forEach((t) => {
5425
  const e = s[t];
5426
+ if (!n(e))
5427
  return console.error(
5428
  `Invalid scale configuration for scale: ${t}`
5429
  );
5431
  return console.warn(
5432
  `Ignoring resolver passed as options for scale: ${t}`
5433
  );
5434
+ const l = Zs(t, e),
5435
+ h = (function (t, e) {
5436
  return t === e ? "_index_" : "_value_";
5437
+ })(l, o),
5438
+ c = i.scales || {};
5439
+ (a[l] = a[l] || t),
5440
+ (r[t] = b(Object.create(null), [{ axis: l }, e, c[l], c[h]]));
5441
  }),
5442
  t.data.datasets.forEach((i) => {
5443
  const n = i.type || t.type,
5444
+ o = i.indexAxis || Gs(n, e),
5445
+ l = (te[n] || {}).scales || {};
5446
  Object.keys(l).forEach((t) => {
5447
  const e = (function (t, e) {
5448
  let i = t;
5452
  : "_value_" === t && (i = "x" === e ? "y" : "x"),
5453
  i
5454
  );
5455
+ })(t, o),
5456
+ n = i[e + "AxisID"] || a[e] || e;
5457
+ (r[n] = r[n] || Object.create(null)),
5458
+ b(r[n], [{ axis: e }, s[n], l[t]]);
5459
  });
5460
  }),
5461
+ Object.keys(r).forEach((t) => {
5462
+ const e = r[t];
5463
+ b(e, [ne.scales[e.type], ne.scale]);
5464
  }),
5465
+ r
5466
  );
5467
  })(t, e));
5468
  }
5469
+ function Qs(t) {
5470
  return (
5471
  ((t = t || {}).datasets = t.datasets || []),
5472
  (t.labels = t.labels || []),
5473
  t
5474
  );
5475
  }
5476
+ const tn = new Map(),
5477
+ en = new Set();
5478
+ function sn(t, e) {
5479
+ let i = tn.get(t);
5480
+ return i || ((i = e()), tn.set(t, i), en.add(i)), i;
5481
  }
5482
+ const nn = (t, e, i) => {
5483
+ const s = y(e, i);
5484
  void 0 !== s && t.add(s);
5485
  };
5486
+ class on {
5487
  constructor(t) {
5488
  (this._config = (function (t) {
5489
+ return ((t = t || {}).data = Qs(t.data)), Js(t), t;
5490
  })(t)),
5491
  (this._scopeCache = new Map()),
5492
  (this._resolverCache = new Map());
5504
  return this._config.data;
5505
  }
5506
  set data(t) {
5507
+ this._config.data = Qs(t);
5508
  }
5509
  get options() {
5510
  return this._config.options;
5517
  }
5518
  update() {
5519
  const t = this._config;
5520
+ this.clearCache(), Js(t);
5521
  }
5522
  clearCache() {
5523
  this._scopeCache.clear(), this._resolverCache.clear();
5524
  }
5525
  datasetScopeKeys(t) {
5526
+ return sn(t, () => [[`datasets.${t}`, ""]]);
5527
  }
5528
  datasetAnimationScopeKeys(t, e) {
5529
+ return sn(`${t}.transition.${e}`, () => [
5530
  [`datasets.${t}.transitions.${e}`, `transitions.${e}`],
5531
  [`datasets.${t}`, ""],
5532
  ]);
5533
  }
5534
  datasetElementScopeKeys(t, e) {
5535
+ return sn(`${t}-${e}`, () => [
5536
  [`datasets.${t}.elements.${e}`, `datasets.${t}`, `elements.${e}`, ""],
5537
  ]);
5538
  }
5539
  pluginScopeKeys(t) {
5540
  const e = t.id;
5541
+ return sn(`${this.type}-plugin-${e}`, () => [
5542
  [`plugins.${e}`, ...(t.additionalOptionScopes || [])],
5543
  ]);
5544
  }
5554
  if (a) return a;
5555
  const r = new Set();
5556
  e.forEach((e) => {
5557
+ t && (r.add(t), e.forEach((e) => nn(r, t, e))),
5558
+ e.forEach((t) => nn(r, s, t)),
5559
+ e.forEach((t) => nn(r, te[n] || {}, t)),
5560
+ e.forEach((t) => nn(r, ne, t)),
5561
+ e.forEach((t) => nn(r, ee, t));
5562
  });
5563
  const l = Array.from(r);
5564
  return (
5565
  0 === l.length && l.push(Object.create(null)),
5566
+ en.has(e) && o.set(e, l),
5567
  l
5568
  );
5569
  }
5570
  chartOptionScopes() {
5571
  const { options: t, type: e } = this;
5572
+ return [t, te[e] || {}, ne.datasets[e] || {}, { type: e }, ne, ee];
5573
  }
5574
+ resolveNamedOptions(t, e, i, n = [""]) {
5575
+ const o = { $shared: !0 },
5576
+ { resolver: a, subPrefixes: r } = an(this._resolverCache, t, n);
5577
+ let l = a;
5578
  if (
5579
  (function (t, e) {
5580
+ const { isScriptable: i, isIndexable: n } = Ie(t);
5581
+ for (const o of e) {
5582
+ const e = i(o),
5583
+ a = n(o),
5584
+ r = (a || e) && t[o];
5585
+ if ((e && (k(r) || rn(r))) || (a && s(r))) return !0;
5586
  }
5587
  return !1;
5588
+ })(a, e)
5589
  ) {
5590
+ o.$shared = !1;
5591
+ l = Re(a, (i = k(i) ? i() : i), this.createResolver(t, i, r));
5592
  }
5593
+ for (const t of e) o[t] = l[t];
5594
+ return o;
5595
  }
5596
  createResolver(t, e, i = [""], s) {
5597
+ const { resolver: o } = an(this._resolverCache, t, i);
5598
+ return n(e) ? Re(o, e, void 0, s) : o;
5599
  }
5600
  }
5601
+ function an(t, e, i) {
5602
  let s = t.get(e);
5603
  s || ((s = new Map()), t.set(e, s));
5604
  const n = i.join();
5605
  let o = s.get(n);
5606
  if (!o) {
5607
  (o = {
5608
+ resolver: Ee(e, i),
5609
  subPrefixes: i.filter((t) => !t.toLowerCase().includes("hover")),
5610
  }),
5611
  s.set(n, o);
5612
  }
5613
  return o;
5614
  }
5615
+ const rn = (t) =>
5616
+ n(t) && Object.getOwnPropertyNames(t).reduce((e, i) => e || k(t[i]), !1);
5617
+ const ln = ["top", "bottom", "left", "right", "chartArea"];
5618
+ function hn(t, e) {
5619
+ return "top" === t || "bottom" === t || (-1 === ln.indexOf(t) && "x" === e);
5620
  }
5621
+ function cn(t, e) {
5622
  return function (i, s) {
5623
  return i[t] === s[t] ? i[e] - s[e] : i[t] - s[t];
5624
  };
5625
  }
5626
+ function dn(t) {
5627
  const e = t.chart,
5628
  i = e.options.animation;
5629
+ e.notifyPlugins("afterRender"), c(i && i.onComplete, [t], e);
5630
  }
5631
+ function un(t) {
5632
  const e = t.chart,
5633
  i = e.options.animation;
5634
+ c(i && i.onProgress, [t], e);
5635
  }
5636
+ function fn(t) {
5637
  return (
5638
+ oe() && "string" == typeof t
5639
  ? (t = document.getElementById(t))
5640
  : t && t.length && (t = t[0]),
5641
  t && t.canvas && (t = t.canvas),
5642
  t
5643
  );
5644
  }
5645
+ const gn = {},
5646
+ pn = (t) => {
5647
+ const e = fn(t);
5648
+ return Object.values(gn)
5649
  .filter((t) => t.canvas === e)
5650
  .pop();
5651
  };
5652
+ function mn(t, e, i) {
5653
  const s = Object.keys(t);
5654
  for (const n of s) {
5655
  const s = +n;
5659
  }
5660
  }
5661
  }
5662
+ class bn {
5663
+ constructor(t, i) {
5664
+ const s = (this.config = new on(i)),
5665
+ n = fn(t),
5666
+ o = pn(n);
5667
  if (o)
5668
  throw new Error(
5669
  "Canvas is already in use. Chart with ID '" +
5670
  o.id +
5671
+ "' must be destroyed before the canvas with ID '" +
5672
+ o.canvas.id +
5673
+ "' can be reused."
5674
  );
5675
+ const a = s.createResolver(s.chartOptionScopes(), this.getContext());
5676
+ (this.platform = new (s.platform || gs(n))()),
5677
  this.platform.updateConfig(s);
5678
+ const r = this.platform.acquireContext(n, a.aspectRatio),
5679
+ l = r && r.canvas,
5680
+ h = l && l.height,
5681
+ c = l && l.width;
5682
+ (this.id = e()),
5683
+ (this.ctx = r),
5684
+ (this.canvas = l),
5685
+ (this.width = c),
5686
+ (this.height = h),
5687
+ (this._options = a),
5688
  (this._aspectRatio = this.aspectRatio),
5689
  (this._layers = []),
5690
  (this._metasets = []),
5698
  (this._responsiveListeners = void 0),
5699
  (this._sortedMetasets = []),
5700
  (this.scales = {}),
5701
+ (this._plugins = new Xs()),
5702
  (this.$proxies = {}),
5703
  (this._hiddenIndices = {}),
5704
  (this.attached = !1),
5705
  (this._animationsDisabled = void 0),
5706
  (this.$context = void 0),
5707
+ (this._doResize = ct((t) => this.update(t), a.resizeDelay || 0)),
5708
  (this._dataChanges = []),
5709
+ (gn[this.id] = this),
5710
+ r && l
5711
+ ? (mt.listen(this, "complete", dn),
5712
+ mt.listen(this, "progress", un),
5713
  this._initialize(),
5714
  this.attached && this.update())
5715
  : console.error(
5719
  get aspectRatio() {
5720
  const {
5721
  options: { aspectRatio: t, maintainAspectRatio: e },
5722
+ width: s,
5723
+ height: n,
5724
+ _aspectRatio: o,
5725
  } = this;
5726
+ return i(t) ? (e && o ? o : n ? s / n : null) : t;
5727
  }
5728
  get data() {
5729
  return this.config.data;
5742
  this.notifyPlugins("beforeInit"),
5743
  this.options.responsive
5744
  ? this.resize()
5745
+ : pe(this, this.options.devicePixelRatio),
5746
  this.bindEvents(),
5747
  this.notifyPlugins("afterInit"),
5748
  this
5749
  );
5750
  }
5751
  clear() {
5752
+ return we(this.canvas, this.ctx), this;
5753
  }
5754
  stop() {
5755
+ return mt.stop(this), this;
5756
  }
5757
  resize(t, e) {
5758
+ mt.running(this)
5759
  ? (this._resizeBeforeDraw = { width: t, height: e })
5760
  : this._resize(t, e);
5761
  }
5769
  (this.width = o.width),
5770
  (this.height = o.height),
5771
  (this._aspectRatio = this.aspectRatio),
5772
+ pe(this, a, !0) &&
5773
  (this.notifyPlugins("resize", { size: o }),
5774
+ c(i.onResize, [this, o], this),
5775
  this.attached && this._doResize(r) && this.render());
5776
  }
5777
  ensureScalesHaveIDs() {
5778
+ d(this.options.scales || {}, (t, e) => {
5779
  t.id = e;
5780
  });
5781
  }
5789
  (n = n.concat(
5790
  Object.keys(e).map((t) => {
5791
  const i = e[t],
5792
+ s = Zs(t, i),
5793
  n = "r" === s,
5794
  o = "x" === s;
5795
  return {
5799
  };
5800
  })
5801
  )),
5802
+ d(n, (e) => {
5803
  const n = e.options,
5804
  o = n.id,
5805
+ a = Zs(o, n),
5806
+ l = r(n.type, e.dtype);
5807
+ (void 0 !== n.position && hn(n.position, a) === hn(e.dposition)) ||
5808
  (n.position = e.dposition),
5809
  (s[o] = !0);
5810
+ let h = null;
5811
+ if (o in i && i[o].type === l) h = i[o];
5812
  else {
5813
+ (h = new (Us.getScale(l))({
5814
  id: o,
5815
+ type: l,
5816
  ctx: this.ctx,
5817
  chart: this,
5818
  })),
5819
+ (i[h.id] = h);
5820
  }
5821
+ h.init(n, t);
5822
  }),
5823
+ d(s, (t, e) => {
5824
  t || delete i[e];
5825
  }),
5826
+ d(i, (t) => {
5827
+ Zi.configure(this, t, t.options), Zi.addBox(this, t);
5828
  });
5829
  }
5830
  _updateMetasets() {
5835
  for (let t = e; t < i; ++t) this._destroyDatasetMeta(t);
5836
  t.splice(e, i - e);
5837
  }
5838
+ this._sortedMetasets = t.slice(0).sort(cn("order", "index"));
5839
  }
5840
  _removeUnreferencedMetasets() {
5841
  const {
5865
  n.type !== o &&
5866
  (this._destroyDatasetMeta(i), (n = this.getDatasetMeta(i))),
5867
  (n.type = o),
5868
+ (n.indexAxis = s.indexAxis || Gs(o, this.options)),
5869
  (n.order = s.order || 0),
5870
  (n.index = i),
5871
  (n.label = "" + s.label),
5874
  )
5875
  n.controller.updateIndex(i), n.controller.linkScales();
5876
  else {
5877
+ const e = Us.getController(o),
5878
+ { datasetElementType: s, dataElementType: a } = ne.datasets[o];
5879
  Object.assign(e.prototype, {
5880
+ dataElementType: Us.getElement(a),
5881
+ datasetElementType: s && Us.getElement(s),
5882
  }),
5883
  (n.controller = new e(this, i)),
5884
  t.push(n.controller);
5887
  return this._updateMetasets(), t;
5888
  }
5889
  _resetElements() {
5890
+ d(
5891
  this.data.datasets,
5892
  (t, e) => {
5893
  this.getDatasetMeta(e).controller.reset();
5925
  (o = this._minPadding = i.layout.autoPadding ? o : 0),
5926
  this._updateLayout(o),
5927
  s ||
5928
+ d(n, (t) => {
5929
  t.reset();
5930
  }),
5931
  this._updateDatasets(t),
5932
  this.notifyPlugins("afterUpdate", { mode: t }),
5933
+ this._layers.sort(cn("z", "_idx"));
5934
  const { _active: a, _lastEvent: r } = this;
5935
  r
5936
  ? this._eventHandler(r, !0)
5938
  this.render();
5939
  }
5940
  _updateScales() {
5941
+ d(this.scales, (t) => {
5942
+ Zi.removeBox(this, t);
5943
  }),
5944
  this.ensureScalesHaveIDs(),
5945
  this.buildOrUpdateScales();
5948
  const t = this.options,
5949
  e = new Set(Object.keys(this._listeners)),
5950
  i = new Set(t.events);
5951
+ (S(e, i) && !!this._responsiveListeners === t.responsive) ||
5952
  (this.unbindEvents(), this.bindEvents());
5953
  }
5954
  _updateHiddenIndices() {
5955
  const { _hiddenIndices: t } = this,
5956
  e = this._getUniformDataChanges() || [];
5957
  for (const { method: i, start: s, count: n } of e) {
5958
+ mn(t, s, "_removeElements" === i ? -n : n);
5959
  }
5960
  }
5961
  _getUniformDataChanges() {
5970
  .map((t, e) => e + "," + t.splice(1).join(","))
5971
  ),
5972
  s = i(0);
5973
+ for (let t = 1; t < e; t++) if (!S(s, i(t))) return;
5974
  return Array.from(s)
5975
  .map((t) => t.split(","))
5976
  .map((t) => ({ method: t[1], start: +t[2], count: +t[3] }));
5977
  }
5978
  _updateLayout(t) {
5979
  if (!1 === this.notifyPlugins("beforeLayout", { cancelable: !0 })) return;
5980
+ Zi.update(this, this.width, this.height, t);
5981
  const e = this.chartArea,
5982
  i = e.width <= 0 || e.height <= 0;
5983
  (this._layers = []),
5984
+ d(
5985
  this.boxes,
5986
  (t) => {
5987
  (i && "chartArea" === t.position) ||
6002
  for (let t = 0, e = this.data.datasets.length; t < e; ++t)
6003
  this.getDatasetMeta(t).controller.configure();
6004
  for (let e = 0, i = this.data.datasets.length; e < i; ++e)
6005
+ this._updateDataset(e, k(t) ? t({ datasetIndex: e }) : t);
6006
  this.notifyPlugins("afterDatasetsUpdate", { mode: t });
6007
  }
6008
  }
6016
  }
6017
  render() {
6018
  !1 !== this.notifyPlugins("beforeRender", { cancelable: !0 }) &&
6019
+ (mt.has(this)
6020
+ ? this.attached && !mt.running(this) && mt.start(this)
6021
+ : (this.draw(), dn({ chart: this })));
6022
  }
6023
  draw() {
6024
  let t;
6061
  o = { meta: t, index: t.index, cancelable: !0 };
6062
  !1 !== this.notifyPlugins("beforeDatasetDraw", o) &&
6063
  (s &&
6064
+ Pe(e, {
6065
  left: !1 === i.left ? 0 : n.left - i.left,
6066
  right: !1 === i.right ? this.width : n.right + i.right,
6067
  top: !1 === i.top ? 0 : n.top - i.top,
6068
  bottom: !1 === i.bottom ? this.height : n.bottom + i.bottom,
6069
  }),
6070
  t.controller.draw(),
6071
+ s && De(e),
6072
  (o.cancelable = !1),
6073
  this.notifyPlugins("afterDatasetDraw", o));
6074
  }
6075
+ isPointInArea(t) {
6076
+ return Se(t, this.chartArea, this._minPadding);
6077
+ }
6078
  getElementsAtEventForMode(t, e, i, s) {
6079
+ const n = Vi.modes[e];
6080
  return "function" == typeof n ? n(this, t, i, s) : [];
6081
  }
6082
  getDatasetMeta(t) {
6106
  getContext() {
6107
  return (
6108
  this.$context ||
6109
+ (this.$context = _i(null, { chart: this, type: "chart" }))
6110
  );
6111
  }
6112
  getVisibleDatasetCount() {
6131
  const s = i ? "show" : "hide",
6132
  n = this.getDatasetMeta(t),
6133
  o = n.controller._resolveAnimations(void 0, s);
6134
+ M(e)
6135
  ? ((n.data[e].hidden = !i), this.update())
6136
  : (this.setDatasetVisibility(t, i),
6137
  o.update(n, { visible: i }),
6150
  _stop() {
6151
  let t, e;
6152
  for (
6153
+ this.stop(), mt.remove(this), t = 0, e = this.data.datasets.length;
6154
  t < e;
6155
  ++t
6156
  )
6163
  this.config.clearCache(),
6164
  t &&
6165
  (this.unbindEvents(),
6166
+ we(t, e),
6167
  this.platform.releaseContext(e),
6168
  (this.canvas = null),
6169
  (this.ctx = null)),
6170
  this.notifyPlugins("destroy"),
6171
+ delete gn[this.id],
6172
  this.notifyPlugins("afterDestroy");
6173
  }
6174
  toBase64Image(...t) {
6189
  s = (t, e, i) => {
6190
  (t.offsetX = e), (t.offsetY = i), this._eventHandler(t);
6191
  };
6192
+ d(this.options.events, (t) => i(t, s));
6193
  }
6194
  bindResponsiveEvents() {
6195
  this._responsiveListeners || (this._responsiveListeners = {});
6222
  e.isAttached(this.canvas) ? a() : o();
6223
  }
6224
  unbindEvents() {
6225
+ d(this._listeners, (t, e) => {
6226
  this.platform.removeEventListener(this, e, t);
6227
  }),
6228
  (this._listeners = {}),
6229
+ d(this._responsiveListeners, (t, e) => {
6230
  this.platform.removeEventListener(this, e, t);
6231
  }),
6232
  (this._responsiveListeners = void 0);
6258
  if (!i) throw new Error("No dataset found at index " + t);
6259
  return { datasetIndex: t, element: i.data[e], index: e };
6260
  });
6261
+ !u(i, e) &&
6262
  ((this._active = i),
6263
  (this._lastEvent = null),
6264
  this._updateHoverStyles(i, e));
6285
  event: t,
6286
  replay: e,
6287
  cancelable: !0,
6288
+ inChartArea: this.isPointInArea(t),
6289
  },
6290
  s = (e) =>
6291
  (e.options.events || this.options.events).includes(t.native.type);
6302
  const { _active: s = [], options: n } = this,
6303
  o = e,
6304
  a = this._getActiveElements(t, s, i, o),
6305
+ r = P(t),
6306
  l = (function (t, e, i, s) {
6307
  return i && "mouseout" !== t.type ? (s ? e : t) : null;
6308
  })(t, this._lastEvent, i, r);
6309
  i &&
6310
  ((this._lastEvent = null),
6311
+ c(n.onHover, [t, a, this], this),
6312
+ r && c(n.onClick, [t, a, this], this));
6313
+ const h = !u(a, s);
6314
  return (
6315
  (h || e) && ((this._active = a), this._updateHoverStyles(a, s, e)),
6316
  (this._lastEvent = l),
6324
  return this.getElementsAtEventForMode(t, n.mode, n, s);
6325
  }
6326
  }
6327
+ const xn = () => d(bn.instances, (t) => t._plugins.invalidate()),
6328
+ _n = !0;
6329
+ function yn() {
6330
  throw new Error(
6331
  "This method is not implemented: Check that a complete date adapter is provided."
6332
  );
6333
  }
6334
+ Object.defineProperties(bn, {
6335
+ defaults: { enumerable: _n, value: ne },
6336
+ instances: { enumerable: _n, value: gn },
6337
+ overrides: { enumerable: _n, value: te },
6338
+ registry: { enumerable: _n, value: Us },
6339
+ version: { enumerable: _n, value: "3.9.1" },
6340
+ getChart: { enumerable: _n, value: pn },
6341
  register: {
6342
+ enumerable: _n,
6343
  value: (...t) => {
6344
+ Us.add(...t), xn();
6345
  },
6346
  },
6347
  unregister: {
6348
+ enumerable: _n,
6349
  value: (...t) => {
6350
+ Us.remove(...t), xn();
6351
  },
6352
  },
6353
  });
6354
+ class vn {
6355
  constructor(t) {
6356
  this.options = t || {};
6357
  }
6358
+ init(t) {}
6359
  formats() {
6360
+ return yn();
6361
  }
6362
  parse(t, e) {
6363
+ return yn();
6364
  }
6365
  format(t, e) {
6366
+ return yn();
6367
  }
6368
  add(t, e, i) {
6369
+ return yn();
6370
  }
6371
  diff(t, e, i) {
6372
+ return yn();
6373
  }
6374
  startOf(t, e, i) {
6375
+ return yn();
6376
  }
6377
  endOf(t, e) {
6378
+ return yn();
6379
  }
6380
  }
6381
+ vn.override = function (t) {
6382
+ Object.assign(vn.prototype, t);
6383
  };
6384
+ var wn = { _date: vn };
6385
+ function Mn(t) {
6386
  const e = t.iScale,
6387
  i = (function (t, e) {
6388
  if (!t._cache.$bar) {
6390
  let s = [];
6391
  for (let e = 0, n = i.length; e < n; e++)
6392
  s = s.concat(i[e].controller.getAllParsedValues(t));
6393
+ t._cache.$bar = rt(s.sort((t, e) => t - e));
6394
  }
6395
  return t._cache.$bar;
6396
  })(e, t.type);
6402
  const l = () => {
6403
  32767 !== o &&
6404
  -32768 !== o &&
6405
+ (M(a) && (r = Math.min(r, Math.abs(o - a) || r)), (a = o));
6406
  };
6407
  for (s = 0, n = i.length; s < n; ++s) (o = e.getPixelForValue(i[s])), l();
6408
  for (a = void 0, s = 0, n = e.ticks.length; s < n; ++s)
6409
  (o = e.getPixelForTick(s)), l();
6410
  return r;
6411
  }
6412
+ function kn(t, e, i, n) {
6413
  return (
6414
+ s(t)
6415
  ? (function (t, e, i, s) {
6416
  const n = i.parse(t[0], s),
6417
  o = i.parse(t[1], s),
6429
  min: a,
6430
  max: r,
6431
  });
6432
+ })(t, e, i, n)
6433
+ : (e[i.axis] = i.parse(t, n)),
6434
  e
6435
  );
6436
  }
6437
+ function Sn(t, e, i, s) {
6438
  const n = t.iScale,
6439
  o = t.vScale,
6440
  a = n.getLabels(),
6445
  (u = e[h]),
6446
  (d = {}),
6447
  (d[n.axis] = r || n.parse(a[h], h)),
6448
+ l.push(kn(u, d, o, h));
6449
  return l;
6450
  }
6451
+ function Pn(t) {
6452
  return t && void 0 !== t.barStart && void 0 !== t.barEnd;
6453
  }
6454
+ function Dn(t, e, i, s) {
6455
  let n = e.borderSkipped;
6456
  const o = {};
6457
  if (!n) return void (t.borderSkipped = o);
6458
+ if (!0 === n)
6459
+ return void (t.borderSkipped = {
6460
+ top: !0,
6461
+ right: !0,
6462
+ bottom: !0,
6463
+ left: !0,
6464
+ });
6465
  const {
6466
  start: a,
6467
  end: r,
6485
  ? (n = h)
6486
  : (i._bottom || 0) === s
6487
  ? (n = c)
6488
+ : ((o[On(c, a, r, l)] = !0), (n = h))),
6489
+ (o[On(n, a, r, l)] = !0),
6490
  (t.borderSkipped = o);
6491
  }
6492
+ function On(t, e, i, s) {
6493
  var n, o, a;
6494
  return (
6495
  s
6496
  ? ((a = i),
6497
+ (t = Cn((t = (n = t) === (o = e) ? a : n === a ? o : n), i, e)))
6498
+ : (t = Cn(t, e, i)),
6499
  t
6500
  );
6501
  }
6502
+ function Cn(t, e, i) {
6503
  return "start" === t ? e : "end" === t ? i : t;
6504
  }
6505
+ function An(t, { inflateAmount: e }, i) {
6506
  t.inflateAmount = "auto" === e ? (1 === i ? 0.33 : 0) : e;
6507
  }
6508
+ class Tn extends Ls {
6509
  parsePrimitiveData(t, e, i, s) {
6510
+ return Sn(t, e, i, s);
6511
  }
6512
  parseArrayData(t, e, i, s) {
6513
+ return Sn(t, e, i, s);
6514
  }
6515
  parseObjectData(t, e, i, s) {
6516
  const { iScale: n, vScale: o } = t,
6522
  for (d = i, u = i + s; d < u; ++d)
6523
  (g = e[d]),
6524
  (f = {}),
6525
+ (f[n.axis] = n.parse(y(g, l), d)),
6526
+ c.push(kn(y(g, h), f, o, d));
6527
  return c;
6528
  }
6529
  updateRangeFromParsed(t, e, i, s) {
6541
  { iScale: i, vScale: s } = e,
6542
  n = this.getParsed(t),
6543
  o = n._custom,
6544
+ a = Pn(o)
6545
  ? "[" + o.start + ", " + o.end + "]"
6546
  : "" + s.getLabelForValue(n[s.axis]);
6547
  return { label: "" + i.getLabelForValue(n[i.axis]), value: a };
6554
  const e = this._cachedMeta;
6555
  this.updateElements(e.data, 0, e.data.length, t);
6556
  }
6557
+ updateElements(t, e, s, n) {
6558
+ const o = "reset" === n,
6559
  {
6560
+ index: a,
6561
+ _cachedMeta: { vScale: r },
6562
  } = this,
6563
+ l = r.getBasePixel(),
6564
+ h = r.isHorizontal(),
6565
+ c = this._getRuler(),
6566
+ { sharedOptions: d, includeOptions: u } = this._getSharedOptions(e, n);
6567
+ for (let f = e; f < e + s; f++) {
6568
+ const e = this.getParsed(f),
6569
+ s =
6570
+ o || i(e[r.axis])
6571
+ ? { base: l, head: l }
6572
+ : this._calculateBarValuePixels(f),
6573
+ g = this._calculateBarIndexPixels(f, c),
6574
+ p = (e._stacks || {})[r.axis],
6575
+ m = {
6576
+ horizontal: h,
6577
+ base: s.base,
 
 
 
6578
  enableBorderRadius:
6579
+ !p || Pn(e._custom) || a === p._top || a === p._bottom,
6580
+ x: h ? s.head : g.center,
6581
+ y: h ? g.center : s.head,
6582
+ height: h ? g.size : Math.abs(s.size),
6583
+ width: h ? Math.abs(s.size) : g.size,
6584
  };
6585
  u &&
6586
+ (m.options =
6587
+ d || this.resolveDataElementOptions(f, t[f].active ? "active" : n));
6588
+ const b = m.options || t[f].options;
6589
+ Dn(m, b, p, a), An(m, b, c.ratio), this.updateElement(t[f], f, m, n);
6590
  }
6591
  }
6592
  _getStacks(t, e) {
6593
+ const { iScale: s } = this._cachedMeta,
6594
+ n = s
6595
+ .getMatchingVisibleMetas(this._type)
6596
+ .filter((t) => t.controller.options.grouped),
6597
+ o = s.options.stacked,
6598
+ a = [],
6599
+ r = (t) => {
6600
+ const s = t.controller.getParsed(e),
6601
+ n = s && s[t.vScale.axis];
6602
+ if (i(n) || isNaN(n)) return !0;
6603
+ };
6604
+ for (const i of n)
6605
+ if (
6606
+ (void 0 === e || !r(i)) &&
6607
+ ((!1 === o ||
6608
+ -1 === a.indexOf(i.stack) ||
6609
+ (void 0 === o && void 0 === i.stack)) &&
6610
+ a.push(i.stack),
6611
+ i.index === t)
6612
+ )
6613
+ break;
 
6614
  return a.length || a.push(void 0), a;
6615
  }
6616
  _getStackCount(t) {
6631
  s.push(i.getPixelForValue(this.getParsed(n)[i.axis], n));
6632
  const a = t.barThickness;
6633
  return {
6634
+ min: a || Mn(e),
6635
  pixels: s,
6636
  start: i._startPixel,
6637
  end: i._endPixel,
6643
  }
6644
  _calculateBarValuePixels(t) {
6645
  const {
6646
+ _cachedMeta: { vScale: e, _stacked: s },
6647
+ options: { base: n, minBarLength: o },
6648
  } = this,
6649
+ a = n || 0,
6650
+ r = this.getParsed(t),
6651
+ l = r._custom,
6652
+ h = Pn(l);
6653
+ let c,
6654
+ d,
6655
+ u = r[e.axis],
6656
+ f = 0,
6657
+ g = s ? this.applyStack(e, r, s) : u;
6658
+ g !== u && ((f = g - u), (g = u)),
6659
+ h &&
6660
+ ((u = l.barStart),
6661
+ (g = l.barEnd - l.barStart),
6662
+ 0 !== u && z(u) !== z(l.barEnd) && (f = 0),
6663
+ (f += u));
6664
+ const p = i(n) || h ? f : n;
6665
+ let m = e.getPixelForValue(p);
6666
  if (
6667
+ ((c = this.chart.getDataVisibility(t) ? e.getPixelForValue(f + g) : m),
6668
+ (d = c - m),
6669
+ Math.abs(d) < o)
 
 
 
 
 
 
 
 
 
6670
  ) {
6671
+ (d =
6672
+ (function (t, e, i) {
6673
+ return 0 !== t
6674
+ ? z(t)
6675
+ : (e.isHorizontal() ? 1 : -1) * (e.min >= i ? 1 : -1);
6676
+ })(d, e, a) * o),
6677
+ u === a && (m -= d / 2);
6678
+ const t = e.getPixelForDecimal(0),
6679
+ i = e.getPixelForDecimal(1),
6680
+ s = Math.min(t, i),
6681
+ n = Math.max(t, i);
6682
+ (m = Math.max(Math.min(m, n), s)), (c = m + d);
6683
  }
6684
+ if (m === e.getPixelForValue(a)) {
6685
+ const t = (z(d) * e.getLineWidthForValue(a)) / 2;
6686
+ (m += t), (d -= t);
6687
+ }
6688
+ return { size: d, base: m, head: c, center: c + d / 2 };
6689
  }
6690
  _calculateBarIndexPixels(t, e) {
6691
+ const s = e.scale,
6692
+ n = this.options,
6693
+ o = n.skipNull,
6694
+ a = r(n.maxBarThickness, 1 / 0);
6695
+ let l, h;
6696
  if (e.grouped) {
6697
+ const s = o ? this._getStackCount(t) : e.stackCount,
6698
+ r =
6699
+ "flex" === n.barThickness
6700
  ? (function (t, e, i, s) {
6701
  const n = e.pixels,
6702
  o = n[t];
6712
  ratio: i.barPercentage,
6713
  start: h,
6714
  };
6715
+ })(t, e, n, s)
6716
+ : (function (t, e, s, n) {
6717
+ const o = s.barThickness;
6718
+ let a, r;
6719
  return (
6720
+ i(o)
6721
+ ? ((a = e.min * s.categoryPercentage),
6722
+ (r = s.barPercentage))
6723
+ : ((a = o * n), (r = 1)),
6724
+ { chunk: a / n, ratio: r, start: e.pixels[t] - a / 2 }
6725
  );
6726
+ })(t, e, n, s),
6727
+ c = this._getStackIndex(
6728
  this.index,
6729
  this._cachedMeta.stack,
6730
+ o ? t : void 0
6731
  );
6732
+ (l = r.start + r.chunk * c + r.chunk / 2),
6733
+ (h = Math.min(a, r.chunk * r.ratio));
6734
+ } else (l = s.getPixelForValue(this.getParsed(t)[s.axis], t)), (h = Math.min(a, e.min * e.ratio));
6735
+ return { base: l - h / 2, head: l + h / 2, center: l, size: h };
6736
  }
6737
  draw() {
6738
  const t = this._cachedMeta,
6744
  null !== this.getParsed(n)[e.axis] && i[n].draw(this._ctx);
6745
  }
6746
  }
6747
+ (Tn.id = "bar"),
6748
+ (Tn.defaults = {
6749
  datasetElementType: !1,
6750
  dataElementType: "bar",
6751
  categoryPercentage: 0.8,
6758
  },
6759
  },
6760
  }),
6761
+ (Tn.overrides = {
6762
  scales: {
6763
  _index_: { type: "category", offset: !0, grid: { offset: !0 } },
6764
  _value_: { type: "linear", beginAtZero: !0 },
6765
  },
6766
  });
6767
+ class Ln extends Ls {
6768
  initialize() {
6769
  (this.enableOptionSharing = !0), super.initialize();
6770
  }
6778
  const n = super.parseArrayData(t, e, i, s);
6779
  for (let t = 0; t < n.length; t++) {
6780
  const s = e[i + t];
6781
+ n[t]._custom = r(s[2], this.resolveDataElementOptions(t + i).radius);
6782
  }
6783
  return n;
6784
  }
6786
  const n = super.parseObjectData(t, e, i, s);
6787
  for (let t = 0; t < n.length; t++) {
6788
  const s = e[i + t];
6789
+ n[t]._custom = r(
6790
  s && s.r && +s.r,
6791
  this.resolveDataElementOptions(t + i).radius
6792
  );
6819
  updateElements(t, e, i, s) {
6820
  const n = "reset" === s,
6821
  { iScale: o, vScale: a } = this._cachedMeta,
6822
+ { sharedOptions: r, includeOptions: l } = this._getSharedOptions(e, s),
6823
+ h = o.axis,
6824
+ c = a.axis;
6825
+ for (let d = e; d < e + i; d++) {
6826
+ const e = t[d],
6827
+ i = !n && this.getParsed(d),
6828
+ u = {},
6829
+ f = (u[h] = n ? o.getPixelForDecimal(0.5) : o.getPixelForValue(i[h])),
6830
+ g = (u[c] = n ? a.getBasePixel() : a.getPixelForValue(i[c]));
6831
+ (u.skip = isNaN(f) || isNaN(g)),
6832
+ l &&
6833
+ ((u.options =
6834
+ r || this.resolveDataElementOptions(d, e.active ? "active" : s)),
6835
+ n && (u.options.radius = 0)),
6836
+ this.updateElement(e, d, u, s);
 
 
 
 
6837
  }
 
6838
  }
6839
  resolveDataElementOptions(t, e) {
6840
  const i = this.getParsed(t);
6842
  s.$shared && (s = Object.assign({}, s, { $shared: !1 }));
6843
  const n = s.radius;
6844
  return (
6845
+ "active" !== e && (s.radius = 0), (s.radius += r(i && i._custom, n)), s
6846
  );
6847
  }
6848
  }
6849
+ (Ln.id = "bubble"),
6850
+ (Ln.defaults = {
6851
  datasetElementType: !1,
6852
  dataElementType: "point",
6853
  animations: {
6857
  },
6858
  },
6859
  }),
6860
+ (Ln.overrides = {
6861
  scales: { x: { type: "linear" }, y: { type: "linear" } },
6862
  plugins: { tooltip: { callbacks: { title: () => "" } } },
6863
  });
6864
+ class En extends Ls {
6865
  constructor(t, e) {
6866
  super(t, e),
6867
  (this.enableOptionSharing = !0),
6876
  s = this._cachedMeta;
6877
  if (!1 === this._parsing) s._parsed = i;
6878
  else {
6879
+ let o,
6880
+ a,
6881
+ r = (t) => +i[t];
6882
+ if (n(i[t])) {
6883
  const { key: t = "value" } = this._parsing;
6884
+ r = (e) => +y(i[e], t);
6885
  }
6886
+ for (o = t, a = t + e; o < a; ++o) s._parsed[o] = r(o);
6887
  }
6888
  }
6889
  _getRotation() {
6890
+ return H(this.options.rotation - 90);
6891
  }
6892
  _getCircumference() {
6893
+ return H(this.options.circumference);
6894
  }
6895
  _getRotationExtents() {
6896
+ let t = O,
6897
+ e = -O;
6898
  for (let i = 0; i < this.chart.data.datasets.length; ++i)
6899
  if (this.chart.isDatasetVisible(i)) {
6900
  const s = this.chart.getDatasetMeta(i).controller,
6914
  this.getMaxOffset(n) +
6915
  this.options.spacing,
6916
  a = Math.max((Math.min(i.width, i.height) - o) / 2, 0),
6917
+ r = Math.min(l(this.options.cutout, a), 1),
6918
+ c = this._getRingWeight(this.index),
6919
+ { circumference: d, rotation: u } = this._getRotationExtents(),
6920
  {
6921
+ ratioX: f,
6922
+ ratioY: g,
6923
+ offsetX: p,
6924
+ offsetY: m,
6925
  } = (function (t, e, i) {
6926
  let s = 1,
6927
  n = 1,
6928
  o = 0,
6929
  a = 0;
6930
+ if (e < O) {
6931
  const r = t,
6932
  l = r + e,
6933
  h = Math.cos(r),
6935
  d = Math.cos(l),
6936
  u = Math.sin(l),
6937
  f = (t, e, s) =>
6938
+ G(t, r, l, !0) ? 1 : Math.max(e, e * i, s, s * i),
6939
  g = (t, e, s) =>
6940
+ G(t, r, l, !0) ? -1 : Math.min(e, e * i, s, s * i),
6941
  p = f(0, h, d),
6942
+ m = f(L, c, u),
6943
+ b = g(D, h, d),
6944
+ x = g(D + L, c, u);
6945
+ (s = (p - b) / 2),
6946
+ (n = (m - x) / 2),
6947
+ (o = -(p + b) / 2),
6948
+ (a = -(m + x) / 2);
6949
  }
6950
  return { ratioX: s, ratioY: n, offsetX: o, offsetY: a };
6951
+ })(u, d, r),
6952
+ b = (i.width - o) / f,
6953
+ x = (i.height - o) / g,
6954
+ _ = Math.max(Math.min(b, x) / 2, 0),
6955
+ y = h(this.options.radius, _),
6956
+ v = (y - Math.max(y * r, 0)) / this._getVisibleDatasetWeightTotal();
6957
+ (this.offsetX = p * y),
6958
+ (this.offsetY = m * y),
6959
  (s.total = this.calculateTotal()),
6960
+ (this.outerRadius = y - v * this._getRingWeightOffset(this.index)),
6961
+ (this.innerRadius = Math.max(this.outerRadius - v * c, 0)),
6962
  this.updateElements(n, 0, n.length, t);
6963
  }
6964
  _circumference(t, e) {
6970
  null === s._parsed[t] ||
6971
  s.data[t].hidden
6972
  ? 0
6973
+ : this.calculateCircumference((s._parsed[t] * n) / O);
6974
  }
6975
  updateElements(t, e, i, s) {
6976
  const n = "reset" === s,
6982
  c = n && r.animateScale,
6983
  d = c ? 0 : this.innerRadius,
6984
  u = c ? 0 : this.outerRadius,
6985
+ { sharedOptions: f, includeOptions: g } = this._getSharedOptions(e, s);
6986
+ let p,
6987
+ m = this._getRotation();
6988
+ for (p = 0; p < e; ++p) m += this._circumference(p, n);
6989
+ for (p = e; p < e + i; ++p) {
6990
+ const e = this._circumference(p, n),
6991
+ i = t[p],
 
 
6992
  o = {
6993
  x: l + this.offsetX,
6994
  y: h + this.offsetY,
6995
+ startAngle: m,
6996
+ endAngle: m + e,
6997
  circumference: e,
6998
  outerRadius: u,
6999
  innerRadius: d,
7000
  };
7001
+ g &&
7002
  (o.options =
7003
+ f || this.resolveDataElementOptions(p, i.active ? "active" : s)),
7004
+ (m += e),
7005
+ this.updateElement(i, p, o, s);
7006
  }
 
7007
  }
7008
  calculateTotal() {
7009
  const t = this._cachedMeta,
7022
  }
7023
  calculateCircumference(t) {
7024
  const e = this._cachedMeta.total;
7025
+ return e > 0 && !isNaN(t) ? O * (Math.abs(t) / e) : 0;
7026
  }
7027
  getLabelAndValue(t) {
7028
  const e = this._cachedMeta,
7029
  i = this.chart,
7030
  s = i.data.labels || [],
7031
+ n = li(e._parsed[t], i.options.locale);
7032
  return { label: s[t] || "", value: n };
7033
  }
7034
  getMaxBorderWidth(t) {
7063
  return e;
7064
  }
7065
  _getRingWeight(t) {
7066
+ return Math.max(r(this.chart.data.datasets[t].weight, 1), 0);
7067
  }
7068
  _getVisibleDatasetWeightTotal() {
7069
  return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;
7070
  }
7071
  }
7072
+ (En.id = "doughnut"),
7073
+ (En.defaults = {
7074
  datasetElementType: !1,
7075
  dataElementType: "arc",
7076
  animation: { animateRotate: !0, animateScale: !1 },
7098
  spacing: 0,
7099
  indexAxis: "r",
7100
  }),
7101
+ (En.descriptors = {
7102
  _scriptable: (t) => "spacing" !== t,
7103
  _indexable: (t) => "spacing" !== t,
7104
  }),
7105
+ (En.overrides = {
7106
  aspectRatio: 1,
7107
  plugins: {
7108
  legend: {
7139
  label(t) {
7140
  let e = t.label;
7141
  const i = ": " + t.formattedValue;
7142
+ return s(e) ? ((e = e.slice()), (e[0] += i)) : (e += i), e;
7143
  },
7144
  },
7145
  },
7146
  },
7147
  });
7148
+ class Rn extends Ls {
7149
  initialize() {
7150
+ (this.enableOptionSharing = !0),
7151
+ (this.supportsDecimation = !0),
7152
+ super.initialize();
7153
  }
7154
  update(t) {
7155
  const e = this._cachedMeta,
7156
  { dataset: i, data: s = [], _dataset: n } = e,
7157
  o = this.chart._animationsDisabled;
7158
+ let { start: a, count: r } = gt(e, s, o);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7159
  (this._drawStart = a),
7160
  (this._drawCount = r),
7161
+ pt(e) && ((a = 0), (r = s.length)),
 
 
 
 
 
 
 
 
 
 
7162
  (i._chart = this.chart),
7163
  (i._datasetIndex = this.index),
7164
  (i._decimated = !!n._decimated),
7169
  this.updateElement(i, void 0, { animated: !o, options: l }, t),
7170
  this.updateElements(s, a, r, t);
7171
  }
7172
+ updateElements(t, e, s, n) {
7173
+ const o = "reset" === n,
7174
+ { iScale: a, vScale: r, _stacked: l, _dataset: h } = this._cachedMeta,
7175
+ { sharedOptions: c, includeOptions: d } = this._getSharedOptions(e, n),
7176
+ u = a.axis,
7177
+ f = r.axis,
 
 
7178
  { spanGaps: g, segment: p } = this.options,
7179
+ m = B(g) ? g : Number.POSITIVE_INFINITY,
7180
+ b = this.chart._animationsDisabled || o || "none" === n;
7181
+ let x = e > 0 && this.getParsed(e - 1);
7182
+ for (let g = e; g < e + s; ++g) {
7183
+ const e = t[g],
7184
+ s = this.getParsed(g),
7185
+ _ = b ? e : {},
7186
+ y = i(s[f]),
7187
+ v = (_[u] = a.getPixelForValue(s[u], g)),
7188
+ w = (_[f] =
7189
+ o || y
7190
+ ? r.getBasePixel()
7191
+ : r.getPixelForValue(l ? this.applyStack(r, s, l) : s[f], g));
7192
+ (_.skip = isNaN(v) || isNaN(w) || y),
7193
+ (_.stop = g > 0 && Math.abs(s[u] - x[u]) > m),
7194
+ p && ((_.parsed = s), (_.raw = h.data[g])),
7195
  d &&
7196
+ (_.options =
7197
+ c || this.resolveDataElementOptions(g, e.active ? "active" : n)),
7198
+ b || this.updateElement(e, g, _, n),
7199
+ (x = s);
7200
  }
 
7201
  }
7202
  getMaxOverflow() {
7203
  const t = this._cachedMeta,
7215
  super.draw();
7216
  }
7217
  }
7218
+ (Rn.id = "line"),
7219
+ (Rn.defaults = {
7220
  datasetElementType: "line",
7221
  dataElementType: "point",
7222
  showLine: !0,
7223
  spanGaps: !1,
7224
  }),
7225
+ (Rn.overrides = {
7226
  scales: { _index_: { type: "category" }, _value_: { type: "linear" } },
7227
  });
7228
+ class In extends Ls {
7229
  constructor(t, e) {
7230
  super(t, e), (this.innerRadius = void 0), (this.outerRadius = void 0);
7231
  }
7233
  const e = this._cachedMeta,
7234
  i = this.chart,
7235
  s = i.data.labels || [],
7236
+ n = li(e._parsed[t].r, i.options.locale);
7237
  return { label: s[t] || "", value: n };
7238
  }
7239
+ parseObjectData(t, e, i, s) {
7240
+ return Ue.bind(this)(t, e, i, s);
7241
+ }
7242
  update(t) {
7243
  const e = this._cachedMeta.data;
7244
  this._updateRadius(), this.updateElements(e, 0, e.length, t);
7245
  }
7246
+ getMinMax() {
7247
+ const t = this._cachedMeta,
7248
+ e = { min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY };
7249
+ return (
7250
+ t.data.forEach((t, i) => {
7251
+ const s = this.getParsed(i).r;
7252
+ !isNaN(s) &&
7253
+ this.chart.getDataVisibility(i) &&
7254
+ (s < e.min && (e.min = s), s > e.max && (e.max = s));
7255
+ }),
7256
+ e
7257
+ );
7258
+ }
7259
  _updateRadius() {
7260
  const t = this.chart,
7261
  e = t.chartArea,
7275
  updateElements(t, e, i, s) {
7276
  const n = "reset" === s,
7277
  o = this.chart,
7278
+ a = o.options.animation,
7279
+ r = this._cachedMeta.rScale,
7280
+ l = r.xCenter,
7281
+ h = r.yCenter,
7282
+ c = r.getIndexAngle(0) - 0.5 * D;
7283
+ let d,
7284
+ u = c;
7285
+ const f = 360 / this.countVisibleElements();
7286
+ for (d = 0; d < e; ++d) u += this._computeAngle(d, s, f);
7287
+ for (d = e; d < e + i; d++) {
7288
+ const e = t[d];
7289
+ let i = u,
7290
+ g = u + this._computeAngle(d, s, f),
7291
+ p = o.getDataVisibility(d)
7292
+ ? r.getDistanceFromCenterForValue(this.getParsed(d).r)
 
7293
  : 0;
7294
+ (u = g),
7295
+ n && (a.animateScale && (p = 0), a.animateRotate && (i = g = c));
7296
+ const m = {
7297
+ x: l,
7298
+ y: h,
7299
  innerRadius: 0,
7300
+ outerRadius: p,
7301
  startAngle: i,
7302
+ endAngle: g,
7303
+ options: this.resolveDataElementOptions(d, e.active ? "active" : s),
7304
  };
7305
+ this.updateElement(e, d, m, s);
7306
  }
7307
  }
7308
  countVisibleElements() {
7309
+ const t = this._cachedMeta;
7310
+ let e = 0;
 
7311
  return (
7312
+ t.data.forEach((t, i) => {
7313
+ !isNaN(this.getParsed(i).r) && this.chart.getDataVisibility(i) && e++;
7314
  }),
7315
+ e
7316
  );
7317
  }
7318
  _computeAngle(t, e, i) {
7319
  return this.chart.getDataVisibility(t)
7320
+ ? H(this.resolveDataElementOptions(t, e).angle || i)
7321
  : 0;
7322
  }
7323
  }
7324
+ (In.id = "polarArea"),
7325
+ (In.defaults = {
7326
  dataElementType: "arc",
7327
  animation: { animateRotate: !0, animateScale: !0 },
7328
  animations: {
7341
  indexAxis: "r",
7342
  startAngle: 0,
7343
  }),
7344
+ (In.overrides = {
7345
  aspectRatio: 1,
7346
  plugins: {
7347
  legend: {
7391
  },
7392
  },
7393
  });
7394
+ class zn extends En {}
7395
+ (zn.id = "pie"),
7396
+ (zn.defaults = {
7397
  cutout: 0,
7398
  rotation: 0,
7399
  circumference: 360,
7400
  radius: "100%",
7401
  });
7402
+ class Fn extends Ls {
7403
  getLabelAndValue(t) {
7404
  const e = this._cachedMeta.vScale,
7405
  i = this.getParsed(t);
7408
  value: "" + e.getLabelForValue(i[e.axis]),
7409
  };
7410
  }
7411
+ parseObjectData(t, e, i, s) {
7412
+ return Ue.bind(this)(t, e, i, s);
7413
+ }
7414
  update(t) {
7415
  const e = this._cachedMeta,
7416
  i = e.dataset,
7425
  this.updateElements(s, 0, s.length, t);
7426
  }
7427
  updateElements(t, e, i, s) {
7428
+ const n = this._cachedMeta.rScale,
7429
+ o = "reset" === s;
7430
+ for (let a = e; a < e + i; a++) {
7431
+ const e = t[a],
7432
+ i = this.resolveDataElementOptions(a, e.active ? "active" : s),
7433
+ r = n.getPointPositionForValue(a, this.getParsed(a).r),
7434
+ l = o ? n.xCenter : r.x,
7435
+ h = o ? n.yCenter : r.y,
7436
+ c = {
7437
+ x: l,
7438
+ y: h,
7439
+ angle: r.angle,
7440
+ skip: isNaN(l) || isNaN(h),
 
7441
  options: i,
7442
  };
7443
+ this.updateElement(e, a, c, s);
7444
  }
7445
  }
7446
  }
7447
+ (Fn.id = "radar"),
7448
+ (Fn.defaults = {
7449
  datasetElementType: "line",
7450
  dataElementType: "point",
7451
  indexAxis: "r",
7452
  showLine: !0,
7453
  elements: { line: { fill: "start" } },
7454
  }),
7455
+ (Fn.overrides = {
7456
  aspectRatio: 1,
7457
  scales: { r: { type: "radialLinear" } },
7458
  });
7459
+ class Vn extends Ls {
7460
+ update(t) {
7461
+ const e = this._cachedMeta,
7462
+ { data: i = [] } = e,
7463
+ s = this.chart._animationsDisabled;
7464
+ let { start: n, count: o } = gt(e, i, s);
7465
+ if (
7466
+ ((this._drawStart = n),
7467
+ (this._drawCount = o),
7468
+ pt(e) && ((n = 0), (o = i.length)),
7469
+ this.options.showLine)
7470
+ ) {
7471
+ const { dataset: n, _dataset: o } = e;
7472
+ (n._chart = this.chart),
7473
+ (n._datasetIndex = this.index),
7474
+ (n._decimated = !!o._decimated),
7475
+ (n.points = i);
7476
+ const a = this.resolveDatasetElementOptions(t);
7477
+ (a.segment = this.options.segment),
7478
+ this.updateElement(n, void 0, { animated: !s, options: a }, t);
7479
+ }
7480
+ this.updateElements(i, n, o, t);
7481
+ }
7482
+ addElements() {
7483
+ const { showLine: t } = this.options;
7484
+ !this.datasetElementType &&
7485
+ t &&
7486
+ (this.datasetElementType = Us.getElement("line")),
7487
+ super.addElements();
7488
+ }
7489
+ updateElements(t, e, s, n) {
7490
+ const o = "reset" === n,
7491
+ { iScale: a, vScale: r, _stacked: l, _dataset: h } = this._cachedMeta,
7492
+ c = this.resolveDataElementOptions(e, n),
7493
+ d = this.getSharedOptions(c),
7494
+ u = this.includeOptions(n, d),
7495
+ f = a.axis,
7496
+ g = r.axis,
7497
+ { spanGaps: p, segment: m } = this.options,
7498
+ b = B(p) ? p : Number.POSITIVE_INFINITY,
7499
+ x = this.chart._animationsDisabled || o || "none" === n;
7500
+ let _ = e > 0 && this.getParsed(e - 1);
7501
+ for (let c = e; c < e + s; ++c) {
7502
+ const e = t[c],
7503
+ s = this.getParsed(c),
7504
+ p = x ? e : {},
7505
+ y = i(s[g]),
7506
+ v = (p[f] = a.getPixelForValue(s[f], c)),
7507
+ w = (p[g] =
7508
+ o || y
7509
+ ? r.getBasePixel()
7510
+ : r.getPixelForValue(l ? this.applyStack(r, s, l) : s[g], c));
7511
+ (p.skip = isNaN(v) || isNaN(w) || y),
7512
+ (p.stop = c > 0 && Math.abs(s[f] - _[f]) > b),
7513
+ m && ((p.parsed = s), (p.raw = h.data[c])),
7514
+ u &&
7515
+ (p.options =
7516
+ d || this.resolveDataElementOptions(c, e.active ? "active" : n)),
7517
+ x || this.updateElement(e, c, p, n),
7518
+ (_ = s);
7519
+ }
7520
+ this.updateSharedOptions(d, n, c);
7521
+ }
7522
+ getMaxOverflow() {
7523
+ const t = this._cachedMeta,
7524
+ e = t.data || [];
7525
+ if (!this.options.showLine) {
7526
+ let t = 0;
7527
+ for (let i = e.length - 1; i >= 0; --i)
7528
+ t = Math.max(t, e[i].size(this.resolveDataElementOptions(i)) / 2);
7529
+ return t > 0 && t;
7530
+ }
7531
+ const i = t.dataset,
7532
+ s = (i.options && i.options.borderWidth) || 0;
7533
+ if (!e.length) return s;
7534
+ const n = e[0].size(this.resolveDataElementOptions(0)),
7535
+ o = e[e.length - 1].size(this.resolveDataElementOptions(e.length - 1));
7536
+ return Math.max(s, n, o) / 2;
7537
+ }
7538
+ }
7539
+ (Vn.id = "scatter"),
7540
+ (Vn.defaults = {
7541
+ datasetElementType: !1,
7542
+ dataElementType: "point",
7543
+ showLine: !1,
7544
+ fill: !1,
7545
+ }),
7546
+ (Vn.overrides = {
7547
  interaction: { mode: "point" },
7548
  plugins: {
7549
  tooltip: {
7555
  },
7556
  scales: { x: { type: "linear" }, y: { type: "linear" } },
7557
  });
7558
+ var Bn = Object.freeze({
7559
  __proto__: null,
7560
+ BarController: Tn,
7561
+ BubbleController: Ln,
7562
+ DoughnutController: En,
7563
+ LineController: Rn,
7564
+ PolarAreaController: In,
7565
+ PieController: zn,
7566
+ RadarController: Fn,
7567
+ ScatterController: Vn,
7568
  });
7569
+ function Nn(t, e, i) {
7570
  const {
7571
  startAngle: s,
7572
  pixelMargin: n,
7580
  t.arc(o, a, r, s - h, i + h),
7581
  l > n
7582
  ? ((h = n / l), t.arc(o, a, l, i + h, s - h, !0))
7583
+ : t.arc(o, a, n, i + L, s - L),
7584
  t.closePath(),
7585
  t.clip();
7586
  }
7587
+ function Wn(t, e, i, s) {
7588
+ const n = ui(t.options.borderRadius, [
7589
  "outerStart",
7590
  "outerEnd",
7591
  "innerStart",
7595
  a = Math.min(o, (s * e) / 2),
7596
  r = (t) => {
7597
  const e = ((i - Math.min(o, t)) * s) / 2;
7598
+ return Z(t, 0, Math.min(o, e));
7599
  };
7600
  return {
7601
  outerStart: r(n.outerStart),
7602
  outerEnd: r(n.outerEnd),
7603
+ innerStart: Z(n.innerStart, 0, a),
7604
+ innerEnd: Z(n.innerEnd, 0, a),
7605
  };
7606
  }
7607
+ function jn(t, e, i, s) {
7608
  return { x: i + t * Math.cos(e), y: s + t * Math.sin(e) };
7609
  }
7610
+ function Hn(t, e, i, s, n, o) {
7611
+ const { x: a, y: r, startAngle: l, pixelMargin: h, innerRadius: c } = e,
7612
+ d = Math.max(e.outerRadius + s + i - h, 0),
7613
+ u = c > 0 ? c + s + i + h : 0;
7614
+ let f = 0;
7615
+ const g = n - l;
7616
  if (s) {
7617
+ const t = ((c > 0 ? c - s : 0) + (d > 0 ? d - s : 0)) / 2;
7618
+ f = (g - (0 !== t ? (g * t) / (t + s) : g)) / 2;
7619
  }
7620
+ const p = (g - Math.max(0.001, g * d - i / D) / d) / 2,
7621
+ m = l + p + f,
7622
+ b = n - p - f,
7623
  {
7624
  outerStart: x,
7625
+ outerEnd: _,
7626
+ innerStart: y,
7627
+ innerEnd: v,
7628
+ } = Wn(e, u, d, b - m),
7629
+ w = d - x,
7630
+ M = d - _,
7631
+ k = m + x / w,
7632
+ S = b - _ / M,
7633
+ P = u + y,
7634
+ O = u + v,
7635
+ C = m + y / P,
7636
+ A = b - v / O;
7637
+ if ((t.beginPath(), o)) {
7638
+ if ((t.arc(a, r, d, k, S), _ > 0)) {
7639
+ const e = jn(M, S, a, r);
7640
+ t.arc(e.x, e.y, _, S, b + L);
7641
+ }
7642
+ const e = jn(O, b, a, r);
7643
+ if ((t.lineTo(e.x, e.y), v > 0)) {
7644
+ const e = jn(O, A, a, r);
7645
+ t.arc(e.x, e.y, v, b + L, A + Math.PI);
7646
+ }
7647
+ if ((t.arc(a, r, u, b - v / u, m + y / u, !0), y > 0)) {
7648
+ const e = jn(P, C, a, r);
7649
+ t.arc(e.x, e.y, y, C + Math.PI, m - L);
7650
+ }
7651
+ const i = jn(w, m, a, r);
7652
+ if ((t.lineTo(i.x, i.y), x > 0)) {
7653
+ const e = jn(w, k, a, r);
7654
+ t.arc(e.x, e.y, x, m - L, k);
7655
+ }
7656
+ } else {
7657
+ t.moveTo(a, r);
7658
+ const e = Math.cos(k) * d + a,
7659
+ i = Math.sin(k) * d + r;
7660
+ t.lineTo(e, i);
7661
+ const s = Math.cos(S) * d + a,
7662
+ n = Math.sin(S) * d + r;
7663
+ t.lineTo(s, n);
7664
  }
7665
  t.closePath();
7666
  }
7667
+ function $n(t, e, i, s, n, o) {
7668
+ const { options: a } = e,
7669
+ { borderWidth: r, borderJoinStyle: l } = a,
7670
+ h = "inner" === a.borderAlign;
7671
+ r &&
7672
+ (h
7673
+ ? ((t.lineWidth = 2 * r), (t.lineJoin = l || "round"))
7674
+ : ((t.lineWidth = r), (t.lineJoin = l || "bevel")),
7675
  e.fullCircles &&
7676
  (function (t, e, i) {
7677
  const {
7685
  h = e.innerRadius + a;
7686
  let c;
7687
  for (
7688
+ i && Nn(t, e, o + O),
7689
  t.beginPath(),
7690
+ t.arc(s, n, h, o + O, o, !0),
7691
  c = 0;
7692
  c < r;
7693
  ++c
7694
  )
7695
  t.stroke();
7696
+ for (t.beginPath(), t.arc(s, n, l, o, o + O), c = 0; c < r; ++c)
7697
  t.stroke();
7698
+ })(t, e, h),
7699
+ h && Nn(t, e, n),
7700
+ Hn(t, e, i, s, n, o),
7701
  t.stroke());
7702
  }
7703
+ class Yn extends Es {
7704
  constructor(t) {
7705
  super(),
7706
  (this.options = void 0),
7715
  }
7716
  inRange(t, e, i) {
7717
  const s = this.getProps(["x", "y"], i),
7718
+ { angle: n, distance: o } = U(s, { x: t, y: e }),
7719
  {
7720
  startAngle: a,
7721
+ endAngle: l,
7722
+ innerRadius: h,
7723
+ outerRadius: c,
7724
+ circumference: d,
7725
  } = this.getProps(
7726
  [
7727
  "startAngle",
7732
  ],
7733
  i
7734
  ),
7735
+ u = this.options.spacing / 2,
7736
+ f = r(d, l - a) >= O || G(n, a, l),
7737
+ g = Q(o, h + u, c + u);
7738
+ return f && g;
7739
  }
7740
  getCenterPoint(t) {
7741
  const {
7768
  draw(t) {
7769
  const { options: e, circumference: i } = this,
7770
  s = (e.offset || 0) / 2,
7771
+ n = (e.spacing || 0) / 2,
7772
+ o = e.circular;
7773
  if (
7774
  ((this.pixelMargin = "inner" === e.borderAlign ? 0.33 : 0),
7775
+ (this.fullCircles = i > O ? Math.floor(i / O) : 0),
7776
  0 === i || this.innerRadius < 0 || this.outerRadius < 0)
7777
  )
7778
  return;
7779
  t.save();
7780
+ let a = 0;
7781
  if (s) {
7782
+ a = s / 2;
7783
  const e = (this.startAngle + this.endAngle) / 2;
7784
+ t.translate(Math.cos(e) * a, Math.sin(e) * a),
7785
+ this.circumference >= D && (a = s);
7786
  }
7787
  (t.fillStyle = e.backgroundColor), (t.strokeStyle = e.borderColor);
7788
+ const r = (function (t, e, i, s, n) {
7789
+ const { fullCircles: o, startAngle: a, circumference: r } = e;
7790
+ let l = e.endAngle;
7791
+ if (o) {
7792
+ Hn(t, e, i, s, a + O, n);
7793
+ for (let e = 0; e < o; ++e) t.fill();
7794
+ isNaN(r) || ((l = a + (r % O)), r % O == 0 && (l += O));
7795
  }
7796
+ return Hn(t, e, i, s, l, n), t.fill(), l;
7797
+ })(t, this, a, n, o);
7798
+ $n(t, this, a, n, r, o), t.restore();
7799
  }
7800
  }
7801
+ function Un(t, e, i = e) {
7802
+ (t.lineCap = r(i.borderCapStyle, e.borderCapStyle)),
7803
+ t.setLineDash(r(i.borderDash, e.borderDash)),
7804
+ (t.lineDashOffset = r(i.borderDashOffset, e.borderDashOffset)),
7805
+ (t.lineJoin = r(i.borderJoinStyle, e.borderJoinStyle)),
7806
+ (t.lineWidth = r(i.borderWidth, e.borderWidth)),
7807
+ (t.strokeStyle = r(i.borderColor, e.borderColor));
7808
  }
7809
+ function Xn(t, e, i) {
7810
  t.lineTo(i.x, i.y);
7811
  }
7812
+ function qn(t, e, i = {}) {
7813
  const s = t.length,
7814
  { start: n = 0, end: o = s - 1 } = i,
7815
  { start: a, end: r } = e,
7823
  ilen: h < l && !c ? s + h - l : h - l,
7824
  };
7825
  }
7826
+ function Kn(t, e, i, s) {
7827
  const { points: n, options: o } = e,
7828
+ { count: a, start: r, loop: l, ilen: h } = qn(n, i, s),
7829
  c = (function (t) {
7830
  return t.stepped
7831
+ ? Oe
7832
  : t.tension || "monotone" === t.cubicInterpolationMode
7833
+ ? Ce
7834
+ : Xn;
7835
  })(o);
7836
  let d,
7837
  u,
7844
  (f = u));
7845
  return l && ((u = n[(r + (p ? h : 0)) % a]), c(t, f, u, p, o.stepped)), !!l;
7846
  }
7847
+ function Gn(t, e, i, s) {
7848
  const n = e.points,
7849
+ { count: o, start: a, ilen: r } = qn(n, i, s),
7850
  { move: l = !0, reverse: h } = s || {};
7851
  let c,
7852
  d,
7855
  g,
7856
  p,
7857
  m = 0,
7858
+ b = 0;
7859
+ const x = (t) => (a + (h ? r - t : t)) % o,
7860
  _ = () => {
7861
  f !== g && (t.lineTo(m, g), t.lineTo(m, f), t.lineTo(m, p));
7862
  };
7863
+ for (l && ((d = n[x(0)]), t.moveTo(d.x, d.y)), c = 0; c <= r; ++c) {
7864
+ if (((d = n[x(c)]), d.skip)) continue;
7865
  const e = d.x,
7866
  i = d.y,
7867
  s = 0 | e;
7868
  s === u
7869
+ ? (i < f ? (f = i) : i > g && (g = i), (m = (b * m + e) / ++b))
7870
+ : (_(), t.lineTo(e, i), (u = s), (b = 0), (f = g = i)),
7871
  (p = i);
7872
  }
7873
  _();
7874
  }
7875
+ function Zn(t) {
7876
  const e = t.options,
7877
  i = e.borderDash && e.borderDash.length;
7878
  return !(
7883
  e.stepped ||
7884
  i
7885
  )
7886
+ ? Gn
7887
+ : Kn;
7888
  }
7889
+ (Yn.id = "arc"),
7890
+ (Yn.defaults = {
7891
  borderAlign: "center",
7892
  borderColor: "#fff",
7893
  borderJoinStyle: void 0,
7896
  offset: 0,
7897
  spacing: 0,
7898
  angle: void 0,
7899
+ circular: !0,
7900
  }),
7901
+ (Yn.defaultRoutes = { backgroundColor: "backgroundColor" });
7902
+ const Jn = "function" == typeof Path2D;
7903
+ function Qn(t, e, i, s) {
7904
+ Jn && !e.options.segment
7905
  ? (function (t, e, i, s) {
7906
  let n = e._path;
7907
  n || ((n = e._path = new Path2D()), e.path(n, i, s) && n.closePath()),
7908
+ Un(t, e.options),
7909
  t.stroke(n);
7910
  })(t, e, i, s)
7911
  : (function (t, e, i, s) {
7912
  const { segments: n, options: o } = e,
7913
+ a = Zn(e);
7914
  for (const r of n)
7915
+ Un(t, o, r.style),
7916
  t.beginPath(),
7917
  a(t, e, r, { start: i, end: i + s - 1 }) && t.closePath(),
7918
  t.stroke();
7919
  })(t, e, i, s);
7920
  }
7921
+ class to extends Es {
7922
  constructor(t) {
7923
  super(),
7924
  (this.animated = !0),
7942
  !this._pointsUpdated
7943
  ) {
7944
  const s = i.spanGaps ? this._loop : this._fullLoop;
7945
+ Qe(this._points, i, t, s, e), (this._pointsUpdated = !0);
7946
  }
7947
  }
7948
  set points(t) {
7956
  }
7957
  get segments() {
7958
  return (
7959
+ this._segments || (this._segments = Di(this, this.options.segment))
7960
  );
7961
  }
7962
  first() {
7974
  const i = this.options,
7975
  s = t[e],
7976
  n = this.points,
7977
+ o = Pi(this, { property: e, start: s, end: s });
7978
  if (!o.length) return;
7979
  const a = [],
7980
  r = (function (t) {
7981
  return t.stepped
7982
+ ? oi
7983
  : t.tension || "monotone" === t.cubicInterpolationMode
7984
+ ? ai
7985
+ : ni;
7986
  })(i);
7987
  let l, h;
7988
  for (l = 0, h = o.length; l < h; ++l) {
7999
  return 1 === a.length ? a[0] : a;
8000
  }
8001
  pathSegment(t, e, i) {
8002
+ return Zn(this)(t, this, e, i);
8003
  }
8004
  path(t, e, i) {
8005
  const s = this.segments,
8006
+ n = Zn(this);
8007
  let o = this._loop;
8008
  (e = e || 0), (i = i || this.points.length - e);
8009
  for (const a of s) o &= n(t, this, a, { start: e, end: e + i - 1 });
8013
  const n = this.options || {};
8014
  (this.points || []).length &&
8015
  n.borderWidth &&
8016
+ (t.save(), Qn(t, this, i, s), t.restore()),
8017
  this.animated && ((this._pointsUpdated = !1), (this._path = void 0));
8018
  }
8019
  }
8020
+ function eo(t, e, i, s) {
8021
  const n = t.options,
8022
  { [i]: o } = t.getProps([i], s);
8023
  return Math.abs(e - o) < n.radius + n.hitRadius;
8024
  }
8025
+ (to.id = "line"),
8026
+ (to.defaults = {
8027
  borderCapStyle: "butt",
8028
  borderDash: [],
8029
  borderDashOffset: 0,
8036
  stepped: !1,
8037
  tension: 0,
8038
  }),
8039
+ (to.defaultRoutes = {
8040
  backgroundColor: "backgroundColor",
8041
  borderColor: "borderColor",
8042
  }),
8043
+ (to.descriptors = {
8044
  _scriptable: !0,
8045
  _indexable: (t) => "borderDash" !== t && "fill" !== t,
8046
  });
8047
+ class io extends Es {
8048
  constructor(t) {
8049
  super(),
8050
  (this.options = void 0),
8062
  );
8063
  }
8064
  inXRange(t, e) {
8065
+ return eo(this, t, "x", e);
8066
  }
8067
  inYRange(t, e) {
8068
+ return eo(this, t, "y", e);
8069
  }
8070
  getCenterPoint(t) {
8071
  const { x: e, y: i } = this.getProps(["x", "y"], t);
8080
  const i = this.options;
8081
  this.skip ||
8082
  i.radius < 0.1 ||
8083
+ !Se(this, e, this.size(i) / 2) ||
8084
  ((t.strokeStyle = i.borderColor),
8085
  (t.lineWidth = i.borderWidth),
8086
  (t.fillStyle = i.backgroundColor),
8087
+ Me(t, i, this.x, this.y));
8088
  }
8089
  getRange() {
8090
  const t = this.options || {};
8091
  return t.radius + t.hitRadius;
8092
  }
8093
  }
8094
+ function so(t, e) {
8095
  const {
8096
  x: i,
8097
  y: s,
8115
  { left: r, top: h, right: l, bottom: c }
8116
  );
8117
  }
8118
+ function no(t, e, i, s) {
8119
+ return t ? 0 : Z(e, i, s);
8120
  }
8121
+ function oo(t) {
8122
+ const e = so(t),
8123
  i = e.right - e.left,
8124
  s = e.bottom - e.top,
8125
+ o = (function (t, e, i) {
8126
  const s = t.options.borderWidth,
8127
  n = t.borderSkipped,
8128
+ o = fi(s);
8129
  return {
8130
+ t: no(n.top, o.top, 0, i),
8131
+ r: no(n.right, o.right, 0, e),
8132
+ b: no(n.bottom, o.bottom, 0, i),
8133
+ l: no(n.left, o.left, 0, e),
8134
  };
8135
  })(t, i / 2, s / 2),
8136
+ a = (function (t, e, i) {
8137
  const { enableBorderRadius: s } = t.getProps(["enableBorderRadius"]),
8138
+ o = t.options.borderRadius,
8139
+ a = gi(o),
8140
+ r = Math.min(e, i),
8141
+ l = t.borderSkipped,
8142
+ h = s || n(o);
8143
  return {
8144
+ topLeft: no(!h || l.top || l.left, a.topLeft, 0, r),
8145
+ topRight: no(!h || l.top || l.right, a.topRight, 0, r),
8146
+ bottomLeft: no(!h || l.bottom || l.left, a.bottomLeft, 0, r),
8147
+ bottomRight: no(!h || l.bottom || l.right, a.bottomRight, 0, r),
8148
  };
8149
  })(t, i / 2, s / 2);
8150
  return {
8151
+ outer: { x: e.left, y: e.top, w: i, h: s, radius: a },
8152
  inner: {
8153
+ x: e.left + o.l,
8154
+ y: e.top + o.t,
8155
+ w: i - o.l - o.r,
8156
+ h: s - o.t - o.b,
8157
  radius: {
8158
+ topLeft: Math.max(0, a.topLeft - Math.max(o.t, o.l)),
8159
+ topRight: Math.max(0, a.topRight - Math.max(o.t, o.r)),
8160
+ bottomLeft: Math.max(0, a.bottomLeft - Math.max(o.b, o.l)),
8161
+ bottomRight: Math.max(0, a.bottomRight - Math.max(o.b, o.r)),
8162
  },
8163
  },
8164
  };
8165
  }
8166
+ function ao(t, e, i, s) {
8167
  const n = null === e,
8168
  o = null === i,
8169
+ a = t && !(n && o) && so(t, s);
8170
+ return a && (n || Q(e, a.left, a.right)) && (o || Q(i, a.top, a.bottom));
8171
  }
8172
+ function ro(t, e) {
8173
  t.rect(e.x, e.y, e.w, e.h);
8174
  }
8175
+ function lo(t, e, i = {}) {
8176
  const s = t.x !== i.x ? -e : 0,
8177
  n = t.y !== i.y ? -e : 0,
8178
  o = (t.x + t.w !== i.x + i.w ? e : 0) - s,
8179
  a = (t.y + t.h !== i.y + i.h ? e : 0) - n;
8180
  return { x: t.x + s, y: t.y + n, w: t.w + o, h: t.h + a, radius: t.radius };
8181
  }
8182
+ (io.id = "point"),
8183
+ (io.defaults = {
8184
  borderWidth: 1,
8185
  hitRadius: 1,
8186
  hoverBorderWidth: 1,
8189
  radius: 3,
8190
  rotation: 0,
8191
  }),
8192
+ (io.defaultRoutes = {
8193
  backgroundColor: "backgroundColor",
8194
  borderColor: "borderColor",
8195
  });
8196
+ class ho extends Es {
8197
  constructor(t) {
8198
  super(),
8199
  (this.options = void 0),
8209
  inflateAmount: e,
8210
  options: { borderColor: i, backgroundColor: s },
8211
  } = this,
8212
+ { inner: n, outer: o } = oo(this),
8213
  a =
8214
  (r = o.radius).topLeft || r.topRight || r.bottomLeft || r.bottomRight
8215
+ ? Le
8216
+ : ro;
8217
  var r;
8218
  t.save(),
8219
  (o.w === n.w && o.h === n.h) ||
8220
  (t.beginPath(),
8221
+ a(t, lo(o, e, n)),
8222
  t.clip(),
8223
+ a(t, lo(n, -e, o)),
8224
  (t.fillStyle = i),
8225
  t.fill("evenodd")),
8226
  t.beginPath(),
8227
+ a(t, lo(n, e)),
8228
  (t.fillStyle = s),
8229
  t.fill(),
8230
  t.restore();
8231
  }
8232
  inRange(t, e, i) {
8233
+ return ao(this, t, e, i);
8234
  }
8235
  inXRange(t, e) {
8236
+ return ao(this, t, null, e);
8237
  }
8238
  inYRange(t, e) {
8239
+ return ao(this, null, t, e);
8240
  }
8241
  getCenterPoint(t) {
8242
  const {
8251
  return "x" === t ? this.width / 2 : this.height / 2;
8252
  }
8253
  }
8254
+ (ho.id = "bar"),
8255
+ (ho.defaults = {
8256
  borderSkipped: "start",
8257
  borderWidth: 0,
8258
  borderRadius: 0,
8259
  inflateAmount: "auto",
8260
  pointStyle: void 0,
8261
  }),
8262
+ (ho.defaultRoutes = {
8263
  backgroundColor: "backgroundColor",
8264
  borderColor: "borderColor",
8265
  });
8266
+ var co = Object.freeze({
8267
  __proto__: null,
8268
+ ArcElement: Yn,
8269
+ LineElement: to,
8270
+ PointElement: io,
8271
+ BarElement: ho,
8272
  });
8273
+ function uo(t) {
8274
  if (t._decimated) {
8275
  const e = t._data;
8276
  delete t._decimated,
8278
  Object.defineProperty(t, "data", { value: e });
8279
  }
8280
  }
8281
+ function fo(t) {
8282
  t.data.datasets.forEach((t) => {
8283
+ uo(t);
8284
  });
8285
  }
8286
+ var go = {
8287
  id: "decimation",
8288
  defaults: { algorithm: "min-max", enabled: !1 },
8289
+ beforeElementsUpdate: (t, e, s) => {
8290
+ if (!s.enabled) return void fo(t);
8291
+ const n = t.width;
8292
+ t.data.datasets.forEach((e, o) => {
8293
+ const { _data: a, indexAxis: r } = e,
8294
+ l = t.getDatasetMeta(o),
8295
+ h = a || e.data;
8296
+ if ("y" === bi([r, t.options.indexAxis])) return;
8297
+ if (!l.controller.supportsDecimation) return;
8298
+ const c = t.scales[l.xAxisID];
8299
+ if ("linear" !== c.type && "time" !== c.type) return;
8300
  if (t.options.parsing) return;
8301
+ let { start: d, count: u } = (function (t, e) {
8302
  const i = e.length;
8303
  let s,
8304
  n = 0;
8310
  maxDefined: h,
8311
  } = o.getUserBounds();
8312
  return (
8313
+ l && (n = Z(et(e, o.axis, a).lo, 0, i - 1)),
8314
+ (s = h ? Z(et(e, o.axis, r).hi + 1, n, i) - n : i - n),
8315
  { start: n, count: s }
8316
  );
8317
+ })(l, h);
8318
+ if (u <= (s.threshold || 4 * n)) return void uo(e);
8319
+ let f;
8320
  switch (
8321
+ (i(a) &&
8322
+ ((e._data = h),
8323
  delete e.data,
8324
  Object.defineProperty(e, "data", {
8325
  configurable: !0,
8331
  this._data = t;
8332
  },
8333
  })),
8334
+ s.algorithm)
8335
  ) {
8336
  case "lttb":
8337
+ f = (function (t, e, i, s, n) {
8338
  const o = n.samples || s;
8339
  if (o >= i) return t.slice(e, e + i);
8340
  const a = [],
8353
  o = 0;
8354
  const h = Math.floor((c + 1) * r) + 1 + e,
8355
  m = Math.min(Math.floor((c + 2) * r) + 1, i) + e,
8356
+ b = m - h;
8357
  for (s = h; s < m; s++) (n += t[s].x), (o += t[s].y);
8358
+ (n /= b), (o /= b);
8359
+ const x = Math.floor(c * r) + 1 + e,
8360
  _ = Math.min(Math.floor((c + 1) * r) + 1, i) + e,
8361
  { x: y, y: v } = t[p];
8362
+ for (u = f = -1, s = x; s < _; s++)
8363
  (f =
8364
  0.5 *
8365
  Math.abs((y - n) * (t[s].y - v) - (y - t[s].x) * (o - v))),
8367
  (a[l++] = d), (p = g);
8368
  }
8369
  return (a[l++] = t[h]), a;
8370
+ })(h, d, u, n, s);
8371
  break;
8372
  case "min-max":
8373
+ f = (function (t, e, s, n) {
8374
+ let o,
 
8375
  a,
8376
  r,
8377
  l,
8380
  d,
8381
  u,
8382
  f,
8383
+ g,
8384
+ p = 0,
8385
+ m = 0;
8386
+ const b = [],
8387
+ x = e + s - 1,
8388
+ _ = t[e].x,
8389
+ y = t[x].x - _;
8390
+ for (o = e; o < e + s; ++o) {
8391
+ (a = t[o]), (r = ((a.x - _) / y) * n), (l = a.y);
8392
+ const e = 0 | r;
8393
+ if (e === h)
8394
+ l < f ? ((f = l), (c = o)) : l > g && ((g = l), (d = o)),
8395
+ (p = (m * p + a.x) / ++m);
8396
  else {
8397
+ const s = o - 1;
8398
+ if (!i(c) && !i(d)) {
8399
+ const e = Math.min(c, d),
8400
+ i = Math.max(c, d);
8401
+ e !== u && e !== s && b.push({ ...t[e], x: p }),
8402
+ i !== u && i !== s && b.push({ ...t[i], x: p });
8403
  }
8404
+ o > 0 && s !== u && b.push(t[s]),
8405
+ b.push(a),
8406
+ (h = e),
8407
+ (m = 0),
8408
+ (f = g = l),
8409
+ (c = d = u = o);
8410
  }
8411
  }
8412
+ return b;
8413
+ })(h, d, u, n);
8414
  break;
8415
  default:
8416
  throw new Error(
8417
+ `Unsupported decimation algorithm '${s.algorithm}'`
8418
  );
8419
  }
8420
+ e._decimated = f;
8421
  });
8422
  },
8423
  destroy(t) {
8424
+ fo(t);
8425
  },
8426
  };
8427
+ function po(t, e, i, s) {
8428
+ if (s) return;
8429
+ let n = e[t],
8430
+ o = i[t];
8431
+ return (
8432
+ "angle" === t && ((n = K(n)), (o = K(o))),
8433
+ { property: t, start: n, end: o }
8434
+ );
 
 
 
 
 
 
 
 
8435
  }
8436
+ function mo(t, e, i) {
8437
+ for (; e > t; e--) {
8438
+ const t = i[e];
8439
+ if (!isNaN(t.x) && !isNaN(t.y)) break;
 
 
 
 
 
 
 
 
 
 
 
 
8440
  }
8441
+ return e;
8442
  }
8443
+ function bo(t, e, i, s) {
8444
+ return t && e ? s(t[i], e[i]) : t ? t[i] : e ? e[i] : 0;
8445
+ }
8446
+ function xo(t, e) {
8447
+ let i = [],
8448
+ n = !1;
8449
+ return (
8450
+ s(t)
8451
+ ? ((n = !0), (i = t))
8452
+ : (i = (function (t, e) {
8453
+ const { x: i = null, y: s = null } = t || {},
8454
+ n = e.points,
8455
+ o = [];
 
 
 
 
 
 
 
 
8456
  return (
8457
+ e.segments.forEach(({ start: t, end: e }) => {
8458
+ e = mo(t, e, n);
8459
+ const a = n[t],
8460
+ r = n[e];
8461
+ null !== s
8462
+ ? (o.push({ x: a.x, y: s }), o.push({ x: r.x, y: s }))
8463
+ : null !== i &&
8464
+ (o.push({ x: i, y: a.y }), o.push({ x: i, y: r.y }));
8465
+ }),
8466
+ o
8467
  );
8468
+ })(t, e)),
8469
+ i.length
8470
+ ? new to({ points: i, options: { tension: 0 }, _loop: n, _fullLoop: n })
8471
+ : null
8472
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8473
  }
8474
+ function _o(t) {
8475
+ return t && !1 !== t.fill;
8476
+ }
8477
+ function yo(t, e, i) {
8478
+ let s = t[e].fill;
8479
+ const n = [e];
8480
+ let a;
8481
+ if (!i) return s;
8482
+ for (; !1 !== s && -1 === n.indexOf(s); ) {
8483
+ if (!o(s)) return s;
8484
+ if (((a = t[s]), !a)) return !1;
8485
+ if (a.visible) return s;
8486
+ n.push(s), (s = a.fill);
8487
  }
8488
+ return !1;
8489
+ }
8490
+ function vo(t, e, i) {
8491
+ const s = (function (t) {
8492
+ const e = t.options,
8493
+ i = e.fill;
8494
+ let s = r(i && i.target, i);
8495
+ void 0 === s && (s = !!e.backgroundColor);
8496
+ if (!1 === s || null === s) return !1;
8497
+ if (!0 === s) return "origin";
8498
+ return s;
8499
+ })(t);
8500
+ if (n(s)) return !isNaN(s.value) && s;
8501
+ let a = parseFloat(s);
8502
+ return o(a) && Math.floor(a) === a
8503
+ ? (function (t, e, i, s) {
8504
+ ("-" !== t && "+" !== t) || (i = e + i);
8505
+ if (i === e || i < 0 || i >= s) return !1;
8506
+ return i;
8507
+ })(s[0], e, a, i)
8508
+ : ["origin", "start", "end", "stack", "shape"].indexOf(s) >= 0 && s;
8509
  }
8510
+ function wo(t, e, i) {
8511
  const s = [];
8512
  for (let n = 0; n < i.length; n++) {
8513
  const o = i[n],
8514
+ { first: a, last: r, point: l } = Mo(o, e, "x");
8515
  if (!(!l || (a && r)))
8516
  if (a) s.unshift(l);
8517
  else if ((t.push(l), !r)) break;
8518
  }
8519
  t.push(...s);
8520
  }
8521
+ function Mo(t, e, i) {
8522
  const s = t.interpolate(e, i);
8523
  if (!s) return {};
8524
  const n = s[i],
8530
  const e = o[t],
8531
  s = a[e.start][i],
8532
  h = a[e.end][i];
8533
+ if (Q(n, s, h)) {
8534
  (r = n === s), (l = n === h);
8535
  break;
8536
  }
8537
  }
8538
  return { first: r, last: l, point: s };
8539
  }
8540
+ class ko {
8541
+ constructor(t) {
8542
+ (this.x = t.x), (this.y = t.y), (this.radius = t.radius);
8543
+ }
8544
+ pathSegment(t, e, i) {
8545
+ const { x: s, y: n, radius: o } = this;
8546
+ return (
8547
+ (e = e || { start: 0, end: O }),
8548
+ t.arc(s, n, o, e.end, e.start, !0),
8549
+ !i.bounds
8550
+ );
8551
+ }
8552
+ interpolate(t) {
8553
+ const { x: e, y: i, radius: s } = this,
8554
+ n = t.angle;
8555
+ return { x: e + Math.cos(n) * s, y: i + Math.sin(n) * s, angle: n };
8556
+ }
8557
+ }
8558
+ function So(t) {
8559
  const { chart: e, fill: i, line: s } = t;
8560
+ if (o(i))
8561
  return (function (t, e) {
8562
  const i = t.getDatasetMeta(e);
8563
  return i && t.isDatasetVisible(e) ? i.dataset : null;
8578
  }
8579
  return i;
8580
  })(e, i);
8581
+ r.push(xo({ x: null, y: e.bottom }, s));
8582
  for (let t = 0; t < o.length; t++) {
8583
  const e = o[t];
8584
+ for (let t = e.start; t <= e.end; t++) wo(n, a[t], r);
8585
  }
8586
+ return new to({ points: n, options: {} });
8587
  })(t);
8588
  if ("shape" === i) return !0;
8589
+ const a = (function (t) {
8590
+ if ((t.scale || {}).getPointPositionForValue)
8591
+ return (function (t) {
8592
+ const { scale: e, fill: i } = t,
8593
+ s = e.options,
8594
+ o = e.getLabels().length,
8595
+ a = s.reverse ? e.max : e.min,
8596
+ r = (function (t, e, i) {
8597
+ let s;
8598
+ return (
8599
+ (s =
8600
+ "start" === t
8601
+ ? i
8602
+ : "end" === t
8603
+ ? e.options.reverse
8604
+ ? e.min
8605
+ : e.max
8606
+ : n(t)
8607
+ ? t.value
8608
+ : e.getBaseValue()),
8609
+ s
8610
+ );
8611
+ })(i, e, a),
8612
+ l = [];
8613
+ if (s.grid.circular) {
8614
+ const t = e.getPointPositionForValue(0, a);
8615
+ return new ko({
8616
+ x: t.x,
8617
+ y: t.y,
8618
+ radius: e.getDistanceFromCenterForValue(r),
8619
+ });
8620
+ }
8621
+ for (let t = 0; t < o; ++t) l.push(e.getPointPositionForValue(t, r));
8622
+ return l;
8623
+ })(t);
8624
+ return (function (t) {
8625
+ const { scale: e = {}, fill: i } = t,
8626
+ s = (function (t, e) {
8627
+ let i = null;
8628
  return (
8629
+ "start" === t
8630
+ ? (i = e.bottom)
8631
+ : "end" === t
8632
+ ? (i = e.top)
8633
+ : n(t)
8634
+ ? (i = e.getPixelForValue(t.value))
8635
+ : e.getBasePixel && (i = e.getBasePixel()),
8636
+ i
 
 
8637
  );
8638
+ })(i, e);
8639
+ if (o(s)) {
8640
+ const t = e.isHorizontal();
8641
+ return { x: t ? s : null, y: t ? null : s };
8642
+ }
8643
+ return null;
8644
+ })(t);
8645
+ })(t);
8646
+ return a instanceof ko ? a : xo(a, s);
8647
  }
8648
+ function Po(t, e, i) {
8649
+ const s = So(e),
8650
+ { line: n, scale: o, axis: a } = e,
8651
+ r = n.options,
8652
+ l = r.fill,
8653
+ h = r.backgroundColor,
8654
+ { above: c = h, below: d = h } = l || {};
8655
+ s &&
8656
+ n.points.length &&
8657
+ (Pe(t, i),
8658
+ (function (t, e) {
8659
+ const { line: i, target: s, above: n, below: o, area: a, scale: r } = e,
8660
+ l = i._loop ? "angle" : e.axis;
8661
+ t.save(),
8662
+ "x" === l &&
8663
+ o !== n &&
8664
+ (Do(t, s, a.top),
8665
+ Oo(t, { line: i, target: s, color: n, scale: r, property: l }),
8666
+ t.restore(),
8667
+ t.save(),
8668
+ Do(t, s, a.bottom));
8669
+ Oo(t, { line: i, target: s, color: o, scale: r, property: l }),
8670
+ t.restore();
8671
+ })(t, {
8672
+ line: n,
8673
+ target: s,
8674
+ above: c,
8675
+ below: d,
8676
+ area: i,
8677
+ scale: o,
8678
+ axis: a,
8679
+ }),
8680
+ De(t));
8681
  }
8682
+ function Do(t, e, i) {
8683
  const { segments: s, points: n } = e;
8684
  let o = !0,
8685
  a = !1;
8687
  for (const r of s) {
8688
  const { start: s, end: l } = r,
8689
  h = n[s],
8690
+ c = n[mo(s, l, n)];
8691
  o
8692
  ? (t.moveTo(h.x, h.y), (o = !1))
8693
  : (t.lineTo(h.x, i), t.lineTo(h.x, h.y)),
8696
  }
8697
  t.lineTo(e.first().x, i), t.closePath(), t.clip();
8698
  }
8699
+ function Oo(t, e) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8700
  const { line: i, target: s, property: n, color: o, scale: a } = e,
8701
  r = (function (t, e, i) {
8702
  const s = t.segments,
8705
  a = [];
8706
  for (const t of s) {
8707
  let { start: s, end: r } = t;
8708
+ r = mo(s, r, n);
8709
+ const l = po(i, n[s], n[r], t.loop);
8710
  if (!e.segments) {
8711
  a.push({ source: t, target: l, start: n[s], end: n[r] });
8712
  continue;
8713
  }
8714
+ const h = Pi(e, l);
8715
  for (const e of h) {
8716
+ const s = po(i, o[e.start], o[e.end], e.loop),
8717
+ r = Si(t, n, s);
8718
  for (const t of r)
8719
  a.push({
8720
  source: t,
8721
  target: e,
8722
+ start: { [i]: bo(l, s, "start", Math.max) },
8723
+ end: { [i]: bo(l, s, "end", Math.min) },
8724
  });
8725
  }
8726
  }
8729
  for (const { source: e, target: l, start: h, end: c } of r) {
8730
  const { style: { backgroundColor: r = o } = {} } = e,
8731
  d = !0 !== s;
8732
+ t.save(), (t.fillStyle = r), Co(t, a, d && po(n, h, c)), t.beginPath();
8733
  const u = !!i.pathSegment(t, e);
8734
  let f;
8735
  if (d) {
8736
+ u ? t.closePath() : Ao(t, s, c, n);
8737
  const e = !!s.pathSegment(t, l, { move: u, reverse: !0 });
8738
+ (f = u && e), f || Ao(t, s, h, n);
8739
  }
8740
  t.closePath(), t.fill(f ? "evenodd" : "nonzero"), t.restore();
8741
  }
8742
  }
8743
+ function Co(t, e, i) {
8744
+ const { top: s, bottom: n } = e.chart.chartArea,
8745
+ { property: o, start: a, end: r } = i || {};
8746
+ "x" === o && (t.beginPath(), t.rect(a, s, r - a, n - s), t.clip());
8747
+ }
8748
+ function Ao(t, e, i, s) {
8749
+ const n = e.interpolate(i, s);
8750
+ n && t.lineTo(n.x, n.y);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8751
  }
8752
+ var To = {
8753
  id: "filler",
8754
  afterDatasetsUpdate(t, e, i) {
8755
  const s = (t.data.datasets || []).length,
8761
  (l = null),
8762
  r &&
8763
  r.options &&
8764
+ r instanceof to &&
8765
  (l = {
8766
  visible: t.isDatasetVisible(a),
8767
  index: a,
8768
+ fill: vo(r, a, s),
8769
  chart: t,
8770
  axis: o.controller.options.indexAxis,
8771
  scale: o.vScale,
8774
  (o.$filler = l),
8775
  n.push(l);
8776
  for (a = 0; a < s; ++a)
8777
+ (l = n[a]), l && !1 !== l.fill && (l.fill = yo(n, a, i.propagate));
8778
  },
8779
  beforeDraw(t, e, i) {
8780
  const s = "beforeDraw" === i.drawTime,
8782
  o = t.chartArea;
8783
  for (let e = n.length - 1; e >= 0; --e) {
8784
  const i = n[e].$filler;
8785
+ i &&
8786
+ (i.line.updateControlPoints(o, i.axis),
8787
+ s && i.fill && Po(t.ctx, i, o));
8788
  }
8789
  },
8790
  beforeDatasetsDraw(t, e, i) {
8792
  const s = t.getSortedVisibleDatasetMetas();
8793
  for (let e = s.length - 1; e >= 0; --e) {
8794
  const i = s[e].$filler;
8795
+ _o(i) && Po(t.ctx, i, t.chartArea);
8796
  }
8797
  },
8798
  beforeDatasetDraw(t, e, i) {
8799
  const s = e.meta.$filler;
8800
+ _o(s) && "beforeDatasetDraw" === i.drawTime && Po(t.ctx, s, t.chartArea);
 
 
 
8801
  },
8802
  defaults: { propagate: !0, drawTime: "beforeDatasetDraw" },
8803
  };
8804
+ const Lo = (t, e) => {
8805
  let { boxHeight: i = e, boxWidth: s = e } = t;
8806
  return (
8807
+ t.usePointStyle &&
8808
+ ((i = Math.min(i, e)), (s = t.pointStyleWidth || Math.min(s, e))),
8809
  { boxWidth: s, boxHeight: i, itemHeight: Math.max(e, i) }
8810
  );
8811
  };
8812
+ class Eo extends Es {
8813
  constructor(t) {
8814
  super(),
8815
  (this._added = !1),
8854
  }
8855
  buildLabels() {
8856
  const t = this.options.labels || {};
8857
+ let e = c(t.generateLabels, [this.chart], this) || [];
8858
  t.filter && (e = e.filter((e) => t.filter(e, this.chart.data))),
8859
  t.sort && (e = e.sort((e, i) => t.sort(e, i, this.chart.data))),
8860
  this.options.reverse && e.reverse(),
8864
  const { options: t, ctx: e } = this;
8865
  if (!t.display) return void (this.width = this.height = 0);
8866
  const i = t.labels,
8867
+ s = mi(i.font),
8868
  n = s.size,
8869
  o = this._computeTitleHeight(),
8870
+ { boxWidth: a, itemHeight: r } = Lo(i, n);
8871
  let l, h;
8872
  (e.font = s.string),
8873
  this.isHorizontal()
8945
  options: {
8946
  align: i,
8947
  labels: { padding: s },
8948
+ rtl: n,
8949
  },
8950
  } = this,
8951
+ o = yi(n, this.left, this.width);
8952
  if (this.isHorizontal()) {
8953
+ let n = 0,
8954
+ a = ut(i, this.left + s, this.right - this.lineWidths[n]);
8955
+ for (const r of e)
8956
+ n !== r.row &&
8957
+ ((n = r.row),
8958
+ (a = ut(i, this.left + s, this.right - this.lineWidths[n]))),
8959
+ (r.top += this.top + t + s),
8960
+ (r.left = o.leftForLtr(o.x(a), r.width)),
8961
+ (a += r.width + s);
8962
  } else {
8963
+ let n = 0,
8964
+ a = ut(i, this.top + t + s, this.bottom - this.columnSizes[n].height);
8965
+ for (const r of e)
8966
+ r.col !== n &&
8967
+ ((n = r.col),
8968
+ (a = ut(
8969
  i,
8970
  this.top + t + s,
8971
+ this.bottom - this.columnSizes[n].height
8972
  ))),
8973
+ (r.top = a),
8974
+ (r.left += this.left + s),
8975
+ (r.left = o.leftForLtr(o.x(r.left), r.width)),
8976
+ (a += r.height + s);
8977
  }
8978
  }
8979
  isHorizontal() {
8984
  draw() {
8985
  if (this.options.display) {
8986
  const t = this.ctx;
8987
+ Pe(t, this), this._draw(), De(t);
8988
  }
8989
  }
8990
  _draw() {
8991
  const { options: t, columnSizes: e, lineWidths: i, ctx: s } = this,
8992
+ { align: n, labels: o } = t,
8993
+ a = ne.color,
8994
+ l = yi(t.rtl, this.left, this.width),
8995
+ h = mi(o.font),
8996
+ { color: c, padding: d } = o,
8997
+ u = h.size,
8998
+ f = u / 2;
8999
+ let g;
9000
  this.drawTitle(),
9001
+ (s.textAlign = l.textAlign("left")),
9002
  (s.textBaseline = "middle"),
9003
  (s.lineWidth = 0.5),
9004
+ (s.font = h.string);
9005
+ const { boxWidth: p, boxHeight: m, itemHeight: b } = Lo(o, u),
9006
+ x = this.isHorizontal(),
9007
+ _ = this._computeTitleHeight();
9008
+ (g = x
9009
  ? {
9010
+ x: ut(n, this.left + d, this.right - i[0]),
9011
+ y: this.top + d + _,
9012
  line: 0,
9013
  }
9014
  : {
9015
+ x: this.left + d,
9016
+ y: ut(n, this.top + _ + d, this.bottom - e[0].height),
9017
  line: 0,
9018
  }),
9019
+ vi(this.ctx, t.textDirection);
9020
+ const y = b + d;
9021
+ this.legendItems.forEach((v, w) => {
9022
+ (s.strokeStyle = v.fontColor || c), (s.fillStyle = v.fontColor || c);
9023
+ const M = s.measureText(v.text).width,
9024
+ k = l.textAlign(v.textAlign || (v.textAlign = o.textAlign)),
9025
+ S = p + f + M;
9026
+ let P = g.x,
9027
+ D = g.y;
9028
+ l.setWidth(this.width),
9029
+ x
9030
+ ? w > 0 &&
9031
+ P + S + d > this.right &&
9032
+ ((D = g.y += y),
9033
+ g.line++,
9034
+ (P = g.x = ut(n, this.left + d, this.right - i[g.line])))
9035
+ : w > 0 &&
9036
+ D + y > this.bottom &&
9037
+ ((P = g.x = P + e[g.line].width + d),
9038
+ g.line++,
9039
+ (D = g.y =
9040
+ ut(n, this.top + _ + d, this.bottom - e[g.line].height)));
9041
  !(function (t, e, i) {
9042
+ if (isNaN(p) || p <= 0 || isNaN(m) || m < 0) return;
9043
  s.save();
9044
+ const n = r(i.lineWidth, 1);
9045
  if (
9046
+ ((s.fillStyle = r(i.fillStyle, a)),
9047
+ (s.lineCap = r(i.lineCap, "butt")),
9048
+ (s.lineDashOffset = r(i.lineDashOffset, 0)),
9049
+ (s.lineJoin = r(i.lineJoin, "miter")),
9050
  (s.lineWidth = n),
9051
+ (s.strokeStyle = r(i.strokeStyle, a)),
9052
+ s.setLineDash(r(i.lineDash, [])),
9053
+ o.usePointStyle)
9054
  ) {
9055
+ const a = {
9056
  radius: (m * Math.SQRT2) / 2,
9057
  pointStyle: i.pointStyle,
9058
  rotation: i.rotation,
9059
  borderWidth: n,
9060
  },
9061
+ r = l.xPlus(t, p / 2);
9062
+ ke(s, a, r, e + f, o.pointStyleWidth && p);
9063
  } else {
9064
+ const o = e + Math.max((u - m) / 2, 0),
9065
+ a = l.leftForLtr(t, p),
9066
+ r = gi(i.borderRadius);
9067
  s.beginPath(),
9068
  Object.values(r).some((t) => 0 !== t)
9069
+ ? Le(s, { x: a, y: o, w: p, h: m, radius: r })
9070
+ : s.rect(a, o, p, m),
9071
  s.fill(),
9072
  0 !== n && s.stroke();
9073
  }
9074
  s.restore();
9075
+ })(l.x(P), D, v),
9076
+ (P = ft(k, P + p + f, x ? P + S : this.right, t.rtl)),
9077
  (function (t, e, i) {
9078
+ Ae(s, i.text, t, e + b / 2, h, {
9079
  strikethrough: i.hidden,
9080
+ textAlign: l.textAlign(i.textAlign),
9081
  });
9082
+ })(l.x(P), D, v),
9083
+ x ? (g.x += S + d) : (g.y += y);
9084
  }),
9085
+ wi(this.ctx, t.textDirection);
9086
  }
9087
  drawTitle() {
9088
  const t = this.options,
9089
  e = t.title,
9090
+ i = mi(e.font),
9091
+ s = pi(e.padding);
9092
  if (!e.display) return;
9093
+ const n = yi(t.rtl, this.left, this.width),
9094
+ o = this.ctx,
9095
+ a = e.position,
9096
+ r = i.size / 2,
9097
+ l = s.top + r;
9098
+ let h,
9099
+ c = this.left,
9100
+ d = this.width;
9101
  if (this.isHorizontal())
9102
+ (d = Math.max(...this.lineWidths)),
9103
+ (h = this.top + l),
9104
+ (c = ut(t.align, c, this.right - d));
9105
  else {
9106
  const e = this.columnSizes.reduce((t, e) => Math.max(t, e.height), 0);
9107
+ h =
9108
+ l +
9109
+ ut(
9110
  t.align,
9111
  this.top,
9112
  this.bottom - e - t.labels.padding - this._computeTitleHeight()
9113
  );
9114
  }
9115
+ const u = ut(a, c, c + d);
9116
+ (o.textAlign = n.textAlign(dt(a))),
9117
+ (o.textBaseline = "middle"),
9118
+ (o.strokeStyle = e.color),
9119
+ (o.fillStyle = e.color),
9120
+ (o.font = i.string),
9121
+ Ae(o, e.text, u, h, i);
9122
  }
9123
  _computeTitleHeight() {
9124
  const t = this.options.title,
9125
+ e = mi(t.font),
9126
+ i = pi(t.padding);
9127
  return t.display ? e.lineHeight + i.height : 0;
9128
  }
9129
  _getLegendItemAt(t, e) {
9130
  let i, s, n;
9131
+ if (Q(t, this.left, this.right) && Q(e, this.top, this.bottom))
9132
  for (n = this.legendHitBoxes, i = 0; i < n.length; ++i)
9133
  if (
9134
  ((s = n[i]),
9135
+ Q(t, s.left, s.left + s.width) && Q(e, s.top, s.top + s.height))
9136
  )
9137
  return this.legendItems[i];
9138
  return null;
9141
  const e = this.options;
9142
  if (
9143
  !(function (t, e) {
9144
+ if (
9145
+ ("mousemove" === t || "mouseout" === t) &&
9146
+ (e.onHover || e.onLeave)
9147
+ )
9148
+ return !0;
9149
  if (e.onClick && ("click" === t || "mouseup" === t)) return !0;
9150
  return !1;
9151
  })(t.type, e)
9152
  )
9153
  return;
9154
  const i = this._getLegendItemAt(t.x, t.y);
9155
+ if ("mousemove" === t.type || "mouseout" === t.type) {
9156
  const o = this._hoveredItem,
9157
  a =
9158
  ((n = i),
9160
  null !== n &&
9161
  s.datasetIndex === n.datasetIndex &&
9162
  s.index === n.index);
9163
+ o && !a && c(e.onLeave, [t, o, this], this),
9164
  (this._hoveredItem = i),
9165
+ i && !a && c(e.onHover, [t, i, this], this);
9166
+ } else i && c(e.onClick, [t, i, this], this);
9167
  var s, n;
9168
  }
9169
  }
9170
+ var Ro = {
9171
  id: "legend",
9172
+ _element: Eo,
9173
  start(t, e, i) {
9174
+ const s = (t.legend = new Eo({ ctx: t.ctx, options: i, chart: t }));
9175
+ Zi.configure(t, s, i), Zi.addBox(t, s);
9176
  },
9177
  stop(t) {
9178
+ Zi.removeBox(t, t.legend), delete t.legend;
9179
  },
9180
  beforeUpdate(t, e, i) {
9181
  const s = t.legend;
9182
+ Zi.configure(t, s, i), (s.options = i);
9183
  },
9184
  afterUpdate(t) {
9185
  const e = t.legend;
9220
  } = t.legend.options;
9221
  return t._getSortedDatasetMetas().map((t) => {
9222
  const a = t.controller.getStyle(i ? 0 : void 0),
9223
+ r = pi(a.borderWidth);
9224
  return {
9225
  text: e[t.index].label,
9226
  fillStyle: a.backgroundColor,
9255
  },
9256
  },
9257
  };
9258
+ class Io extends Es {
9259
  constructor(t) {
9260
  super(),
9261
  (this.chart = t.chart),
9277
  if (((this.left = 0), (this.top = 0), !i.display))
9278
  return void (this.width = this.height = this.right = this.bottom = 0);
9279
  (this.width = this.right = t), (this.height = this.bottom = e);
9280
+ const n = s(i.text) ? i.text.length : 1;
9281
+ this._padding = pi(i.padding);
9282
+ const o = n * mi(i.font).lineHeight + this._padding.height;
9283
+ this.isHorizontal() ? (this.height = o) : (this.width = o);
9284
  }
9285
  isHorizontal() {
9286
  const t = this.options.position;
9287
  return "top" === t || "bottom" === t;
9288
  }
9289
  _drawArgs(t) {
9290
+ const { top: e, left: i, bottom: s, right: n, options: o } = this,
9291
+ a = o.align;
9292
+ let r,
9293
+ l,
9294
  h,
9295
+ c = 0;
 
9296
  return (
9297
  this.isHorizontal()
9298
+ ? ((l = ut(a, i, n)), (h = e + t), (r = n - i))
9299
+ : ("left" === o.position
9300
+ ? ((l = i + t), (h = ut(a, s, e)), (c = -0.5 * D))
9301
+ : ((l = n - t), (h = ut(a, e, s)), (c = 0.5 * D)),
9302
+ (r = s - e)),
9303
+ { titleX: l, titleY: h, maxWidth: r, rotation: c }
9304
  );
9305
  }
9306
  draw() {
9307
  const t = this.ctx,
9308
  e = this.options;
9309
  if (!e.display) return;
9310
+ const i = mi(e.font),
9311
+ s = i.lineHeight / 2 + this._padding.top,
9312
+ { titleX: n, titleY: o, maxWidth: a, rotation: r } = this._drawArgs(s);
9313
+ Ae(t, e.text, 0, 0, i, {
9314
  color: e.color,
9315
+ maxWidth: a,
9316
+ rotation: r,
9317
+ textAlign: dt(e.align),
9318
  textBaseline: "middle",
9319
+ translation: [n, o],
9320
  });
9321
  }
9322
  }
9323
+ var zo = {
9324
  id: "title",
9325
+ _element: Io,
9326
  start(t, e, i) {
9327
  !(function (t, e) {
9328
+ const i = new Io({ ctx: t.ctx, options: e, chart: t });
9329
+ Zi.configure(t, i, e), Zi.addBox(t, i), (t.titleBlock = i);
9330
  })(t, i);
9331
  },
9332
  stop(t) {
9333
  const e = t.titleBlock;
9334
+ Zi.removeBox(t, e), delete t.titleBlock;
9335
  },
9336
  beforeUpdate(t, e, i) {
9337
  const s = t.titleBlock;
9338
+ Zi.configure(t, s, i), (s.options = i);
9339
  },
9340
  defaults: {
9341
  align: "center",
9350
  defaultRoutes: { color: "color" },
9351
  descriptors: { _scriptable: !0, _indexable: !1 },
9352
  };
9353
+ const Fo = new WeakMap();
9354
+ var Vo = {
9355
  id: "subtitle",
9356
  start(t, e, i) {
9357
+ const s = new Io({ ctx: t.ctx, options: i, chart: t });
9358
+ Zi.configure(t, s, i), Zi.addBox(t, s), Fo.set(t, s);
9359
  },
9360
  stop(t) {
9361
+ Zi.removeBox(t, Fo.get(t)), Fo.delete(t);
9362
  },
9363
  beforeUpdate(t, e, i) {
9364
+ const s = Fo.get(t);
9365
+ Zi.configure(t, s, i), (s.options = i);
9366
  },
9367
  defaults: {
9368
  align: "center",
9377
  defaultRoutes: { color: "color" },
9378
  descriptors: { _scriptable: !0, _indexable: !1 },
9379
  };
9380
+ const Bo = {
9381
  average(t) {
9382
  if (!t.length) return !1;
9383
  let e,
9405
  for (i = 0, s = t.length; i < s; ++i) {
9406
  const s = t[i].element;
9407
  if (s && s.hasValue()) {
9408
+ const t = X(e, s.getCenterPoint());
9409
  t < r && ((r = t), (n = s));
9410
  }
9411
  }
9416
  return { x: o, y: a };
9417
  },
9418
  };
9419
+ function No(t, e) {
9420
+ return e && (s(e) ? Array.prototype.push.apply(t, e) : t.push(e)), t;
9421
  }
9422
+ function Wo(t) {
9423
  return ("string" == typeof t || t instanceof String) && t.indexOf("\n") > -1
9424
  ? t.split("\n")
9425
  : t;
9426
  }
9427
+ function jo(t, e) {
9428
  const { element: i, datasetIndex: s, index: n } = e,
9429
  o = t.getDatasetMeta(s).controller,
9430
  { label: a, value: r } = o.getLabelAndValue(n);
9440
  element: i,
9441
  };
9442
  }
9443
+ function Ho(t, e) {
9444
  const i = t.chart.ctx,
9445
  { body: s, footer: n, title: o } = t,
9446
  { boxWidth: a, boxHeight: r } = e,
9447
+ l = mi(e.bodyFont),
9448
+ h = mi(e.titleFont),
9449
+ c = mi(e.footerFont),
9450
+ u = o.length,
9451
+ f = n.length,
9452
+ g = s.length,
9453
+ p = pi(e.padding);
9454
+ let m = p.height,
9455
+ b = 0,
9456
  x = s.reduce(
9457
  (t, e) => t + e.before.length + e.lines.length + e.after.length,
9458
  0
9459
  );
9460
  if (
9461
  ((x += t.beforeBody.length + t.afterBody.length),
9462
+ u &&
9463
+ (m +=
9464
+ u * h.lineHeight + (u - 1) * e.titleSpacing + e.titleMarginBottom),
9465
  x)
9466
  ) {
9467
+ m +=
9468
+ g * (e.displayColors ? Math.max(r, l.lineHeight) : l.lineHeight) +
9469
+ (x - g) * l.lineHeight +
9470
  (x - 1) * e.bodySpacing;
9471
  }
9472
+ f &&
9473
+ (m += e.footerMarginTop + f * c.lineHeight + (f - 1) * e.footerSpacing);
9474
+ let _ = 0;
9475
+ const y = function (t) {
9476
+ b = Math.max(b, i.measureText(t).width + _);
9477
  };
9478
  return (
9479
  i.save(),
9480
  (i.font = h.string),
9481
+ d(t.title, y),
9482
  (i.font = l.string),
9483
+ d(t.beforeBody.concat(t.afterBody), y),
9484
+ (_ = e.displayColors ? a + 2 + e.boxPadding : 0),
9485
+ d(s, (t) => {
9486
+ d(t.before, y), d(t.lines, y), d(t.after, y);
9487
  }),
9488
+ (_ = 0),
9489
  (i.font = c.string),
9490
+ d(t.footer, y),
9491
  i.restore(),
9492
+ (b += p.width),
9493
+ { width: b, height: m }
9494
  );
9495
  }
9496
+ function $o(t, e, i, s) {
9497
  const { x: n, width: o } = i,
9498
  {
9499
  width: a,
9518
  h
9519
  );
9520
  }
9521
+ function Yo(t, e, i) {
9522
  const s =
9523
  i.yAlign ||
9524
  e.yAlign ||
9526
  const { y: i, height: s } = e;
9527
  return i < s / 2 ? "top" : i > t.height - s / 2 ? "bottom" : "center";
9528
  })(t, i);
9529
+ return { xAlign: i.xAlign || e.xAlign || $o(t, e, i, s), yAlign: s };
9530
  }
9531
+ function Uo(t, e, i, s) {
9532
  const { caretSize: n, caretPadding: o, cornerRadius: a } = t,
9533
  { xAlign: r, yAlign: l } = i,
9534
  h = n + o,
9535
+ { topLeft: c, topRight: d, bottomLeft: u, bottomRight: f } = gi(a);
9536
  let g = (function (t, e) {
9537
  let { x: i, width: s } = t;
9538
  return "right" === e ? (i -= s) : "center" === e && (i -= s / 2), i;
9549
  : "left" === r
9550
  ? (g -= Math.max(c, u) + n)
9551
  : "right" === r && (g += Math.max(d, f) + n),
9552
+ { x: Z(g, 0, s.width - e.width), y: Z(p, 0, s.height - e.height) }
9553
  );
9554
  }
9555
+ function Xo(t, e, i) {
9556
+ const s = pi(i.padding);
9557
  return "center" === e
9558
  ? t.x + t.width / 2
9559
  : "right" === e
9560
  ? t.x + t.width - s.right
9561
  : t.x + s.left;
9562
  }
9563
+ function qo(t) {
9564
+ return No([], Wo(t));
9565
  }
9566
+ function Ko(t, e) {
9567
  const i =
9568
  e && e.dataset && e.dataset.tooltip && e.dataset.tooltip.callbacks;
9569
  return i ? t.override(i) : t;
9570
  }
9571
+ class Go extends Es {
9572
  constructor(t) {
9573
  super(),
9574
  (this.opacity = 0),
9611
  const e = this.chart,
9612
  i = this.options.setContext(this.getContext()),
9613
  s = i.enabled && e.options.animation && i.animations,
9614
+ n = new ys(this.chart, s);
9615
  return s._cacheable && (this._cachedAnimations = Object.freeze(n)), n;
9616
  }
9617
  getContext() {
9621
  ((t = this.chart.getContext()),
9622
  (e = this),
9623
  (i = this._tooltipItems),
9624
+ _i(t, { tooltip: e, tooltipItems: i, type: "tooltip" })))
9625
  );
9626
  var t, e, i;
9627
  }
9631
  n = i.title.apply(this, [t]),
9632
  o = i.afterTitle.apply(this, [t]);
9633
  let a = [];
9634
+ return (a = No(a, Wo(s))), (a = No(a, Wo(n))), (a = No(a, Wo(o))), a;
9635
  }
9636
  getBeforeBody(t, e) {
9637
+ return qo(e.callbacks.beforeBody.apply(this, [t]));
9638
  }
9639
  getBody(t, e) {
9640
  const { callbacks: i } = e,
9641
  s = [];
9642
  return (
9643
+ d(t, (t) => {
9644
  const e = { before: [], lines: [], after: [] },
9645
+ n = Ko(i, t);
9646
+ No(e.before, Wo(n.beforeLabel.call(this, t))),
9647
+ No(e.lines, n.label.call(this, t)),
9648
+ No(e.after, Wo(n.afterLabel.call(this, t))),
9649
  s.push(e);
9650
  }),
9651
  s
9652
  );
9653
  }
9654
  getAfterBody(t, e) {
9655
+ return qo(e.callbacks.afterBody.apply(this, [t]));
9656
  }
9657
  getFooter(t, e) {
9658
  const { callbacks: i } = e,
9660
  n = i.footer.apply(this, [t]),
9661
  o = i.afterFooter.apply(this, [t]);
9662
  let a = [];
9663
+ return (a = No(a, Wo(s))), (a = No(a, Wo(n))), (a = No(a, Wo(o))), a;
9664
  }
9665
  _createItems(t) {
9666
  const e = this._active,
9671
  let a,
9672
  r,
9673
  l = [];
9674
+ for (a = 0, r = e.length; a < r; ++a) l.push(jo(this.chart, e[a]));
9675
  return (
9676
  t.filter && (l = l.filter((e, s, n) => t.filter(e, s, n, i))),
9677
  t.itemSort && (l = l.sort((e, s) => t.itemSort(e, s, i))),
9678
+ d(l, (e) => {
9679
+ const i = Ko(t.callbacks, e);
9680
  s.push(i.labelColor.call(this, e)),
9681
  n.push(i.labelPointStyle.call(this, e)),
9682
  o.push(i.labelTextColor.call(this, e));
9694
  let n,
9695
  o = [];
9696
  if (s.length) {
9697
+ const t = Bo[i.position].call(this, s, this._eventPosition);
9698
  (o = this._createItems(i)),
9699
  (this.title = this.getTitle(o, i)),
9700
  (this.beforeBody = this.getBeforeBody(o, i)),
9701
  (this.body = this.getBody(o, i)),
9702
  (this.afterBody = this.getAfterBody(o, i)),
9703
  (this.footer = this.getFooter(o, i));
9704
+ const e = (this._size = Ho(this, i)),
9705
  a = Object.assign({}, t, e),
9706
+ r = Yo(this.chart, i, a),
9707
+ l = Uo(i, a, r, this.chart);
9708
  (this.xAlign = r.xAlign),
9709
  (this.yAlign = r.yAlign),
9710
  (n = {
9735
  getCaretPosition(t, e, i) {
9736
  const { xAlign: s, yAlign: n } = this,
9737
  { caretSize: o, cornerRadius: a } = i,
9738
+ { topLeft: r, topRight: l, bottomLeft: h, bottomRight: c } = gi(a),
9739
  { x: d, y: u } = t,
9740
  { width: f, height: g } = e;
9741
+ let p, m, b, x, _, y;
9742
  return (
9743
  "center" === n
9744
  ? ((_ = u + g / 2),
9745
  "left" === s
9746
+ ? ((p = d), (m = p - o), (x = _ + o), (y = _ - o))
9747
+ : ((p = d + f), (m = p + o), (x = _ - o), (y = _ + o)),
9748
+ (b = p))
9749
  : ((m =
9750
  "left" === s
9751
  ? d + Math.max(r, h) + o
9753
  ? d + f - Math.max(l, c) - o
9754
  : this.caretX),
9755
  "top" === n
9756
+ ? ((x = u), (_ = x - o), (p = m - o), (b = m + o))
9757
+ : ((x = u + g), (_ = x + o), (p = m + o), (b = m - o)),
9758
+ (y = x)),
9759
+ { x1: p, x2: m, x3: b, y1: x, y2: _, y3: y }
9760
  );
9761
  }
9762
  drawTitle(t, e, i) {
9764
  n = s.length;
9765
  let o, a, r;
9766
  if (n) {
9767
+ const l = yi(i.rtl, this.x, this.width);
9768
  for (
9769
+ t.x = Xo(this, i.titleAlign, i),
9770
  e.textAlign = l.textAlign(i.titleAlign),
9771
  e.textBaseline = "middle",
9772
+ o = mi(i.titleFont),
9773
  a = i.titleSpacing,
9774
  e.fillStyle = i.titleColor,
9775
  e.font = o.string,
9782
  r + 1 === n && (t.y += i.titleMarginBottom - a);
9783
  }
9784
  }
9785
+ _drawColorBox(t, e, i, s, o) {
9786
+ const a = this.labelColors[i],
9787
+ r = this.labelPointStyles[i],
9788
+ { boxHeight: l, boxWidth: h, boxPadding: c } = o,
9789
+ d = mi(o.bodyFont),
9790
+ u = Xo(this, "left", o),
9791
+ f = s.x(u),
9792
+ g = l < d.lineHeight ? (d.lineHeight - l) / 2 : 0,
9793
+ p = e.y + g;
9794
+ if (o.usePointStyle) {
9795
  const e = {
9796
+ radius: Math.min(h, l) / 2,
9797
+ pointStyle: r.pointStyle,
9798
+ rotation: r.rotation,
9799
  borderWidth: 1,
9800
  },
9801
+ i = s.leftForLtr(f, h) + h / 2,
9802
+ n = p + l / 2;
9803
+ (t.strokeStyle = o.multiKeyBackground),
9804
+ (t.fillStyle = o.multiKeyBackground),
9805
+ Me(t, e, i, n),
9806
+ (t.strokeStyle = a.borderColor),
9807
+ (t.fillStyle = a.backgroundColor),
9808
+ Me(t, e, i, n);
9809
  } else {
9810
+ (t.lineWidth = n(a.borderWidth)
9811
+ ? Math.max(...Object.values(a.borderWidth))
9812
+ : a.borderWidth || 1),
9813
+ (t.strokeStyle = a.borderColor),
9814
+ t.setLineDash(a.borderDash || []),
9815
+ (t.lineDashOffset = a.borderDashOffset || 0);
9816
+ const e = s.leftForLtr(f, h - c),
9817
+ i = s.leftForLtr(s.xPlus(f, 1), h - c - 2),
9818
+ r = gi(a.borderRadius);
9819
+ Object.values(r).some((t) => 0 !== t)
9820
  ? (t.beginPath(),
9821
+ (t.fillStyle = o.multiKeyBackground),
9822
+ Le(t, { x: e, y: p, w: h, h: l, radius: r }),
9823
  t.fill(),
9824
  t.stroke(),
9825
+ (t.fillStyle = a.backgroundColor),
9826
  t.beginPath(),
9827
+ Le(t, { x: i, y: p + 1, w: h - 2, h: l - 2, radius: r }),
9828
  t.fill())
9829
+ : ((t.fillStyle = o.multiKeyBackground),
9830
+ t.fillRect(e, p, h, l),
9831
+ t.strokeRect(e, p, h, l),
9832
+ (t.fillStyle = a.backgroundColor),
9833
+ t.fillRect(i, p + 1, h - 2, l - 2));
9834
  }
9835
  t.fillStyle = this.labelTextColors[i];
9836
  }
9844
  boxWidth: l,
9845
  boxPadding: h,
9846
  } = i,
9847
+ c = mi(i.bodyFont);
9848
+ let u = c.lineHeight,
9849
+ f = 0;
9850
+ const g = yi(i.rtl, this.x, this.width),
9851
+ p = function (i) {
9852
+ e.fillText(i, g.x(t.x + f), t.y + u / 2), (t.y += u + n);
9853
  },
9854
+ m = g.textAlign(o);
9855
+ let b, x, _, y, v, w, M;
9856
  for (
9857
  e.textAlign = o,
9858
  e.textBaseline = "middle",
9859
  e.font = c.string,
9860
+ t.x = Xo(this, m, i),
9861
  e.fillStyle = i.bodyColor,
9862
+ d(this.beforeBody, p),
9863
+ f = a && "right" !== m ? ("center" === o ? l / 2 + h : l + 2 + h) : 0,
9864
+ y = 0,
9865
+ w = s.length;
9866
+ y < w;
9867
+ ++y
9868
  ) {
9869
  for (
9870
+ b = s[y],
9871
+ x = this.labelTextColors[y],
9872
  e.fillStyle = x,
9873
+ d(b.before, p),
9874
+ _ = b.lines,
9875
  a &&
9876
+ _.length &&
9877
+ (this._drawColorBox(e, t, y, g, i),
9878
+ (u = Math.max(c.lineHeight, r))),
9879
+ v = 0,
9880
+ M = _.length;
9881
+ v < M;
9882
+ ++v
9883
  )
9884
+ p(_[v]), (u = c.lineHeight);
9885
+ d(b.after, p);
9886
  }
9887
+ (f = 0), (u = c.lineHeight), d(this.afterBody, p), (t.y -= n);
9888
  }
9889
  drawFooter(t, e, i) {
9890
  const s = this.footer,
9891
  n = s.length;
9892
  let o, a;
9893
  if (n) {
9894
+ const r = yi(i.rtl, this.x, this.width);
9895
  for (
9896
+ t.x = Xo(this, i.footerAlign, i),
9897
  t.y += i.footerMarginTop,
9898
  e.textAlign = r.textAlign(i.footerAlign),
9899
  e.textBaseline = "middle",
9900
+ o = mi(i.footerFont),
9901
  e.fillStyle = i.footerColor,
9902
  e.font = o.string,
9903
  a = 0;
9917
  topRight: d,
9918
  bottomLeft: u,
9919
  bottomRight: f,
9920
+ } = gi(s.cornerRadius);
9921
  (e.fillStyle = s.backgroundColor),
9922
  (e.strokeStyle = s.borderColor),
9923
  (e.lineWidth = s.borderWidth),
9945
  s = i && i.x,
9946
  n = i && i.y;
9947
  if (s || n) {
9948
+ const i = Bo[t.position].call(this, this._active, this._eventPosition);
9949
  if (!i) return;
9950
+ const o = (this._size = Ho(this, t)),
9951
  a = Object.assign({}, i, this._size),
9952
+ r = Yo(e, t, a),
9953
+ l = Uo(t, a, r, e);
9954
  (s._to === l.x && n._to === l.y) ||
9955
  ((this.xAlign = r.xAlign),
9956
  (this.yAlign = r.yAlign),
9961
  this._resolveAnimations().update(this, l));
9962
  }
9963
  }
9964
+ _willRender() {
9965
+ return !!this.opacity;
9966
+ }
9967
  draw(t) {
9968
  const e = this.options.setContext(this.getContext());
9969
  let i = this.opacity;
9972
  const s = { width: this.width, height: this.height },
9973
  n = { x: this.x, y: this.y };
9974
  i = Math.abs(i) < 0.001 ? 0 : i;
9975
+ const o = pi(e.padding),
9976
  a =
9977
  this.title.length ||
9978
  this.beforeBody.length ||
9984
  (t.save(),
9985
  (t.globalAlpha = i),
9986
  this.drawBackground(n, t, s, e),
9987
+ vi(t, e.textDirection),
9988
  (n.y += o.top),
9989
  this.drawTitle(n, t, e),
9990
  this.drawBody(n, t, e),
9991
  this.drawFooter(n, t, e),
9992
+ wi(t, e.textDirection),
9993
  t.restore());
9994
  }
9995
  getActiveElements() {
10002
  if (!i) throw new Error("Cannot find a dataset at index " + t);
10003
  return { datasetIndex: t, element: i.data[e], index: e };
10004
  }),
10005
+ n = !u(i, s),
10006
  o = this._positionChanged(s, e);
10007
  (n || o) &&
10008
  ((this._active = s),
10017
  n = this._active || [],
10018
  o = this._getActiveElements(t, n, e, i),
10019
  a = this._positionChanged(o, t),
10020
+ r = e || !u(o, n) || a;
10021
  return (
10022
  r &&
10023
  ((this._active = o),
10035
  }
10036
  _positionChanged(t, e) {
10037
  const { caretX: i, caretY: s, options: n } = this,
10038
+ o = Bo[n.position].call(this, t, e);
10039
  return !1 !== o && (i !== o.x || s !== o.y);
10040
  }
10041
  }
10042
+ Go.positioners = Bo;
10043
+ var Zo = {
10044
  id: "tooltip",
10045
+ _element: Go,
10046
+ positioners: Bo,
10047
  afterInit(t, e, i) {
10048
+ i && (t.tooltip = new Go({ chart: t, options: i }));
10049
  },
10050
  beforeUpdate(t, e, i) {
10051
  t.tooltip && t.tooltip.initialize(i);
10054
  t.tooltip && t.tooltip.initialize(i);
10055
  },
10056
  afterDraw(t) {
10057
+ const e = t.tooltip;
10058
+ if (e && e._willRender()) {
10059
+ const i = { tooltip: e };
10060
+ if (!1 === t.notifyPlugins("beforeTooltipDraw", i)) return;
10061
+ e.draw(t.ctx), t.notifyPlugins("afterTooltipDraw", i);
10062
+ }
10063
  },
10064
  afterEvent(t, e) {
10065
  if (t.tooltip) {
10106
  opacity: { easing: "linear", duration: 200 },
10107
  },
10108
  callbacks: {
10109
+ beforeTitle: t,
10110
  title(t) {
10111
  if (t.length > 0) {
10112
  const e = t[0],
10119
  }
10120
  return "";
10121
  },
10122
+ afterTitle: t,
10123
+ beforeBody: t,
10124
+ beforeLabel: t,
10125
  label(t) {
10126
  if (this && this.options && "dataset" === this.options.mode)
10127
  return t.label + ": " + t.formattedValue || t.formattedValue;
10128
  let e = t.dataset.label || "";
10129
  e && (e += ": ");
10130
+ const s = t.formattedValue;
10131
+ return i(s) || (e += s), e;
10132
  },
10133
  labelColor(t) {
10134
  const e = t.chart
10152
  .controller.getStyle(t.dataIndex);
10153
  return { pointStyle: e.pointStyle, rotation: e.rotation };
10154
  },
10155
+ afterLabel: t,
10156
+ afterBody: t,
10157
+ beforeFooter: t,
10158
+ footer: t,
10159
+ afterFooter: t,
10160
  },
10161
  },
10162
  defaultRoutes: {
10174
  },
10175
  additionalOptionScopes: ["interaction"],
10176
  },
10177
+ Jo = Object.freeze({
10178
  __proto__: null,
10179
+ Decimation: go,
10180
+ Filler: To,
10181
+ Legend: Ro,
10182
+ SubTitle: Vo,
10183
+ Title: zo,
10184
+ Tooltip: Zo,
10185
  });
10186
+ function Qo(t, e, i, s) {
10187
  const n = t.indexOf(e);
10188
  if (-1 === n)
10189
  return ((t, e, i, s) => (
10194
  ))(t, e, i, s);
10195
  return n !== t.lastIndexOf(e) ? i : n;
10196
  }
10197
+ class ta extends $s {
10198
  constructor(t) {
10199
  super(t),
10200
  (this._startValue = void 0),
10211
  super.init(t);
10212
  }
10213
  parse(t, e) {
10214
+ if (i(t)) return null;
10215
+ const s = this.getLabels();
10216
  return ((t, e) =>
10217
  null === t
10218
  ? null
10219
+ : Z(
10220
  Math.round(t),
10221
  0,
10222
  e
10223
+ ))((e = isFinite(e) && s[e] === t ? e : Qo(s, t, r(e, t), this._addedLabels)), s.length - 1);
10224
  }
10225
  determineDataLimits() {
10226
  const { minDefined: t, maxDefined: e } = this.getUserBounds();
10273
  return this.bottom;
10274
  }
10275
  }
10276
+ function ea(t, e, { horizontal: i, minRotation: s }) {
10277
+ const n = H(s),
10278
  o = (i ? Math.sin(n) : Math.cos(n)) || 0.001,
10279
  a = 0.75 * e * ("" + t).length;
10280
  return Math.min(e / o, a);
10281
  }
10282
+ (ta.id = "category"),
10283
+ (ta.defaults = { ticks: { callback: ta.prototype.getLabelForValue } });
10284
+ class ia extends $s {
10285
  constructor(t) {
10286
  super(t),
10287
  (this.start = void 0),
10291
  (this._valueRange = 0);
10292
  }
10293
  parse(t, e) {
10294
+ return i(t) ||
10295
  (("number" == typeof t || t instanceof Number) && !isFinite(+t))
10296
  ? null
10297
  : +t;
10303
  const o = (t) => (s = e ? s : t),
10304
  a = (t) => (n = i ? n : t);
10305
  if (t) {
10306
+ const t = z(s),
10307
+ e = z(n);
10308
  t < 0 && e < 0 ? a(0) : t > 0 && e > 0 && o(0);
10309
  }
10310
  if (s === n) {
10339
  buildTicks() {
10340
  const t = this.options,
10341
  e = t.ticks;
10342
+ let s = this.getTickLimit();
10343
+ s = Math.max(2, s);
10344
+ const n = (function (t, e) {
10345
+ const s = [],
10346
  {
10347
+ bounds: n,
10348
+ step: o,
10349
+ min: a,
10350
+ max: r,
10351
+ precision: l,
10352
+ count: h,
10353
+ maxTicks: c,
10354
+ maxDigits: d,
10355
+ includeBounds: u,
10356
  } = t,
10357
+ f = o || 1,
10358
+ g = c - 1,
10359
+ { min: p, max: m } = e,
10360
+ b = !i(a),
10361
+ x = !i(r),
10362
+ _ = !i(h),
10363
+ y = (m - p) / (d + 1);
10364
+ let v,
 
10365
  w,
10366
  M,
10367
+ k,
10368
+ S = F((m - p) / g / f) * f;
10369
+ if (S < 1e-14 && !b && !x) return [{ value: p }, { value: m }];
10370
+ (k = Math.ceil(m / S) - Math.floor(p / S)),
10371
+ k > g && (S = F((k * S) / g / f) * f),
10372
+ i(l) || ((v = Math.pow(10, l)), (S = Math.ceil(S * v) / v)),
10373
+ "ticks" === n
10374
+ ? ((w = Math.floor(p / S) * S), (M = Math.ceil(m / S) * S))
10375
+ : ((w = p), (M = m)),
10376
+ b && x && o && W((r - a) / o, S / 1e3)
10377
+ ? ((k = Math.round(Math.min((r - a) / S, c))),
10378
+ (S = (r - a) / k),
10379
+ (w = a),
10380
+ (M = r))
10381
+ : _
10382
+ ? ((w = b ? a : w), (M = x ? r : M), (k = h - 1), (S = (M - w) / k))
10383
+ : ((k = (M - w) / S),
10384
+ (k = N(k, Math.round(k), S / 1e3)
10385
+ ? Math.round(k)
10386
+ : Math.ceil(k)));
10387
+ const P = Math.max(Y(S), Y(w));
10388
+ (v = Math.pow(10, i(l) ? P : l)),
10389
+ (w = Math.round(w * v) / v),
10390
+ (M = Math.round(M * v) / v);
10391
+ let D = 0;
10392
  for (
10393
+ b &&
10394
+ (u && w !== a
10395
+ ? (s.push({ value: a }),
10396
+ w < a && D++,
10397
+ N(Math.round((w + D * S) * v) / v, a, ea(a, y, t)) && D++)
10398
+ : w < a && D++);
10399
+ D < k;
10400
+ ++D
10401
  )
10402
+ s.push({ value: Math.round((w + D * S) * v) / v });
10403
  return (
10404
+ x && u && M !== r
10405
+ ? s.length && N(s[s.length - 1].value, r, ea(r, y, t))
10406
+ ? (s[s.length - 1].value = r)
10407
+ : s.push({ value: r })
10408
+ : (x && M !== r) || s.push({ value: M }),
10409
+ s
10410
  );
10411
  })(
10412
  {
10413
+ maxTicks: s,
10414
  bounds: t.bounds,
10415
  min: t.min,
10416
  max: t.max,
10425
  this._range || this
10426
  );
10427
  return (
10428
+ "ticks" === t.bounds && j(n, this, "value"),
10429
  t.reverse
10430
+ ? (n.reverse(), (this.start = this.max), (this.end = this.min))
10431
  : ((this.start = this.min), (this.end = this.max)),
10432
+ n
10433
  );
10434
  }
10435
  configure() {
10443
  (this._startValue = e), (this._endValue = i), (this._valueRange = i - e);
10444
  }
10445
  getLabelForValue(t) {
10446
+ return li(t, this.chart.options.locale, this.options.ticks.format);
10447
  }
10448
  }
10449
+ class sa extends ia {
10450
  determineDataLimits() {
10451
  const { min: t, max: e } = this.getMinMax(!0);
10452
+ (this.min = o(t) ? t : 0),
10453
+ (this.max = o(e) ? e : 1),
10454
  this.handleTickRangeOptions();
10455
  }
10456
  computeTickLimit() {
10457
  const t = this.isHorizontal(),
10458
  e = t ? this.width : this.height,
10459
+ i = H(this.options.ticks.minRotation),
10460
  s = (t ? Math.sin(i) : Math.cos(i)) || 0.001,
10461
  n = this._resolveTickFontOptions(0);
10462
  return Math.ceil(e / Math.min(40, n.lineHeight / s));
10470
  return this._startValue + this.getDecimalForPixel(t) * this._valueRange;
10471
  }
10472
  }
10473
+ function na(t) {
10474
+ return 1 === t / Math.pow(10, Math.floor(I(t)));
10475
  }
10476
+ (sa.id = "linear"),
10477
+ (sa.defaults = { ticks: { callback: Is.formatters.numeric } });
10478
+ class oa extends $s {
10479
  constructor(t) {
10480
  super(t),
10481
  (this.start = void 0),
10484
  (this._valueRange = 0);
10485
  }
10486
  parse(t, e) {
10487
+ const i = ia.prototype.parse.apply(this, [t, e]);
10488
+ if (0 !== i) return o(i) && i > 0 ? i : null;
10489
  this._zero = !0;
10490
  }
10491
  determineDataLimits() {
10492
  const { min: t, max: e } = this.getMinMax(!0);
10493
+ (this.min = o(t) ? Math.max(0, t) : null),
10494
+ (this.max = o(e) ? Math.max(0, e) : null),
10495
  this.options.beginAtZero && (this._zero = !0),
10496
  this.handleTickRangeOptions();
10497
  }
10501
  s = this.max;
10502
  const n = (e) => (i = t ? i : e),
10503
  o = (t) => (s = e ? s : t),
10504
+ a = (t, e) => Math.pow(10, Math.floor(I(t)) + e);
10505
  i === s && (i <= 0 ? (n(1), o(10)) : (n(a(i, -1)), o(a(s, 1)))),
10506
  i <= 0 && n(a(s, -1)),
10507
  s <= 0 && o(a(i, 1)),
10515
  buildTicks() {
10516
  const t = this.options,
10517
  e = (function (t, e) {
10518
+ const i = Math.floor(I(e.max)),
10519
  s = Math.ceil(e.max / Math.pow(10, i)),
10520
  n = [];
10521
+ let o = a(t.min, Math.pow(10, Math.floor(I(e.min)))),
10522
+ r = Math.floor(I(o)),
10523
+ l = Math.floor(o / Math.pow(10, r)),
10524
+ h = r < 0 ? Math.pow(10, Math.abs(r)) : 1;
10525
  do {
10526
+ n.push({ value: o, major: na(o) }),
10527
+ ++l,
10528
+ 10 === l && ((l = 1), ++r, (h = r >= 0 ? 1 : h)),
10529
+ (o = Math.round(l * Math.pow(10, r) * h) / h);
10530
+ } while (r < i || (r === i && l < s));
10531
+ const c = a(t.max, o);
10532
+ return n.push({ value: c, major: na(o) }), n;
10533
  })({ min: this._userMin, max: this._userMax }, this);
10534
  return (
10535
+ "ticks" === t.bounds && j(e, this, "value"),
10536
  t.reverse
10537
  ? (e.reverse(), (this.start = this.max), (this.end = this.min))
10538
  : ((this.start = this.min), (this.end = this.max)),
10542
  getLabelForValue(t) {
10543
  return void 0 === t
10544
  ? "0"
10545
+ : li(t, this.chart.options.locale, this.options.ticks.format);
10546
  }
10547
  configure() {
10548
  const t = this.min;
10549
  super.configure(),
10550
+ (this._startValue = I(t)),
10551
+ (this._valueRange = I(this.max) - I(t));
10552
  }
10553
  getPixelForValue(t) {
10554
  return (
10556
  null === t || isNaN(t)
10557
  ? NaN
10558
  : this.getPixelForDecimal(
10559
+ t === this.min ? 0 : (I(t) - this._startValue) / this._valueRange
10560
  )
10561
  );
10562
  }
10565
  return Math.pow(10, this._startValue + e * this._valueRange);
10566
  }
10567
  }
10568
+ function aa(t) {
10569
  const e = t.ticks;
10570
  if (e.display && t.display) {
10571
+ const t = pi(e.backdropPadding);
10572
+ return r(e.font && e.font.size, ne.font.size) + t.height;
10573
  }
10574
  return 0;
10575
  }
10576
+ function ra(t, e, i, s, n) {
10577
  return t === s || t === n
10578
  ? { start: e - i / 2, end: e + i / 2 }
10579
  : t < s || t > n
10580
  ? { start: e - i, end: e }
10581
  : { start: e, end: e + i };
10582
  }
10583
+ function la(t) {
10584
  const e = {
10585
  l: t.left + t._padding.left,
10586
  r: t.right - t._padding.right,
10588
  b: t.bottom - t._padding.bottom,
10589
  },
10590
  i = Object.assign({}, e),
 
10591
  n = [],
10592
+ o = [],
10593
+ a = t._pointLabels.length,
10594
+ r = t.options.pointLabels,
10595
+ l = r.centerPointLabels ? D / a : 0;
10596
+ for (let u = 0; u < a; u++) {
10597
+ const a = r.setContext(t.getPointLabelContext(u));
10598
+ o[u] = a.padding;
10599
+ const f = t.getPointPosition(u, t.drawingArea + o[u], l),
10600
+ g = mi(a.font),
10601
+ p =
10602
+ ((h = t.ctx),
10603
+ (c = g),
10604
+ (d = s((d = t._pointLabels[u])) ? d : [d]),
10605
+ { w: ye(h, c.string, d), h: d.length * c.lineHeight });
10606
+ n[u] = p;
10607
+ const m = K(t.getIndexAngle(u) + l),
10608
+ b = Math.round($(m));
10609
+ ha(i, e, m, ra(b, f.x, p.w, 0, 180), ra(b, f.y, p.h, 90, 270));
10610
+ }
10611
+ var h, c, d;
10612
  t.setCenterPoint(e.l - i.l, i.r - e.r, e.t - i.t, i.b - e.b),
10613
  (t._pointLabelItems = (function (t, e, i) {
10614
  const s = [],
10615
  n = t._pointLabels.length,
10616
  o = t.options,
10617
+ a = aa(o) / 2,
10618
  r = t.drawingArea,
10619
+ l = o.pointLabels.centerPointLabels ? D / n : 0;
10620
  for (let o = 0; o < n; o++) {
10621
  const n = t.getPointPosition(o, r + a + i[o], l),
10622
+ h = Math.round($(K(n.angle + L))),
10623
  c = e[o],
10624
+ d = ua(n.y, c.h, h),
10625
+ u = ca(h),
10626
+ f = da(n.x, c.w, u);
10627
  s.push({
10628
  x: n.x,
10629
  y: d,
10635
  });
10636
  }
10637
  return s;
10638
+ })(t, n, o));
10639
  }
10640
+ function ha(t, e, i, s, n) {
10641
  const o = Math.abs(Math.sin(i)),
10642
  a = Math.abs(Math.cos(i));
10643
  let r = 0,
10651
  : n.end > e.b &&
10652
  ((l = (n.end - e.b) / a), (t.b = Math.max(t.b, e.b + l)));
10653
  }
10654
+ function ca(t) {
10655
  return 0 === t || 180 === t ? "center" : t < 180 ? "left" : "right";
10656
  }
10657
+ function da(t, e, i) {
10658
  return "right" === i ? (t -= e) : "center" === i && (t -= e / 2), t;
10659
  }
10660
+ function ua(t, e, i) {
10661
  return (
10662
  90 === i || 270 === i ? (t -= e / 2) : (i > 270 || i < 90) && (t -= e), t
10663
  );
10664
  }
10665
+ function fa(t, e, i, s) {
10666
  const { ctx: n } = t;
10667
+ if (i) n.arc(t.xCenter, t.yCenter, e, 0, O);
10668
  else {
10669
  let i = t.getPointPosition(0, e);
10670
  n.moveTo(i.x, i.y);
10672
  (i = t.getPointPosition(o, e)), n.lineTo(i.x, i.y);
10673
  }
10674
  }
10675
+ (oa.id = "logarithmic"),
10676
+ (oa.defaults = {
10677
+ ticks: { callback: Is.formatters.logarithmic, major: { enabled: !0 } },
10678
  });
10679
+ class ga extends ia {
10680
  constructor(t) {
10681
  super(t),
10682
  (this.xCenter = void 0),
10686
  (this._pointLabelItems = []);
10687
  }
10688
  setDimensions() {
10689
+ const t = (this._padding = pi(aa(this.options) / 2)),
10690
  e = (this.width = this.maxWidth - t.width),
10691
  i = (this.height = this.maxHeight - t.height);
10692
  (this.xCenter = Math.floor(this.left + e / 2 + t.left)),
10695
  }
10696
  determineDataLimits() {
10697
  const { min: t, max: e } = this.getMinMax(!1);
10698
+ (this.min = o(t) && !isNaN(t) ? t : 0),
10699
+ (this.max = o(e) && !isNaN(e) ? e : 0),
10700
  this.handleTickRangeOptions();
10701
  }
10702
  computeTickLimit() {
10703
+ return Math.ceil(this.drawingArea / aa(this.options));
10704
  }
10705
  generateTickLabels(t) {
10706
+ ia.prototype.generateTickLabels.call(this, t),
10707
  (this._pointLabels = this.getLabels()
10708
  .map((t, e) => {
10709
+ const i = c(this.options.pointLabels.callback, [t, e], this);
10710
  return i || 0 === i ? i : "";
10711
  })
10712
  .filter((t, e) => this.chart.getDataVisibility(e)));
10714
  fit() {
10715
  const t = this.options;
10716
  t.display && t.pointLabels.display
10717
+ ? la(this)
10718
  : this.setCenterPoint(0, 0, 0, 0);
10719
  }
10720
  setCenterPoint(t, e, i, s) {
10726
  ));
10727
  }
10728
  getIndexAngle(t) {
10729
+ return K(
10730
+ t * (O / (this._pointLabels.length || 1)) +
10731
+ H(this.options.startAngle || 0)
10732
  );
10733
  }
10734
  getDistanceFromCenterForValue(t) {
10735
+ if (i(t)) return NaN;
10736
  const e = this.drawingArea / (this.max - this.min);
10737
  return this.options.reverse ? (this.max - t) * e : (t - this.min) * e;
10738
  }
10739
  getValueForDistanceFromCenter(t) {
10740
+ if (i(t)) return NaN;
10741
  const e = t / (this.drawingArea / (this.max - this.min));
10742
  return this.options.reverse ? this.max - e : this.min + e;
10743
  }
10746
  if (t >= 0 && t < e.length) {
10747
  const i = e[t];
10748
  return (function (t, e, i) {
10749
+ return _i(t, { label: i, index: e, type: "pointLabel" });
10750
  })(this.getContext(), t, i);
10751
  }
10752
  }
10753
  getPointPosition(t, e, i = 0) {
10754
+ const s = this.getIndexAngle(t) - L + i;
10755
  return {
10756
  x: Math.cos(s) * e + this.xCenter,
10757
  y: Math.sin(s) * e + this.yCenter,
10777
  const i = this.ctx;
10778
  i.save(),
10779
  i.beginPath(),
10780
+ fa(
10781
  this,
10782
  this.getDistanceFromCenterForValue(this._endValue),
10783
  e,
10792
  drawGrid() {
10793
  const t = this.ctx,
10794
  e = this.options,
10795
+ { angleLines: s, grid: n } = e,
10796
+ o = this._pointLabels.length;
10797
+ let a, r, l;
10798
  if (
10799
  (e.pointLabels.display &&
10800
  (function (t, e) {
10801
  const {
10802
+ ctx: s,
10803
+ options: { pointLabels: n },
10804
  } = t;
10805
+ for (let o = e - 1; o >= 0; o--) {
10806
+ const e = n.setContext(t.getPointLabelContext(o)),
10807
+ a = mi(e.font),
10808
  {
10809
+ x: r,
10810
+ y: l,
10811
+ textAlign: h,
10812
+ left: c,
10813
+ top: d,
10814
+ right: u,
10815
+ bottom: f,
10816
+ } = t._pointLabelItems[o],
10817
+ { backdropColor: g } = e;
10818
+ if (!i(g)) {
10819
+ const t = gi(e.borderRadius),
10820
+ i = pi(e.backdropPadding);
10821
+ s.fillStyle = g;
10822
+ const n = c - i.left,
10823
+ o = d - i.top,
10824
+ a = u - c + i.width,
10825
+ r = f - d + i.height;
10826
+ Object.values(t).some((t) => 0 !== t)
10827
+ ? (s.beginPath(),
10828
+ Le(s, { x: n, y: o, w: a, h: r, radius: t }),
10829
+ s.fill())
10830
+ : s.fillRect(n, o, a, r);
10831
  }
10832
+ Ae(s, t._pointLabels[o], r, l + a.lineHeight / 2, a, {
10833
  color: e.color,
10834
+ textAlign: h,
10835
  textBaseline: "middle",
10836
  });
10837
  }
10838
+ })(this, o),
10839
+ n.display &&
10840
  this.ticks.forEach((t, e) => {
10841
  if (0 !== e) {
10842
+ r = this.getDistanceFromCenterForValue(t.value);
10843
  !(function (t, e, i, s) {
10844
  const n = t.ctx,
10845
  o = e.circular,
10854
  n.setLineDash(e.borderDash),
10855
  (n.lineDashOffset = e.borderDashOffset),
10856
  n.beginPath(),
10857
+ fa(t, i, o, s),
10858
  n.closePath(),
10859
  n.stroke(),
10860
  n.restore());
10861
+ })(this, n.setContext(this.getContext(e - 1)), r, o);
10862
  }
10863
  }),
10864
+ s.display)
10865
  ) {
10866
+ for (t.save(), a = o - 1; a >= 0; a--) {
10867
+ const i = s.setContext(this.getPointLabelContext(a)),
10868
+ { color: n, lineWidth: o } = i;
10869
+ o &&
10870
  n &&
10871
+ ((t.lineWidth = o),
10872
  (t.strokeStyle = n),
10873
+ t.setLineDash(i.borderDash),
10874
+ (t.lineDashOffset = i.borderDashOffset),
10875
+ (r = this.getDistanceFromCenterForValue(
10876
  e.ticks.reverse ? this.min : this.max
10877
  )),
10878
+ (l = this.getPointPosition(a, r)),
10879
  t.beginPath(),
10880
  t.moveTo(this.xCenter, this.yCenter),
10881
+ t.lineTo(l.x, l.y),
10882
  t.stroke());
10883
  }
10884
  t.restore();
10900
  this.ticks.forEach((s, a) => {
10901
  if (0 === a && !e.reverse) return;
10902
  const r = i.setContext(this.getContext(a)),
10903
+ l = mi(r.font);
10904
  if (
10905
  ((n = this.getDistanceFromCenterForValue(this.ticks[a].value)),
10906
  r.showLabelBackdrop)
10908
  (t.font = l.string),
10909
  (o = t.measureText(s.label).width),
10910
  (t.fillStyle = r.backdropColor);
10911
+ const e = pi(r.backdropPadding);
10912
  t.fillRect(
10913
  -o / 2 - e.left,
10914
  -n - l.size / 2 - e.top,
10916
  l.size + e.height
10917
  );
10918
  }
10919
+ Ae(t, s.label, 0, -n, l, { color: r.color });
10920
  }),
10921
  t.restore();
10922
  }
10923
  drawTitle() {}
10924
  }
10925
+ (ga.id = "radialLinear"),
10926
+ (ga.defaults = {
10927
  display: !0,
10928
  animate: !0,
10929
  position: "chartArea",
10935
  },
10936
  grid: { circular: !1 },
10937
  startAngle: 0,
10938
+ ticks: { showLabelBackdrop: !0, callback: Is.formatters.numeric },
10939
  pointLabels: {
10940
  backdropColor: void 0,
10941
  backdropPadding: 2,
10946
  centerPointLabels: !1,
10947
  },
10948
  }),
10949
+ (ga.defaultRoutes = {
10950
  "angleLines.color": "borderColor",
10951
  "pointLabels.color": "color",
10952
  "ticks.color": "color",
10953
  }),
10954
+ (ga.descriptors = { angleLines: { _fallback: "grid" } });
10955
+ const pa = {
10956
  millisecond: { common: !0, size: 1, steps: 1e3 },
10957
  second: { common: !0, size: 1e3, steps: 60 },
10958
  minute: { common: !0, size: 6e4, steps: 60 },
10963
  quarter: { common: !1, size: 7884e6, steps: 4 },
10964
  year: { common: !0, size: 3154e7 },
10965
  },
10966
+ ma = Object.keys(pa);
10967
+ function ba(t, e) {
10968
  return t - e;
10969
  }
10970
+ function xa(t, e) {
10971
+ if (i(e)) return null;
10972
+ const s = t._adapter,
10973
+ { parser: n, round: a, isoWeekday: r } = t._parseOpts;
10974
+ let l = e;
10975
  return (
10976
+ "function" == typeof n && (l = n(l)),
10977
+ o(l) || (l = "string" == typeof n ? s.parse(l, n) : s.parse(l)),
10978
+ null === l
10979
  ? null
10980
+ : (a &&
10981
+ (l =
10982
+ "week" !== a || (!B(r) && !0 !== r)
10983
+ ? s.startOf(l, a)
10984
+ : s.startOf(l, "isoWeek", r)),
10985
+ +l)
10986
  );
10987
  }
10988
+ function _a(t, e, i, s) {
10989
+ const n = ma.length;
10990
+ for (let o = ma.indexOf(t); o < n - 1; ++o) {
10991
+ const t = pa[ma[o]],
10992
  n = t.steps ? t.steps : Number.MAX_SAFE_INTEGER;
10993
+ if (t.common && Math.ceil((i - e) / (n * t.size)) <= s) return ma[o];
10994
  }
10995
+ return ma[n - 1];
10996
  }
10997
+ function ya(t, e, i) {
10998
  if (i) {
10999
  if (i.length) {
11000
+ const { lo: s, hi: n } = tt(i, e);
11001
  t[i[s] >= e ? i[s] : i[n]] = !0;
11002
  }
11003
  } else t[e] = !0;
11004
  }
11005
+ function va(t, e, i) {
11006
  const s = [],
11007
  n = {},
11008
  o = e.length;
11021
  })(t, s, n, i)
11022
  : s;
11023
  }
11024
+ class wa extends $s {
11025
  constructor(t) {
11026
  super(t),
11027
  (this._cache = { data: [], labels: [], all: [] }),
11033
  }
11034
  init(t, e) {
11035
  const i = t.time || (t.time = {}),
11036
+ s = (this._adapter = new wn._date(t.adapters.date));
11037
+ s.init(e),
11038
+ b(i.displayFormats, s.formats()),
11039
  (this._parseOpts = {
11040
  parser: i.parser,
11041
  round: i.round,
11045
  (this._normalized = e.normalized);
11046
  }
11047
  parse(t, e) {
11048
+ return void 0 === t ? null : xa(this, t);
11049
  }
11050
  beforeLayout() {
11051
  super.beforeLayout(), (this._cache = { data: [], labels: [], all: [] });
11057
  let {
11058
  min: s,
11059
  max: n,
11060
+ minDefined: a,
11061
+ maxDefined: r,
11062
  } = this.getUserBounds();
11063
+ function l(t) {
11064
+ a || isNaN(t.min) || (s = Math.min(s, t.min)),
11065
+ r || isNaN(t.max) || (n = Math.max(n, t.max));
11066
  }
11067
+ (a && r) ||
11068
+ (l(this._getLabelBounds()),
11069
  ("ticks" === t.bounds && "labels" === t.ticks.source) ||
11070
+ l(this.getMinMax(!1))),
11071
+ (s = o(s) && !isNaN(s) ? s : +e.startOf(Date.now(), i)),
11072
+ (n = o(n) && !isNaN(n) ? n : +e.endOf(Date.now(), i) + 1),
11073
  (this.min = Math.min(s, n - 1)),
11074
  (this.max = Math.max(s + 1, n));
11075
  }
11092
  ((this.min = this._userMin || s[0]),
11093
  (this.max = this._userMax || s[s.length - 1]));
11094
  const n = this.min,
11095
+ o = st(s, n, this.max);
11096
  return (
11097
  (this._unit =
11098
  e.unit ||
11099
  (i.autoSkip
11100
+ ? _a(e.minUnit, this.min, this.max, this._getLabelCapacity(n))
11101
  : (function (t, e, i, s, n) {
11102
+ for (let o = ma.length - 1; o >= ma.indexOf(i); o--) {
11103
+ const i = ma[o];
11104
+ if (pa[i].common && t._adapter.diff(n, s, i) >= e - 1)
11105
  return i;
11106
  }
11107
+ return ma[i ? ma.indexOf(i) : 0];
11108
  })(this, o.length, e.minUnit, this.min, this.max))),
11109
  (this._majorUnit =
11110
  i.major.enabled && "year" !== this._unit
11111
  ? (function (t) {
11112
+ for (let e = ma.indexOf(t) + 1, i = ma.length; e < i; ++e)
11113
+ if (pa[ma[e]].common) return ma[e];
11114
  })(this._unit)
11115
  : void 0),
11116
  this.initOffsets(s),
11117
  t.reverse && o.reverse(),
11118
+ va(this, o, this._majorUnit)
11119
  );
11120
  }
11121
+ afterAutoSkip() {
11122
+ this.options.offsetAfterAutoskip &&
11123
+ this.initOffsets(this.ticks.map((t) => +t.value));
11124
+ }
11125
  initOffsets(t) {
11126
  let e,
11127
  i,
11137
  ? i
11138
  : (i - this.getDecimalForValue(t[t.length - 2])) / 2));
11139
  const o = t.length < 3 ? 0.5 : 0.25;
11140
+ (s = Z(s, 0, o)),
11141
+ (n = Z(n, 0, o)),
11142
  (this._offsets = { start: s, end: n, factor: 1 / (s + 1 + n) });
11143
  }
11144
  _generate() {
11147
  i = this.max,
11148
  s = this.options,
11149
  n = s.time,
11150
+ o = n.unit || _a(n.minUnit, e, i, this._getLabelCapacity(e)),
11151
+ a = r(n.stepSize, 1),
11152
+ l = "week" === o && n.isoWeekday,
11153
+ h = B(l) || !0 === l,
11154
+ c = {};
11155
+ let d,
11156
+ u,
11157
+ f = e;
11158
  if (
11159
+ (h && (f = +t.startOf(f, "isoWeek", l)),
11160
+ (f = +t.startOf(f, h ? "day" : o)),
11161
  t.diff(i, e, o) > 1e5 * a)
11162
  )
11163
  throw new Error(
11164
  e + " and " + i + " are too far apart with stepSize of " + a + " " + o
11165
  );
11166
+ const g = "data" === s.ticks.source && this.getDataTimestamps();
11167
+ for (d = f, u = 0; d < i; d = +t.add(d, a, o), u++) ya(c, d, g);
11168
  return (
11169
+ (d !== i && "ticks" !== s.bounds && 1 !== u) || ya(c, d, g),
11170
+ Object.keys(c)
11171
  .sort((t, e) => t - e)
11172
  .map((t) => +t)
11173
  );
11186
  r = this._majorUnit,
11187
  l = a && o[a],
11188
  h = r && o[r],
11189
+ d = i[e],
11190
+ u = r && h && d && d.major,
11191
+ f = this._adapter.format(t, s || (u ? h : l)),
11192
+ g = n.ticks.callback;
11193
+ return g ? c(g, [f, e, i], this) : f;
11194
  }
11195
  generateTickLabels(t) {
11196
  let e, i, s;
11213
  _getLabelSize(t) {
11214
  const e = this.options.ticks,
11215
  i = this.ctx.measureText(t).width,
11216
+ s = H(this.isHorizontal() ? e.maxRotation : e.minRotation),
11217
  n = Math.cos(s),
11218
  o = Math.sin(s),
11219
  a = this._resolveTickFontOptions(0).size;
11223
  const e = this.options.time,
11224
  i = e.displayFormats,
11225
  s = i[e.unit] || i.millisecond,
11226
+ n = this._tickFormatFunction(t, 0, va(this, [t], this._majorUnit), s),
11227
  o = this._getLabelSize(n),
11228
  a =
11229
  Math.floor(
11248
  let e, i;
11249
  if (t.length) return t;
11250
  const s = this.getLabels();
11251
+ for (e = 0, i = s.length; e < i; ++e) t.push(xa(this, s[e]));
11252
  return (this._cache.labels = this._normalized ? t : this.normalize(t));
11253
  }
11254
  normalize(t) {
11255
+ return rt(t.sort(ba));
11256
  }
11257
  }
11258
+ function Ma(t, e, i) {
11259
  let s,
11260
  n,
11261
  o,
11263
  r = 0,
11264
  l = t.length - 1;
11265
  i
11266
+ ? (e >= t[r].pos && e <= t[l].pos && ({ lo: r, hi: l } = et(t, "pos", e)),
11267
  ({ pos: s, time: o } = t[r]),
11268
  ({ pos: n, time: a } = t[l]))
11269
  : (e >= t[r].time &&
11270
  e <= t[l].time &&
11271
+ ({ lo: r, hi: l } = et(t, "time", e)),
11272
  ({ time: s, pos: o } = t[r]),
11273
  ({ time: n, pos: a } = t[l]));
11274
  const h = n - s;
11275
  return h ? o + ((a - o) * (e - s)) / h : o;
11276
  }
11277
+ (wa.id = "time"),
11278
+ (wa.defaults = {
11279
  bounds: "data",
11280
  adapters: {},
11281
  time: {
11288
  },
11289
  ticks: { source: "auto", major: { enabled: !1 } },
11290
  });
11291
+ class ka extends wa {
11292
  constructor(t) {
11293
  super(t),
11294
  (this._table = []),
11298
  initOffsets() {
11299
  const t = this._getTimestampsForTable(),
11300
  e = (this._table = this.buildLookupTable(t));
11301
+ (this._minPos = Ma(e, this.min)),
11302
+ (this._tableRange = Ma(e, this.max) - this._minPos),
11303
  super.initOffsets(t);
11304
  }
11305
  buildLookupTable(t) {
11339
  );
11340
  }
11341
  getDecimalForValue(t) {
11342
+ return (Ma(this._table, t) - this._minPos) / this._tableRange;
11343
  }
11344
  getValueForPixel(t) {
11345
  const e = this._offsets,
11346
  i = this.getDecimalForPixel(t) / e.factor - e.end;
11347
+ return Ma(this._table, i * this._tableRange + this._minPos, !0);
11348
  }
11349
  }
11350
+ (ka.id = "timeseries"), (ka.defaults = wa.defaults);
11351
+ var Sa = Object.freeze({
11352
  __proto__: null,
11353
+ CategoryScale: ta,
11354
+ LinearScale: sa,
11355
+ LogarithmicScale: oa,
11356
+ RadialLinearScale: ga,
11357
+ TimeScale: wa,
11358
+ TimeSeriesScale: ka,
11359
  });
11360
  return (
11361
+ bn.register(Bn, Sa, co, Jo),
11362
+ (bn.helpers = { ...Ti }),
11363
+ (bn._adapters = wn),
11364
+ (bn.Animation = xs),
11365
+ (bn.Animations = ys),
11366
+ (bn.animator = mt),
11367
+ (bn.controllers = Us.controllers.items),
11368
+ (bn.DatasetController = Ls),
11369
+ (bn.Element = Es),
11370
+ (bn.elements = co),
11371
+ (bn.Interaction = Vi),
11372
+ (bn.layouts = Zi),
11373
+ (bn.platforms = ps),
11374
+ (bn.Scale = $s),
11375
+ (bn.Ticks = Is),
11376
+ Object.assign(bn, Bn, Sa, co, Jo, ps),
11377
+ (bn.Chart = bn),
11378
+ "undefined" != typeof window && (window.Chart = bn),
11379
+ bn
11380
  );
11381
  });
assets/js/jquery-jvectormap-world-merc.js ADDED
@@ -0,0 +1 @@
 
1
+ jQuery.fn.vectorMap('addMap', 'world_merc',{"insets": [{"width": 900, "top": 0, "height": 583.0802520919394, "bbox": [{"y": -18449355.69035302, "x": -20004297.151525836}, {"y": 7485321.539093307, "x": 20026572.394749384}], "left": 0}], "paths": {"BD": {"path": "M651.84,359.63l-0.6,-2.05l-1.36,-1.76l-2.31,-0.11l-0.41,0.48l0.2,0.98l-0.54,1.03l-0.71,-0.37l-0.68,0.36l-1.19,-0.37l-0.37,-2.06l-0.81,-1.92l0.39,-1.52l-0.21,-0.46l-1.16,-0.55l0.3,-0.55l1.48,-0.98l0.03,-0.64l-1.56,-1.27l0.56,-1.2l1.6,0.97l1.04,0.16l0.18,1.62l0.33,0.35l5.65,0.65l-0.86,1.73l-1.21,0.35l-0.77,1.56l0.07,0.46l1.37,1.41l0.68,-0.19l0.42,-1.44l1.21,3.96l-0.03,1.26l-0.32,-0.15l-0.41,0.28Z", "name": "Bangladesh"}, "BE": {"path": "M429.3,264.88l1.93,0.28l2.07,-0.74l1.41,1.55l1.25,0.86l-0.23,2.13l-0.68,0.42l-0.18,1.46l-1.63,-1.32l-1.4,0.17l-2.72,-3.22l-1.17,-0.21l-0.2,-0.77l1.57,-0.62Z", "name": "Belgium"}, "BF": {"path": "M421.42,377.38l-0.11,0.96l0.34,1.18l1.4,1.73l0.07,1.11l0.32,0.37l2.56,0.52l-0.04,1.3l-0.38,0.54l-1.07,0.21l-0.73,1.19l-0.63,0.21l-3.22,-0.25l-0.94,0.39l-5.4,-0.05l-0.39,0.38l0.16,2.75l-1.23,-0.43l-1.17,0.1l-0.89,0.57l-2.27,-1.73l-0.13,-1.12l0.61,-0.96l0.01,-0.93l1.87,-2.0l0.44,-1.83l0.43,-0.39l1.28,0.26l1.05,-0.52l0.47,-0.73l1.84,-1.1l0.55,-0.84l2.2,-1.01l1.15,-0.31l0.72,0.46l1.13,-0.01Z", "name": "Burkina Faso"}, "BG": {"path": "M491.72,293.09l-0.93,1.06l-0.91,2.45l0.52,1.52l-1.65,-0.27l-2.55,1.06l-0.27,1.69l-1.79,0.25l-2.03,-1.11l-1.92,0.88l-1.4,-0.07l-0.15,-1.87l-1.09,-1.09l0.34,-1.71l0.91,-1.02l0.01,-0.52l-1.15,-1.41l-0.06,-1.14l0.44,0.87l0.46,0.21l0.87,-0.23l1.91,0.53l3.68,0.18l1.44,-0.92l2.7,-0.74l1.67,1.16l0.95,0.26Z", "name": "Bulgaria"}, "BA": {"path": "M463.49,287.91l2.09,0.57l1.72,-0.03l1.56,0.78l-0.4,0.99l1.14,1.61l-0.27,1.19l-1.82,1.31l-0.37,1.54l-1.65,-0.96l-0.89,-1.36l-2.11,-2.07l-1.65,-2.57l0.25,-0.7l0.45,0.41l0.59,-0.06l0.43,-0.59l0.92,-0.06Z", "name": "Bosnia and Herz."}, "BN": {"path": "M707.48,403.47l0.69,-0.65l1.41,-0.91l-0.15,1.64l-0.81,-0.05l-0.61,0.58l-0.53,-0.6Z", "name": "Brunei"}, "BO": {"path": "M263.83,471.11l-3.09,-0.24l-0.38,0.24l-0.7,1.56l-1.31,-1.57l-3.28,-0.66l-2.38,2.47l-1.3,0.27l-0.88,-3.36l-1.31,-2.93l0.74,-2.43l-0.12,-0.42l-1.2,-1.03l-0.37,-1.92l-1.09,-1.59l1.46,-2.61l-0.97,-2.36l0.48,-1.07l-0.35,-0.74l0.91,-1.33l0.16,-3.89l0.5,-1.18l-1.81,-3.45l2.46,0.08l0.8,-0.85l3.4,-1.92l2.66,-0.35l-0.19,1.39l0.3,1.07l-0.05,1.98l2.72,2.29l2.88,0.49l0.89,0.87l1.79,0.59l0.98,0.71l1.71,0.05l1.17,0.61l0.6,2.74l-0.7,0.54l0.96,3.03l0.37,0.28l4.3,0.1l-0.25,1.22l0.27,1.03l1.43,0.92l0.5,1.38l-0.41,1.9l-0.65,1.11l0.13,1.37l-2.69,-1.68l-2.4,-0.03l-4.36,0.77l-1.49,2.56l-0.1,1.55l-0.75,2.44Z", "name": "Bolivia"}, "JP": {"path": "M781.1,291.58l1.81,0.77l1.63,-1.08l0.4,2.83l-3.6,1.02l-1.98,3.05l-3.61,-2.12l-0.58,0.21l-1.27,3.44l-2.14,0.04l-0.3,-2.88l1.09,-2.32l2.44,-0.17l0.37,-0.34l1.26,-6.78l2.45,3.07l2.03,1.27ZM773.56,314.42l-0.92,2.42l0.38,1.64l-1.15,1.91l-3.02,1.35l-4.59,0.3l-3.33,3.22l-1.25,-0.86l-0.09,-2.06l-0.46,-0.38l-4.35,0.67l-3.0,1.42l-2.84,0.06l-0.37,0.26l0.11,0.44l2.34,2.04l-1.55,4.67l-1.25,0.95l-0.8,-0.75l0.56,-2.43l-0.2,-0.44l-1.47,-0.8l-0.77,-1.54l2.14,-0.91l1.27,-1.83l2.45,-1.53l1.83,-2.06l4.77,-0.88l2.6,0.61l0.45,-0.22l2.39,-5.05l1.27,1.14l0.53,0.01l5.1,-4.39l1.68,-4.08l-0.39,-3.75l0.92,-1.82l2.11,-0.49l1.24,4.16l-0.07,2.45l-2.25,3.13l-0.03,3.43ZM757.77,324.02l0.2,0.64l-1.01,1.31l-1.17,-0.72l-1.28,0.7l-0.69,1.54l-1.01,-0.53l0.01,-1.04l1.14,-1.49l1.58,0.15l0.85,-1.05l1.38,0.49Z", "name": "Japan"}, "BI": {"path": "M495.45,425.39l-1.08,-2.99l1.14,-0.11l0.64,-1.19l0.76,0.09l0.65,1.83l-2.1,2.37Z", "name": "Burundi"}, "BJ": {"path": "M429.57,385.57l-0.05,0.81l0.5,1.35l-0.42,0.87l0.17,0.79l-1.82,2.14l-0.57,1.77l-0.08,5.44l-1.41,0.2l-0.48,-1.36l0.11,-5.73l-0.52,-0.7l-0.2,-1.35l-1.48,-1.49l0.22,-0.91l0.89,-0.43l0.42,-0.93l1.27,-0.36l1.22,-1.35l0.61,-0.0l1.62,1.25Z", "name": "Benin"}, "BT": {"path": "M650.32,342.67l0.85,0.75l-0.12,1.18l-3.76,-0.12l-1.57,0.41l-1.93,-0.91l1.49,-2.09l1.12,-0.6l1.62,0.6l1.33,0.09l0.98,0.68Z", "name": "Bhutan"}, "JM": {"path": "M228.38,368.9l-0.8,0.41l-2.27,-1.09l0.84,-0.25l2.14,0.31l1.18,0.59l-1.09,0.03Z", "name": "Jamaica"}, "BW": {"path": "M483.92,460.24l2.27,4.08l2.83,2.92l0.96,0.32l0.77,2.5l2.13,0.63l1.04,0.8l-3.01,1.7l-2.32,2.09l-1.54,2.79l-1.52,0.46l-0.64,2.01l-1.34,0.54l-1.84,-0.12l-1.21,-0.77l-1.36,-0.31l-1.22,0.64l-0.75,1.42l-2.31,1.98l-1.39,0.22l-0.36,-0.63l0.16,-1.82l-1.48,-2.63l-0.62,-0.44l-0.0,-7.35l2.08,-0.08l0.38,-0.4l0.07,-9.12l1.56,-0.08l3.63,-0.87l0.8,0.91l0.52,0.07l1.5,-0.97l2.2,-0.5Z", "name": "Botswana"}, "BR": {"path": "M259.98,404.95l3.24,0.7l0.65,-0.53l4.55,-1.32l1.08,-1.06l-0.02,-0.64l0.55,-0.05l0.28,0.28l-0.26,0.87l0.22,0.48l0.73,0.32l0.4,0.81l-0.62,0.86l-0.4,2.13l0.82,2.56l1.69,1.43l1.43,0.2l3.17,-1.68l3.18,0.3l0.65,-0.75l-0.27,-0.92l1.9,-0.09l2.39,0.99l1.06,-0.61l0.84,0.78l1.2,-0.18l1.18,-1.06l0.84,-1.94l1.36,-2.11l0.37,-0.05l1.89,5.46l1.33,0.59l0.05,1.28l-1.77,1.94l0.02,0.56l1.02,0.87l4.07,0.36l0.08,2.16l0.66,0.29l1.74,-1.5l6.97,2.32l1.02,1.22l-0.35,1.18l0.49,0.5l2.81,-0.74l4.77,1.3l3.75,-0.08l3.57,2.0l3.29,2.86l1.93,0.73l2.12,0.12l0.71,0.62l1.21,4.52l-0.95,4.0l-4.72,5.09l-1.64,2.95l-1.72,2.07l-0.8,0.3l-0.72,2.05l0.18,4.81l-0.94,5.62l-0.81,1.15l-0.43,3.44l-2.55,3.58l-0.4,2.59l-1.86,1.08l-0.67,1.57l-2.54,0.01l-3.94,1.05l-1.83,1.24l-2.87,0.85l-3.03,2.27l-2.2,2.92l-0.36,2.08l0.4,1.64l-0.45,2.73l-0.52,1.26l-1.77,1.62l-2.75,5.05l-3.83,3.63l-1.23,2.92l-1.18,1.22l-0.37,-0.92l0.96,-1.23l0.01,-0.48l-1.52,-2.09l-4.56,-3.52l-1.03,-0.01l-2.38,-2.13l-0.85,0.0l5.38,-5.77l3.77,-2.69l0.21,-2.55l-1.34,-1.86l-0.92,0.07l0.59,-2.44l0.01,-1.59l-1.11,-0.85l-1.75,0.31l-0.44,-3.22l-0.52,-0.97l-1.88,-0.9l-1.24,0.48l-2.17,-0.43l0.15,-3.31l-0.63,-1.37l0.67,-0.74l-0.22,-1.37l0.66,-1.16l0.44,-2.08l-0.61,-1.86l-1.4,-0.87l-0.2,-0.77l0.34,-1.41l-0.38,-0.49l-4.52,-0.1l-0.72,-2.27l0.59,-0.42l-0.03,-1.12l-0.5,-0.87l-0.32,-1.71l-1.45,-0.76l-1.63,-0.02l-1.05,-0.73l-1.6,-0.48l-1.13,-1.0l-2.69,-0.41l-2.47,-2.08l0.13,-4.38l-0.45,-0.45l-3.46,0.5l-3.44,1.95l-0.6,0.74l-2.89,-0.17l-1.47,0.42l-0.72,-0.18l0.15,-3.54l-0.64,-0.34l-1.94,1.42l-1.87,-0.06l-0.83,-1.19l-1.38,-0.27l0.21,-1.01l-1.35,-1.5l-0.88,-1.92l0.56,-0.6l-0.0,-0.81l1.29,-0.62l0.22,-0.43l-0.22,-1.19l0.61,-0.91l0.15,-0.99l2.65,-1.58l1.99,-0.47l0.42,-0.36l2.06,0.11l0.42,-0.33l1.19,-8.0l-0.41,-1.56l-1.1,-1.0l0.01,-1.33l1.91,-0.42l0.08,-0.96l-0.33,-0.43l-1.14,-0.2l-0.02,-0.83l4.47,0.05l0.82,-0.67l0.82,1.81l0.8,0.07l1.15,1.1l2.26,-0.05l0.71,-0.83l2.78,-0.96l0.48,-1.13l1.6,-0.64l0.24,-0.47l-0.48,-0.83l-1.83,-0.19l-0.36,-3.22Z", "name": "Brazil"}, "BS": {"path": "M227.69,345.88l0.0,-0.01l0.0,0.0l-0.0,0.01ZM226.4,353.1l-0.48,-1.18l-0.85,-0.78l0.36,-1.17l0.95,2.03l0.01,1.1ZM225.65,345.38l-1.96,0.32l-0.04,-0.26l0.74,-0.14l1.26,0.08Z", "name": "Bahamas"}, "BY": {"path": "M493.82,245.43l0.3,0.93l0.53,0.25l1.16,-0.47l2.08,0.9l0.2,1.73l-0.48,1.43l1.57,2.82l0.93,0.75l0.13,0.97l1.58,0.7l0.48,0.74l-0.6,0.57l-1.85,-0.13l-0.76,0.48l-0.12,0.47l1.08,3.5l-1.96,0.33l-0.87,1.12l-0.12,1.49l-0.67,-0.22l-2.03,0.17l-0.52,-0.75l-0.57,-0.09l-0.72,0.54l-0.9,-0.5l-1.91,-0.08l-2.74,-0.95l-2.61,-0.34l-2.01,0.09l-1.52,1.11l-0.65,0.08l-0.07,-1.5l-0.64,-1.57l1.4,-1.01l0.01,-1.65l-0.7,-1.69l-0.08,-1.37l2.2,-0.03l2.72,-1.61l0.73,-2.54l2.1,-1.69l-0.2,-1.69l3.82,-2.26l2.27,0.97Z", "name": "Belarus"}, "BZ": {"path": "M198.03,374.09l0.1,-4.57l0.69,-0.06l0.74,-1.32l0.34,0.28l-0.4,1.33l0.17,0.59l-0.34,2.3l-1.3,1.44Z", "name": "Belize"}, "RU": {"path": "M491.5,228.55l2.65,-2.55l-0.01,-0.58l-2.35,-2.15l7.46,-9.43l1.0,-2.89l-0.09,-0.41l-3.55,-3.64l0.93,-3.78l-2.18,-4.19l1.62,-5.27l-2.85,-6.95l2.24,-4.74l-0.06,-0.43l-3.73,-4.33l0.33,-4.4l1.87,-0.61l4.26,-2.85l2.35,-2.28l3.83,4.05l6.96,1.77l9.34,7.63l1.83,2.99l0.16,4.03l-2.62,3.11l-3.84,1.55l-11.03,-4.69l-2.16,0.81l-0.14,0.63l3.99,4.45l0.31,8.71l5.34,3.55l0.64,-0.27l0.32,-2.78l-1.43,-2.53l1.23,-1.72l5.74,3.47l0.43,-0.01l2.11,-1.42l0.15,-0.48l-1.59,-4.12l5.51,-5.69l1.99,0.31l2.25,2.09l0.65,-0.16l1.46,-4.3l-2.03,-4.0l1.18,-3.78l-1.5,-3.67l5.98,1.86l1.2,3.14l-2.74,0.7l-0.3,0.39l0.02,3.61l2.07,2.45l0.43,0.11l3.87,-1.38l0.85,-4.25l13.69,-8.82l1.16,0.21l-2.17,3.65l0.26,0.59l3.11,0.7l0.4,-0.14l1.68,-2.16l4.51,-0.18l3.61,-2.68l2.61,3.78l0.67,-0.02l2.85,-4.55l-0.0,-0.43l-2.5,-3.89l1.03,-1.89l7.03,2.08l3.39,2.18l9.05,7.85l0.62,-0.13l1.64,-3.95l-2.48,-3.58l-0.07,-1.39l-0.31,-0.37l-2.62,-0.61l0.73,-3.21l-1.33,-5.76l-0.07,-2.28l4.55,-7.04l1.67,-7.53l1.59,-1.44l6.17,2.09l0.48,4.29l-2.34,6.42l1.55,2.76l0.79,5.18l-0.57,9.85l2.73,4.33l-1.02,4.26l-4.88,9.07l0.23,0.57l2.86,0.92l0.49,-0.22l0.94,-2.13l2.83,-1.82l0.65,-3.1l2.12,-3.05l-1.37,-4.06l1.14,-4.42l-0.31,-0.49l-2.47,-0.52l-0.55,-3.59l1.95,-7.61l-3.13,-6.05l4.31,-5.2l-0.45,-5.83l0.53,-0.08l1.2,4.22l-0.98,7.66l0.21,0.4l2.68,1.42l0.58,-0.43l-1.09,-5.45l3.9,-2.98l4.9,-0.41l4.5,4.5l0.49,0.06l0.17,-0.47l-2.21,-6.76l-0.24,-8.85l4.01,-1.66l5.93,0.39l5.54,-1.19l0.28,-0.55l-1.97,-4.64l2.73,-5.9l2.89,-0.36l4.78,-4.84l6.49,-1.33l1.07,-2.85l6.11,-0.9l1.91,2.17l0.58,0.02l5.5,-5.45l4.43,0.17l0.41,-0.34l0.68,-4.62l2.32,-4.63l5.58,-4.48l3.69,3.23l-3.04,2.5l0.14,0.69l5.42,1.64l0.64,5.13l0.7,0.21l2.17,-2.49l6.98,0.14l5.48,5.07l1.92,3.72l-0.59,4.98l-2.66,2.78l-6.56,5.27l-1.96,2.84l0.18,0.6l3.08,1.27l3.68,2.26l0.45,-0.02l1.76,-1.33l1.14,5.11l0.34,0.31l0.41,-0.22l1.03,-2.14l3.75,-1.32l7.65,1.4l0.57,3.81l0.35,0.34l10.47,1.28l0.45,-0.39l0.13,-6.16l4.81,1.41l3.93,-0.03l3.85,4.37l1.1,5.17l-1.42,3.65l3.15,6.24l4.05,3.25l0.63,-0.2l2.24,-7.6l3.55,3.15l0.44,0.06l4.09,-2.03l4.67,2.34l0.49,-0.1l1.68,-2.01l3.85,1.04l0.49,-0.48l-1.76,-7.3l3.0,-3.3l22.19,5.31l2.15,4.74l6.55,5.95l10.36,-1.34l4.76,1.21l1.93,2.89l-0.3,5.24l3.26,2.4l3.66,-1.4l4.3,-0.18l4.84,1.4l4.5,-0.75l4.22,6.04l0.56,0.1l3.1,-2.22l0.13,-0.49l-1.96,-4.39l0.94,-2.74l7.63,1.95l5.23,-0.41l7.05,3.36l9.59,8.27l6.43,6.42l-0.21,3.79l1.82,1.88l0.45,0.06l0.21,-0.41l-0.52,-4.08l6.13,0.86l4.58,5.48l-2.15,2.3l-3.97,0.6l-0.34,0.39l-0.06,5.64l-0.78,0.94l-1.98,-0.15l-1.91,-1.99l-3.16,-1.63l-0.77,-2.69l-2.54,-0.99l-2.81,0.69l-1.11,-1.73l0.5,-2.12l-0.56,-0.45l-3.0,1.46l-0.2,0.51l1.06,2.68l-1.31,2.33l-3.03,2.42l-3.08,-0.41l-0.37,0.63l2.22,3.03l1.47,4.59l1.16,1.53l0.26,2.04l-0.46,1.02l-4.64,-1.05l-6.95,4.01l-2.18,0.6l-7.62,6.88l-0.81,1.88l-3.15,-3.07l-0.49,-0.06l-6.18,3.75l-0.93,-1.52l-0.61,-0.09l-2.26,2.01l-3.15,-0.64l-0.47,0.3l-0.79,3.18l-3.03,4.85l0.09,1.91l0.26,0.36l2.58,0.95l-0.3,6.03l-1.97,0.14l-0.36,0.29l-1.07,3.72l0.87,1.82l-4.01,2.02l-1.04,4.88l-3.49,0.95l-0.29,0.32l-0.73,4.06l-3.07,3.18l-0.71,-2.11l-2.45,-15.41l1.17,-6.06l2.06,-2.67l0.2,-2.12l3.83,-1.13l4.47,-6.06l4.28,-5.09l4.48,-4.07l2.13,-7.67l-0.45,-0.5l-3.36,0.72l-1.47,4.3l-5.81,5.21l-1.86,-5.8l-0.49,-0.26l-6.68,1.94l-6.27,8.55l-0.01,0.46l1.74,2.54l-8.37,1.57l0.16,-3.05l-0.32,-0.41l-3.89,-0.75l-3.3,2.39l-7.61,-0.82l-8.47,1.58l-17.7,19.78l0.24,0.67l3.73,0.52l1.14,2.49l2.65,1.15l0.46,-0.13l1.47,-1.95l2.35,0.24l3.43,4.41l0.08,3.28l-1.96,4.11l-0.21,4.69l-1.11,6.02l-3.72,5.32l-0.87,2.56l-8.3,10.17l-3.18,1.92l-1.29,0.04l-1.45,-1.54l-0.53,-0.05l-2.48,1.84l0.28,-0.27l0.36,-4.08l-0.6,-2.85l1.77,-1.03l2.89,0.6l0.44,-0.22l1.71,-3.57l0.84,-3.92l0.97,-1.37l1.32,-3.37l-0.48,-0.53l-4.14,1.11l-2.19,1.46l-3.38,-0.0l-1.05,-3.43l-2.97,-2.72l-4.29,-1.26l-1.76,-6.1l-2.63,-6.06l-2.3,-1.58l-3.75,-1.25l-3.46,0.09l-3.19,0.77l-2.26,2.18l0.05,0.61l1.21,0.86l0.03,1.88l-1.34,1.28l-2.26,4.23l-0.03,1.71l-3.16,2.2l-2.8,-1.36l-3.02,0.27l-1.18,-1.17l-1.68,-0.52l-3.94,2.75l-3.21,0.62l-2.27,0.93l-3.04,-0.6l-2.21,0.03l-1.47,-1.89l-2.61,-1.95l-2.65,-0.52l-5.44,1.21l-3.23,-1.49l-0.71,-3.08l-5.2,-1.5l-2.75,-1.64l-0.54,0.13l-2.59,4.17l0.89,2.46l-2.1,2.34l-3.38,-0.91l-2.42,-0.14l-1.85,-1.84l-2.51,-0.06l-2.46,-1.17l-3.86,1.89l-4.72,3.31l-3.26,0.87l-1.17,-2.07l-0.41,-0.2l-2.97,0.48l-1.1,-1.58l-1.62,-0.7l-1.31,-2.32l-1.38,-0.72l-3.71,0.94l-3.3,-2.2l-0.56,0.12l-0.97,1.52l-5.27,-9.77l-3.03,-3.13l0.73,-1.08l-0.04,-0.5l-0.5,-0.06l-6.2,3.97l-1.82,0.18l0.16,-1.83l-0.23,-0.4l-3.22,-1.46l-2.47,0.85l-0.7,-4.0l-0.31,-0.32l-4.5,-0.95l-2.52,1.84l-6.18,1.58l-1.3,1.08l-9.51,1.62l-1.15,1.45l-0.03,0.46l1.56,2.48l-1.98,0.89l-0.21,0.52l0.35,0.85l-2.18,1.8l0.03,0.64l3.81,2.6l-0.44,1.31l-3.21,-0.16l-0.87,1.02l-3.08,-1.9l-3.97,0.08l-2.66,1.61l-8.29,-4.28l-4.1,0.06l-5.42,4.44l-0.37,2.36l-2.0,-1.76l-0.63,0.13l-2.0,4.27l0.61,1.02l-1.32,2.63l0.05,0.44l2.13,2.54l1.95,0.05l1.39,2.15l-0.23,1.74l1.12,0.83l-0.86,1.61l-2.49,0.71l-2.49,3.66l0.0,0.45l2.19,3.19l-0.16,2.44l2.54,3.7l-1.62,1.81l-0.67,-0.14l-1.63,-1.93l-2.29,-0.94l-0.94,-1.47l-2.34,-0.71l-1.48,0.44l-0.42,-0.51l-3.52,-1.68l-5.76,-1.14l-0.47,0.2l-2.87,-2.64l-2.9,-1.36l-1.63,-1.56l1.39,-0.52l2.08,-3.01l-0.04,-0.51l-0.98,-1.01l3.14,-1.27l0.25,-0.4l-0.07,-0.8l-0.5,-0.35l-1.72,0.45l0.04,-0.92l1.06,-0.85l2.31,-0.26l0.34,-0.28l0.4,-1.47l-0.51,-1.94l0.95,-1.86l0.01,-1.32l-0.27,-0.37l-3.69,-1.26l-1.41,0.02l-1.42,-1.68l-0.43,-0.12l-1.78,0.57l-2.78,-1.21l-0.01,-0.71l-0.89,-1.73l-2.01,-0.38l-0.13,-0.77l0.53,-1.15l-1.6,-2.31l-3.58,0.03l-0.92,0.88l-0.42,-0.07l-1.05,-3.54l2.29,-0.07l0.97,-0.92l0.06,-0.51l-0.9,-1.27l-1.4,-0.62l-0.06,-0.85l-0.95,-0.73l-1.43,-2.57l0.49,-1.21l-0.25,-2.07l-2.69,-1.38l-1.22,0.37l-0.45,-0.94l-2.46,-1.05l-0.74,-2.46l-0.21,-2.19l-1.07,-1.09l0.93,-1.49l-0.72,-4.29l1.7,-2.67l-0.24,-0.98ZM749.34,295.94l-0.76,0.56l-0.11,0.15l-0.01,-0.65l0.87,-0.06ZM871.96,154.57l2.04,-0.2l3.29,2.04l-0.13,0.64l-2.37,1.7l-5.54,0.79l-0.34,-1.85l3.05,-3.11ZM797.75,123.25l-2.42,3.18l-3.66,-0.78l-4.39,-3.6l0.47,-2.52l10.01,3.72ZM783.79,118.53l-1.81,6.68l-8.92,-0.26l-4.06,2.13l-4.64,-5.86l1.28,-6.57l3.04,-1.79l6.39,0.44l8.71,5.22ZM778.23,253.99l-0.64,-1.28l0.31,-0.17l0.33,1.45ZM778.36,254.55l0.92,4.28l-0.05,4.08l1.05,4.08l2.23,6.09l-2.91,-0.99l-0.51,0.27l-1.54,5.47l2.42,4.01l-0.04,1.39l-1.22,-1.41l-0.65,0.06l-1.07,1.83l-0.29,-1.88l0.28,-3.61l-0.28,-4.01l0.58,-2.92l0.11,-5.24l-1.46,-4.02l0.21,-5.38l2.23,-2.09ZM780.09,139.86l-3.31,0.05l-5.09,-1.07l2.11,-3.11l2.77,-0.74l3.29,3.15l0.23,1.71ZM683.7,87.54l-13.17,4.38l4.34,-15.76l1.75,-1.29l1.59,0.74l6.17,7.25l-0.68,4.69ZM670.82,80.26l-5.03,1.48l-6.76,-3.64l-4.04,-4.98l-1.9,-10.03l-3.29,-2.93l6.28,-10.21l5.0,-3.39l4.63,7.67l5.72,14.22l-0.6,11.8ZM564.4,160.28l-0.92,0.41l-7.78,-0.94l-0.83,-3.41l-4.32,-2.0l-0.33,-3.85l2.54,-1.96l-0.08,-4.42l4.9,-7.29l-0.16,-0.58l-1.86,-0.88l5.7,-7.68l-0.57,-4.44l5.43,-5.07l8.18,-6.55l8.25,-1.96l4.4,-4.05l4.43,-1.3l1.54,3.81l-1.55,3.04l-16.43,9.84l-7.93,9.27l-7.69,17.13l0.59,6.93l4.49,5.95ZM548.68,56.87l-5.47,3.05l-0.54,2.57l-2.49,2.05l-2.33,-2.98l1.37,-4.49l-0.35,-0.52l-4.3,-0.36l3.7,-2.13l3.34,-0.17l0.47,3.78l0.35,0.35l0.42,-0.25l1.41,-3.62l2.04,-2.24l3.21,2.97l-0.81,1.96ZM477.39,251.71l-4.1,0.06l-2.6,-0.41l0.38,-1.28l3.15,-1.29l3.25,1.22l-0.09,1.7Z", "name": "Russia"}, "RW": {"path": "M497.0,418.15l0.71,1.01l-0.11,1.09l-1.63,0.03l-1.04,1.39l-0.83,-0.11l0.51,-1.2l0.08,-1.34l0.42,-0.41l0.7,0.14l1.19,-0.61Z", "name": "Rwanda"}, "RS": {"path": "M469.33,288.43l0.49,-1.17l-1.2,-1.97l1.47,-0.73l1.3,0.13l1.18,1.23l0.45,1.29l1.35,0.74l0.34,1.53l1.46,1.02l0.76,-0.3l0.25,0.82l-0.51,0.87l0.22,1.27l1.08,1.41l-0.8,0.94l-0.38,1.72l-1.22,0.09l0.27,-0.81l-2.46,-2.38l-0.93,0.06l-0.47,1.05l-2.15,-1.58l0.57,-1.85l-1.13,-1.51l0.53,-1.32l-0.49,-0.55Z", "name": "Serbia"}, "TL": {"path": "M734.55,437.87l-0.09,-0.98l4.5,-0.86l-2.82,1.28l-1.59,0.55Z", "name": "Timor-Leste"}, "TM": {"path": "M553.03,299.38l-0.05,0.44l-0.1,-0.29l0.15,-0.15ZM555.85,298.15l0.46,-0.11l1.47,0.82l2.08,2.72l4.07,-0.21l0.38,-0.49l-0.34,-1.39l1.95,-1.07l1.9,-1.78l2.93,1.56l0.41,2.75l1.21,0.76l2.57,-0.15l0.62,0.45l1.32,3.46l4.54,3.8l2.67,1.6l3.07,1.26l-0.04,1.22l-1.32,-0.81l-0.61,0.19l-0.32,0.93l-2.19,0.86l-0.47,2.34l-1.21,0.81l-1.91,0.45l-0.73,1.44l-1.54,0.33l-2.22,-1.01l-0.2,-2.37l-0.37,-0.37l-1.72,-0.1l-2.76,-2.67l-2.14,-0.44l-2.84,-1.62l-1.78,-0.29l-1.25,0.58l-1.56,-0.09l-2.01,1.85l-1.69,0.47l-0.37,-1.75l0.36,-3.28l-0.2,-0.39l-1.68,-0.94l0.55,-1.92l-0.34,-0.51l-1.23,-0.14l0.38,-1.9l2.23,0.64l2.2,-1.06l0.12,-0.63l-1.77,-1.94l-0.69,-1.85Z", "name": "Turkmenistan"}, "TJ": {"path": "M597.8,305.02l-0.08,0.09l-2.5,-0.5l-0.48,0.34l-0.24,1.88l0.43,0.45l2.63,-0.24l3.18,1.04l4.38,-0.45l0.56,2.63l0.54,0.29l0.66,-0.26l1.12,0.54l0.21,2.4l-3.76,-0.23l-1.81,1.45l-1.74,0.8l-0.62,-0.64l0.22,-2.47l-0.65,-0.49l-0.04,-1.02l-1.36,-0.73l-0.48,0.07l-1.08,1.11l-0.54,1.62l-1.3,-0.06l-0.96,1.26l-0.91,-0.37l-1.63,0.91l-0.24,-0.12l1.28,-3.1l-0.54,-2.38l-1.69,-0.89l0.36,-0.8l2.18,-0.05l1.19,-1.8l0.76,-1.99l2.44,-0.56l-0.28,1.13l0.36,0.91l0.43,0.25Z", "name": "Tajikistan"}, "RO": {"path": "M487.52,276.99l0.59,0.28l2.89,4.68l-0.18,3.12l0.45,1.64l1.3,0.9l1.37,-0.47l0.76,0.41l0.03,0.46l-0.83,0.52l-0.57,-0.25l-0.55,0.3l-0.63,3.8l-0.98,-0.24l-2.1,-1.28l-2.95,0.81l-1.25,0.86l-3.49,-0.17l-1.88,-0.53l-0.87,0.17l-0.86,-1.54l0.34,-0.35l-0.05,-0.61l-0.62,-0.44l-0.51,0.04l-0.55,0.55l-1.04,-0.73l-0.17,-1.29l-1.58,-1.05l-0.34,-1.15l-0.92,-0.96l1.63,-0.65l2.66,-4.89l2.39,-1.44l2.93,0.39l1.06,0.83l0.47,0.02l0.79,-0.53l1.77,-0.34l0.76,-0.87l0.76,0.0Z", "name": "Romania"}, "GW": {"path": "M386.23,383.41l-0.29,0.84l0.15,0.61l-2.21,0.6l-0.86,0.96l-1.04,-0.83l-1.09,-0.23l-0.54,-1.07l-0.66,-0.5l2.41,-0.49l4.13,0.1Z", "name": "Guinea-Bissau"}, "GT": {"path": "M195.08,379.54l-2.48,-0.37l-1.03,-0.46l-1.14,-0.9l0.3,-1.01l-0.24,-0.68l0.96,-1.69l2.98,-0.01l0.4,-0.37l-0.19,-1.29l-1.68,-1.44l0.53,-0.4l0.0,-1.08l3.85,0.02l-0.21,4.61l0.4,0.43l1.48,0.38l-1.5,1.01l-0.34,0.71l0.12,0.57l-2.2,1.98Z", "name": "Guatemala"}, "GR": {"path": "M487.09,300.31l-0.62,1.67l-0.37,0.23l-2.84,-0.38l-3.03,0.86l-0.18,0.66l1.34,1.43l-0.67,0.28l-1.12,0.0l-1.2,-1.54l-0.65,0.03l-0.52,1.05l0.56,1.95l1.06,1.34l-0.61,0.46l-0.05,0.59l2.53,2.34l0.02,1.02l-1.77,-0.64l-0.5,0.54l0.53,1.16l-1.1,0.23l-0.3,0.52l0.77,2.24l-0.99,0.02l-1.84,-1.22l-1.37,-4.59l-2.21,-3.25l-0.12,-0.67l1.06,-1.44l0.2,-1.06l0.84,-0.7l0.03,-0.55l1.33,-0.24l1.01,-0.71l1.21,0.06l0.67,-0.62l2.26,-0.01l1.8,-0.83l1.85,1.11l2.28,-0.31l0.35,-0.39l0.01,-0.9l0.35,0.26ZM480.49,319.61l0.67,0.51l-0.8,-0.16l0.13,-0.35ZM482.3,320.35l2.74,0.05l0.29,0.4l-2.04,0.15l-0.32,-0.47l-0.67,-0.13Z", "name": "Greece"}, "GQ": {"path": "M448.79,409.52l0.02,2.22l-4.09,0.0l0.69,-2.27l3.38,0.05Z", "name": "Eq. Guinea"}, "GY": {"path": "M277.42,399.96l-0.32,1.83l-1.32,0.57l-0.23,0.46l-0.28,2.01l1.11,1.82l0.83,0.19l0.32,1.25l1.13,1.62l-1.21,-0.19l-1.08,0.71l-1.77,0.5l-0.44,0.46l-0.86,-0.09l-1.32,-1.01l-0.77,-2.27l0.36,-1.91l0.68,-1.23l-0.57,-1.17l-0.74,-0.43l0.12,-1.16l-0.9,-0.69l-1.1,0.09l-1.31,-1.48l0.53,-0.72l-0.04,-0.84l1.99,-0.86l0.05,-0.59l-0.71,-0.78l0.14,-0.57l1.66,-1.24l1.36,0.77l1.41,1.5l0.06,1.15l0.37,0.38l0.8,0.05l2.06,1.87Z", "name": "Guyana"}, "GE": {"path": "M521.61,293.9l5.38,1.03l3.26,1.57l0.84,0.7l1.39,-0.49l2.05,0.63l0.69,1.25l1.15,0.65l-0.2,0.63l1.05,1.54l-1.06,-0.15l-1.81,-0.93l-0.97,0.52l-3.21,0.48l-2.28,-1.55l-2.37,0.06l0.23,-1.11l-0.75,-2.51l-1.45,-1.26l-1.43,-0.44l-0.53,-0.61Z", "name": "Georgia"}, "GB": {"path": "M412.72,233.04l-2.32,4.44l0.45,0.57l2.5,-0.63l2.22,0.02l-0.56,3.24l-2.22,4.0l0.31,0.59l2.36,0.26l2.34,5.43l1.76,0.84l2.21,6.35l2.96,0.93l-0.25,2.13l-1.17,1.09l-0.09,0.47l0.87,1.82l-1.92,1.78l-3.29,-0.02l-4.09,1.04l-1.02,-0.68l-0.52,0.07l-1.5,1.67l-2.09,-0.4l-1.88,1.4l-0.67,-0.39l3.29,-3.71l2.15,-0.83l0.25,-0.41l-0.33,-0.35l-3.72,-0.64l-0.47,-1.06l2.27,-1.1l0.17,-0.57l-1.29,-2.09l0.39,-2.22l3.35,0.34l0.44,-0.34l0.37,-2.46l-1.77,-2.98l-3.1,-0.89l-0.43,-0.84l0.8,-2.18l-0.82,-1.22l-0.67,0.01l-0.66,1.02l-0.1,-3.02l-1.24,-2.37l0.87,-4.6l1.78,-3.54l1.83,0.33l2.26,-0.3ZM406.3,251.21l-1.06,2.32l-1.53,-0.71l-1.21,0.0l0.4,-1.97l-0.42,-1.89l1.46,-0.13l2.36,2.36Z", "name": "United Kingdom"}, "GA": {"path": "M453.24,409.42l-0.08,0.98l0.7,1.29l2.36,0.24l-0.98,2.63l1.18,1.79l0.25,1.78l-0.29,1.52l-0.6,0.93l-1.84,-0.09l-1.23,-1.11l-0.66,0.23l-0.15,0.84l-1.42,0.26l-1.02,0.7l-0.11,0.52l0.77,1.35l-1.34,0.98l-3.94,-4.31l-1.44,-2.45l0.06,-0.6l0.54,-0.81l1.05,-3.46l4.17,-0.07l0.4,-0.4l-0.02,-2.66l2.39,0.21l1.25,-0.27Z", "name": "Gabon"}, "GN": {"path": "M391.8,383.91l0.47,0.81l1.11,-0.32l0.98,0.71l1.07,0.2l2.26,-1.23l0.63,0.44l1.13,1.58l-0.48,1.41l0.8,0.3l-0.08,0.48l0.46,0.69l-0.35,1.37l1.05,2.63l-1.0,0.69l0.03,1.42l-0.72,-0.06l-1.07,1.01l-0.24,-0.27l0.07,-1.11l-1.05,-1.55l-0.49,-0.14l-1.3,0.36l-0.35,-2.01l-1.6,-2.19l-2.0,-0.0l-1.31,0.54l-1.95,2.19l-1.86,-2.2l-1.2,-0.78l-0.3,-1.12l-0.8,-0.86l0.65,-0.73l0.81,-0.03l1.64,-0.8l0.23,-1.88l2.67,0.64l0.89,-0.31l1.21,0.15Z", "name": "Guinea"}, "GM": {"path": "M379.31,381.18l0.1,-0.36l2.43,-0.07l0.74,-0.62l0.5,-0.03l0.83,0.53l-1.08,-0.33l-1.87,0.91l-1.65,-0.04ZM384.0,380.68l0.95,0.06l0.76,-0.23l-0.59,0.32l-1.11,-0.15Z", "name": "Gambia"}, "GL": {"path": "M352.9,3.19l15.35,16.28l-4.35,6.99l-9.4,0.81l-13.48,1.81l-0.32,0.54l1.26,3.26l0.46,0.25l8.67,-1.96l7.39,6.05l0.55,-0.04l4.4,-4.95l1.83,5.61l-2.72,9.68l0.18,0.45l0.48,-0.06l6.34,-6.15l11.94,-6.62l7.14,3.24l1.33,6.85l-10.07,11.17l-1.42,3.42l-7.83,2.5l-0.28,0.42l0.35,0.36l5.33,0.65l-2.8,9.83l-2.03,8.69l0.08,13.63l2.84,7.11l-3.6,0.49l-4.12,3.47l-0.05,0.56l4.54,5.53l0.56,8.17l-2.39,0.81l-0.24,0.53l3.05,7.7l-5.05,0.6l-0.27,0.64l2.78,3.54l-0.72,2.75l-3.27,1.26l-3.42,0.02l-0.35,0.59l3.09,5.7l0.03,2.82l-4.32,-2.99l-0.57,0.13l-1.29,2.22l0.14,0.54l3.3,2.0l3.18,4.75l0.88,5.79l-3.85,1.25l-4.86,-7.12l-0.48,-0.14l-0.24,0.44l0.83,5.08l-2.81,3.81l0.3,0.64l9.17,0.61l-6.07,5.68l-6.74,5.42l-7.2,2.3l-2.98,0.14l-2.66,2.67l-3.44,6.75l-5.23,4.25l-1.73,0.27l-7.11,3.08l-2.15,3.69l-0.09,4.21l-1.22,3.58l-4.03,4.36l0.89,4.48l-2.31,8.95l-3.05,0.26l-3.56,-4.0l-5.12,-0.16l-2.26,-2.64l-1.69,-5.21l-4.31,-6.82l-1.24,-3.62l-0.4,-5.4l-3.39,-5.47l0.87,-4.47l-1.62,-2.41l2.37,-7.41l3.81,-2.67l1.01,-3.01l0.52,-5.6l-0.22,-0.39l-0.45,0.06l-4.16,3.58l-1.99,0.9l-2.73,-2.07l-0.16,-4.72l0.9,-3.66l1.94,-0.09l5.03,1.98l0.47,-0.14l-0.03,-0.49l-6.54,-7.53l-0.47,-0.11l-2.25,1.0l-1.7,-1.6l2.69,-7.67l-1.51,-3.12l-4.99,-15.74l-3.17,-3.76l-0.11,-4.29l-6.93,-6.07l-5.4,-0.76l-12.62,1.16l-2.75,-3.16l-4.1,-6.46l6.13,-3.31l4.96,-0.6l0.35,-0.37l-0.29,-0.42l-10.63,-2.99l-5.42,-4.66l0.32,-4.37l9.32,-6.03l9.34,-6.65l0.97,-5.04l-0.15,-0.39l-6.52,-4.97l2.06,-5.6l8.57,-10.89l3.56,-1.73l0.22,-0.41l-1.01,-7.43l5.7,-4.5l7.58,-2.82l7.37,-0.16l2.62,5.4l0.69,0.04l6.35,-9.67l5.63,6.55l3.58,1.5l5.14,5.66l0.54,0.05l0.1,-0.53l-5.89,-9.52l0.33,-7.89l8.21,-11.86l8.55,0.93l0.41,-0.25l3.12,-7.8l8.58,-2.09l19.79,2.78Z", "name": "Greenland"}, "GH": {"path": "M420.53,387.35l-0.01,0.72l0.96,1.2l0.24,3.75l0.59,0.95l-0.51,2.1l0.19,1.41l1.02,2.22l-6.97,2.85l-1.8,-0.57l0.04,-0.89l-1.02,-2.04l0.61,-2.66l1.07,-2.33l-0.96,-6.5l5.01,0.07l0.94,-0.39l0.61,0.11Z", "name": "Ghana"}, "OM": {"path": "M568.09,360.37l-0.91,1.71l-1.22,0.04l-0.59,0.78l-0.41,1.53l0.26,1.63l-1.16,0.05l-1.56,0.99l-0.76,1.78l-1.62,0.05l-0.98,0.66l-0.17,1.17l-0.89,0.53l-1.49,-0.18l-2.4,0.95l-2.48,-5.51l7.35,-2.77l1.67,-5.36l-1.12,-2.14l0.05,-0.87l0.67,-1.04l0.07,-1.08l0.91,-0.43l-0.05,-2.14l0.7,-0.01l1.01,1.68l1.51,1.12l3.3,0.87l1.73,2.37l0.81,0.38l-1.23,2.44l-0.99,0.81ZM561.83,347.23l-0.0,-0.01l0.01,-0.01l-0.0,0.02Z", "name": "Oman"}, "TN": {"path": "M448.18,315.32l-1.08,1.46l-0.02,1.43l0.84,0.93l-0.29,2.3l-1.65,1.83l0.48,1.65l1.41,0.33l0.53,1.2l0.9,0.55l-0.11,1.83l-3.54,2.81l-0.09,2.52l-0.58,0.32l-0.96,-4.72l-1.54,-1.32l-0.15,-0.82l-1.93,-1.68l-0.19,-1.93l1.52,-1.74l0.59,-2.52l-0.38,-3.0l0.43,-1.35l2.45,-1.14l1.29,0.28l-0.06,1.25l0.59,0.37l1.54,-0.84Z", "name": "Tunisia"}, "JO": {"path": "M518.65,329.54l-5.15,1.67l-0.19,0.64l2.19,2.56l-0.58,0.44l-0.33,0.78l-1.71,0.36l-1.71,1.89l-2.34,-0.38l1.21,-4.6l0.56,-4.33l2.81,0.99l4.45,-2.88l0.8,2.87Z", "name": "Jordan"}, "HR": {"path": "M455.59,286.98l1.42,0.1l0.57,-0.46l0.74,0.44l0.98,0.07l0.43,-0.4l-0.01,-0.73l0.86,-0.57l0.21,-1.25l1.62,-0.78l2.55,1.93l2.07,0.69l0.88,-0.35l1.09,1.85l-0.56,0.77l-1.05,-0.63l-1.67,0.05l-2.1,-0.57l-1.3,0.07l-0.58,0.54l-0.57,-0.52l-0.65,0.16l-0.47,1.84l1.79,2.75l2.11,2.07l0.81,1.23l-1.27,-1.06l-2.2,-0.99l-1.73,-2.1l0.2,-0.63l-1.06,-1.38l-0.31,-1.43l-1.61,-0.56l-0.49,0.2l-0.45,0.89l-0.26,-1.24Z", "name": "Croatia"}, "HT": {"path": "M238.65,368.15l-1.58,-0.17l-1.19,0.44l-0.91,-0.56l0.06,-0.21l3.62,0.5ZM239.22,368.07l0.82,-0.54l0.06,-0.62l-1.02,-1.03l0.02,-0.84l-0.3,-0.39l-0.93,-0.35l3.16,0.46l0.02,1.9l-0.48,0.35l-0.07,0.58l0.54,0.74l-1.81,-0.26Z", "name": "Haiti"}, "HU": {"path": "M462.05,281.37l0.68,-1.93l-0.16,-0.54l0.71,-0.0l0.39,-0.35l0.1,-0.84l1.72,1.0l2.35,-0.43l0.43,-0.77l3.49,-0.92l0.69,-0.91l0.54,-0.15l2.55,1.09l0.69,-0.26l1.03,0.76l0.1,0.55l-1.45,0.83l-2.6,4.82l-1.79,0.61l-1.69,-0.11l-2.72,1.41l-1.83,-0.61l-2.55,-1.92l-0.7,-1.3Z", "name": "Hungary"}, "HN": {"path": "M199.6,379.29l-1.71,-1.22l0.07,-0.96l3.04,-2.17l2.37,0.29l1.27,-0.09l1.1,-0.53l1.3,0.28l1.14,-0.26l1.37,0.37l2.25,1.39l-2.37,0.95l-1.23,-0.4l-0.88,1.31l-1.28,1.0l-0.43,-0.3l-0.55,0.08l-0.42,0.53l-0.96,0.05l-0.36,0.41l0.04,0.89l-0.52,0.6l-0.3,0.04l-0.3,-0.56l-0.66,-0.32l0.12,-0.68l-0.48,-0.66l-0.63,-0.25l-0.97,0.2Z", "name": "Honduras"}, "PR": {"path": "M256.17,368.34l-0.27,0.28l-2.83,0.06l-0.07,-0.57l1.95,-0.1l1.23,0.34Z", "name": "Puerto Rico"}, "PS": {"path": "M509.06,331.4l0.27,-0.17l-0.04,0.09l-0.23,0.08ZM509.37,331.14l-0.03,-0.63l-0.35,-0.18l0.32,-1.21l0.24,0.11l-0.19,1.91Z", "name": "Palestine"}, "PT": {"path": "M401.85,314.47l-0.65,0.52l-1.11,-0.37l-0.93,0.18l0.29,-1.97l-0.24,-1.95l-1.24,-0.59l-0.47,-0.95l0.18,-1.87l1.01,-1.29l0.69,-3.25l-0.04,-1.52l-0.59,-2.16l1.29,-0.96l0.85,1.5l3.09,-0.33l0.49,1.17l-1.07,1.02l-0.03,2.43l-0.41,0.6l-0.08,1.25l-0.8,0.2l-0.26,0.57l0.93,1.79l-0.64,1.95l0.78,1.16l-1.12,1.72l0.08,1.13Z", "name": "Portugal"}, "PY": {"path": "M274.9,466.41l0.74,1.55l-0.16,3.55l0.32,0.41l2.64,0.52l1.11,-0.48l1.4,0.6l0.36,0.62l0.53,3.53l1.27,0.41l0.98,-0.39l0.52,0.28l-0.0,1.23l-1.21,5.54l-2.09,1.99l-1.8,0.41l-4.72,-1.03l2.21,-3.81l-0.32,-1.54l-2.77,-1.32l-3.03,-2.01l-2.07,-0.45l-4.34,-4.19l0.91,-2.99l0.08,-1.45l1.07,-2.09l4.13,-0.73l2.18,0.04l2.06,1.2l0.03,0.61Z", "name": "Paraguay"}, "PA": {"path": "M213.79,393.56l0.26,-1.53l-0.36,-0.26l-0.01,-0.5l0.44,-0.1l0.93,1.4l1.26,0.03l0.77,0.5l1.38,-0.24l2.51,-1.12l0.86,-0.72l3.45,0.85l1.4,1.19l0.41,1.75l-0.21,0.34l-0.53,-0.12l-0.47,0.29l-0.16,0.6l-0.68,-1.28l0.45,-0.49l-0.19,-0.66l-0.47,-0.13l-0.54,-0.84l-1.5,-0.75l-1.1,0.16l-0.75,0.99l-1.62,0.84l-0.18,0.96l0.85,0.97l-0.58,0.45l-0.69,0.08l-0.34,-1.18l-1.27,0.03l-0.71,-1.05l-2.59,-0.47Z", "name": "Panama"}, "PG": {"path": "M808.58,428.76l2.54,2.57l-0.13,0.26l-0.33,0.12l-0.87,-0.78l-1.22,-2.17ZM801.41,422.94l0.51,0.29l0.26,0.27l-0.49,-0.36l-0.28,-0.21ZM803.17,424.48l0.59,0.5l0.08,1.06l-0.29,-0.91l-0.38,-0.65ZM796.68,428.31l0.52,0.75l1.43,-0.19l2.27,-1.82l-0.01,-1.43l1.12,0.16l-0.04,1.1l-0.7,1.28l-1.12,0.18l-0.62,0.79l-2.46,1.11l-1.17,-0.0l-3.08,-1.25l3.41,0.0l0.45,-0.68ZM789.15,433.47l2.31,1.81l1.59,2.62l1.34,0.14l-0.06,0.66l0.31,0.43l1.06,0.24l0.06,0.66l2.25,1.06l-1.21,0.13l-0.72,-0.64l-4.56,-0.65l-3.22,-2.89l-1.49,-2.35l-3.27,-1.11l-2.38,0.72l-1.59,0.86l-0.2,0.42l0.27,1.56l-1.55,0.69l-1.36,-0.4l-2.21,-0.09l-0.08,-15.44l8.39,2.93l2.95,2.4l0.6,1.64l4.02,1.5l0.31,0.69l-1.76,0.21l-0.33,0.52l0.55,1.68Z", "name": "Papua New Guinea"}, "PE": {"path": "M244.97,425.11l-1.26,-0.07l-0.57,0.42l-1.93,0.45l-2.98,1.76l-0.36,1.36l-0.58,0.8l0.12,1.37l-1.24,0.6l-0.22,1.22l-0.62,0.84l1.04,2.28l1.28,1.44l-0.41,0.85l0.32,0.57l1.48,0.13l1.16,1.37l2.21,0.07l1.63,-1.08l-0.13,3.04l0.3,0.4l1.14,0.29l1.31,-0.35l1.9,3.62l-0.48,0.86l-0.17,3.89l-0.94,1.6l0.35,0.76l-0.48,1.08l0.98,2.0l-2.1,3.89l-0.97,0.51l-2.17,-1.31l-0.39,-1.18l-4.95,-2.62l-4.46,-2.82l-1.85,-1.53l-0.91,-1.87l0.3,-0.97l-2.11,-3.36l-4.82,-9.74l-1.04,-1.2l-0.87,-1.95l-3.4,-2.49l0.58,-1.18l-1.13,-2.23l0.66,-1.5l1.45,-1.15l-0.6,0.99l0.07,0.92l0.47,0.36l1.74,0.03l0.97,1.17l0.54,0.07l1.42,-1.03l0.6,-1.84l1.42,-2.02l3.04,-1.04l2.73,-2.62l0.86,-1.74l-0.1,-1.87l1.44,1.02l0.9,1.25l1.06,0.59l1.7,2.73l1.86,0.31l1.45,-0.61l0.96,0.39l1.36,-0.19l1.45,0.89l-1.4,2.21l0.31,0.61l0.59,0.05l0.47,0.5Z", "name": "Peru"}, "PK": {"path": "M615.13,319.81l-1.88,2.0l-2.59,0.42l-3.73,-0.73l-1.6,1.43l-0.09,0.4l1.77,4.7l1.73,1.32l-1.73,1.38l-0.11,2.26l-2.34,2.8l-1.59,2.95l-2.46,2.8l-3.03,-0.07l-2.76,2.96l0.05,0.59l1.51,1.16l0.26,1.98l1.44,1.55l0.37,1.77l-5.02,-0.01l-1.78,1.76l-1.41,-0.53l-0.76,-1.94l-2.27,-2.23l-11.61,0.89l0.72,-2.47l3.43,-1.37l0.25,-0.43l-0.21,-1.29l-1.2,-0.67l-0.28,-2.57l-2.29,-1.2l-1.32,-2.09l2.85,1.0l2.62,-0.4l1.42,0.35l0.77,-0.59l1.71,0.2l3.25,-1.2l0.26,-0.36l0.08,-2.33l1.19,-1.41l1.68,0.0l0.58,-0.87l1.59,-0.32l1.2,0.17l0.98,-0.83l0.01,-1.99l0.94,-1.58l1.48,-0.71l0.19,-0.54l-0.69,-1.39l2.06,-0.12l0.69,-1.09l-0.03,-1.23l1.12,-1.15l-0.18,-1.88l-0.5,-1.14l1.17,-1.09l5.42,-0.99l2.59,-0.89l1.6,1.26l0.97,2.53l3.5,1.06Z", "name": "Pakistan"}, "PH": {"path": "M737.01,393.71l0.39,2.98l-0.44,1.19l-0.55,-1.53l-0.67,-0.14l-1.17,1.28l0.65,2.1l-0.42,0.69l-2.48,-1.23l-0.58,-1.49l0.66,-1.03l-0.1,-0.53l-1.59,-1.19l-0.56,0.08l-0.65,0.87l-1.23,0.0l-1.58,0.97l0.83,-1.81l2.56,-1.42l0.65,0.84l0.45,0.13l1.9,-0.69l0.56,-1.12l1.5,-0.06l0.38,-0.43l-0.09,-1.2l1.21,0.72l0.36,2.03ZM733.59,386.41l0.05,0.76l0.08,0.27l-0.8,-0.42l-0.18,-0.72l0.85,0.12ZM734.08,385.93l-0.12,-1.13l-1.01,-1.29l1.36,0.03l0.53,0.73l0.51,2.06l-1.27,-0.4ZM733.76,387.52l0.39,0.99l-0.32,0.15l-0.07,-1.14ZM724.65,368.03l1.46,0.71l0.72,-0.31l-0.32,1.19l0.79,1.74l-0.57,1.88l-1.53,1.06l-0.39,2.27l0.56,2.06l1.63,0.57l1.16,-0.27l2.72,1.24l-0.19,1.1l0.77,0.85l-0.08,0.37l-1.4,-0.9l-0.88,-1.29l-0.66,0.0l-0.38,0.55l-1.6,-1.32l-2.15,0.36l-0.87,-0.4l0.07,-0.62l0.66,-0.56l-0.01,-0.62l-0.75,-0.6l-0.72,0.44l-0.73,-0.88l-0.39,-2.53l0.32,0.27l0.66,-0.28l0.26,-4.04l0.71,-2.06l1.14,0.0ZM731.03,388.72l-0.88,0.85l-1.19,1.95l-1.05,-1.2l0.93,-1.11l0.32,-1.48l0.52,-0.06l-0.27,1.16l0.22,0.45l0.49,-0.12l1.0,-1.32l-0.08,0.86ZM726.83,385.61l0.83,0.38l1.17,-0.0l-0.02,0.48l-2.0,1.41l0.02,-2.28ZM724.81,381.88l-0.39,1.29l-1.42,-1.98l1.2,0.05l0.6,0.64ZM716.54,391.7l1.12,-0.97l0.03,-0.03l-0.28,0.38l-0.87,0.63ZM719.21,388.91l0.04,-0.07l0.8,-1.54l0.16,0.76l-1.01,0.85Z", "name": "Philippines"}, "PL": {"path": "M468.45,271.45l-1.1,-1.82l-1.87,-0.39l-0.48,-1.25l-1.72,-0.44l-0.47,0.25l-0.21,0.56l-0.72,-0.43l0.12,-0.82l-0.32,-0.45l-1.74,-0.32l-1.05,-1.13l-0.96,-2.4l0.17,-1.46l-0.62,-2.19l-0.82,-1.37l0.61,-1.22l-0.51,-1.88l1.46,-1.07l6.88,-3.37l2.12,0.62l0.15,0.81l0.38,0.33l5.51,0.54l4.53,-0.06l1.06,0.38l0.5,1.09l0.14,1.93l0.66,1.51l-0.01,1.34l-1.3,0.73l-0.17,0.5l0.74,1.83l0.07,1.86l1.22,3.37l-0.19,0.78l-1.23,0.53l-2.27,3.23l0.24,1.15l-1.99,-1.23l-2.01,0.46l-1.38,-0.32l-1.2,0.67l-1.05,-1.13l-1.17,0.27Z", "name": "Poland"}, "ZM": {"path": "M481.47,443.27l0.39,0.31l2.52,0.15l0.99,1.18l2.01,0.36l1.4,-0.64l0.69,1.18l1.78,0.33l1.84,2.38l2.24,0.19l0.4,-0.43l-0.21,-2.77l-0.62,-0.3l-0.48,0.33l-1.98,-1.18l0.72,-5.32l-0.51,-1.19l0.58,-1.31l3.68,-0.62l0.26,0.64l1.21,0.63l0.9,-0.22l2.16,0.67l1.33,0.71l1.07,1.02l0.56,1.89l-0.88,2.72l0.43,2.1l-0.73,0.88l-0.76,2.39l0.6,0.68l-6.61,1.85l-0.29,0.44l0.19,1.47l-1.69,0.36l-1.43,1.04l-0.38,0.89l-0.87,0.26l-3.48,3.75l-4.15,-0.54l-1.52,-1.01l-1.77,-0.14l-1.82,0.53l-3.04,-3.46l0.11,-7.69l4.82,0.03l0.39,-0.49l-0.18,-0.76l0.33,-0.84l-0.4,-1.37l0.24,-1.06Z", "name": "Zambia"}, "EH": {"path": "M384.42,359.7l0.26,-0.83l1.06,-1.32l0.8,-3.63l3.38,-2.88l0.69,-1.87l0.06,5.03l-1.98,0.21l-0.94,1.63l0.39,3.66l-3.71,-0.01ZM392.0,347.13l0.72,-1.91l1.77,-0.25l2.09,0.35l0.96,-0.65l1.27,-0.07l-0.0,2.65l-6.8,-0.12Z", "name": "W. Sahara"}, "EE": {"path": "M485.7,228.2l2.62,0.79l2.44,-0.11l0.18,0.41l-1.67,2.62l0.66,4.56l-0.85,1.18l-1.72,-0.01l-3.21,-2.27l-1.85,0.58l0.22,-2.14l-0.62,-0.38l-0.64,0.42l-1.26,-1.35l-0.18,-2.36l2.87,-1.24l3.02,-0.69Z", "name": "Estonia"}, "EG": {"path": "M492.06,333.38l1.47,0.44l2.95,-1.74l2.03,-0.22l1.52,0.32l0.6,1.27l0.7,0.04l0.41,-0.68l1.8,0.61l1.95,0.17l1.04,-0.54l1.43,4.34l-2.03,4.78l-1.66,-1.85l-1.76,-4.05l-0.65,-0.12l-0.35,0.67l1.04,3.03l3.44,7.26l1.77,3.16l2.04,2.76l-0.37,0.54l0.22,2.06l2.73,2.28l-28.43,0.0l0.0,-19.72l-0.73,-2.31l0.6,-1.66l-0.33,-1.32l0.69,-1.07l3.05,-0.04l4.82,1.62Z", "name": "Egypt"}, "ZA": {"path": "M467.15,505.21l-0.13,-2.11l-0.69,-1.7l0.71,-0.7l-0.12,-2.46l-4.57,-8.67l0.78,-0.92l0.59,0.47l0.69,1.37l2.83,0.75l1.5,-0.27l2.24,-1.46l0.18,-9.94l1.35,2.39l-0.21,1.57l0.61,1.24l0.41,0.2l1.79,-0.29l2.61,-2.16l0.69,-1.37l0.95,-0.5l2.19,1.08l2.04,0.14l1.78,-0.67l0.85,-2.2l1.38,-0.34l1.59,-2.85l2.15,-1.95l3.41,-1.92l1.99,0.46l1.02,-0.28l0.99,0.2l1.75,5.47l-0.37,3.39l-0.82,-0.24l-1.0,0.47l-0.87,1.75l-0.04,1.2l1.98,1.91l1.47,-0.3l0.7,-1.24l1.09,0.01l-0.77,3.89l-0.58,1.15l-2.2,1.88l-3.17,5.02l-2.8,3.01l-3.57,3.07l-2.53,1.12l-1.22,0.15l-0.51,0.75l-1.17,-0.34l-1.4,0.54l-2.58,-0.55l-1.62,0.35l-1.19,-0.11l-2.54,1.18l-2.1,0.47l-1.6,1.15l-0.84,0.05l-0.93,-0.95l-0.93,-0.16l-0.97,-1.21l-0.25,0.05ZM491.46,495.56l0.62,-0.98l1.48,-0.62l1.18,-2.31l-0.07,-0.48l-1.99,-1.77l-1.68,0.59l-1.42,1.19l-1.34,1.82l0.02,0.49l1.88,2.23l1.32,-0.17Z", "name": "South Africa"}, "EC": {"path": "M231.86,415.43l0.29,1.59l-0.69,1.45l-2.61,2.51l-3.13,1.11l-1.53,2.18l-0.49,1.68l-1.0,0.73l-1.02,-1.11l-1.78,-0.16l0.67,-1.15l-0.24,-0.86l1.25,-2.13l-0.54,-1.09l-0.67,-0.08l-0.72,0.87l-0.87,-0.64l0.35,-0.69l-0.36,-1.96l0.81,-0.51l0.45,-1.51l0.92,-1.57l-0.07,-0.97l2.65,-1.33l2.75,1.35l0.77,1.05l2.12,0.35l0.76,-0.32l1.96,1.21Z", "name": "Ecuador"}, "IT": {"path": "M451.58,282.14l3.5,1.08l-0.22,1.43l0.34,1.0l-1.55,-0.28l-2.22,1.64l0.13,1.69l-0.27,1.22l0.82,1.78l2.39,1.84l1.3,2.87l2.79,2.73l2.05,0.1l0.25,0.31l-0.43,0.41l0.09,0.64l4.05,2.19l2.2,2.0l-0.17,0.42l-1.16,-1.17l-2.18,-0.54l-0.45,0.21l-1.05,2.12l0.14,0.51l1.59,1.06l-0.2,1.15l-1.06,0.36l-1.25,2.57l-0.36,0.08l0.0,-0.41l1.01,-2.65l-1.73,-3.5l-1.12,-0.56l-0.67,-1.29l-1.72,-0.75l-1.01,-1.25l-2.01,-0.35l-4.11,-3.59l-1.63,-1.87l-1.03,-3.6l-3.56,-1.55l-1.3,0.58l-1.68,1.6l0.17,-0.9l-0.27,-0.45l-1.14,-0.37l-0.55,-2.31l0.78,-1.37l-0.66,-1.44l0.81,0.44l1.41,-0.27l1.08,-0.94l0.53,0.39l1.19,-0.11l0.75,-1.38l1.51,0.37l1.39,-0.65l0.34,-1.31l1.06,0.36l0.5,-0.22l0.21,-0.51l1.95,-0.5l0.42,0.96ZM459.21,311.54l-0.67,1.87l0.33,1.12l-0.32,0.99l-1.48,-0.91l-4.52,-1.83l0.21,-0.97l2.67,0.25l3.8,-0.53ZM443.92,301.94l1.19,1.86l-0.3,3.74l-1.07,-0.01l-0.75,0.79l-0.53,-0.48l-0.1,-3.76l-0.41,-1.41l1.07,0.0l0.9,-0.74Z", "name": "Italy"}, "VN": {"path": "M690.58,359.66l-2.72,1.89l-2.09,2.52l-0.63,1.98l4.31,6.55l2.32,1.68l1.44,1.97l1.11,4.65l-0.32,4.28l-1.93,1.55l-2.84,1.62l-2.11,2.17l-2.73,2.07l-0.59,-1.06l0.63,-1.54l-0.12,-0.47l-1.34,-1.05l1.51,-0.72l2.55,-0.18l0.3,-0.63l-0.82,-1.16l4.0,-2.09l0.31,-3.08l-0.57,-1.79l0.42,-2.69l-0.73,-1.99l-1.86,-1.79l-3.63,-5.38l-2.73,-1.5l0.37,-0.5l1.5,-0.65l0.21,-0.52l-0.97,-2.33l-0.37,-0.25l-2.83,-0.02l-2.25,-4.02l0.84,-0.42l4.39,-0.3l2.06,-1.35l1.15,0.91l1.88,0.41l-0.18,1.55l1.36,1.19l1.69,0.47Z", "name": "Vietnam"}, "SB": {"path": "M826.68,441.55l-0.6,0.09l-0.2,-0.34l0.37,0.15l0.44,0.09ZM824.18,437.32l-0.26,-0.31l-0.31,-0.91l0.03,0.0l0.54,1.22ZM823.04,439.28l-1.66,-0.22l-0.2,-0.53l1.16,0.28l0.7,0.47ZM819.26,434.58l1.17,0.66l0.03,0.04l-0.82,-0.45l-0.38,-0.25Z", "name": "Solomon Is."}, "ET": {"path": "M516.04,377.54l1.1,0.85l1.63,-0.46l0.68,0.48l1.63,0.03l2.01,0.96l1.73,1.68l1.64,2.1l-1.52,2.06l0.16,1.73l0.39,0.38l2.05,0.01l-0.36,1.03l2.86,3.6l8.32,3.09l1.32,0.02l-6.33,6.76l-3.1,0.11l-2.36,1.77l-1.47,0.04l-0.86,0.79l-1.38,-0.0l-1.32,-0.81l-2.29,1.05l-0.76,0.98l-3.29,-0.41l-3.07,-2.07l-1.8,-0.07l-0.62,-0.6l0.0,-1.24l-0.28,-0.38l-1.15,-0.37l-1.4,-2.6l-1.19,-0.69l-0.47,-1.01l-1.27,-1.23l-1.16,-0.22l0.43,-0.73l1.45,-0.28l0.41,-0.95l-0.03,-2.22l0.68,-2.45l1.05,-0.63l1.43,-3.08l1.57,-1.38l1.02,-2.53l0.35,-1.9l2.52,0.47l0.44,-0.24l0.58,-1.44Z", "name": "Ethiopia"}, "SO": {"path": "M525.13,418.38l-1.13,-1.57l-0.03,-8.86l2.66,-3.38l1.67,-0.13l2.13,-1.69l3.41,-0.23l7.08,-7.57l2.91,-3.71l0.08,-4.85l2.98,-0.67l1.24,-0.87l0.45,-0.0l-0.2,3.03l-1.21,3.64l-2.73,6.0l-2.13,3.66l-5.03,6.17l-8.56,6.4l-2.78,3.08l-0.8,1.56Z", "name": "Somalia"}, "ZW": {"path": "M498.91,471.53l-1.1,-0.22l-0.92,0.29l-2.09,-0.46l-1.49,-1.14l-1.89,-0.44l-0.62,-1.44l-0.01,-0.86l-0.3,-0.38l-0.97,-0.26l-2.72,-2.8l-1.93,-3.41l3.83,0.46l3.74,-3.89l1.08,-0.44l0.26,-0.78l1.25,-0.91l1.41,-0.26l0.5,0.9l1.99,-0.05l1.72,1.19l1.11,0.18l1.05,0.68l0.01,3.05l-0.59,3.84l0.38,0.87l-0.23,1.26l-0.39,0.36l-0.64,1.86l-2.43,2.82Z", "name": "Zimbabwe"}, "ES": {"path": "M415.99,294.24l1.08,1.32l4.61,1.55l1.08,-0.64l2.58,1.41l2.72,-0.33l0.09,1.34l-2.15,2.02l-3.1,0.68l-0.31,0.31l-0.2,1.01l-1.54,1.87l-0.97,2.65l0.86,1.9l-1.34,1.4l-0.49,1.86l-1.88,0.7l-1.66,2.25l-5.35,-0.01l-1.81,1.17l-0.88,1.06l-0.86,-0.18l-0.79,-0.9l-0.68,-1.73l-2.37,-0.68l-0.12,-0.6l1.21,-2.0l-0.78,-1.19l0.62,-1.89l-0.8,-1.8l0.89,-0.51l0.09,-1.41l0.42,-0.63l0.03,-2.39l1.01,-0.78l0.12,-0.47l-1.04,-1.93l-1.46,-0.12l-0.63,0.42l-1.04,0.0l-0.53,-1.39l-0.55,-0.22l-1.31,0.73l0.07,-1.41l-0.87,-1.4l3.08,-2.16l2.98,0.6l3.32,-0.02l2.62,0.58l6.01,-0.06Z", "name": "Spain"}, "ER": {"path": "M520.38,375.96l3.42,2.46l3.5,3.81l0.85,0.55l-0.95,-0.01l-3.51,-3.92l-2.33,-1.16l-1.73,-0.07l-0.91,-0.51l-1.25,0.52l-1.34,-1.03l-0.62,0.17l-0.66,1.63l-2.34,-0.43l-0.18,-0.68l1.29,-5.37l0.62,-0.63l1.95,-0.54l0.87,-1.03l1.17,2.45l0.68,2.36l1.49,1.45Z", "name": "Eritrea"}, "ME": {"path": "M468.91,298.06l-1.24,-1.13l0.5,-2.11l0.88,-0.81l2.29,1.73l-0.52,0.71l-0.77,-0.3l-1.14,1.91Z", "name": "Montenegro"}, "MD": {"path": "M491.9,285.98l-0.28,-1.04l0.25,-1.54l-0.15,-1.8l-3.32,-5.2l1.4,-0.31l1.71,1.08l1.07,0.18l0.88,0.78l0.03,1.44l0.78,0.52l0.33,1.38l0.81,0.94l0.0,0.67l-1.14,-0.08l-0.7,-0.47l-0.52,0.29l-0.06,0.94l-1.08,2.21Z", "name": "Moldova"}, "MG": {"path": "M545.91,449.15l0.4,3.06l0.63,1.22l-0.21,1.04l-0.56,-0.81l-0.69,-0.01l-0.47,0.77l0.41,2.15l-0.18,0.89l-0.72,0.79l-0.15,2.18l-5.77,18.57l-3.92,1.7l-3.12,-1.54l-0.6,-1.26l-0.19,-2.48l-0.86,-2.12l-0.21,-1.83l0.39,-1.67l1.21,-0.76l0.01,-0.79l1.19,-2.08l0.23,-1.69l-1.06,-3.05l-0.19,-2.26l0.81,-1.36l0.32,-1.49l4.63,-1.23l3.44,-3.04l0.85,-1.42l-0.09,-0.71l0.78,-0.04l1.38,-1.79l0.13,-1.65l0.45,-0.62l1.16,1.7l0.59,1.62Z", "name": "Madagascar"}, "MA": {"path": "M378.77,359.44l0.06,-0.63l0.93,-0.75l0.82,-1.41l-0.09,-1.07l0.79,-1.77l1.31,-1.64l0.95,-0.61l0.66,-1.61l0.09,-1.52l0.81,-1.54l1.72,-1.11l1.55,-2.81l1.16,-1.0l2.44,-0.41l1.94,-1.91l1.31,-0.82l2.09,-2.4l-0.51,-3.84l1.25,-3.95l1.5,-1.88l4.46,-2.74l2.37,-4.82l1.43,0.01l1.7,1.31l2.31,-0.21l3.46,0.7l0.81,1.67l0.16,1.84l0.86,3.17l0.57,0.63l-0.27,0.69l-3.05,0.46l-1.26,1.11l-1.33,0.24l-0.33,0.37l-0.09,1.91l-2.69,1.06l-1.07,1.5l-1.89,0.72l-2.58,0.47l-4.04,2.12l-0.53,4.86l-1.16,0.07l-0.92,0.64l-1.96,-0.36l-2.42,0.56l-0.74,1.99l-0.86,0.41l-1.14,3.39l-3.53,3.11l-0.81,3.66l-0.96,1.14l-0.29,0.84l-4.94,0.19Z", "name": "Morocco"}, "UZ": {"path": "M598.64,298.24l-1.64,1.79l0.06,0.61l1.85,1.26l1.99,-0.71l2.27,1.34l-2.58,1.91l-2.57,-0.24l-0.2,-0.5l0.47,-1.39l-0.47,-0.52l-3.35,0.77l-2.1,3.89l-1.86,-0.14l-0.39,0.23l-0.65,1.43l0.21,0.53l1.65,0.69l0.47,2.05l-1.21,2.74l-1.54,-0.54l-1.11,-0.04l0.05,-1.53l-0.25,-0.38l-3.3,-1.35l-2.56,-1.53l-4.4,-3.69l-1.33,-3.48l-1.1,-0.68l-2.57,0.15l-0.7,-0.5l-0.46,-2.81l-3.37,-1.79l-0.46,0.06l-2.07,1.94l-2.09,1.14l-0.2,0.45l0.29,1.2l-1.92,0.03l-0.09,-11.97l5.98,-1.95l6.18,4.04l2.35,3.08l7.41,-0.61l2.72,2.28l-0.18,3.21l0.39,0.42l0.89,0.02l0.45,2.42l0.38,0.33l2.93,0.1l0.96,1.58l1.29,-0.25l1.05,-2.28l3.18,-2.25l1.24,-0.54Z", "name": "Uzbekistan"}, "MM": {"path": "M673.9,359.64l-1.97,1.62l-0.57,0.98l-1.4,0.62l-1.36,1.08l-1.99,0.36l-1.08,2.72l-0.91,0.41l-0.19,0.55l1.21,2.31l2.52,3.49l-0.79,1.95l-0.74,0.41l-0.17,0.52l0.65,1.39l1.61,1.98l0.25,2.61l0.9,2.15l-1.92,3.6l0.68,-2.27l-0.81,-1.75l0.19,-2.68l-1.05,-1.54l-1.24,-6.25l-1.12,-2.29l-0.61,-0.13l-4.33,3.06l-2.39,-0.66l0.77,-2.89l-0.52,-2.65l-1.92,-3.02l0.25,-0.78l-0.29,-0.51l-1.33,-0.31l-1.61,-1.97l-0.1,-1.35l0.82,-0.23l0.04,-1.7l1.03,-0.53l0.21,-0.44l-0.23,-0.99l0.54,-0.98l0.08,-2.3l1.45,0.46l0.48,-0.2l1.12,-2.26l0.16,-1.4l1.34,-2.25l-0.01,-1.58l2.89,-1.73l1.62,0.46l0.51,-0.43l-0.17,-1.48l0.65,-0.39l0.07,-1.08l0.77,-0.11l0.71,1.41l1.06,0.72l-0.03,4.05l-2.38,2.46l-0.3,3.26l0.47,0.43l2.27,-0.39l0.51,2.15l1.47,0.69l-0.61,1.87l0.19,0.47l2.97,1.52l1.64,-0.56l0.02,0.35Z", "name": "Myanmar"}, "ML": {"path": "M392.61,383.9l-0.19,-2.39l-0.99,-0.88l-0.44,-1.31l-0.09,-1.3l0.81,-0.59l0.35,-1.26l2.37,0.66l1.31,-0.48l0.86,0.15l0.66,-0.57l9.83,-0.04l0.38,-0.28l0.56,-1.82l-0.44,-0.66l-2.35,-22.51l3.26,-0.04l16.7,11.72l0.74,1.34l2.5,1.11l0.02,1.42l0.44,0.39l2.34,-0.22l0.01,5.49l-1.28,1.64l-0.26,1.51l-5.31,0.58l-1.08,0.93l-2.9,0.1l-0.87,-0.48l-1.38,0.37l-2.4,1.1l-0.6,0.88l-1.86,1.1l-0.43,0.71l-0.79,0.4l-1.44,-0.21l-0.81,0.84l-0.34,1.65l-1.91,2.04l-0.06,1.04l-0.67,1.23l0.13,1.17l-0.97,0.39l-0.23,-0.65l-0.52,-0.24l-1.35,0.4l-0.34,0.55l-2.69,-0.29l-0.37,-0.36l-0.02,-0.91l-0.65,-0.35l0.45,-0.65l-0.03,-0.52l-2.12,-2.46l-0.76,-0.01l-2.0,1.17l-0.78,-0.15l-0.8,-0.67l-1.21,0.23Z", "name": "Mali"}, "MN": {"path": "M676.61,267.85l3.78,1.95l5.69,-1.19l2.35,0.48l2.34,1.79l1.81,2.09l2.28,-0.04l3.11,0.62l2.49,-0.96l3.42,-0.7l3.51,-2.62l1.21,0.34l1.56,1.35l2.31,-0.25l-2.72,6.05l0.64,1.85l0.5,0.22l1.31,-0.44l2.36,0.55l2.04,-1.29l1.73,1.03l2.1,2.39l-0.15,0.72l-1.72,-0.34l-3.79,0.54l-1.88,1.14l-1.76,2.29l-3.71,1.35l-2.44,1.82l-3.81,-0.99l-0.44,0.19l-1.31,2.27l1.07,2.53l-1.56,1.04l-1.74,1.78l-2.78,1.14l-3.78,0.14l-4.05,1.18l-2.75,1.69l-1.16,-0.94l-2.93,0.0l-3.61,-2.0l-2.59,-0.55l-3.41,0.46l-5.11,-0.75l-2.62,0.07l-1.31,-1.82l-1.4,-3.4l-1.47,-0.37l-3.14,-2.22l-6.15,-1.06l-0.73,-1.26l0.89,-4.37l-1.73,-2.97l-3.7,-1.54l-1.96,-1.86l-0.53,-2.16l2.39,-0.63l4.75,-3.33l3.59,-1.75l2.18,1.16l2.44,0.05l1.83,1.83l2.46,0.14l3.58,0.97l0.4,-0.12l2.43,-2.72l0.07,-0.43l-0.93,-2.14l2.28,-3.66l2.59,1.52l4.94,1.41l0.44,2.74Z", "name": "Mongolia"}, "MK": {"path": "M472.81,299.6l0.49,-0.78l3.56,-0.8l1.01,0.87l0.14,1.71l-0.66,0.59l-1.14,-0.05l-1.14,0.75l-1.37,0.24l-0.79,-0.61l-0.3,-1.19l0.2,-0.73Z", "name": "Macedonia"}, "MW": {"path": "M505.5,439.25l0.85,1.96l0.15,2.88l-0.69,1.66l0.72,1.81l0.06,1.29l0.49,0.64l0.07,1.07l0.4,0.55l0.8,-0.23l0.55,0.62l0.7,-0.21l0.34,0.6l0.19,2.98l-1.04,0.63l-0.53,1.27l-1.11,-1.1l-0.16,-1.59l0.51,-1.33l-0.32,-1.32l-0.99,-0.65l-0.82,0.12l-2.36,-1.66l0.63,-1.99l0.82,-1.18l-0.46,-2.03l0.9,-2.88l-0.95,-2.53l0.97,0.19l0.29,0.41Z", "name": "Malawi"}, "MR": {"path": "M407.4,349.79l-2.62,0.03l-0.39,0.44l2.42,23.13l0.37,0.43l-0.39,1.27l-9.75,0.04l-0.56,0.54l-0.91,-0.11l-1.27,0.46l-1.61,-0.66l-0.98,0.03l-0.36,0.29l-0.38,1.37l-0.42,0.24l-2.93,-3.44l-2.96,-1.55l-1.62,-0.03l-1.27,0.55l-1.12,-0.2l-0.65,0.4l-0.08,-0.51l0.68,-1.31l0.31,-2.47l-0.57,-3.99l0.23,-1.25l-0.68,-1.53l-1.16,-1.05l0.25,-0.42l9.58,0.02l0.4,-0.45l-0.46,-3.79l0.47,-1.08l2.11,-0.22l0.36,-0.4l-0.08,-6.64l7.81,0.14l0.41,-0.4l0.01,-3.47l7.8,5.59Z", "name": "Mauritania"}, "UG": {"path": "M498.55,406.22l0.7,-0.46l1.65,0.5l1.96,-0.57l1.7,0.01l1.45,-0.98l0.91,1.33l1.33,3.95l-2.57,4.03l-1.46,-0.4l-2.54,0.91l-1.37,1.61l-0.01,0.81l-2.42,-0.01l-2.26,1.01l-0.17,-1.59l0.58,-1.04l0.14,-1.94l1.37,-2.28l1.78,-1.58l-0.17,-0.65l-0.72,-0.24l0.13,-2.43Z", "name": "Uganda"}, "MY": {"path": "M717.48,403.36l-1.39,0.65l-2.12,-0.41l-2.88,-0.0l-0.38,0.28l-0.84,2.75l-0.99,0.96l-1.21,3.29l-1.73,0.45l-2.45,-0.68l-1.39,0.31l-1.33,1.15l-1.59,-0.14l-1.41,0.44l-1.44,-1.19l-0.18,-0.73l1.34,0.53l1.93,-0.47l0.75,-2.23l4.02,-1.03l2.75,-3.21l0.82,0.94l0.64,-0.05l0.4,-0.65l0.96,0.06l0.42,-0.36l0.24,-2.69l1.81,-1.65l1.21,-1.87l0.63,-0.01l1.07,1.06l0.34,1.28l3.44,1.35l-0.06,0.35l-1.37,0.1l-0.35,0.54l0.32,0.88ZM673.68,399.48l0.17,1.1l0.47,0.33l1.65,-0.3l0.87,-0.94l1.61,1.52l0.98,1.57l-0.12,2.81l0.41,2.29l0.95,0.9l0.88,2.44l-1.27,0.12l-5.1,-3.68l-0.34,-1.29l-1.37,-1.59l-0.33,-1.97l-0.88,-1.4l0.25,-1.68l-0.46,-1.06l1.63,0.84Z", "name": "Malaysia"}, "MX": {"path": "M133.1,328.46l0.22,0.49l9.64,3.54l6.96,-0.02l0.4,-0.4l0.0,-0.81l3.76,0.0l3.55,3.11l1.4,2.99l1.51,1.09l2.08,0.86l0.48,-0.14l1.46,-2.1l1.72,-0.05l1.59,1.03l2.06,3.53l1.47,1.63l1.26,3.28l2.18,1.06l2.27,0.6l-1.19,3.88l-0.42,5.19l1.79,5.01l1.62,1.94l0.61,1.55l1.2,1.45l2.55,0.67l1.38,1.13l7.54,-1.93l1.86,-1.32l1.14,-4.4l4.1,-1.24l3.56,-0.11l0.32,0.31l-0.06,0.97l-1.26,1.49l-0.67,1.74l0.38,0.71l-0.73,2.32l-0.49,-0.3l-1.0,0.08l-1.0,1.41l-0.47,-0.11l-0.53,0.47l-4.26,-0.02l-0.4,0.4l-0.0,1.08l-1.1,0.26l0.1,0.44l1.82,1.46l0.56,0.94l-3.19,0.21l-1.21,2.12l0.24,0.73l-0.2,0.45l-2.24,-2.21l-1.45,-0.94l-2.22,-0.7l-1.52,0.23l-3.06,1.18l-10.55,-3.9l-2.86,-2.0l-3.78,-0.94l-1.08,-1.21l-2.62,-1.46l-1.18,-1.57l-0.39,-0.85l0.66,-0.64l-0.19,-0.55l0.53,-0.77l0.01,-0.93l-2.0,-3.91l-2.21,-2.71l-2.53,-2.16l-1.19,-1.68l-2.2,-1.21l-0.31,-0.45l0.34,-1.56l-0.21,-0.44l-1.23,-0.63l-1.36,-1.26l-0.59,-1.87l-1.53,-0.48l-2.44,-2.68l-0.15,-0.94l-1.33,-2.14l-0.84,-2.11l-0.15,-1.39l-1.81,-1.16l-0.98,0.05l-1.31,-0.74l-0.58,0.22l-0.4,1.19l0.71,3.95l3.51,4.09l0.28,0.83l0.53,0.26l0.41,1.51l1.33,1.8l1.58,1.46l0.8,2.49l1.43,2.51l0.13,1.37l0.37,0.36l1.03,0.08l1.68,2.38l-0.84,0.79l-0.66,-1.55l-1.68,-1.59l-2.91,-1.94l0.06,-1.89l-0.53,-1.73l-2.91,-2.11l-0.56,0.08l-1.95,-1.14l-0.92,-1.02l0.72,-0.08l0.93,-1.06l0.08,-1.82l-1.93,-2.04l-1.46,-0.81l-3.76,-8.06l4.87,-0.45Z", "name": "Mexico"}, "IL": {"path": "M507.77,331.27l0.39,-0.81l0.2,0.43l-0.34,1.09l0.52,0.43l0.68,-0.23l-0.86,3.84l-1.16,-3.52l0.6,-0.8l-0.03,-0.44ZM508.72,328.43l0.38,-1.13l0.64,0.0l0.52,-0.54l0.02,0.67l-0.52,1.01l-0.55,-0.25l-0.5,0.24Z", "name": "Israel"}, "FR": {"path": "M444.48,298.15l-0.65,2.02l-0.56,-0.34l-0.51,-1.98l0.42,-1.04l0.99,-0.8l0.31,2.13ZM429.62,268.54l1.78,1.88l1.48,-0.14l2.08,1.68l1.36,0.33l1.23,0.98l3.1,0.6l-1.08,2.26l-0.3,2.52l-0.41,0.38l-0.92,-0.28l-0.51,0.42l0.07,0.77l-1.82,2.19l-0.04,1.65l0.57,0.37l0.85,-0.41l0.62,1.14l-0.04,1.13l0.61,1.11l-0.78,1.22l0.65,2.72l1.29,0.62l-0.19,1.03l-2.02,1.73l-4.75,-0.9l-3.84,1.13l-0.52,2.09l-2.47,0.37l-2.7,-1.47l-1.18,0.64l-4.28,-1.44l-0.76,-1.02l1.21,-2.03l0.41,-7.31l-2.58,-3.82l-1.89,-1.93l-3.74,-1.44l-0.2,-2.16l2.82,-0.72l4.11,0.96l0.48,-0.46l-0.62,-3.38l1.98,1.12l5.83,-3.02l0.91,-3.28l1.57,-0.58l0.25,0.97l1.34,0.35l1.05,1.43ZM289.01,408.29l-0.81,0.8l-0.78,0.12l-0.5,-0.66l-0.56,-0.1l-0.91,0.6l-0.46,-0.22l1.09,-2.96l-0.96,-1.77l-0.17,-1.49l1.07,-1.77l2.32,0.75l2.51,2.01l0.3,0.74l-2.14,3.96Z", "name": "France"}, "XS": {"path": "M531.15,388.78l1.52,0.12l5.13,-0.96l5.3,-1.49l-0.01,4.43l-2.67,3.4l-1.85,0.01l-8.04,-2.95l-2.55,-3.19l1.12,-1.73l2.04,2.35Z", "name": "Somaliland"}, "FI": {"path": "M492.16,172.43l-0.28,5.17l3.67,4.26l-2.21,4.98l2.86,6.98l-1.64,5.01l2.21,4.51l-0.98,3.55l3.63,4.02l-0.84,2.48l-7.53,9.52l-4.5,0.42l-4.38,1.84l-3.74,0.97l-1.3,-2.46l-2.36,-1.68l0.53,-4.89l-1.2,-4.86l1.14,-3.04l2.23,-3.46l5.68,-6.22l1.8,-1.58l-0.4,-2.8l-3.4,-2.81l-0.79,-2.25l-0.16,-10.13l-7.02,-7.77l0.96,-1.19l2.47,3.3l3.5,-0.17l2.57,1.6l0.53,-0.09l2.46,-3.23l1.19,-5.07l3.49,-2.23l2.82,2.55l-1.01,4.77Z", "name": "Finland"}, "FJ": {"path": "M869.95,457.1l-1.21,0.42l-0.08,-0.24l2.98,-1.23l-0.15,0.44l-1.54,0.62ZM867.58,459.4l0.43,0.38l-0.27,0.91l-1.24,0.29l-1.04,-0.25l-0.14,-0.69l0.64,-0.59l0.92,0.26l0.7,-0.31Z", "name": "Fiji"}, "FK": {"path": "M274.37,564.69l1.48,1.33l-0.53,1.0l-2.96,1.07l-0.95,-1.2l-0.57,-0.05l-1.79,1.54l-0.79,-1.16l2.52,-2.03l1.9,0.9l0.46,-0.09l1.23,-1.32Z", "name": "Falkland Is."}, "NI": {"path": "M202.32,382.47l0.82,-0.18l1.03,-1.02l-0.04,-0.89l0.68,-0.0l0.63,-0.54l0.97,0.23l1.53,-1.28l0.58,-1.0l1.17,0.35l2.41,-0.95l0.13,1.34l-0.81,1.96l0.1,2.77l-0.36,0.38l-0.11,1.76l-0.47,0.81l0.18,1.15l-1.73,-0.86l-0.71,0.27l-1.47,-0.6l-0.52,0.16l-4.02,-3.85Z", "name": "Nicaragua"}, "NL": {"path": "M430.16,264.22l0.76,-0.72l2.14,-5.88l3.19,-1.63l1.7,0.1l0.35,1.07l-0.6,3.64l-0.51,1.24l-1.24,0.0l-0.4,0.44l0.34,3.35l-2.18,-2.14l-0.43,-0.11l-2.22,0.8l-0.89,-0.15Z", "name": "Netherlands"}, "NO": {"path": "M491.42,157.32l7.17,5.11l-2.71,1.67l-0.13,0.55l2.55,4.24l-3.9,2.61l-1.31,0.42l0.79,-4.7l-3.21,-2.91l-0.48,-0.04l-4.06,2.73l-1.21,5.15l-2.11,2.72l-2.64,-1.54l-3.04,0.32l-2.65,-3.53l-0.63,-0.01l-1.41,1.75l-1.41,0.26l-0.33,0.36l-0.33,4.08l-4.27,-0.99l-0.48,0.32l-0.6,3.44l-2.07,-0.02l-0.38,0.27l-4.15,11.7l-3.88,8.48l0.84,2.18l-0.71,1.86l-2.2,-0.09l-0.4,0.28l-1.64,5.41l0.15,7.19l1.58,2.74l-0.8,5.79l-2.04,3.34l-0.83,2.09l-1.27,-2.26l-0.65,-0.07l-4.87,5.52l-3.05,1.02l-3.16,-2.22l-0.86,-5.06l-0.78,-11.7l2.19,-3.29l6.55,-4.59l5.02,-5.96l4.64,-8.4l6.0,-12.26l11.0,-13.83l5.32,-3.11l3.99,0.38l0.38,-0.19l3.69,-6.04l4.48,0.3l4.3,-1.47ZM484.42,59.58l4.68,4.94l-3.51,7.19l-6.97,1.55l-7.03,-2.18l-0.42,-3.6l-0.37,-0.35l-3.35,-0.23l-2.51,-6.12l7.16,-3.9l3.42,3.43l0.63,-0.09l2.33,-4.19l5.93,3.56ZM482.22,93.35l-4.99,4.27l-3.84,-2.35l1.56,-3.06l-1.38,-3.53l4.4,-2.11l0.89,4.13l3.36,2.65ZM466.32,69.71l8.02,9.81l-6.13,5.05l-1.37,8.88l-2.22,2.36l-1.15,9.08l-2.49,0.35l-5.08,-6.44l2.14,-3.9l-0.08,-0.49l-3.69,-3.4l-4.82,-10.44l-1.89,-10.23l6.16,-4.58l1.22,4.4l0.41,0.29l3.57,-0.19l0.37,-0.32l0.9,-4.57l3.14,-0.43l3.02,4.76Z", "name": "Norway"}, "NA": {"path": "M474.4,460.84l-1.11,0.05l-0.38,0.4l-0.07,9.11l-2.09,0.08l-0.38,0.4l-0.0,18.09l-1.98,1.29l-1.16,0.18l-2.43,-0.69l-0.48,-1.18l-0.99,-0.78l-0.55,0.05l-0.9,1.05l-1.52,-1.75l-0.94,-1.97l-1.99,-8.9l-0.06,-3.23l-0.33,-1.56l-2.3,-3.43l-1.91,-4.94l-1.96,-2.48l-0.12,-1.61l2.33,-0.8l1.43,0.07l1.82,1.15l10.23,-0.26l1.84,1.26l6.01,0.37ZM474.58,460.83l6.59,-1.65l1.91,0.41l-1.71,0.41l-1.31,0.85l-1.12,-0.95l-4.36,0.94Z", "name": "Namibia"}, "VU": {"path": "M839.03,452.86l0.23,1.16l-0.44,0.03l-0.2,-1.47l0.42,0.28Z", "name": "Vanuatu"}, "NC": {"path": "M838.79,471.67l-0.34,0.23l-2.9,-1.8l-3.27,-3.48l1.65,0.85l4.86,4.19Z", "name": "New Caledonia"}, "NE": {"path": "M454.74,355.83l1.33,1.41l0.49,0.07l1.26,-0.72l0.53,3.62l0.94,0.85l0.17,0.94l0.82,0.72l-0.45,0.98l-0.96,5.37l-0.13,3.28l-3.05,2.34l-1.22,3.61l1.02,1.25l-0.0,1.48l0.39,0.4l1.13,0.04l-0.1,0.49l-0.45,0.09l-0.35,0.68l-1.47,-2.44l-0.86,-0.29l-2.09,1.38l-1.73,-0.67l-1.45,-0.17l-0.85,0.35l-1.36,-0.07l-1.64,1.1l-1.06,0.05l-2.94,-1.29l-1.44,0.59l-1.01,-0.03l-0.97,-0.95l-2.7,-0.99l-2.69,0.31l-0.87,0.65l-0.46,1.62l-0.74,1.17l-0.12,1.55l-1.57,-1.1l-1.31,0.24l0.03,-0.82l-0.32,-0.41l-2.59,-0.52l-0.15,-1.17l-1.36,-1.62l-0.29,-1.01l0.13,-0.85l1.29,-0.08l1.08,-0.93l3.31,-0.22l2.22,-0.41l0.32,-0.34l0.2,-1.5l1.39,-1.91l-0.01,-5.78l3.37,-1.15l7.24,-5.24l8.41,-5.07l3.69,1.09Z", "name": "Niger"}, "NG": {"path": "M456.32,383.7l0.64,0.66l-0.28,1.06l-2.11,2.02l-2.03,5.2l-1.37,1.16l-1.15,3.19l-1.33,0.66l-1.46,-0.97l-1.21,0.16l-1.38,1.37l-0.91,0.24l-1.79,4.07l-2.33,0.81l-1.11,-0.07l-0.86,0.51l-1.71,-0.05l-1.19,-1.39l-0.89,-1.9l-1.77,-1.66l-3.95,-0.08l0.07,-5.23l0.42,-1.44l1.95,-2.32l-0.14,-0.91l0.43,-1.18l-0.53,-1.42l0.25,-2.95l0.72,-1.08l0.32,-1.35l0.46,-0.39l2.47,-0.28l2.34,0.89l1.15,1.03l1.28,0.04l1.22,-0.59l3.03,1.28l1.5,-0.14l1.36,-1.01l1.32,0.07l0.82,-0.35l3.45,0.81l1.82,-1.34l1.84,2.7l0.66,0.16Z", "name": "Nigeria"}, "NZ": {"path": "M857.8,512.11l1.85,3.38l0.45,0.2l0.3,-0.38l0.03,-1.36l0.38,0.29l0.56,2.51l2.02,1.03l1.81,0.29l1.59,-1.16l0.7,0.2l-1.16,4.01l-1.98,0.12l-0.73,1.27l0.21,1.25l-2.44,4.45l-1.47,1.02l-0.42,-0.65l-0.66,-0.3l1.25,-2.35l-0.81,-2.16l-2.64,-1.38l0.04,-0.7l1.82,-1.29l0.42,-2.46l-0.15,-2.29l-0.96,-2.0l-0.05,-0.75l-3.11,-3.94l-0.82,-1.69l1.57,1.56l1.76,0.72l0.66,2.55ZM853.83,527.42l0.57,1.38l0.61,0.17l1.4,-1.06l0.46,0.9l0.0,1.2l-2.48,3.93l-1.26,1.36l-0.06,0.47l0.6,1.08l-1.47,0.09l-2.32,1.54l-2.04,5.78l-3.02,2.49l-2.03,-0.07l-1.72,-1.2l-2.46,-0.23l-0.29,-0.92l1.25,-2.46l3.05,-3.36l1.62,-0.67l4.01,-3.18l1.56,-1.87l1.08,-2.44l1.01,-1.01l0.35,-1.73l1.23,-1.07l0.35,0.88Z", "name": "New Zealand"}, "NP": {"path": "M641.15,342.42l-0.0,3.36l-1.74,0.04l-4.8,-0.9l-1.59,-1.45l-3.36,-0.36l-7.66,-3.88l0.81,-2.23l2.33,-1.79l1.77,0.78l2.49,1.85l1.38,0.43l0.99,1.42l1.89,0.55l1.99,1.22l5.5,0.95Z", "name": "Nepal"}, "XK": {"path": "M472.78,298.18l-1.1,-1.47l0.98,-0.9l0.29,-0.94l2.0,1.84l-0.4,0.85l-1.77,0.62Z", "name": "Kosovo"}, "CI": {"path": "M407.4,389.11l0.86,0.42l0.56,0.9l1.13,0.54l1.19,-0.61l0.97,-0.08l1.42,0.54l0.6,3.25l-1.03,2.09l-0.65,2.85l1.06,2.33l-0.06,0.53l-2.54,-0.47l-1.66,0.03l-3.06,0.47l-4.11,1.61l0.32,-3.06l-1.18,-1.31l-1.32,-0.67l0.42,-0.86l-0.2,-1.4l0.5,-0.68l0.01,-1.59l0.84,-0.33l0.26,-0.5l-1.15,-3.02l0.12,-0.51l0.51,-0.25l0.66,0.31l1.93,0.02l0.67,-0.72l0.71,-0.14l0.25,0.7l0.57,0.22l1.4,-0.61Z", "name": "C\u00f4te d'Ivoire"}, "CH": {"path": "M444.61,279.47l-0.29,1.12l0.16,0.5l1.13,0.67l1.03,0.12l-0.12,0.88l-0.79,0.44l-1.7,-0.42l-0.47,0.25l-0.46,1.23l-0.72,0.07l-0.3,-0.39l-0.58,-0.06l-1.31,1.14l-0.93,0.13l-0.87,-0.62l-0.82,-1.51l-0.52,-0.17l-0.61,0.29l0.02,-0.85l1.73,-1.95l0.07,-0.65l0.96,0.08l0.57,-0.53l1.97,0.02l0.67,-0.71l2.16,0.92Z", "name": "Switzerland"}, "CO": {"path": "M242.07,384.75l-1.7,0.59l-0.59,1.19l-1.7,1.7l-0.37,1.94l-0.67,1.44l0.31,0.57l1.03,0.14l0.25,0.91l0.57,0.65l-0.04,2.35l1.64,1.42l3.16,-0.24l1.26,0.28l1.67,2.06l0.41,0.13l4.09,-0.39l0.45,0.22l-0.92,1.95l-0.2,1.8l0.52,1.83l0.75,1.05l-1.12,1.1l0.07,0.63l0.84,0.51l0.74,1.3l-0.39,-0.45l-0.59,-0.01l-0.71,0.74l-4.71,-0.05l-0.4,0.41l0.03,1.57l0.33,0.39l1.11,0.2l-1.68,0.4l-0.29,0.38l-0.01,1.82l1.16,1.14l0.34,1.25l-1.05,7.05l-1.04,-0.87l1.26,-1.99l-0.13,-0.56l-2.18,-1.23l-1.38,0.2l-1.14,-0.38l-1.27,0.61l-1.55,-0.26l-1.38,-2.46l-1.23,-0.75l-0.85,-1.2l-1.67,-1.19l-0.86,0.13l-2.11,-1.32l-1.01,0.31l-1.8,-0.29l-0.52,-0.91l-3.09,-1.68l0.77,-0.52l-0.1,-1.12l0.41,-0.64l1.34,-0.32l2.0,-2.88l-0.11,-0.57l-0.67,-0.43l0.39,-1.38l-0.52,-2.11l0.49,-0.83l-0.4,-2.13l-0.97,-1.36l0.17,-0.67l0.86,-0.08l0.47,-0.75l-0.46,-1.63l1.41,-0.07l1.8,-1.7l0.93,-0.24l0.3,-0.38l0.45,-2.78l1.22,-1.01l1.44,-0.04l0.45,-0.5l1.91,0.12l2.93,-1.85l1.15,-1.15l0.91,0.47l-0.26,0.45Z", "name": "Colombia"}, "CN": {"path": "M740.22,270.81l4.55,1.5l2.81,2.58l0.98,3.43l0.38,0.29l3.8,0.0l2.34,-1.51l3.31,-0.89l-1.01,2.59l-1.01,1.46l-0.85,3.95l-1.53,3.16l-2.73,-0.57l-2.43,1.3l-0.19,0.43l0.65,2.95l-0.32,3.68l-0.94,0.07l-0.37,0.4l0.01,0.58l-0.89,-1.11l-0.67,0.07l-0.92,1.77l-3.72,1.4l-0.25,0.46l0.28,1.25l-1.5,-0.08l-1.08,-0.96l-0.59,0.06l-1.68,2.31l-2.7,1.74l-2.03,2.08l-3.39,0.92l-1.93,1.54l-1.22,0.4l0.42,-0.81l-0.43,-1.03l1.81,-2.01l0.02,-0.51l-1.32,-1.73l-0.51,-0.11l-2.25,1.21l-2.83,2.28l-1.5,2.02l-2.27,0.14l-1.56,1.64l-0.04,0.47l1.32,2.16l2.01,0.63l0.3,1.47l1.98,0.92l0.42,-0.05l2.6,-2.09l1.99,1.1l1.5,0.12l0.24,0.97l-3.39,0.94l-1.12,1.61l-2.5,1.64l-1.29,2.15l0.13,0.55l2.57,1.6l0.97,2.9l3.17,4.94l-0.03,1.8l-1.36,0.69l-0.19,0.5l0.6,1.55l1.41,0.95l-0.9,4.05l-1.43,0.4l-3.85,6.72l-2.28,3.23l-6.78,4.72l-2.73,0.3l-1.45,1.07l-0.61,-0.62l-0.56,-0.01l-1.36,1.29l-3.39,1.31l-2.61,0.41l-1.1,2.86l-0.81,0.09l-0.5,-1.47l0.5,-0.88l-0.25,-0.59l-3.36,-0.86l-1.3,0.41l-2.3,-0.64l-0.95,-0.87l0.34,-1.33l-0.3,-0.49l-2.19,-0.48l-1.13,-0.96l-0.48,-0.03l-2.06,1.4l-4.28,0.28l-2.76,1.08l-0.28,0.43l0.32,2.61l-0.59,-0.03l-0.19,-1.39l-0.56,-0.34l-1.67,0.72l-2.47,-1.26l0.63,-1.94l-0.25,-0.5l-1.37,-0.46l-0.55,-2.3l-0.46,-0.3l-2.13,0.37l0.24,-2.6l2.39,-2.48l0.03,-4.49l-1.19,-0.94l-0.79,-1.57l-0.41,-0.22l-1.4,0.2l-2.0,-0.32l0.48,-1.12l-1.17,-1.78l-0.56,-0.11l-1.62,1.1l-2.25,-0.6l-2.89,1.82l-2.25,2.08l-1.74,0.31l-1.17,-0.74l-3.32,-0.68l-1.48,0.83l-1.04,1.32l-0.12,-1.23l-0.54,-0.34l-1.44,0.56l-5.54,-0.9l-1.98,-1.22l-1.89,-0.56l-0.99,-1.42l-1.34,-0.39l-2.55,-1.88l-2.01,-0.89l-1.21,0.59l-5.57,-3.64l-0.54,-2.5l1.19,0.26l0.49,-0.37l0.08,-1.52l-0.98,-1.65l0.16,-2.6l-2.69,-3.58l-4.12,-1.33l-0.68,-2.18l-1.91,-1.6l-0.38,-0.78l-0.5,-3.27l-1.52,-0.73l-0.7,0.14l-0.49,-2.31l0.57,-0.59l-0.13,-0.89l2.06,-1.34l1.59,-0.59l2.55,0.42l0.43,-0.23l0.85,-1.9l2.99,-0.37l1.11,-1.41l4.04,-1.97l0.39,-0.97l-0.17,-1.67l1.48,-0.77l0.19,-0.49l-2.1,-5.65l4.54,-1.3l1.38,-0.84l1.88,-6.37l4.59,1.12l0.4,-0.13l1.49,-1.91l0.11,-3.42l2.01,-0.45l1.83,-2.43l0.45,-0.15l0.67,2.44l2.23,2.08l3.44,1.35l1.58,2.72l-0.93,4.08l0.95,1.84l6.54,1.28l2.95,2.14l1.48,0.4l1.07,3.0l1.52,2.13l3.06,0.09l5.13,0.76l3.38,-0.46l2.34,0.48l3.65,2.02l3.07,0.05l0.99,0.93l0.48,0.05l2.87,-1.78l3.94,-1.15l3.84,-0.16l3.06,-1.29l1.77,-1.81l1.72,-1.14l0.16,-0.47l-1.12,-2.36l1.05,-1.82l4.03,0.9l2.45,-1.85l3.76,-1.36l1.97,-2.46l1.63,-0.96l3.49,-0.47l1.91,0.4l0.47,-0.31l0.18,-1.65l-2.27,-2.59l-2.11,-1.27l-0.44,0.02l-1.78,1.27l-2.29,-0.54l-1.28,0.37l-0.43,-1.02l2.76,-6.16l3.03,1.25l3.53,-2.45l0.15,-1.96l2.18,-4.08l1.47,-1.55l-0.03,-2.26l-1.16,-1.03l1.66,-1.66l2.96,-0.72l3.21,-0.11l3.62,1.21l2.05,1.43l3.31,8.17l0.92,3.82ZM696.92,366.89l-1.87,1.1l-1.63,-0.65l-0.06,-1.84l1.03,-1.01l2.58,-0.7l1.15,0.05l0.31,0.56l-0.98,1.09l-0.53,1.4Z", "name": "China"}, "CM": {"path": "M457.92,387.33l1.06,1.92l-1.4,0.16l-1.05,-0.23l-0.45,0.23l-0.54,1.2l0.08,0.45l1.48,1.48l1.05,0.45l1.01,2.47l-1.52,3.0l-0.68,0.68l-0.13,3.69l2.38,3.84l1.09,0.8l0.24,2.48l-3.67,-1.14l-11.27,-0.13l0.23,-1.79l-0.98,-1.66l-1.19,-0.54l-0.44,-0.97l-0.6,-0.42l1.71,-4.28l0.75,-0.13l1.38,-1.37l0.65,-0.03l1.71,0.99l1.93,-1.12l1.14,-3.2l1.38,-1.17l2.0,-5.16l2.17,-2.15l0.3,-1.65l-0.86,-0.89l0.18,-0.37l0.8,1.32l0.07,3.24Z", "name": "Cameroon"}, "CL": {"path": "M246.67,568.71l-3.34,2.4l-0.55,3.89l-0.62,0.06l-2.66,-1.3l-2.82,-2.86l-3.06,-2.32l-0.71,-2.33l0.65,-2.52l-1.22,-2.56l-0.31,-6.43l1.02,-3.46l2.58,-2.79l-0.19,-0.66l-3.24,-0.91l2.11,-2.91l0.78,-5.35l2.3,1.02l0.56,-0.29l1.31,-7.14l-0.2,-0.42l-1.68,-0.9l-0.58,0.28l-0.7,3.81l-0.82,-0.25l1.58,-10.59l1.15,-2.43l-0.71,-3.1l-0.18,-3.15l1.02,-0.35l3.26,-9.88l1.07,-4.5l-0.56,-4.47l0.74,-2.47l-0.29,-3.45l1.46,-3.5l2.04,-17.19l-0.67,-7.94l1.04,-0.54l0.54,-0.92l0.79,1.16l0.32,1.82l1.25,1.19l-0.69,2.61l1.33,2.98l0.97,3.7l0.47,0.29l1.49,-0.31l0.11,0.25l-0.77,2.53l-2.57,1.28l-0.22,0.37l0.08,4.51l-0.47,0.8l0.58,1.25l-1.59,1.59l-1.68,2.74l-0.89,2.6l0.21,2.85l-1.49,2.9l1.12,5.38l0.64,0.64l-0.01,2.49l-1.39,2.89l0.02,2.59l-1.89,2.18l0.02,2.98l0.7,2.85l-1.44,1.23l-1.26,6.27l0.39,3.95l-0.98,0.94l0.58,3.94l1.04,1.3l-0.69,1.22l0.14,0.54l1.01,0.61l0.18,0.88l-1.04,0.92l0.26,2.03l-0.89,4.69l-1.31,3.11l0.25,2.01l-0.73,2.21l-1.97,1.93l0.28,4.31l0.88,1.43l1.6,0.0l-0.01,2.68l1.04,2.36l6.16,0.76ZM248.69,570.67l0.0,9.15l0.4,0.4l3.58,0.07l-0.53,1.14l-1.93,1.23l-2.45,-0.46l-1.9,-1.34l-2.54,-0.61l-5.59,-4.63l-2.57,-3.5l4.23,3.11l3.32,1.53l0.5,-0.14l1.29,-1.95l0.83,-2.85l2.04,-1.51l1.3,0.35Z", "name": "Chile"}, "XC": {"path": "M504.86,320.38l0.39,0.01l0.27,-0.07l-0.3,0.35l-0.36,-0.28Z", "name": "N. Cyprus"}, "CA": {"path": "M280.04,266.9l-1.66,3.44l0.11,0.49l0.5,-0.0l1.44,-1.15l1.05,0.52l-0.63,0.98l0.16,0.58l2.22,1.06l1.38,-0.83l1.97,0.93l-0.68,2.46l0.52,0.48l1.3,-0.48l0.99,3.78l-0.93,2.87l-0.77,0.09l-1.25,-0.52l0.49,-2.7l-0.87,-0.87l-0.52,0.06l-2.77,3.06l-0.43,-0.04l1.14,-1.12l-0.14,-0.66l-2.4,-0.9l-7.4,0.09l-0.2,-0.58l1.35,-1.14l0.02,-0.6l-0.8,-0.75l1.91,-2.12l2.57,-6.16l1.48,-2.16l1.98,-1.26l0.5,0.08l-1.6,3.09ZM68.32,168.48l4.07,1.51l3.89,3.35l2.78,0.73l0.42,-0.15l2.16,-2.88l2.84,-2.09l3.89,0.75l3.71,-3.14l3.71,-1.66l1.54,2.72l0.62,0.1l1.99,-1.93l0.48,-2.97l1.15,0.53l4.17,6.45l0.67,0.01l2.68,-3.95l0.27,4.33l0.54,0.35l3.08,-1.17l1.05,-2.04l2.63,0.36l3.83,3.0l5.86,2.58l3.48,1.19l2.44,-0.39l2.95,3.04l-3.23,3.06l0.16,0.67l4.53,1.42l6.92,-0.76l1.96,-1.04l2.47,3.65l0.64,0.03l2.72,-3.33l-0.01,-0.52l-2.34,-2.61l1.33,-1.93l2.87,-0.3l1.88,-0.64l1.8,1.47l2.48,3.63l0.41,0.17l2.63,-0.5l4.62,2.96l3.83,-1.03l3.59,0.16l0.42,-0.43l-0.27,-3.92l1.8,-0.96l3.49,2.08l-0.01,6.03l0.34,0.4l0.44,-0.28l1.5,-4.95l1.69,0.15l0.43,-0.33l1.13,-6.89l-2.74,-4.66l-2.86,-2.89l0.19,-8.09l2.75,-5.34l2.86,1.11l2.44,3.36l3.31,8.33l-2.12,3.42l0.22,0.59l4.38,1.37l-0.01,6.85l0.29,0.39l0.45,-0.18l3.02,-4.91l2.56,3.84l-0.68,5.11l2.42,4.42l0.7,0.0l2.61,-4.74l1.86,-5.93l0.15,-7.44l3.08,0.48l3.57,1.03l3.18,3.35l0.14,3.2l-1.81,3.53l1.71,3.82l-0.29,2.9l-4.72,4.27l-3.21,0.89l-2.43,-1.77l-0.62,0.23l-0.74,3.09l-2.4,5.08l-0.73,2.58l-2.76,3.73l-3.68,0.5l-2.07,2.63l-0.15,3.32l-2.86,0.78l-3.1,4.45l-2.74,5.98l-0.98,4.09l-0.14,5.74l0.31,0.4l3.44,0.75l2.25,7.78l0.48,0.26l3.37,-0.88l4.49,1.92l2.43,1.68l1.92,2.2l3.09,1.21l2.61,1.84l6.65,0.69l-0.36,3.49l0.8,4.33l1.81,4.63l3.81,3.97l0.51,0.05l2.08,-1.51l1.37,-4.39l-1.31,-6.63l-1.54,-2.05l3.69,-1.91l2.84,-3.1l1.49,-3.43l-0.24,-3.19l-1.7,-3.97l-2.92,-3.49l2.86,-5.19l-1.09,-4.55l-0.81,-7.95l1.39,-0.99l4.1,1.4l2.62,0.54l2.14,-1.31l5.09,4.62l1.07,2.2l4.09,0.36l-0.06,3.98l0.83,6.25l2.42,1.04l1.74,2.7l0.57,0.11l3.63,-2.66l2.51,-5.54l1.22,-1.73l7.63,15.44l-0.95,2.7l0.14,0.45l3.3,2.51l2.23,2.5l4.1,1.23l1.45,1.25l0.96,3.51l2.08,0.8l0.87,1.37l0.17,4.34l-3.4,2.77l-4.22,1.5l-3.06,3.15l-4.04,0.61l-5.35,-0.82l-6.4,0.25l-2.32,2.87l-3.25,1.78l-6.48,8.38l-0.03,0.47l0.45,0.17l2.33,-0.73l3.98,-4.83l5.12,-3.08l3.49,-0.36l1.77,1.49l-2.18,2.58l0.8,4.03l1.01,2.99l3.5,1.85l4.14,-0.52l2.14,-3.2l0.24,1.68l1.22,0.99l-2.64,2.0l-5.49,2.09l-2.54,1.45l-2.73,2.43l-1.38,-0.18l-0.08,-2.39l4.16,-2.8l0.16,-0.45l-0.39,-0.28l-4.01,0.12l-2.61,0.4l-1.4,-1.73l-0.12,-5.1l-1.11,-1.06l-1.83,0.44l-0.65,-0.76l-0.63,0.03l-1.91,2.77l-0.81,2.9l-0.81,1.48l-1.66,0.64l-0.47,0.87l-8.32,0.08l-1.21,0.71l-2.33,2.23l-0.72,-0.14l-1.36,1.08l-1.12,-0.54l-4.75,1.43l-0.9,1.32l0.21,0.59l1.7,0.22l0.05,0.22l-1.84,0.36l-1.85,0.9l-1.19,-0.29l-0.92,0.15l-2.95,2.0l-0.71,-0.11l0.32,-0.68l1.12,-1.78l1.72,-1.33l0.09,-2.6l1.16,-2.28l0.48,0.59l2.03,0.48l0.42,-0.16l0.82,-1.6l-2.66,-4.02l-2.29,-0.71l-5.63,-0.81l-0.4,-0.66l-0.86,0.2l0.27,-0.64l-0.21,-0.52l-0.72,-0.32l0.32,-1.06l-0.91,-1.28l0.34,-0.82l-0.29,-0.55l-2.6,-0.52l-0.76,-1.93l-0.95,-0.76l-1.67,-0.09l-2.67,-0.67l-1.13,1.4l-1.48,0.69l-0.85,1.24l-2.8,-0.89l-2.1,0.45l-2.38,-1.13l-4.23,-0.83l-0.58,-0.48l-0.42,-1.96l-0.4,-0.32l-0.85,0.02l-0.39,0.4l-0.01,1.07l-69.11,-0.01l-6.5,-5.37l-4.5,-1.66l-1.29,-3.28l0.34,-2.39l-0.2,-0.41l-3.03,-1.66l-0.52,-3.39l-2.92,-2.97l-0.05,-1.94l1.39,-2.23l-0.07,-2.8l-4.34,-3.13l-4.08,-8.55l-4.01,-4.22l-1.31,-2.51l-0.57,-0.15l-2.51,1.6l-2.18,2.42l-3.81,-5.1l-2.44,-1.39l-2.26,-0.18l0.03,-55.45ZM265.75,272.87l-0.72,0.04l-3.11,-1.15l-1.72,-1.35l3.19,0.89l2.36,1.57ZM249.33,12.09l6.65,1.61l5.26,2.56l4.43,5.22l-0.1,4.84l-5.98,7.79l-6.13,3.67l-2.26,3.84l0.35,0.6l4.74,-0.08l-5.52,9.28l-4.14,4.52l-4.23,11.87l-5.01,2.26l-1.69,2.82l-7.4,1.42l-0.32,0.34l0.22,0.41l3.02,1.48l-1.51,2.34l2.02,6.18l-2.26,4.04l-3.94,3.58l-1.16,4.49l-3.53,3.68l0.35,2.54l0.44,0.34l3.85,-0.39l0.04,2.09l-6.37,6.12l-6.3,-2.81l-7.5,1.6l-3.7,-1.27l-4.4,-0.52l-0.28,-4.64l4.41,-2.41l0.2,-0.41l-1.19,-8.1l1.06,-0.58l6.49,4.94l0.49,-0.0l0.12,-0.48l-3.41,-7.64l-3.92,-2.37l1.85,-4.46l4.51,-3.29l0.71,-4.65l-3.55,-5.6l-0.98,-6.84l6.22,0.58l1.88,1.51l0.57,-0.08l3.91,-5.41l-0.21,-0.62l-5.64,-1.76l-8.71,0.93l-4.24,-5.03l-2.06,-6.44l-2.92,-4.92l-0.52,-5.65l3.5,-3.22l2.94,-0.62l4.91,-2.99l3.67,-6.97l2.62,0.86l2.63,5.2l0.41,0.22l0.34,-0.32l1.88,-10.36l3.17,-3.13l4.37,-2.24l7.32,-0.83l1.2,2.03l0.52,0.16l7.1,-3.49l10.71,2.64ZM203.82,140.61l1.98,5.56l0.38,0.26l0.37,-0.27l2.27,-6.74l5.84,-3.34l4.06,8.5l-0.37,5.31l0.57,0.39l4.95,-2.38l2.28,-3.11l5.2,3.94l3.34,3.74l0.31,3.32l0.54,0.34l4.32,-1.65l2.44,4.64l6.13,3.12l2.09,2.87l2.25,6.4l-4.35,3.07l-0.01,0.65l5.9,4.44l3.95,1.47l3.53,5.87l3.81,0.57l-0.69,3.91l-4.11,6.58l-2.68,-2.22l-3.9,-5.85l-0.43,-0.17l-3.24,0.78l-0.3,0.35l-0.24,3.8l2.63,3.5l3.42,2.75l0.96,1.44l1.58,5.48l-0.73,3.38l-2.67,-1.26l-6.25,-4.45l-0.52,0.05l-0.04,0.52l6.1,8.03l0.24,1.1l-6.09,-1.92l-5.3,-3.12l-2.77,-2.46l0.72,-1.31l-0.1,-0.51l-7.38,-5.75l-0.64,0.33l0.03,1.33l-6.7,0.85l-1.79,-1.68l1.46,-3.85l4.49,-0.1l5.15,-0.77l0.31,-0.54l-0.79,-2.04l0.83,-2.91l3.22,-6.15l-0.67,-3.24l-1.07,-2.43l-3.84,-3.29l-4.67,-2.18l1.24,-1.37l0.05,-0.47l-2.65,-4.44l-2.33,-0.57l-1.88,-2.37l-0.65,0.04l-1.25,2.02l-4.3,0.88l-9.0,-1.6l-5.26,-2.14l-3.98,-1.1l-1.81,-2.3l2.43,-3.26l-0.32,-0.64l-3.2,-0.03l-0.75,-7.66l1.89,-7.38l2.46,-3.41l5.58,-2.04l-1.59,4.91ZM261.18,282.95l2.07,0.7l1.54,-0.05l-0.57,0.69l-0.66,0.17l-2.92,-1.41l-0.44,-0.86l0.38,-0.46l0.61,1.23ZM230.78,185.0l-2.28,0.26l-0.54,-2.72l0.98,-3.45l1.88,-0.76l1.65,1.57l0.03,2.61l-0.24,0.76l-1.47,1.73ZM229.41,141.37l0.16,1.75l-4.89,-0.38l-2.72,1.08l-0.48,-0.34l-2.65,-4.39l0.09,-2.82l0.87,-0.43l5.47,0.92l4.14,4.61ZM222.03,214.7l-0.78,2.22l-0.56,-0.23l-0.54,-1.3l0.87,-1.54l0.57,0.07l0.44,0.77ZM183.65,102.44l3.0,3.59l4.7,-0.02l1.97,3.24l-0.41,4.19l2.83,2.3l1.84,2.54l6.99,1.27l4.2,-2.19l4.96,-0.84l3.84,0.67l2.53,3.56l0.53,3.8l-1.43,2.32l-3.48,1.88l-3.25,-1.1l-7.15,1.44l-5.04,0.16l-3.95,-1.13l-6.43,-2.95l-0.83,-5.12l-0.3,-4.98l-2.56,-4.72l-5.31,-1.46l-2.69,-3.1l0.83,-3.99l4.63,0.64ZM207.36,195.03l0.42,2.4l0.63,0.26l0.99,-0.72l1.27,1.36l5.47,3.76l0.21,2.54l0.49,0.36l1.62,-0.39l1.33,1.4l-1.71,1.36l-3.54,-1.23l-1.33,-2.43l-0.66,-0.06l-2.46,2.99l-3.05,2.47l-0.7,-2.67l-0.45,-0.29l-2.39,0.38l1.64,-2.22l0.32,-4.55l0.78,-5.03l1.13,0.31ZM215.49,211.5l-2.69,2.74l-1.33,-0.09l-0.38,-1.01l1.61,-2.18l2.82,0.04l-0.02,0.5ZM202.66,70.17l2.91,4.33l-3.3,3.83l-4.54,9.4l-4.14,0.83l-4.93,-1.5l-2.57,-4.9l0.04,-4.53l1.93,-3.49l-0.36,-0.59l-4.35,0.1l-2.61,-4.34l-1.55,-6.33l1.71,-6.55l1.67,-4.57l2.41,-1.04l0.22,-0.48l-0.96,-3.26l5.05,-0.73l3.21,8.41l8.21,6.06l1.95,9.35ZM187.39,143.67l-2.74,6.11l-2.28,-0.24l-1.49,-6.99l0.04,-4.2l1.26,-3.63l2.29,-2.28l4.96,0.3l4.35,2.01l-3.51,7.33l-2.87,1.59ZM186.12,124.07l-1.2,3.26l-3.2,-0.62l-2.75,-2.26l1.22,-4.02l3.15,-2.36l1.93,3.09l0.86,2.91ZM185.64,96.93l-0.83,0.24l-4.33,-0.68l-0.51,-2.52l4.35,0.15l1.52,1.89l-0.2,0.91ZM180.62,90.66l-3.24,2.16l-1.76,-2.41l-1.05,-4.51l-0.18,-4.75l2.69,0.43l1.32,0.77l2.85,4.19l-0.63,4.11ZM180.98,172.19l-1.22,1.91l-3.04,-1.9l-2.16,0.64l-2.93,-2.72l1.98,-2.02l1.52,-2.75l3.72,3.03l2.13,3.8ZM169.77,135.22l2.97,1.73l4.08,-1.03l0.51,2.03l-2.26,4.02l0.07,0.48l3.66,3.51l-0.43,6.97l-3.8,2.82l-2.06,-0.56l-1.71,-2.96l-6.1,-6.18l0.04,-2.04l4.64,0.95l0.44,-0.57l-2.66,-5.4l2.61,-3.78ZM174.46,107.75l1.36,3.53l0.08,5.21l-1.09,7.07l-3.71,0.89l-2.35,-1.35l0.05,-5.54l-0.47,-0.4l-3.64,0.69l-0.14,-7.04l2.56,0.16l3.62,-3.51l3.32,0.59l0.42,-0.3ZM170.01,87.71l0.84,4.38l-3.36,-1.1l-4.3,-4.01l-4.91,-0.41l2.06,-3.18l-0.05,-0.5l-2.92,-2.99l-0.16,-4.33l4.31,1.6l6.62,4.67l1.87,5.86ZM134.6,141.21l-1.16,3.7l0.55,0.48l5.29,-2.43l3.29,4.01l0.64,-0.03l2.53,-3.85l1.89,2.29l2.03,7.94l0.37,0.3l0.4,-0.26l1.28,-3.56l-1.72,-8.28l1.76,-1.01l2.22,1.24l2.69,3.29l2.45,13.62l8.57,7.16l-0.23,2.66l-3.8,0.53l-0.29,0.6l1.51,2.57l-0.67,2.03l-4.14,-1.0l-4.49,-1.91l-3.03,0.47l-4.65,2.34l-10.43,1.63l-1.41,-3.17l-3.42,-1.92l-2.23,0.65l-2.72,-5.01l5.02,-1.82l3.63,0.3l3.27,-1.29l0.25,-0.38l-0.26,-0.37l-4.84,-1.75l-5.5,0.57l-3.28,-0.14l-1.06,-2.23l5.47,-2.91l0.2,-0.46l-0.4,-0.3l-3.77,0.11l-3.96,-1.88l1.97,-5.68l1.69,-3.21l6.41,-4.99l2.07,1.35ZM158.82,138.54l-1.83,4.71l-3.34,-5.15l0.6,-0.86l2.98,-0.32l1.59,1.62ZM149.59,111.85l0.99,3.73l0.63,0.21l2.09,-1.62l2.15,0.37l0.41,4.59l-1.42,4.36l-8.24,1.45l-6.38,4.09l-3.32,0.18l-0.26,-2.47l5.03,-4.13l0.12,-0.46l-0.41,-0.24l-11.2,1.15l-3.08,-1.54l3.28,-9.52l2.11,-2.66l6.67,3.38l4.39,5.99l4.63,0.92l0.44,-0.53l-3.52,-9.7l2.01,-3.46l2.07,1.01l0.81,4.89ZM145.71,84.15l-2.55,2.05l-3.61,-0.01l0.03,-1.26l2.32,-3.45l0.99,0.43l2.82,2.24ZM144.69,94.95l-4.27,3.06l-3.27,-3.31l1.81,-3.41l3.34,-1.13l3.11,1.67l-0.73,3.12ZM118.92,155.09l-5.99,3.39l-1.29,-3.14l-5.55,-4.03l2.72,-9.3l2.17,-5.73l-2.25,-5.4l7.82,-1.34l3.61,1.91l6.24,0.5l2.31,2.51l2.44,3.4l-2.87,2.01l-6.21,6.07l-3.1,5.73l-0.05,3.42ZM129.56,96.45l-0.31,7.96l-1.8,3.53l-2.35,0.59l-4.6,4.46l-3.74,1.48l-2.92,-1.93l4.07,-7.68l5.0,-7.12l3.62,0.15l3.02,-1.45ZM111.13,275.3l-0.71,0.3l-3.83,-1.6l-0.83,-1.38l-2.13,-1.28l-0.67,-1.21l-2.4,-0.65l-0.75,-2.19l3.73,1.32l2.25,0.41l2.0,3.05l2.52,1.64l0.8,1.62ZM87.8,253.38l0.9,0.35l1.87,-0.27l-0.67,4.25l1.83,2.97l-1.42,-1.69l-0.98,-1.97l-1.19,-1.23l-0.34,-2.41Z", "name": "Canada"}, "CG": {"path": "M466.72,406.37l-0.1,1.03l-1.25,2.97l-0.19,3.62l-0.46,1.78l-0.23,0.63l-1.61,1.19l-1.21,1.39l-1.09,2.43l0.04,2.09l-3.25,3.25l-0.5,-0.24l-0.5,-0.83l-1.36,-0.02l-0.98,0.89l-1.68,-0.99l-1.54,1.24l-1.52,-1.96l1.57,-1.14l0.11,-0.52l-0.77,-1.35l2.1,-0.66l0.39,-0.73l1.05,0.82l2.21,0.11l1.12,-1.37l0.37,-1.81l-0.27,-2.09l-1.13,-1.5l1.0,-2.69l-0.13,-0.45l-0.92,-0.58l-1.6,0.17l-0.51,-0.94l0.1,-0.61l2.75,0.09l3.97,1.24l0.51,-0.33l0.17,-1.28l1.24,-2.21l1.28,-1.14l2.76,0.49Z", "name": "Congo"}, "CF": {"path": "M461.16,408.1l-0.26,-1.19l-1.09,-0.77l-0.84,-1.18l-0.29,-1.0l-1.04,-1.15l0.08,-3.44l0.58,-0.49l1.16,-2.36l1.85,-0.17l0.61,-0.62l0.97,0.58l3.15,-0.97l2.48,-1.92l0.02,-0.96l2.82,0.02l2.36,-1.18l1.93,-2.86l1.16,-0.94l1.11,-0.31l0.27,0.87l1.34,1.48l-0.39,2.02l0.3,1.01l4.01,2.76l0.17,0.93l2.63,2.31l0.6,1.44l2.08,1.4l-3.84,-0.21l-1.94,0.88l-1.24,-0.49l-2.67,1.2l-1.29,-0.18l-0.51,0.37l-0.6,1.22l-3.35,-0.65l-1.57,-0.91l-2.42,-0.83l-1.45,0.91l-0.97,1.28l-0.26,1.56l-3.22,-0.43l-1.49,1.33l-0.94,1.62Z", "name": "Central African Rep."}, "CD": {"path": "M487.01,402.27l2.34,-0.14l1.35,1.84l1.34,0.45l0.86,-0.39l1.21,0.12l1.07,-0.41l0.54,0.89l2.04,1.54l-0.14,2.72l0.7,0.54l-1.38,1.13l-1.53,2.54l-0.17,2.05l-0.59,1.08l-0.02,1.72l-0.72,0.84l-0.66,3.01l0.63,1.32l-0.44,4.26l0.64,1.47l-0.37,1.22l0.86,1.8l1.53,1.42l0.3,1.27l0.44,0.51l-4.08,0.75l-0.92,1.82l0.51,1.35l-0.74,5.46l0.17,0.38l2.45,1.47l0.54,-0.1l0.12,1.64l-1.28,-0.01l-1.85,-2.37l-1.94,-0.45l-0.48,-1.14l-0.56,-0.2l-1.41,0.74l-1.71,-0.3l-1.01,-1.19l-2.49,-0.2l-0.44,-0.77l-1.98,-0.21l-2.88,0.36l0.11,-2.42l-0.85,-1.13l-0.16,-1.36l0.32,-1.74l-0.47,-0.89l-0.04,-1.5l-0.4,-0.39l-2.53,0.02l0.1,-0.41l-0.39,-0.49l-1.28,0.01l-0.43,0.46l-1.62,0.32l-0.83,1.8l-1.09,-0.28l-2.4,0.52l-1.37,-1.91l-1.3,-3.31l-0.38,-0.27l-7.39,-0.03l-2.46,0.42l0.5,-0.45l0.37,-1.47l0.66,-0.38l0.92,0.08l0.73,-0.82l0.87,0.02l0.31,0.68l1.4,0.36l3.59,-3.63l0.01,-2.23l1.02,-2.29l2.69,-2.39l0.43,-0.99l0.49,-1.96l0.17,-3.51l1.25,-2.95l0.36,-3.15l0.86,-1.13l1.1,-0.67l3.57,1.73l3.65,0.73l0.46,-0.21l0.8,-1.46l1.24,0.19l2.61,-1.17l0.81,0.44l1.04,-0.03l0.59,-0.66l0.7,-0.16l1.81,0.25Z", "name": "Dem. Rep. Congo"}, "CZ": {"path": "M458.44,265.89l1.23,1.2l1.49,0.27l0.09,1.1l1.36,0.81l0.58,-0.21l0.25,-0.67l1.12,0.29l0.53,1.3l1.67,0.21l0.69,1.14l-1.4,1.19l-0.12,0.65l-0.55,0.55l-1.59,0.21l-0.56,0.65l-1.03,-0.52l-1.03,0.17l-2.15,-1.12l-1.05,0.4l-1.18,1.3l-1.53,-1.0l-2.59,-2.49l-0.57,-2.36l1.48,-0.7l0.99,-1.01l1.72,-0.74l0.54,-0.59l0.73,0.29l0.87,-0.32Z", "name": "Czech Rep."}, "CY": {"path": "M504.35,321.02l0.49,0.34l-1.34,0.65l-0.91,-0.29l-0.26,-0.55l2.02,-0.14Z", "name": "Cyprus"}, "CR": {"path": "M211.34,387.89l0.48,1.0l1.61,1.62l-0.54,0.45l0.3,1.42l-0.25,1.2l-1.09,-0.6l-0.05,-1.25l-2.46,-1.43l-0.28,-0.77l-0.66,-0.45l-0.45,-0.0l-0.11,1.05l-1.32,-0.95l0.31,-1.31l-0.36,-0.6l0.31,-0.27l1.42,0.58l1.29,-0.14l0.56,0.56l0.74,0.17l0.55,-0.27Z", "name": "Costa Rica"}, "CU": {"path": "M221.21,356.57l1.27,1.05l2.18,-0.29l4.43,3.42l2.09,0.45l-0.1,0.41l0.36,0.49l1.75,0.1l1.44,0.97l-3.07,0.42l-4.17,-0.03l0.79,-0.7l-0.04,-0.63l-1.2,-0.76l-1.49,-0.16l-0.7,-0.62l-0.56,-1.44l-0.4,-0.25l-1.34,0.1l-2.2,-0.68l-0.89,-0.6l-3.18,-0.41l-0.28,-0.17l0.6,-0.76l-0.36,-0.29l-2.73,-0.05l-1.7,1.33l-0.91,0.03l-0.61,0.71l-1.03,0.22l1.14,-1.35l1.01,-0.54l3.69,-1.04l3.98,0.22l2.21,0.87Z", "name": "Cuba"}, "SZ": {"path": "M500.35,482.11l0.5,2.14l-0.39,0.94l-1.04,0.22l-1.23,-1.25l-0.02,-0.69l0.84,-1.65l1.34,0.28Z", "name": "Swaziland"}, "SY": {"path": "M510.98,327.85l0.08,-1.44l0.55,-1.47l1.28,-1.07l0.12,-0.44l-0.41,-1.19l-1.14,-0.38l-0.19,-1.91l0.53,-1.11l1.29,-1.31l0.19,-1.27l0.6,0.24l2.61,-0.82l1.36,0.56l2.06,-0.01l2.95,-1.17l3.29,-0.29l-0.72,1.1l-1.49,1.11l0.23,2.19l-0.89,3.46l-10.14,6.13l-2.17,-0.92Z", "name": "Syria"}, "KG": {"path": "M621.37,297.76l-3.91,1.98l-0.95,1.31l-3.03,0.37l-1.14,2.06l-2.35,-0.39l-2.01,0.7l-2.39,1.55l0.09,1.02l-0.42,0.44l-4.5,0.47l-3.01,-1.02l-2.38,0.19l0.12,-0.96l2.3,0.46l1.14,-0.97l1.99,0.21l3.21,-2.37l-0.03,-0.67l-2.97,-1.75l-1.95,0.72l-1.27,-0.86l1.77,-1.84l-0.12,-0.64l-0.4,-0.18l0.36,-0.95l1.35,-0.39l4.01,1.14l0.5,-0.31l0.35,-1.82l1.08,-0.54l3.4,1.37l1.14,-0.35l7.61,0.43l1.15,1.13l1.27,0.45Z", "name": "Kyrgyzstan"}, "KE": {"path": "M506.26,414.59l1.87,-2.56l0.93,-2.15l-1.38,-4.08l-1.06,-1.6l2.82,-2.75l0.79,0.26l0.12,1.41l0.86,0.83l1.9,0.11l3.28,2.13l3.57,0.44l1.05,-1.12l1.96,-0.9l0.82,0.69l1.16,0.09l-1.78,2.45l0.03,9.12l1.3,1.94l-1.37,0.78l-0.67,1.03l-1.08,0.46l-0.34,1.67l-0.81,1.07l-0.45,1.55l-0.68,0.56l-3.2,-2.23l-0.35,-1.58l-8.86,-4.98l0.14,-1.6l-0.57,-1.04Z", "name": "Kenya"}, "SS": {"path": "M481.71,393.21l1.07,-0.73l1.2,-3.2l1.36,-0.26l1.61,2.0l0.87,0.34l1.11,-0.41l1.5,0.07l0.57,0.53l2.49,0.0l0.44,-0.63l1.07,-0.4l0.45,-0.84l0.59,-0.33l1.9,1.34l1.6,-0.2l2.83,-3.35l-0.32,-2.23l1.6,-0.53l-0.24,1.62l0.3,1.84l1.34,1.18l0.2,1.88l0.35,0.41l0.02,1.54l-0.23,0.47l-1.42,0.25l-0.85,1.44l0.3,0.6l1.4,0.17l1.12,1.08l0.59,1.13l1.03,0.53l1.28,2.37l-4.42,3.99l-1.74,0.01l-1.89,0.55l-1.47,-0.52l-1.15,0.57l-2.96,-2.62l-1.3,0.49l-1.06,-0.15l-0.79,0.39l-0.82,-0.22l-1.8,-2.7l-1.91,-1.1l-0.66,-1.5l-2.62,-2.33l-0.18,-0.94l-2.37,-1.61Z", "name": "S. Sudan"}, "SR": {"path": "M283.12,400.08l2.1,0.53l-1.08,1.95l0.2,1.72l0.93,1.49l-0.59,2.04l-0.43,0.71l-1.12,-0.42l-1.32,0.22l-0.93,-0.2l-0.46,0.26l-0.25,0.73l0.33,0.7l-0.89,-0.13l-1.39,-1.98l-0.31,-1.34l-0.97,-0.31l-0.89,-1.47l0.35,-1.61l1.45,-0.82l0.33,-1.87l2.61,0.44l0.58,-0.47l1.75,-0.16Z", "name": "Suriname"}, "KH": {"path": "M689.52,379.15l0.5,1.47l-0.28,2.77l-4.0,1.87l-0.16,0.59l0.69,0.97l-2.06,0.17l-2.05,0.97l-1.82,-0.32l-0.9,-1.17l-1.23,-2.56l-0.55,-2.88l1.4,-1.87l3.01,-0.46l2.23,0.35l2.01,0.99l0.51,-0.14l0.95,-1.49l1.74,0.75Z", "name": "Cambodia"}, "SV": {"path": "M195.8,379.9l1.41,-1.21l2.24,1.46l0.98,-0.27l0.44,0.21l-0.27,1.07l-1.14,-0.03l-3.65,-1.23Z", "name": "El Salvador"}, "SK": {"path": "M476.87,273.43l-1.2,2.33l-2.74,-1.08l-1.05,0.4l-0.52,0.78l-3.44,0.85l-0.48,0.81l-1.74,0.38l-1.88,-1.17l-0.2,-1.03l0.4,-0.94l1.02,0.01l0.86,-0.39l1.74,-2.23l0.83,0.19l0.76,-0.39l1.06,1.14l0.49,0.08l1.33,-0.74l1.26,0.34l1.63,-0.49l1.87,1.16Z", "name": "Slovakia"}, "KR": {"path": "M737.47,312.73l1.03,-0.11l0.87,-1.28l2.69,-0.35l0.32,-0.3l1.75,3.04l0.59,1.94l0.02,3.41l-0.81,1.45l-2.22,0.59l-1.92,1.21l-1.79,0.21l-0.2,-1.21l0.44,-2.44l-0.97,-2.83l1.45,-0.41l0.23,-0.6l-1.48,-2.32Z", "name": "Korea"}, "SI": {"path": "M456.18,286.22l-0.51,-1.56l0.2,-1.29l1.68,0.23l1.44,-0.83l2.08,-0.09l0.62,-0.56l0.24,0.62l-1.66,0.8l-0.43,1.53l-0.67,0.28l-0.24,0.94l-1.2,-0.55l-0.54,0.09l-0.33,0.43l-0.67,-0.05Z", "name": "Slovenia"}, "KP": {"path": "M736.77,312.06l-0.91,-0.45l-0.89,0.68l-1.23,-0.97l0.49,-1.01l0.5,-0.32l0.58,-2.78l-0.45,-0.8l-1.38,-0.34l-0.75,-0.55l1.69,-1.74l2.72,-1.75l1.57,-2.11l1.1,0.86l2.17,0.12l0.41,-0.49l-0.32,-1.43l3.54,-1.33l0.93,-1.56l1.03,1.28l-1.46,1.26l-0.79,1.2l0.02,2.38l-1.08,0.61l-1.41,1.55l-1.7,0.58l-1.23,1.17l-0.16,2.14l2.12,1.67l-0.16,0.33l-2.59,0.32l-1.14,1.41l-1.21,0.08Z", "name": "Dem. Rep. Korea"}, "KW": {"path": "M540.8,336.41l0.38,0.92l-0.17,0.78l0.61,1.64l-0.95,0.04l-0.83,-1.35l-1.59,-0.2l1.34,-2.02l1.21,0.17Z", "name": "Kuwait"}, "SN": {"path": "M390.09,377.95l0.12,1.57l0.49,1.48l0.96,0.82l0.05,1.3l-1.26,-0.19l-0.75,0.33l-1.84,-0.62l-5.84,-0.13l-2.54,0.51l-0.22,-1.04l1.78,0.04l2.01,-0.92l1.03,0.48l1.09,0.05l1.29,-0.62l0.14,-0.58l-0.51,-0.74l-1.81,0.25l-1.13,-0.64l-0.79,0.04l-0.72,0.61l-2.31,0.06l-0.92,-1.79l-0.82,-0.65l0.64,-0.36l1.81,-3.15l0.65,-0.64l1.04,0.19l1.39,-0.56l1.19,-0.02l2.72,1.39l3.03,3.53Z", "name": "Senegal"}, "SL": {"path": "M394.46,393.98l-1.73,1.98l-0.58,1.34l-2.07,-1.06l-1.22,-1.26l-0.65,-2.4l1.16,-0.97l0.67,-1.18l1.21,-0.52l1.66,0.0l1.03,1.65l0.52,2.42Z", "name": "Sierra Leone"}, "KZ": {"path": "M552.75,298.52l0.51,-1.47l-0.48,-1.19l-2.96,-1.32l-1.07,-2.94l-1.37,-0.98l-0.03,-0.45l1.95,0.27l0.45,-0.38l0.09,-2.29l1.75,-0.47l2.09,0.51l0.49,-0.34l0.45,-3.5l-0.45,-2.38l-0.42,-0.32l-2.41,0.17l-2.39,-0.84l-2.87,1.59l-2.15,0.7l-0.86,-0.4l0.15,-1.86l-1.6,-2.47l-2.02,-0.09l-1.83,-2.19l1.33,-2.64l-0.61,-1.04l1.66,-3.54l2.17,1.91l0.66,-0.26l0.29,-2.7l4.94,-4.15l3.67,-0.1l8.38,4.33l2.97,-1.63l3.74,-0.08l3.1,1.99l0.56,-0.13l0.6,-0.97l3.28,0.16l0.4,-0.27l0.63,-1.89l-0.15,-0.46l-3.62,-2.47l1.99,-1.65l-0.2,-1.23l2.05,-0.92l0.17,-0.58l-1.66,-2.63l0.88,-1.1l9.22,-1.46l1.35,-1.1l6.17,-1.58l2.26,-1.78l4.05,0.85l0.74,4.22l0.54,0.3l2.46,-0.98l2.8,1.27l-0.18,2.03l0.44,0.43l2.58,-0.3l4.83,-3.09l0.03,0.36l3.16,3.23l5.57,10.31l0.69,0.03l1.11,-1.75l3.11,2.07l3.78,-0.93l1.13,0.59l1.15,2.17l1.83,0.89l1.0,1.55l0.4,0.18l2.95,-0.47l1.06,1.89l-1.65,2.2l-1.92,0.33l-0.33,0.38l-0.12,3.61l-1.14,1.37l-4.73,-1.15l-0.48,0.28l-1.76,6.36l-1.1,0.68l-4.91,1.4l-0.26,0.52l2.13,5.72l-1.4,0.73l-0.08,1.73l-0.87,-0.28l-1.43,-1.27l-7.9,-0.45l-0.92,0.34l-3.74,-1.37l-1.63,0.99l-0.31,1.59l-3.7,-1.05l-1.87,0.48l-0.76,1.57l-1.35,0.6l-3.3,2.34l-1.12,2.31l-0.42,0.01l-0.93,-1.56l-2.86,-0.1l-0.45,-2.43l-0.39,-0.33l-0.81,-0.02l0.02,-3.32l-3.0,-2.52l-4.58,0.18l-2.74,0.47l-2.34,-3.04l-6.74,-4.23l-6.45,2.1l-0.28,0.38l0.1,12.31l-0.69,0.09l-1.62,-2.42l-1.83,-1.07l-3.13,0.66l-0.68,0.6Z", "name": "Kazakhstan"}, "SA": {"path": "M537.53,338.97l2.0,0.25l0.91,1.39l1.49,-0.06l0.88,2.19l1.29,0.79l0.51,1.03l1.56,1.08l-0.1,1.98l0.32,0.93l1.57,2.56l0.76,0.55l0.71,-0.04l1.37,4.1l7.83,1.63l0.51,-0.29l0.77,1.29l-1.56,5.0l-7.29,2.58l-7.31,1.05l-2.34,1.19l-1.88,2.79l-0.76,0.28l-0.83,-0.79l-0.91,0.12l-2.88,-0.52l-3.5,0.25l-0.86,-0.57l-0.58,0.15l-0.66,1.29l0.16,1.12l-0.43,0.33l-0.93,-1.42l-0.33,-1.18l-1.23,-0.89l-1.27,-2.1l-0.78,-2.27l-1.73,-1.83l-1.14,-0.49l-1.54,-2.37l-0.2,-3.5l-1.44,-3.02l-1.27,-1.19l-1.33,-0.58l-1.31,-3.5l-0.77,-0.7l-0.97,-2.05l-2.8,-4.2l-1.07,-0.17l0.59,-2.85l2.75,0.31l1.08,-0.88l0.6,-0.99l1.74,-0.36l0.65,-1.08l0.72,-0.43l0.1,-0.6l-2.09,-2.45l4.42,-1.3l0.48,-0.39l2.75,0.73l3.66,2.01l7.03,5.8l4.88,0.32Z", "name": "Saudi Arabia"}, "SE": {"path": "M480.3,192.35l-4.15,1.76l-2.43,4.19l0.32,3.66l-3.86,4.45l-4.93,4.95l-1.79,7.79l1.78,3.64l2.29,2.71l-2.14,5.19l-2.69,1.39l-0.95,7.87l-1.3,3.9l-2.71,-0.39l-0.43,0.25l-1.32,3.3l-2.29,0.16l-0.75,-3.94l-2.09,-5.18l-1.86,-6.56l1.04,-2.66l2.12,-3.53l0.83,-6.02l-1.6,-2.83l-0.15,-7.02l1.52,-4.93l2.18,0.09l0.39,-0.26l0.87,-2.28l-0.85,-2.14l3.83,-8.36l4.06,-11.45l2.12,0.02l0.4,-0.33l0.59,-3.35l4.31,1.0l0.49,-0.36l0.34,-4.24l1.04,-0.19l6.98,7.72l0.07,9.8l0.74,2.18Z", "name": "Sweden"}, "SD": {"path": "M505.98,389.25l-0.34,-0.78l-1.17,-0.91l-0.27,-1.62l0.29,-1.82l-0.34,-0.46l-1.16,-0.18l-0.54,0.59l-1.23,0.11l-0.28,0.65l0.53,0.66l0.17,1.23l-2.44,3.01l-0.96,0.2l-2.39,-1.41l-0.95,0.52l-0.38,0.78l-1.11,0.41l-0.29,0.5l-1.94,0.0l-0.54,-0.52l-1.81,-0.09l-0.95,0.41l-2.45,-2.36l-2.07,0.54l-0.73,1.27l-0.6,2.11l-1.25,0.58l-0.75,-0.62l0.27,-2.67l-1.48,-1.78l-0.22,-1.49l-0.92,-0.97l-0.02,-1.3l-0.57,-1.17l-0.69,-0.16l0.7,-1.31l-0.18,-1.15l0.65,-0.63l0.03,-0.55l-0.36,-0.42l1.56,-3.02l1.91,0.16l0.43,-0.4l-0.1,-11.14l2.49,-0.01l0.4,-0.4l-0.0,-4.96l29.02,0.0l0.65,2.11l-0.49,0.67l0.36,2.75l0.93,3.22l2.12,1.59l-0.9,1.07l-1.72,0.4l-0.98,0.91l-1.42,5.73l0.24,1.16l-0.38,2.09l-0.97,2.4l-1.53,1.32l-1.32,2.93l-1.22,0.86l-0.37,1.34Z", "name": "Sudan"}, "DO": {"path": "M241.8,368.82l0.05,-0.67l-0.47,-0.75l0.43,-0.45l0.19,-1.02l-0.09,-1.57l1.66,0.01l1.99,0.64l0.33,0.69l1.29,0.19l0.33,0.77l0.99,0.09l0.81,0.64l-0.46,0.53l-1.13,-0.48l-1.87,-0.01l-1.27,0.6l-0.75,-0.56l-1.01,0.55l-0.79,1.43l-0.23,-0.62Z", "name": "Dominican Rep."}, "DJ": {"path": "M528.43,386.01l-0.45,0.67l-0.58,-0.25l-1.51,0.13l-0.18,-1.02l1.45,-1.97l0.83,0.17l0.77,-0.44l0.2,1.01l-1.21,0.52l-0.06,0.7l0.73,0.48Z", "name": "Djibouti"}, "DK": {"path": "M452.3,246.5l-1.22,2.88l-2.11,-1.99l-0.26,-1.39l2.98,-1.2l0.61,1.7ZM447.78,242.9l-0.32,0.89l-0.89,-0.07l-1.8,3.21l0.54,2.1l-1.13,0.47l-1.58,-0.48l-0.91,-2.19l-0.07,-4.44l0.99,-2.3l2.0,-0.26l1.11,-1.38l1.3,-0.85l-0.05,1.54l-0.73,1.69l0.3,1.28l1.25,0.79Z", "name": "Denmark"}, "DE": {"path": "M453.15,278.66l-0.56,-0.42l-1.2,-0.11l-1.89,0.66l-2.12,-0.15l-0.57,0.71l-0.83,-0.67l-0.98,0.09l-2.56,-1.08l-0.49,0.15l-0.39,0.62l-1.46,-0.02l0.26,-2.16l1.24,-2.54l-0.28,-0.57l-3.51,-0.68l-0.95,-0.81l0.12,-1.49l-0.49,-1.0l0.27,-2.61l-0.38,-3.76l1.43,-0.25l0.63,-1.53l0.65,-3.87l-0.43,-1.44l0.31,-0.56l1.61,-0.18l0.34,0.68l0.67,0.07l1.7,-2.09l-0.57,-3.77l1.35,0.41l1.33,-0.45l0.28,1.46l2.27,0.9l-0.02,1.24l0.52,0.39l2.55,-0.8l1.33,-1.07l2.53,1.51l1.08,1.24l0.51,1.88l-0.61,1.39l0.88,1.43l0.58,2.06l-0.16,1.52l0.87,2.18l-0.54,0.2l-0.49,-0.34l-0.54,0.07l-0.57,0.68l-1.71,0.73l-1.01,1.02l-1.75,0.82l-0.2,0.5l0.84,2.98l2.45,2.3l-0.71,1.4l-1.0,0.83l0.33,2.27Z", "name": "Germany"}, "YE": {"path": "M528.26,376.46l0.26,-0.43l-0.22,-1.03l0.28,-0.61l-0.09,-0.91l0.92,-0.7l-0.08,-1.37l0.39,-0.76l1.01,0.48l3.33,-0.27l3.76,0.42l0.95,0.82l1.36,-0.59l1.74,-2.67l2.18,-1.11l6.86,-0.96l2.48,5.52l-1.64,0.77l-0.56,1.93l-6.23,2.19l-2.29,1.82l-1.93,0.05l-1.41,1.03l-4.24,0.75l-1.72,1.5l-3.28,0.19l-0.52,-1.19l0.02,-1.52l-1.34,-3.33Z", "name": "Yemen"}, "DZ": {"path": "M441.47,315.57l-0.34,1.19l0.39,2.88l-0.55,2.35l-1.58,1.92l0.36,2.53l1.92,1.66l0.17,0.85l1.43,1.1l1.85,7.66l0.13,1.23l-0.57,5.23l0.2,1.59l-0.88,1.03l-0.02,0.5l1.41,1.93l0.14,1.24l0.89,1.54l0.5,0.17l0.97,-0.42l1.72,1.11l0.83,1.29l-8.23,4.95l-7.23,5.24l-3.43,1.15l-2.3,0.21l-0.28,-1.63l-2.56,-1.12l-0.67,-1.28l-26.12,-18.48l0.01,-3.67l3.77,-1.98l2.44,-0.43l2.12,-0.8l1.08,-1.5l2.81,-1.11l0.34,-2.2l1.34,-0.31l1.04,-1.0l3.46,-0.73l0.36,-1.59l-0.58,-0.56l-0.83,-3.02l-0.18,-1.95l-0.8,-1.65l2.06,-1.44l2.62,-0.52l1.71,-1.32l2.31,-0.91l8.23,-0.8l1.51,0.41l2.27,-1.19l2.45,-0.02l0.91,0.65l1.38,-0.05Z", "name": "Algeria"}, "US": {"path": "M892.73,206.44l1.34,0.72l1.36,-0.5l1.85,1.36l2.21,0.69l-1.59,1.04l-2.57,-2.02l-2.38,0.18l-0.3,-0.25l0.09,-1.21ZM183.2,272.56l0.38,1.78l1.12,0.96l4.22,0.82l2.39,1.15l2.19,-0.43l2.01,0.64l-1.73,0.85l-3.49,3.04l-0.14,0.83l0.52,0.39l2.3,-0.7l1.8,1.17l5.17,-2.8l-0.37,0.89l0.24,0.53l1.35,0.45l1.71,1.35l4.7,-1.01l0.4,0.77l1.58,0.45l0.68,0.78l-1.42,0.21l-2.2,-0.37l-3.59,1.03l-2.72,3.73l0.35,0.91l0.62,-0.0l0.61,-0.75l-1.43,5.39l0.29,3.47l0.67,1.77l0.61,0.48l1.03,-0.07l0.75,-0.43l1.59,-2.19l0.13,-2.45l-0.82,-2.2l0.11,-1.33l1.2,-2.74l0.42,-0.36l0.48,0.84l0.4,-0.3l0.4,-1.6l0.59,-0.51l0.24,-0.94l1.66,0.56l1.67,1.25l-0.03,2.8l-1.28,1.3l0.02,1.21l0.87,0.37l1.67,-1.46l0.49,0.18l0.51,3.02l-2.51,4.23l0.17,0.59l1.54,0.69l1.51,0.19l1.93,-0.49l4.72,-2.41l2.16,-2.03l-0.08,-1.39l0.77,-0.26l3.91,0.4l2.14,-1.19l0.19,-0.39l-0.31,-1.71l2.31,-2.21l1.0,-0.57l8.31,-0.03l0.57,-0.94l1.9,-0.88l0.92,-1.72l0.75,-2.75l1.58,-2.29l0.94,0.69l1.44,-0.54l0.81,0.77l-0.0,4.78l1.98,3.01l-2.38,1.52l-5.36,2.37l-1.81,3.03l0.01,1.98l0.83,1.79l0.78,0.27l-6.43,1.12l-2.21,1.0l-0.21,0.48l0.45,0.28l3.52,-0.57l-2.73,0.77l-1.77,-0.26l-0.76,0.91l0.23,0.65l0.34,0.07l-0.43,1.87l-1.26,1.73l-1.46,-1.16l-0.49,-0.06l-0.18,0.46l0.52,1.74l0.61,0.64l0.03,0.92l-0.94,1.5l-1.22,-1.31l-0.28,-2.52l-0.35,-0.35l-0.42,0.27l-0.48,1.39l0.34,1.57l-0.97,-0.29l-0.48,0.22l0.16,0.5l1.54,0.91l0.1,2.78l0.78,0.52l0.53,3.76l-1.43,2.04l-2.47,0.86l-1.71,1.78l-1.31,0.27l-1.27,1.11l-0.43,1.05l-2.7,1.91l-2.64,3.21l-0.45,2.23l0.45,2.17l0.85,2.51l1.09,2.0l0.04,1.26l1.16,3.2l-0.18,2.82l-0.55,1.49l-0.47,0.22l-0.88,-0.24l-0.33,-1.01l-1.03,-0.79l-2.75,-5.4l0.46,-2.04l-0.76,-1.66l-1.95,-2.41l-1.47,-0.55l-2.38,1.23l-1.46,-1.42l-1.79,-0.75l-2.78,0.36l-2.27,-0.31l-2.03,0.23l-1.04,0.45l-0.18,0.57l0.39,0.67l0.19,1.47l-0.9,-0.23l-0.84,0.49l-1.57,-0.08l-2.08,-1.52l-2.08,0.34l-1.91,-0.65l-3.74,0.89l-2.39,2.17l-2.54,1.28l-1.45,1.47l-0.61,1.43l-0.02,1.98l0.38,1.9l-1.99,-0.55l-1.81,-0.8l-1.25,-3.25l-1.44,-1.57l-2.24,-3.73l-1.76,-1.15l-2.28,-0.01l-1.71,2.18l-1.74,-0.72l-1.16,-0.78l-1.52,-3.14l-3.94,-3.35l-4.34,-0.0l-0.4,0.4l-0.0,0.81l-6.5,0.02l-9.04,-3.34l-0.33,-0.75l-5.69,0.52l-0.43,-1.37l-1.62,-1.72l-1.14,-0.41l-0.55,-0.94l-1.27,-0.14l-1.02,-0.83l-2.22,-0.29l-0.43,-0.33l-0.36,-1.7l-2.4,-3.06l-2.02,-4.21l-0.05,-0.96l-2.93,-3.59l-0.33,-2.54l-1.3,-1.83l0.52,-2.65l-0.09,-2.87l-0.78,-2.59l0.96,-3.2l0.61,-6.46l-0.46,-4.91l-1.48,-4.8l0.09,-0.23l3.09,1.09l1.27,3.33l0.71,0.07l0.68,-1.24l-1.12,-5.71l68.79,-0.0l0.4,-0.4l0.13,-1.09ZM32.37,157.48l1.75,3.33l0.67,0.06l0.98,-1.29l3.62,0.39l-0.12,1.35l0.27,0.41l3.83,1.28l2.65,-0.7l5.14,2.3l4.86,0.72l1.87,0.93l3.47,-1.11l3.64,2.11l2.52,0.95l-0.03,56.12l0.38,0.4l2.37,0.14l2.29,1.31l3.91,5.31l0.63,0.04l2.4,-2.69l2.1,-1.34l1.18,2.24l3.95,4.14l4.1,8.6l4.22,2.91l0.06,2.46l-1.03,1.56l-1.12,-1.31l-2.06,-1.31l-0.68,-3.73l-3.26,-3.82l-1.32,-4.34l-0.33,-0.28l-6.34,-0.42l-2.8,-1.31l-5.26,-5.09l-6.77,-2.72l-3.55,0.39l-4.79,-2.25l-3.33,-2.21l-2.78,1.09l-0.25,0.43l0.46,3.15l-3.97,1.29l-2.26,1.69l-2.25,0.84l-0.29,-2.33l1.07,-4.71l2.51,-1.5l0.15,-0.53l-0.69,-1.3l-0.62,-0.11l-3.19,2.88l-1.77,3.43l-3.56,3.49l-0.04,0.53l1.65,2.14l-2.16,3.15l-5.1,3.33l-0.76,2.13l-3.78,2.28l-0.91,2.19l-2.68,1.74l-1.82,-0.27l-6.95,4.17l-3.92,1.13l2.36,-1.94l2.5,-1.4l2.58,-2.35l3.26,-0.66l1.2,-1.79l3.42,-2.69l2.56,-2.83l0.42,-3.52l1.25,-2.78l-0.09,-0.45l-0.46,-0.07l-2.63,1.33l-0.6,-0.62l-0.6,0.03l-1.02,1.31l-1.33,-1.98l-0.71,0.08l-0.3,0.77l-0.56,-1.45l-0.62,-0.17l-2.39,1.85l-1.03,-0.0l-0.18,-2.46l0.44,-1.74l-1.7,-2.14l-0.41,-0.11l-3.01,0.89l-1.94,-2.17l-1.61,-1.16l-0.11,-2.96l-1.78,-2.05l0.88,-2.78l2.01,-2.96l0.87,-2.7l1.66,-0.33l1.59,0.82l0.5,-0.12l1.86,-2.47l1.93,0.32l1.91,-1.75l-0.34,-2.97l-1.22,-1.04l1.59,-1.93l-0.33,-0.65l-1.69,0.11l-2.66,1.27l-0.72,1.08l-1.92,-1.11l-3.43,0.63l-3.41,-1.3l-1.05,-2.33l-2.87,-3.16l3.14,-2.29l5.47,-2.98l1.51,0.0l-0.29,2.67l0.42,0.44l5.29,-0.24l0.34,-0.59l-2.03,-3.88l-3.12,-2.51l-1.79,-3.25l-2.4,-2.83l-3.25,-2.04l1.19,-3.05l4.45,-0.33l3.16,-3.2l0.69,-3.62l2.43,-3.32l2.42,-0.86l4.6,-3.26l2.51,0.36l3.66,-3.91l3.4,1.47ZM37.56,239.39l-2.21,1.54l-0.94,-0.87l-0.32,-1.79l3.24,-2.14l1.37,0.26l0.77,1.05l-1.9,1.94ZM31.06,363.53l0.98,0.48l0.75,0.91l-1.77,1.1l-0.44,-1.57l0.48,-0.92ZM29.32,361.52l0.19,0.06l0.11,0.07l-0.18,0.04l-0.12,-0.16ZM25.2,359.55l0.2,0.24l-0.14,-0.02l-0.05,-0.23ZM5.91,226.07l-1.09,0.55l-2.4,-1.69l1.72,-0.6l1.6,0.37l0.17,1.37Z", "name": "United States"}, "UY": {"path": "M286.86,504.69l-0.94,1.64l-2.58,1.54l-1.67,-0.55l-1.42,0.28l-2.4,-1.28l-1.51,0.09l-1.28,-1.4l0.16,-1.65l0.56,-0.83l-0.02,-2.91l1.22,-5.04l1.18,-0.23l2.36,2.12l1.08,0.03l4.36,3.37l1.24,1.73l-0.98,1.58l0.62,1.52Z", "name": "Uruguay"}, "LB": {"path": "M510.37,325.96l-0.89,0.55l1.84,-3.86l0.6,0.08l0.24,0.7l-1.15,0.96l-0.64,1.57Z", "name": "Lebanon"}, "LA": {"path": "M689.54,378.29l-1.76,-0.75l-0.5,0.15l-0.94,1.48l-1.33,-0.65l0.62,-0.99l0.11,-2.2l-2.04,-2.45l-0.25,-2.69l-1.9,-2.14l-2.15,-0.31l-0.79,0.93l-1.12,0.06l-1.06,-0.4l-2.05,1.22l-0.04,-1.63l0.61,-2.74l-0.36,-0.49l-1.35,-0.1l-0.11,-1.26l-0.97,-0.9l0.33,-0.61l1.63,-1.34l0.39,0.36l1.33,0.07l0.42,-0.45l-0.34,-2.75l0.7,-0.21l1.28,1.86l1.11,2.41l0.36,0.23l2.82,0.02l0.72,1.72l-1.4,0.67l-0.72,0.95l0.13,0.59l2.91,1.54l3.61,5.34l1.88,1.81l0.57,1.65l-0.35,1.99Z", "name": "Lao PDR"}, "TW": {"path": "M724.01,356.0l-0.73,1.52l-0.9,-1.56l-0.26,-1.81l1.38,-2.53l1.73,-1.8l0.64,0.46l-1.86,5.73Z", "name": "Taiwan"}, "TT": {"path": "M266.64,389.17l0.28,-1.17l1.13,-0.22l-0.06,1.21l-1.35,0.18Z", "name": "Trinidad and Tobago"}, "TR": {"path": "M513.19,301.28l3.65,1.31l3.06,-0.48l2.09,0.29l3.13,-1.74l2.44,-0.15l2.19,1.49l0.35,0.95l-0.23,1.5l0.24,0.43l2.34,1.31l-1.23,0.67l-0.2,0.43l0.75,3.55l-0.42,1.23l1.16,2.15l-0.57,0.25l-0.9,-0.73l-2.91,-0.41l-1.25,0.5l-4.23,0.45l-2.81,1.15l-1.9,0.01l-1.54,-0.57l-2.56,0.81l-0.66,-0.49l-0.64,0.29l-0.12,1.59l-0.89,0.9l-0.49,-0.75l0.8,-1.4l-0.41,-0.19l-1.43,0.25l-2.0,-0.69l-2.04,1.79l-3.49,0.32l-2.14,-1.66l-2.7,-0.1l-0.87,1.34l-1.36,0.29l-2.28,-1.56l-2.71,-0.02l-1.37,-2.89l-1.7,-1.68l1.09,-2.23l-0.08,-0.46l-1.31,-1.28l2.41,-2.71l3.68,-0.13l0.36,-0.25l0.94,-2.24l4.48,0.41l3.23,-2.2l2.8,-0.91l3.98,-0.07l4.28,2.31ZM488.78,302.77l-1.7,1.44l-0.51,-0.99l1.37,-2.91l-0.78,-0.93l1.78,-0.74l1.78,0.37l0.45,1.31l1.81,0.89l-0.14,0.26l-2.76,0.17l-1.31,1.13Z", "name": "Turkey"}, "LK": {"path": "M624.16,398.87l-1.82,0.48l-0.99,-1.67l-0.42,-3.47l0.95,-3.45l1.21,0.98l2.26,4.21l-0.34,2.34l-0.85,0.58Z", "name": "Sri Lanka"}, "LV": {"path": "M489.13,238.44l0.98,0.86l0.21,2.15l0.72,2.39l-3.68,2.17l-2.21,-1.98l-1.3,-0.34l-0.27,-0.73l-0.45,-0.25l-2.41,0.44l-4.15,-0.29l-2.48,1.13l0.07,-2.68l1.15,-2.72l1.91,-1.29l2.14,3.3l2.01,-0.09l0.38,-0.35l0.45,-3.34l1.74,-0.68l3.03,2.19l2.16,0.1Z", "name": "Latvia"}, "LT": {"path": "M486.92,246.68l0.19,1.58l-2.02,1.5l-0.54,2.27l-2.48,1.47l-2.05,-0.02l-0.5,-1.08l-1.3,-0.59l-0.07,-2.33l-1.21,-0.74l-2.38,-0.69l-0.45,-3.18l2.51,-1.21l4.09,0.28l2.23,-0.39l0.52,0.88l1.23,0.27l2.22,1.99Z", "name": "Lithuania"}, "LU": {"path": "M436.07,271.5l-0.48,-0.1l0.29,-1.66l0.29,0.51l-0.1,1.25Z", "name": "Luxembourg"}, "LR": {"path": "M399.36,395.85l0.18,1.54l-0.49,1.0l0.08,0.47l2.47,1.8l-0.33,2.81l-2.65,-1.13l-5.78,-4.62l0.58,-1.32l2.1,-2.34l0.86,-0.22l0.77,1.14l-0.14,0.86l0.59,0.87l1.0,0.14l0.76,-0.99Z", "name": "Liberia"}, "LS": {"path": "M491.05,494.85l-0.48,0.15l-1.5,-1.78l1.12,-1.53l2.18,-1.51l1.52,1.34l-0.99,1.94l-1.23,0.4l-0.62,0.98Z", "name": "Lesotho"}, "TH": {"path": "M670.27,385.68l-1.41,3.9l0.15,2.01l0.38,0.36l1.38,0.07l0.9,2.05l0.55,2.34l1.4,1.45l1.61,0.38l0.96,0.97l-0.5,0.64l-1.1,0.2l-0.34,-1.18l-2.04,-1.1l-0.63,0.23l-0.63,-0.62l-0.48,-1.3l-2.55,-2.64l-0.73,0.41l0.95,-3.91l2.16,-4.25ZM670.67,384.59l-0.92,-2.2l-0.26,-2.64l-2.14,-3.1l0.72,-0.5l0.89,-2.62l-2.62,-3.66l-0.99,-1.9l0.88,-0.52l1.05,-2.63l1.74,-0.19l2.59,-1.63l0.76,0.58l0.13,1.42l0.37,0.36l1.23,0.09l-0.52,2.34l0.05,2.46l0.6,0.33l2.43,-1.45l0.77,0.4l1.47,-0.08l0.71,-0.89l1.48,0.14l1.71,1.92l0.25,2.69l1.92,2.15l-0.1,1.92l-0.61,0.87l-2.22,-0.33l-3.5,0.65l-1.6,2.14l0.36,2.6l-1.51,-0.79l-1.85,-0.01l0.28,-1.54l-0.4,-0.47l-2.21,0.02l-0.4,0.37l-0.19,2.77l-0.34,0.94Z", "name": "Thailand"}, "TF": {"path": "M596.66,558.28l-3.18,0.21l-0.05,-1.59l0.4,-1.7l1.28,0.9l2.08,0.42l-0.53,1.76Z", "name": "Fr. S. Antarctic Lands"}, "TG": {"path": "M422.7,387.47l-0.1,1.24l1.53,1.53l0.08,1.1l0.5,0.65l-0.11,5.64l0.49,1.47l-1.31,0.35l-1.02,-2.13l-0.18,-1.13l0.53,-2.2l-0.63,-1.16l-0.22,-3.7l-1.01,-1.41l0.07,-0.29l1.37,0.03Z", "name": "Togo"}, "TD": {"path": "M480.25,365.02l0.12,9.75l-2.1,0.05l-1.14,1.91l-0.69,1.65l0.34,0.73l-0.66,0.92l0.24,0.9l-0.86,1.97l0.45,0.5l0.59,-0.1l0.34,0.65l0.03,1.39l0.9,1.06l-1.45,0.43l-1.27,1.03l-1.83,2.78l-2.16,1.08l-2.31,-0.15l-0.86,0.25l-0.26,0.49l0.17,0.62l-2.11,1.69l-2.85,0.87l-1.09,-0.57l-0.73,0.67l-1.12,0.1l-1.1,-3.13l-1.25,-0.64l-1.22,-1.23l0.3,-0.65l3.01,0.04l0.35,-0.6l-1.3,-2.21l-0.08,-3.33l-0.97,-1.68l0.22,-1.06l-0.38,-0.48l-1.22,-0.04l0.0,-1.27l-0.98,-1.08l0.97,-3.05l3.25,-2.68l0.13,-3.38l0.95,-5.29l0.52,-1.1l-0.1,-0.47l-0.91,-0.8l-0.19,-0.98l-0.8,-0.6l-0.55,-3.77l2.11,-1.24l19.56,10.1Z", "name": "Chad"}, "LY": {"path": "M483.49,331.4l-0.77,1.19l0.3,1.46l-0.6,1.92l0.73,2.26l0.0,25.02l-2.48,0.01l-0.41,0.87l-19.41,-10.02l-4.41,2.35l-1.37,-1.37l-3.82,-1.13l-1.14,-1.71l-1.98,-1.28l-1.22,0.33l-0.67,-1.15l-0.16,-1.3l-1.29,-1.77l0.88,-1.24l-0.07,-4.54l0.43,-2.38l-0.86,-3.65l1.13,-0.8l0.22,-1.23l-0.21,-1.1l3.49,-2.78l0.28,-2.06l2.44,0.85l1.18,-0.22l1.97,0.47l3.14,1.26l1.37,2.7l5.71,1.77l2.64,1.43l1.62,-0.76l1.29,-1.41l-0.45,-2.46l0.67,-1.22l1.67,-1.29l1.56,-0.37l3.13,0.56l1.09,1.36l3.98,0.83l0.38,0.6Z", "name": "Libya"}, "AE": {"path": "M550.76,353.19l1.89,-0.42l3.84,0.02l4.77,-4.92l0.19,0.38l0.26,1.67l-0.82,0.01l-0.39,0.35l-0.08,2.12l-0.82,0.64l-0.01,1.0l-0.67,1.03l-0.39,1.45l-7.07,-1.29l-0.71,-2.04Z", "name": "United Arab Emirates"}, "VE": {"path": "M240.68,386.52l0.53,0.75l-0.02,1.07l-1.07,1.78l0.95,2.01l0.42,0.23l1.4,-0.44l0.56,-1.84l-0.77,-1.17l-0.1,-1.49l2.83,-0.94l0.26,-0.49l-0.28,-0.97l0.3,-0.28l0.66,1.32l1.96,0.26l1.4,1.23l0.08,0.69l0.39,0.35l4.81,-0.23l1.49,1.12l1.92,0.31l1.67,-0.84l0.22,-0.61l3.44,-0.14l-0.18,0.56l0.86,1.2l2.19,0.35l1.68,1.1l0.37,1.87l0.41,0.32l1.56,0.17l-1.66,1.36l-0.22,0.92l0.66,0.98l-1.67,0.54l-0.3,0.4l0.04,0.99l-0.56,0.57l-0.01,0.55l1.85,2.27l-0.66,0.69l-4.47,1.29l-0.72,0.54l-3.69,-0.9l-0.71,0.27l-0.02,0.7l0.91,0.53l-0.08,1.55l0.35,1.58l0.35,0.31l1.66,0.17l-1.3,0.52l-0.48,1.13l-2.68,0.91l-0.6,0.77l-1.57,0.13l-1.17,-1.13l-0.8,-2.52l-1.25,-1.26l1.02,-1.23l-1.29,-2.95l0.18,-1.62l1.0,-2.21l-0.2,-0.49l-1.14,-0.47l-4.02,0.36l-1.82,-2.11l-1.57,-0.33l-2.99,0.23l-1.06,-0.98l0.25,-1.24l-0.2,-1.02l-0.59,-0.69l-0.29,-1.06l-1.08,-0.39l0.78,-2.81l1.9,-2.12Z", "name": "Venezuela"}, "AF": {"path": "M600.86,316.06l-1.73,1.47l0.72,3.0l-1.1,1.13l-0.02,1.35l-0.49,0.78l-2.15,-0.09l-0.37,0.58l0.8,1.63l-1.4,0.74l-1.06,1.8l0.07,1.81l-0.66,0.56l-0.91,-0.22l-1.91,0.38l-0.48,0.81l-1.88,0.14l-1.49,1.9l-0.08,2.2l-2.91,1.07l-1.64,-0.24l-0.72,0.58l-1.41,-0.31l-2.4,0.41l-3.54,-1.24l1.98,-2.49l-0.21,-1.88l-0.3,-0.34l-1.63,-0.42l-0.19,-1.69l-0.76,-2.19l0.96,-1.48l-0.18,-0.59l-0.75,-0.31l1.48,-5.22l2.12,0.97l2.14,-0.38l0.74,-1.45l1.77,-0.42l1.54,-1.0l0.62,-2.51l1.88,-0.54l0.48,-0.87l0.93,0.61l2.13,0.12l2.55,1.01l1.96,-0.89l0.64,0.46l0.58,-0.13l0.69,-1.23l1.58,-0.09l0.47,-0.64l0.24,-1.17l0.79,-0.81l0.81,0.43l-0.19,0.66l0.71,0.58l-0.09,2.61l1.28,1.05ZM601.25,315.96l1.86,-0.88l1.42,-1.28l3.93,0.22l0.11,0.23l-2.26,0.81l-5.06,0.9Z", "name": "Afghanistan"}, "IQ": {"path": "M530.81,314.51l0.79,0.72l1.26,-0.3l1.46,3.35l1.63,1.01l0.15,1.38l-1.23,1.13l-0.53,2.67l1.73,2.85l3.12,1.72l1.16,2.02l-0.38,1.98l0.39,0.48l0.41,-0.0l0.02,1.16l0.79,1.02l-2.51,-0.11l-1.71,2.58l-4.3,-0.21l-7.02,-5.78l-3.73,-2.06l-2.89,-0.78l-0.86,-3.1l5.46,-3.23l0.95,-3.7l-0.2,-2.14l1.28,-0.77l1.22,-1.86l0.86,-0.39l2.67,0.37Z", "name": "Iraq"}, "IS": {"path": "M384.17,190.14l-0.45,3.88l2.67,3.88l-3.04,4.17l-9.15,4.83l-9.47,-2.42l1.99,-2.05l-0.1,-0.63l-4.53,-2.38l3.43,-0.89l0.3,-0.41l-0.11,-1.75l-0.3,-0.36l-4.81,-1.29l1.43,-3.39l3.37,-0.82l3.74,4.02l0.56,0.03l3.59,-3.17l2.9,1.61l0.45,-0.04l3.95,-3.21l3.58,0.38Z", "name": "Iceland"}, "IR": {"path": "M533.43,314.24l-1.29,-2.38l0.43,-1.06l-0.72,-3.4l1.03,-0.56l0.32,0.9l1.26,1.49l2.06,0.57l1.12,-0.18l2.89,-2.33l0.6,-0.15l0.42,0.54l-0.74,1.37l0.06,0.46l1.56,1.68l0.66,0.05l0.67,1.99l2.55,0.89l1.88,1.61l3.7,0.53l3.91,-0.83l0.47,-0.8l2.17,-0.66l1.65,-1.68l1.49,0.08l1.19,-0.57l1.57,0.26l2.84,1.62l1.88,0.32l2.77,2.69l1.78,0.2l0.18,2.19l-1.69,5.93l0.23,0.49l0.64,0.26l-0.85,1.58l0.81,2.33l0.19,1.83l0.3,0.35l1.63,0.43l0.16,1.43l-2.16,2.5l-0.01,0.51l2.21,3.19l2.35,1.3l0.06,2.26l1.24,0.74l0.12,0.75l-3.31,1.33l-1.08,3.14l-9.68,-1.74l-0.99,-3.18l-1.43,-0.75l-2.18,0.48l-2.47,1.31l-2.82,-0.86l-2.46,-2.11l-2.41,-0.84l-3.42,-6.37l-0.49,-0.2l-1.17,0.41l-1.43,-0.86l-0.51,0.09l-0.64,0.77l-0.97,-1.07l-0.02,-1.4l-0.71,-0.39l0.27,-1.92l-1.29,-2.25l-3.13,-1.73l-1.59,-2.62l0.51,-2.08l1.3,-1.32l-0.19,-1.79l-1.73,-1.17l-1.57,-3.6Z", "name": "Iran"}, "AM": {"path": "M537.0,308.96l-0.27,0.03l-1.24,-2.34l-0.92,0.01l-0.62,-0.73l-0.69,-0.08l-0.96,-0.89l-1.58,-0.69l0.2,-1.3l-0.28,-0.9l2.73,-0.41l1.13,1.15l-0.21,1.0l1.06,0.9l-0.5,0.74l0.08,0.53l2.05,1.37l0.04,1.62Z", "name": "Armenia"}, "AL": {"path": "M470.32,297.19l0.73,0.03l0.93,0.99l0.13,0.95l-0.3,1.27l0.36,1.43l1.02,0.9l-1.82,3.2l-0.18,-0.65l-1.26,-1.0l-0.19,-1.36l0.53,-3.17l-0.55,-1.64l0.61,-0.94Z", "name": "Albania"}, "AO": {"path": "M461.55,429.93l1.26,3.16l1.94,2.36l2.47,-0.54l1.25,0.32l0.44,-0.18l0.93,-1.92l1.31,-0.08l0.41,-0.44l0.47,-0.0l-0.1,0.41l0.39,0.49l2.65,-0.02l0.03,1.2l0.48,1.02l-0.34,1.52l0.18,1.56l0.83,1.04l-0.13,2.87l0.54,0.39l3.96,-0.41l-0.1,1.81l0.39,1.06l-0.24,1.45l-4.7,-0.03l-0.4,0.39l-0.12,8.23l2.93,3.55l-3.84,0.9l-5.89,-0.36l-1.88,-1.27l-10.47,0.23l-1.3,-1.03l-1.85,-0.16l-2.4,0.78l-0.15,-1.08l0.33,-2.2l1.0,-3.5l1.35,-3.24l2.24,-2.82l0.33,-2.07l-0.13,-1.54l-0.8,-1.08l-1.21,-2.88l0.87,-1.62l-1.27,-4.13l-1.17,-1.53l2.47,-0.63l7.03,0.03ZM451.71,428.77l-0.47,-1.26l1.25,-1.11l0.32,0.3l-0.99,1.03l-0.12,1.04Z", "name": "Angola"}, "AR": {"path": "M258.05,471.85l1.38,1.83l0.68,-0.08l0.87,-1.93l2.39,0.09l4.94,4.92l2.17,0.51l2.99,1.99l2.47,1.04l0.26,0.88l-2.38,4.1l0.23,0.58l5.39,1.21l2.13,-0.46l2.46,-2.25l0.49,-2.47l0.76,-0.32l0.98,1.25l-0.04,1.9l-3.67,2.62l-2.85,2.79l-3.42,4.08l-1.3,5.37l0.01,2.9l-0.54,0.77l-0.36,3.52l3.15,2.82l-0.31,1.9l1.54,1.59l-0.1,1.23l-2.3,3.86l-3.55,1.64l-4.91,0.65l-2.7,-0.32l-0.43,0.5l0.5,1.83l-0.49,2.34l0.4,1.59l-1.21,0.94l-2.34,0.42l-2.29,-1.15l-1.41,0.93l0.41,3.97l1.69,1.02l1.41,-0.77l0.39,0.92l-2.08,0.99l-2.01,2.14l-0.47,3.69l-0.49,1.57l-2.34,0.12l-2.08,2.01l-0.63,3.07l2.46,2.67l2.21,0.74l-0.73,2.83l-2.84,2.04l-1.73,4.57l-2.18,1.47l-1.15,1.98l0.77,4.43l1.16,1.7l-2.44,-0.66l-5.82,-0.52l-0.91,-2.06l0.05,-2.9l-0.46,-0.4l-1.41,0.21l-0.69,-1.12l-0.2,-3.82l1.89,-1.73l0.79,-2.4l-0.26,-1.97l1.31,-3.13l0.91,-4.79l-0.23,-1.96l1.06,-0.95l-0.27,-1.32l-1.01,-0.76l0.63,-1.12l-0.05,-0.46l-1.05,-1.22l-0.53,-3.58l0.97,-0.92l-0.42,-4.02l1.21,-6.04l1.53,-1.49l-0.75,-3.06l-0.01,-2.68l1.79,-1.91l0.05,-2.76l1.43,-3.06l0.01,-2.77l-0.69,-0.77l-1.09,-4.84l1.48,-2.87l-0.19,-2.93l0.85,-2.48l1.59,-2.58l1.73,-1.72l0.05,-0.51l-0.61,-0.89l0.45,-0.89l-0.07,-4.37l2.71,-1.48l0.86,-2.84l-0.22,-0.73l1.77,-2.07l2.9,0.58ZM256.68,580.89l-1.95,0.18l-1.42,-1.53l-3.82,-0.12l-0.0,-7.37l1.57,3.7l3.26,2.57l3.18,1.01l-0.81,1.56Z", "name": "Argentina"}, "AU": {"path": "M705.79,484.09l0.27,0.04l0.18,-0.47l-0.49,-1.51l0.92,1.16l0.45,0.15l0.28,-0.39l-0.09,-1.61l-1.99,-3.77l1.09,-3.43l-0.24,-1.62l0.34,-0.64l0.38,1.08l0.43,-0.19l0.99,-1.75l1.91,-0.85l1.29,-1.18l1.81,-0.93l0.95,-0.17l0.93,0.27l1.92,-0.97l1.46,-0.29l1.03,-0.82l1.44,0.04l2.78,-0.86l1.36,-1.18l0.71,-1.48l1.41,-1.28l0.3,-2.63l1.27,-1.61l0.78,1.67l0.54,0.19l1.07,-0.52l0.15,-0.59l-0.73,-1.02l0.45,-0.73l0.78,0.4l0.58,-0.3l0.28,-1.84l1.87,-2.17l1.12,-0.39l0.28,-0.58l0.62,0.17l0.5,-0.36l0.03,-0.38l1.87,-0.58l1.65,1.06l1.35,1.49l3.4,0.39l0.44,-0.54l-0.46,-1.24l1.05,-1.82l1.04,-0.62l0.14,-0.55l-0.25,-0.41l0.88,-1.19l1.31,-0.78l1.31,0.27l2.1,-0.48l0.31,-0.4l-0.05,-1.31l-0.92,-0.78l1.48,0.56l1.41,1.08l2.11,0.65l0.81,-0.21l1.4,0.71l1.69,-0.67l0.8,0.19l0.64,-0.33l0.71,0.78l-1.33,1.96l-0.71,0.07l-0.35,0.51l0.24,0.87l-1.52,2.38l0.12,1.06l2.15,1.66l1.97,0.86l3.04,2.4l1.97,0.66l0.54,0.89l2.72,0.87l1.84,-1.12l2.07,-6.05l-0.43,-3.63l0.3,-1.75l0.47,-0.87l-0.32,-0.69l1.09,-3.31l0.46,-0.47l0.4,0.71l0.17,1.52l0.65,0.53l0.15,1.04l0.85,1.22l0.12,2.41l0.9,2.03l0.57,0.18l1.3,-0.79l1.69,1.73l-0.2,1.09l0.53,2.23l0.39,1.32l0.68,0.49l0.6,1.99l-0.2,1.51l0.81,1.79l2.87,1.56l3.14,2.21l-0.12,0.78l1.38,1.62l0.95,2.84l0.58,0.22l0.71,-0.42l0.8,0.92l0.61,0.01l0.46,2.48l4.82,4.87l0.66,2.1l-0.07,3.44l1.15,2.31l-0.13,2.37l-1.1,3.88l0.04,1.73l-0.48,2.02l-1.05,2.56l-1.9,1.57l-1.73,3.77l-2.38,6.57l-0.24,3.08l-1.15,0.88l-2.86,0.16l-2.31,1.3l-2.5,2.46l-1.81,-1.24l-1.29,-0.49l0.31,-1.32l-0.55,-0.46l-1.5,0.69l-2.01,2.12l-7.1,-2.39l-1.49,-1.79l-1.13,-4.06l-1.45,-1.37l-1.84,-0.28l0.58,-1.28l-0.61,-2.26l-0.73,-0.1l-1.14,1.96l-0.94,0.24l0.6,-0.77l0.44,-1.84l0.99,-1.67l-0.2,-2.22l-0.28,-0.35l-0.43,0.13l-2.0,2.51l-1.51,1.0l-0.93,2.15l-1.35,-0.87l-0.01,-1.63l-1.57,-2.18l-1.11,-0.96l0.27,-0.39l-0.13,-0.58l-3.21,-1.8l-1.84,-0.13l-2.55,-1.44l-4.58,0.3l-6.02,2.02l-2.54,-0.14l-2.62,1.5l-2.13,0.67l-1.49,2.78l-3.48,0.33l-2.3,-0.54l-3.48,0.46l-1.6,1.58l-0.81,-0.03l-2.36,1.75l-3.24,-0.11l-3.72,-2.38l0.04,-1.18l1.19,-0.49l0.48,-0.93l0.21,-3.17l-0.28,-1.75l-1.34,-3.02l-0.39,-1.56l0.06,-1.8l-0.96,-1.79l-0.17,-1.0l-1.02,-1.04l-0.29,-2.09l-1.15,-1.85ZM784.91,527.24l2.67,1.14l3.23,-1.06l1.08,0.16l0.16,3.5l-0.85,1.25l-0.18,1.86l-0.27,-0.29l-0.62,0.04l-1.56,2.15l-1.66,-0.2l-1.41,-2.68l-0.37,-2.29l-1.4,-2.82l0.04,-0.96l1.14,0.2Z", "name": "Australia"}, "AT": {"path": "M462.92,275.34l0.01,2.75l-1.06,0.01l-0.34,0.61l0.39,0.64l-1.07,2.55l-2.0,0.08l-1.34,0.81l-5.27,-1.14l-0.48,-1.1l-0.47,-0.23l-2.47,0.64l-0.42,0.58l-2.45,-0.51l-0.75,-0.44l0.44,-1.16l1.11,0.9l0.63,-0.17l0.25,-0.69l1.91,0.14l1.87,-0.66l0.97,0.09l0.68,0.66l0.65,-0.15l0.25,-0.83l-0.31,-2.16l0.82,-0.52l0.68,-1.35l1.49,0.98l0.52,-0.07l1.34,-1.47l0.61,-0.2l1.79,1.07l1.3,-0.12l0.74,0.46Z", "name": "Austria"}, "IN": {"path": "M623.36,335.51l-1.27,1.12l-0.97,2.68l0.21,0.5l8.04,4.05l3.43,0.39l1.57,1.44l4.92,0.91l2.18,-0.04l0.38,-0.3l0.29,-1.28l-0.32,-1.72l0.15,-0.92l0.82,-0.32l0.44,2.59l2.28,1.07l1.78,-0.4l4.14,0.1l0.38,-0.36l0.18,-1.73l-0.53,-0.69l1.4,-0.31l2.25,-2.09l2.69,-1.7l1.92,0.64l1.8,-1.03l0.8,1.22l-0.69,0.98l0.26,0.63l2.42,0.38l0.09,0.52l-0.83,0.77l0.13,1.14l-1.53,-0.3l-3.24,1.94l-0.12,1.84l-1.32,2.23l-0.17,1.44l-0.93,1.89l-1.63,-0.52l-0.52,0.37l-0.09,2.72l-0.56,1.13l0.2,0.85l-0.53,0.28l-1.18,-3.85l-1.08,-0.27l-0.38,0.31l-0.24,1.03l-0.66,-0.68l0.55,-1.12l1.21,-0.35l1.15,-2.33l-0.23,-0.56l-1.58,-0.49l-4.33,-0.29l-0.19,-1.63l-0.35,-0.35l-1.11,-0.13l-1.91,-1.16l-0.57,0.17l-0.88,1.89l0.11,0.48l1.38,1.12l-1.11,0.73l-0.69,1.14l0.18,0.55l1.24,0.59l-0.32,1.59l0.85,2.01l0.36,2.08l-0.22,0.62l-4.58,0.54l-0.33,0.42l0.13,1.86l-1.18,1.39l-3.65,1.85l-2.79,3.1l-4.32,3.33l-0.18,1.29l-4.65,1.82l-0.77,2.19l0.64,5.37l-1.06,2.51l-0.01,3.97l-1.24,0.28l-1.14,1.94l0.39,0.85l-1.69,0.53l-1.04,1.84l-0.65,0.47l-2.06,-2.06l-2.1,-6.05l-2.2,-3.67l-1.05,-4.8l-2.29,-3.61l-1.76,-8.34l0.01,-3.18l-0.49,-2.59l-0.55,-0.29l-3.53,1.56l-1.52,-0.28l-2.87,-2.86l0.86,-0.7l0.08,-0.54l-0.74,-1.06l-2.68,-2.13l1.26,-1.38l5.33,0.01l0.39,-0.48l-0.5,-2.37l-1.42,-1.51l-0.27,-2.01l-1.44,-1.26l2.33,-2.5l3.05,0.07l2.62,-2.99l1.6,-2.96l2.4,-2.88l0.06,-2.16l1.98,-1.58l-0.01,-0.64l-1.93,-1.4l-0.82,-1.91l-0.81,-2.4l0.91,-0.97l3.58,0.7l2.93,-0.45l2.32,-2.35l2.31,3.07l-0.24,2.31l0.99,1.68l-0.05,0.92l-1.34,-0.3l-0.48,0.47l0.7,3.26l2.61,2.09l3.02,1.77Z", "name": "India"}, "TZ": {"path": "M495.56,426.32l2.8,-3.13l-0.02,-0.82l-0.64,-1.3l0.68,-0.52l0.14,-1.47l-0.76,-1.25l0.31,-0.11l2.26,0.03l-0.51,2.76l0.76,1.3l0.5,0.12l1.05,-0.53l1.19,-0.12l0.61,0.24l1.43,-0.62l0.1,-0.67l-0.71,-0.62l1.57,-1.7l8.65,4.86l0.32,1.53l3.34,2.33l-1.05,2.81l0.13,1.61l1.63,1.12l-0.6,1.77l-0.01,2.33l1.89,4.05l0.57,0.44l-1.47,1.09l-2.61,0.95l-1.43,-0.04l-1.06,0.77l-2.29,0.36l-2.87,-0.69l-0.83,0.07l-0.64,-0.75l-0.31,-2.8l-1.32,-1.36l-3.25,-0.77l-3.96,-1.59l-1.18,-2.42l-0.32,-1.75l-1.76,-1.49l0.42,-1.05l-0.44,-0.89l0.08,-0.96l-0.46,-0.58l0.06,-0.56Z", "name": "Tanzania"}, "AZ": {"path": "M539.27,301.57l1.33,0.36l0.44,-0.21l0.4,-0.78l1.11,-1.01l2.3,3.71l1.5,0.55l-1.32,0.17l-0.34,0.33l-0.81,3.49l-0.98,1.01l0.05,1.26l-1.28,-1.27l0.73,-1.34l-0.78,-1.39l-1.51,0.17l-2.32,1.87l-0.04,-1.43l-2.05,-1.48l0.5,-0.74l-0.07,-0.53l-1.07,-0.91l0.33,-0.54l-0.14,-0.55l-1.17,-1.02l1.91,0.73l1.71,0.07l0.37,-0.88l-1.01,-1.48l0.2,-0.14l0.4,0.06l1.63,1.92ZM533.76,306.94l0.63,0.52l0.69,-0.0l0.63,1.35l-0.71,-0.18l-1.25,-1.69Z", "name": "Azerbaijan"}, "IE": {"path": "M405.07,254.34l0.37,2.67l-1.78,3.47l-4.21,2.28l-2.89,-0.5l1.83,-4.09l-1.24,-4.04l4.62,-4.68l0.33,1.5l-0.5,2.21l0.41,0.49l1.45,-0.06l1.61,0.75Z", "name": "Ireland"}, "ID": {"path": "M756.47,417.79l0.69,4.01l2.79,1.78l0.51,-0.1l2.04,-2.59l2.71,-1.43l2.05,-0.0l3.9,1.73l2.46,0.45l0.08,15.16l-1.75,-1.55l-2.54,-0.51l-0.88,0.72l-2.32,0.06l0.69,-1.33l1.45,-0.64l0.23,-0.46l-0.65,-2.74l-1.24,-2.22l-5.04,-2.3l-2.09,-0.23l-3.68,-2.27l-0.55,0.13l-0.65,1.07l-0.52,0.12l-0.55,-1.89l-1.21,-0.78l1.84,-0.62l1.72,0.05l0.39,-0.52l-0.21,-0.66l-0.38,-0.28l-3.45,-0.0l-1.13,-1.48l-2.1,-0.43l-0.52,-0.61l2.69,-0.48l1.28,-0.78l3.66,0.94l0.3,0.71ZM757.91,430.25l-0.62,0.82l-0.1,-0.8l0.59,-1.12l0.13,1.1ZM747.38,422.88l0.34,0.72l-1.22,-0.57l-4.68,-0.1l0.27,-0.62l2.78,-0.09l2.52,0.67ZM741.05,415.14l-0.67,-2.88l0.64,-2.01l0.41,0.86l1.21,0.18l0.16,0.7l-0.1,1.68l-0.84,-0.16l-0.46,0.3l-0.34,1.34ZM739.05,423.4l-0.5,0.45l-1.34,-0.36l-0.17,-0.37l1.73,-0.08l0.27,0.36ZM721.45,414.41l-0.19,1.97l2.24,2.23l0.54,0.02l1.27,-1.07l2.75,-0.5l-0.9,1.21l-2.11,0.93l-0.16,0.6l2.22,3.01l-0.3,1.07l1.36,1.75l-2.26,0.85l-0.28,-0.31l0.12,-1.19l-1.64,-1.34l0.17,-2.24l-0.56,-0.39l-1.67,0.76l-0.23,0.39l0.3,6.18l-1.1,0.25l-0.69,-0.47l0.64,-2.21l-0.39,-2.42l-0.39,-0.34l-0.8,-0.01l-0.58,-1.29l0.98,-1.6l0.35,-1.96l1.32,-3.87ZM728.59,426.17l0.38,0.5l-0.02,1.28l-0.88,0.49l-0.53,-0.48l1.04,-1.79ZM729.04,416.88l0.27,-0.05l-0.02,0.13l-0.24,-0.08ZM721.68,413.95l0.16,-0.32l1.89,-1.65l1.83,0.68l3.16,0.35l2.94,-0.1l2.39,-1.66l-1.73,2.13l-1.66,0.43l-2.41,-0.48l-4.17,0.13l-2.39,0.51ZM730.55,440.42l1.11,-1.94l2.02,-0.82l0.08,0.62l-1.45,1.68l-1.77,0.46ZM728.12,435.8l-0.1,0.38l-3.46,0.66l-2.91,-0.27l-0.0,-0.25l1.54,-0.41l1.66,0.73l1.67,-0.19l1.61,-0.65ZM722.9,440.18l-0.64,0.03l-2.26,-1.21l1.12,-0.24l1.78,1.42ZM716.26,435.69l0.88,0.51l1.28,-0.17l0.2,0.35l-4.65,0.73l0.4,-0.67l1.15,-0.02l0.75,-0.74ZM711.66,423.74l-0.38,-0.16l-2.54,1.01l-1.12,-1.44l-1.69,-0.13l-1.16,-0.75l-3.04,0.77l-1.1,-1.15l-3.31,-0.11l-0.35,-3.05l-1.35,-0.95l-1.11,-1.98l-0.33,-2.06l0.27,-2.14l0.9,-1.01l0.37,1.15l2.09,1.49l1.53,-0.48l1.82,0.08l1.38,-1.19l1.0,-0.18l2.28,0.67l2.26,-0.53l1.52,-3.64l1.01,-0.99l0.78,-2.57l4.1,0.31l-1.11,1.77l0.02,0.46l1.7,2.2l-0.23,1.39l2.07,1.71l-2.33,0.42l-0.88,1.9l0.1,2.05l-2.4,1.9l-0.06,2.45l-0.7,2.79ZM692.58,431.94l0.35,0.26l4.8,0.25l0.78,-0.97l4.17,1.09l1.13,1.69l3.69,0.45l2.14,1.05l-1.8,0.61l-2.77,-1.0l-4.8,-0.12l-5.24,-1.42l-1.84,-0.25l-1.11,0.3l-4.26,-0.97l-0.7,-1.14l-1.59,-0.13l1.18,-1.66l2.74,0.13l2.87,1.13l0.26,0.69ZM685.53,429.08l-2.22,0.04l-2.06,-2.04l-3.15,-2.01l-2.93,-3.52l-3.11,-5.33l-2.2,-2.12l-1.64,-4.06l-2.32,-1.69l-1.27,-2.07l-1.96,-1.5l-2.51,-2.65l-0.11,-0.66l4.81,0.53l2.15,2.38l3.31,2.74l2.35,2.66l2.7,0.17l1.95,1.59l1.54,2.17l1.59,0.95l-0.84,1.71l0.15,0.52l1.44,0.87l0.79,0.1l0.4,1.58l0.87,1.4l1.96,0.39l1.0,1.31l-0.6,3.01l-0.09,3.51Z", "name": "Indonesia"}, "UA": {"path": "M493.77,283.66l1.85,0.21l0.66,-0.27l0.1,-0.68l-0.25,-0.87l-0.8,-0.85l-0.34,-1.43l-0.87,-0.71l0.01,-1.37l-1.13,-1.01l-1.16,-0.23l-2.07,-1.18l-1.66,0.37l-0.67,0.55l-0.9,-0.0l-0.86,0.91l-1.69,0.33l-0.76,0.47l-1.18,-0.82l-3.05,-0.42l-0.9,0.48l-0.22,-0.62l-1.16,-0.85l0.86,-1.88l0.25,0.1l0.53,-0.51l-0.57,-1.53l2.08,-2.96l1.38,-0.69l0.26,-1.34l-1.09,-3.02l0.9,-0.18l1.27,-1.02l1.78,-0.08l2.45,0.31l2.87,0.98l1.87,0.08l0.85,0.53l1.06,-0.47l0.78,0.77l2.17,-0.18l0.91,0.35l0.54,-0.34l0.15,-1.9l0.58,-0.67l2.82,-0.06l0.87,-0.86l3.0,-0.22l1.29,1.86l-0.53,0.89l0.21,1.25l0.36,0.33l1.78,0.17l0.93,2.49l3.18,1.38l1.95,-0.52l1.69,1.77l1.39,-0.04l3.36,1.15l0.02,0.75l-0.97,1.91l0.49,2.26l-0.28,0.89l-2.37,0.33l-1.29,1.04l-0.21,1.6l-1.85,0.32l-1.58,1.12l-2.41,0.24l-2.16,1.36l-0.19,0.36l0.32,2.54l1.49,0.93l1.92,-0.16l-0.18,0.47l-2.65,0.61l-3.21,1.92l-0.89,-0.46l0.44,-1.33l-0.24,-0.5l-2.27,-0.86l2.41,-1.32l0.12,-0.62l-0.93,-0.95l-3.62,-0.85l-0.14,-1.08l-0.47,-0.34l-2.32,0.45l-2.91,4.52l-1.19,-0.45l-0.98,0.48l-0.36,-0.21l1.35,-2.93Z", "name": "Ukraine"}, "QA": {"path": "M549.32,350.8l-0.76,-0.24l-0.14,-1.72l0.84,-1.35l0.47,0.54l0.04,1.41l-0.45,1.36Z", "name": "Qatar"}, "MZ": {"path": "M508.58,448.77l-0.34,-2.6l0.51,-2.07l3.55,0.64l2.51,-0.38l1.02,-0.76l1.49,0.01l2.74,-0.99l1.66,-1.21l0.51,9.32l0.41,1.25l-0.68,1.69l-0.93,1.74l-1.5,1.52l-5.16,2.32l-2.78,2.78l-1.02,0.54l-1.71,1.84l-0.98,0.59l-0.35,2.45l1.16,1.99l0.49,2.24l0.43,0.31l-0.06,2.14l-0.39,1.21l0.5,0.73l-0.25,0.78l-0.92,0.86l-5.13,2.47l-1.22,1.39l0.21,1.17l0.59,0.4l-0.11,0.78l-1.22,-0.02l-0.73,-3.1l0.42,-3.19l-1.78,-5.56l2.49,-2.89l0.69,-1.93l0.44,-0.43l0.28,-1.57l-0.39,-0.94l0.59,-3.72l-0.01,-3.32l-1.48,-1.17l-1.2,-0.23l-1.74,-1.18l-1.92,0.0l-0.3,-2.12l7.06,-1.98l1.28,1.1l0.89,-0.1l0.67,0.45l0.1,0.75l-0.51,1.3l0.19,1.83l1.75,1.86l0.65,-0.13l0.71,-1.68l1.17,-0.86l-0.26,-3.51l-1.05,-1.87l-1.04,-0.95Z", "name": "Mozambique"}}, "height": 583.0802520919394, "projection": {"type": "merc", "centralMeridian": 11.5}, "width": 900.0});
assets/js/jquery-jvectormap-world-mill.js DELETED
@@ -1 +0,0 @@
1
- jQuery.fn.vectorMap('addMap', 'world_mill',{"insets": [{"width": 900, "top": 0, "height": 440.7063107441331, "bbox": [{"y": -12671671.123330014, "x": -20004297.151525836}, {"y": 6930392.025135122, "x": 20026572.394749384}], "left": 0}], "paths": {"BD": {"path": "M651.84,230.21l-0.6,-2.0l-1.36,-1.71l-2.31,-0.11l-0.41,0.48l0.2,0.94l-0.53,0.99l-0.72,-0.36l-0.68,0.35l-1.2,-0.36l-0.37,-2.0l-0.81,-1.86l0.39,-1.46l-0.22,-0.47l-1.14,-0.53l0.29,-0.5l1.48,-0.94l0.03,-0.65l-1.55,-1.22l0.55,-1.14l1.61,0.94l1.04,0.15l0.18,1.54l0.34,0.35l5.64,0.63l-0.84,1.64l-1.22,0.34l-0.77,1.51l0.07,0.47l1.37,1.37l0.67,-0.19l0.42,-1.39l1.21,3.84l-0.03,1.21l-0.33,-0.15l-0.4,0.28Z", "name": "Bangladesh"}, "BE": {"path": "M429.29,144.05l1.91,0.24l2.1,-0.63l2.63,1.99l-0.21,1.66l-0.69,0.4l-0.18,1.2l-1.66,-1.13l-1.39,0.15l-2.73,-2.7l-1.17,-0.18l-0.16,-0.52l1.54,-0.5Z", "name": "Belgium"}, "BF": {"path": "M421.42,247.64l-0.11,0.95l0.34,1.16l1.4,1.71l0.07,1.1l0.32,0.37l2.55,0.51l-0.04,1.28l-0.38,0.53l-1.07,0.21l-0.72,1.18l-0.63,0.21l-3.22,-0.25l-0.94,0.39l-5.4,-0.05l-0.39,0.38l0.16,2.73l-1.23,-0.43l-1.17,0.1l-0.89,0.57l-2.27,-1.72l-0.13,-1.11l0.61,-0.96l0.02,-0.93l1.87,-1.98l0.44,-1.81l0.43,-0.39l1.28,0.26l1.05,-0.52l0.47,-0.73l1.84,-1.09l0.55,-0.83l2.2,-1.0l1.15,-0.3l0.72,0.45l1.13,-0.01Z", "name": "Burkina Faso"}, "BG": {"path": "M491.65,168.18l-0.86,0.88l-0.91,2.17l0.48,1.34l-1.6,-0.24l-2.55,0.95l-0.28,1.51l-1.8,0.22l-2.0,-1.0l-1.92,0.79l-1.42,-0.07l-0.15,-1.63l-1.05,-0.97l0.0,-0.8l1.2,-1.57l0.01,-0.56l-1.14,-1.23l-0.05,-0.94l0.88,0.97l0.88,-0.2l1.91,0.47l3.68,0.16l1.42,-0.81l2.72,-0.66l2.55,1.24Z", "name": "Bulgaria"}, "BA": {"path": "M463.49,163.65l2.1,0.5l1.72,-0.03l1.52,0.68l-0.36,0.78l0.08,0.45l1.04,1.02l-0.25,0.98l-1.81,1.15l-0.38,1.38l-1.67,-0.87l-0.89,-1.2l-2.11,-1.83l-1.63,-2.22l0.23,-0.57l0.48,0.38l0.55,-0.06l0.43,-0.51l0.94,-0.06Z", "name": "Bosnia and Herz."}, "BN": {"path": "M707.48,273.58l0.68,-0.65l1.41,-0.91l-0.15,1.63l-0.81,-0.05l-0.61,0.58l-0.53,-0.6Z", "name": "Brunei"}, "BO": {"path": "M263.83,340.69l-3.09,-0.23l-0.38,0.23l-0.7,1.52l-1.31,-1.53l-3.28,-0.64l-2.37,2.4l-1.31,0.26l-0.88,-3.26l-1.3,-2.86l0.74,-2.37l-0.13,-0.43l-1.2,-1.01l-0.37,-1.89l-1.08,-1.55l1.45,-2.56l-0.96,-2.33l0.47,-1.06l-0.34,-0.73l0.91,-1.32l0.16,-3.84l0.5,-1.18l-1.81,-3.41l2.46,0.07l0.8,-0.85l3.4,-1.91l2.66,-0.35l-0.19,1.38l0.3,1.07l-0.05,1.97l2.72,2.27l2.88,0.49l0.89,0.86l1.79,0.58l0.98,0.7l1.71,0.05l1.17,0.61l0.6,2.7l-0.7,0.54l0.96,2.99l0.37,0.28l4.3,0.1l-0.25,1.2l0.27,1.02l1.43,0.9l0.5,1.35l-0.41,1.86l-0.65,1.08l0.12,1.35l-2.69,-1.65l-2.4,-0.03l-4.36,0.76l-1.49,2.5l-0.11,1.52l-0.75,2.37Z", "name": "Bolivia"}, "JP": {"path": "M781.12,166.87l1.81,0.68l1.62,-0.97l0.39,2.42l-3.35,0.75l-2.23,2.88l-3.63,-1.9l-0.56,0.2l-1.26,3.05l-2.16,0.03l-0.29,-2.51l1.08,-2.03l2.45,-0.16l0.37,-0.33l1.25,-5.94l2.47,2.71l2.03,1.12ZM773.56,187.34l-0.91,2.22l0.37,1.52l-1.14,1.75l-3.02,1.26l-4.58,0.27l-3.34,3.01l-1.25,-0.8l-0.09,-1.9l-0.46,-0.38l-4.35,0.62l-3.0,1.32l-2.85,0.05l-0.37,0.27l0.13,0.44l2.32,1.89l-1.54,4.34l-1.26,0.9l-0.79,-0.7l0.56,-2.27l-0.21,-0.45l-1.47,-0.75l-0.74,-1.4l2.12,-0.84l1.26,-1.7l2.45,-1.42l1.83,-1.91l4.78,-0.81l2.6,0.57l0.44,-0.21l2.39,-4.66l1.29,1.06l0.5,0.01l5.1,-4.02l1.69,-3.73l-0.38,-3.4l0.9,-1.61l2.14,-0.44l1.23,3.72l-0.07,2.18l-2.23,2.84l-0.04,3.16ZM757.78,196.26l0.19,0.56l-1.01,1.21l-1.16,-0.68l-1.28,0.65l-0.69,1.45l-1.02,-0.5l0.01,-0.93l1.14,-1.38l1.57,0.14l0.85,-0.98l1.4,0.46Z", "name": "Japan"}, "BI": {"path": "M495.45,295.49l-1.08,-2.99l1.14,-0.11l0.64,-1.19l0.76,0.09l0.65,1.83l-2.1,2.36Z", "name": "Burundi"}, "BJ": {"path": "M429.57,255.75l-0.05,0.8l0.5,1.34l-0.42,0.86l0.17,0.79l-1.81,2.12l-0.57,1.76l-0.08,5.42l-1.41,0.2l-0.48,-1.36l0.11,-5.71l-0.52,-0.7l-0.2,-1.35l-1.48,-1.48l0.21,-0.9l0.89,-0.43l0.42,-0.92l1.27,-0.36l1.22,-1.34l0.61,-0.0l1.62,1.24Z", "name": "Benin"}, "BT": {"path": "M650.32,213.86l0.84,0.71l-0.12,1.1l-3.76,-0.11l-1.57,0.4l-1.93,-0.87l1.48,-1.96l1.13,-0.57l1.63,0.57l1.33,0.08l0.99,0.65Z", "name": "Bhutan"}, "JM": {"path": "M228.38,239.28l-0.8,0.4l-2.26,-1.06l0.84,-0.23l2.14,0.3l1.17,0.56l-1.08,0.03Z", "name": "Jamaica"}, "BW": {"path": "M483.92,330.07l2.27,4.01l2.83,2.86l0.96,0.31l0.78,2.43l2.13,0.61l1.02,0.76l-3.0,1.64l-2.32,2.02l-1.54,2.69l-1.52,0.45l-0.64,1.94l-1.34,0.52l-1.85,-0.12l-1.21,-0.74l-1.35,-0.3l-1.22,0.62l-0.75,1.37l-2.31,1.9l-1.4,0.21l-0.35,-0.59l0.16,-1.75l-1.48,-2.54l-0.62,-0.43l-0.0,-7.1l2.08,-0.08l0.39,-0.4l0.07,-8.9l5.19,-0.93l0.8,0.89l0.51,0.07l1.5,-0.95l2.21,-0.49Z", "name": "Botswana"}, "BR": {"path": "M259.98,275.05l3.24,0.7l0.65,-0.53l4.55,-1.32l1.08,-1.06l-0.02,-0.63l0.55,-0.05l0.28,0.28l-0.26,0.87l0.22,0.48l0.73,0.32l0.4,0.81l-0.62,0.86l-0.4,2.13l0.82,2.56l1.69,1.43l1.43,0.2l3.17,-1.68l3.18,0.3l0.65,-0.75l-0.27,-0.92l1.9,-0.09l2.39,0.99l1.06,-0.61l0.84,0.78l1.2,-0.18l1.18,-1.06l0.84,-1.94l1.36,-2.11l0.37,-0.05l1.89,5.45l1.33,0.59l0.05,1.28l-1.77,1.94l0.02,0.56l1.02,0.87l4.07,0.36l0.08,2.16l0.66,0.29l1.74,-1.5l6.97,2.32l1.02,1.22l-0.35,1.18l0.49,0.5l2.81,-0.74l4.77,1.3l3.75,-0.08l3.57,2.0l3.29,2.86l1.93,0.72l2.12,0.12l0.71,0.62l1.21,4.51l-0.95,3.98l-4.72,5.06l-1.64,2.92l-1.72,2.05l-0.8,0.3l-0.72,2.03l0.18,4.75l-0.94,5.53l-0.81,1.13l-0.43,3.36l-2.55,3.5l-0.4,2.51l-1.86,1.04l-0.67,1.53l-2.54,0.01l-3.94,1.01l-1.83,1.2l-2.87,0.82l-3.03,2.19l-2.2,2.83l-0.36,2.0l0.4,1.58l-0.44,2.6l-0.51,1.2l-1.77,1.54l-2.75,4.78l-3.83,3.42l-1.24,2.74l-1.18,1.15l-0.36,-0.83l0.95,-1.14l0.01,-0.5l-1.52,-1.97l-4.56,-3.32l-1.03,-0.0l-2.38,-2.02l-0.81,-0.0l5.34,-5.45l3.77,-2.58l0.22,-2.46l-1.35,-1.81l-0.91,0.07l0.58,-2.33l0.01,-1.54l-1.11,-0.83l-1.75,0.3l-0.44,-3.11l-0.52,-0.95l-1.88,-0.88l-1.24,0.47l-2.17,-0.41l0.15,-3.21l-0.62,-1.34l0.66,-0.73l-0.22,-1.34l0.66,-1.13l0.44,-2.04l-0.61,-1.83l-1.4,-0.86l-0.2,-0.75l0.34,-1.39l-0.38,-0.5l-4.52,-0.1l-0.72,-2.22l0.59,-0.42l-0.03,-1.1l-0.5,-0.87l-0.32,-1.7l-1.45,-0.76l-1.63,-0.02l-1.05,-0.72l-1.6,-0.48l-1.13,-0.99l-2.69,-0.4l-2.47,-2.06l0.13,-4.35l-0.45,-0.45l-3.46,0.5l-3.44,1.94l-0.6,0.74l-2.9,-0.17l-1.47,0.42l-0.72,-0.18l0.15,-3.52l-0.63,-0.34l-1.94,1.41l-1.87,-0.06l-0.83,-1.18l-1.37,-0.26l0.21,-1.01l-1.35,-1.49l-0.88,-1.91l0.56,-0.6l-0.0,-0.81l1.29,-0.62l0.22,-0.43l-0.22,-1.19l0.61,-0.91l0.15,-0.99l2.65,-1.58l1.99,-0.47l0.42,-0.36l2.06,0.11l0.42,-0.33l1.19,-8.0l-0.41,-1.56l-1.1,-1.0l0.01,-1.33l1.91,-0.42l0.08,-0.96l-0.33,-0.43l-1.14,-0.2l-0.02,-0.83l4.47,0.05l0.82,-0.67l0.82,1.81l0.8,0.07l1.15,1.1l2.26,-0.05l0.71,-0.83l2.78,-0.96l0.48,-1.13l1.6,-0.64l0.24,-0.47l-0.48,-0.82l-1.83,-0.19l-0.36,-3.22Z", "name": "Brazil"}, "BS": {"path": "M226.4,223.87l-0.48,-1.15l-0.84,-0.75l0.36,-1.11l0.95,1.95l0.01,1.06ZM225.56,216.43l-1.87,0.29l-0.04,-0.22l0.74,-0.14l1.17,0.06Z", "name": "Bahamas"}, "BY": {"path": "M493.84,128.32l0.29,0.7l0.49,0.23l1.19,-0.38l2.09,0.72l0.19,1.26l-0.45,1.24l1.57,2.26l0.89,0.59l0.17,0.81l1.58,0.56l0.4,0.5l-0.53,0.41l-1.87,-0.11l-0.73,0.38l-0.13,0.52l1.04,2.74l-1.91,0.26l-0.89,0.99l-0.11,1.18l-2.73,-0.04l-0.53,-0.62l-0.52,-0.08l-0.75,0.46l-0.91,-0.42l-1.92,-0.07l-2.75,-0.79l-2.6,-0.28l-2.0,0.07l-1.5,0.92l-0.67,0.07l-0.08,-1.22l-0.59,-1.19l1.36,-0.88l0.01,-1.35l-0.7,-1.41l-0.07,-1.0l2.16,-0.02l2.72,-1.3l0.75,-2.04l1.91,-1.04l0.2,-0.41l-0.19,-1.25l3.8,-1.78l2.3,0.77Z", "name": "Belarus"}, "BZ": {"path": "M198.03,244.38l0.1,-4.49l0.69,-0.06l0.74,-1.3l0.34,0.28l-0.4,1.3l0.17,0.58l-0.34,2.25l-1.3,1.42Z", "name": "Belize"}, "RU": {"path": "M491.55,115.25l2.55,-1.85l-0.01,-0.65l-2.2,-1.5l7.32,-6.76l1.03,-2.11l-0.13,-0.49l-3.46,-2.52l0.86,-2.7l-2.11,-2.81l1.56,-3.67l-2.77,-4.52l2.15,-2.99l-0.08,-0.55l-3.65,-2.73l0.3,-2.54l1.81,-0.37l4.26,-1.77l2.42,-1.45l4.06,2.61l6.79,1.04l9.34,4.85l1.78,1.88l0.14,2.46l-2.55,2.02l-3.9,1.06l-11.07,-3.14l-2.06,0.53l-0.13,0.7l3.94,2.94l0.31,5.86l0.26,0.36l5.14,2.24l0.58,-0.29l0.32,-1.94l-1.35,-1.78l1.13,-1.09l6.13,2.42l2.11,-0.98l0.18,-0.56l-1.51,-2.67l5.41,-3.76l2.07,0.22l2.26,1.41l0.57,-0.16l1.46,-2.87l-0.05,-0.44l-1.92,-2.32l1.12,-2.32l-1.32,-2.27l5.87,1.16l1.04,1.75l-2.59,0.43l-0.33,0.4l0.02,2.36l2.46,1.83l3.87,-0.91l0.86,-2.8l13.69,-5.65l0.99,0.11l-1.92,2.06l0.23,0.67l3.11,0.45l2.0,-1.48l4.56,-0.12l3.64,-1.73l2.65,2.44l0.56,-0.01l2.85,-2.88l-0.01,-0.57l-2.35,-2.29l0.9,-1.01l7.14,1.3l3.41,1.36l9.05,4.97l0.51,-0.11l1.67,-2.27l-0.05,-0.53l-2.43,-2.21l-0.06,-0.78l-0.34,-0.36l-2.52,-0.36l0.64,-1.93l-1.32,-3.46l-0.06,-1.21l4.48,-4.06l1.69,-4.29l1.6,-0.81l6.23,1.18l0.44,2.21l-2.29,3.64l0.06,0.5l1.47,1.39l0.76,3.0l-0.56,6.03l2.69,2.82l-0.96,2.57l-4.86,5.95l0.23,0.64l2.86,0.61l0.42,-0.17l0.93,-1.4l2.64,-1.03l0.87,-2.24l2.09,-1.96l0.07,-0.5l-1.36,-2.28l1.09,-2.69l-0.32,-0.55l-2.47,-0.33l-0.5,-2.06l1.94,-4.38l-0.06,-0.42l-2.96,-3.4l4.12,-2.88l0.16,-0.4l-0.51,-2.93l0.54,-0.05l1.13,2.25l-0.96,4.35l0.27,0.47l2.68,0.84l0.5,-0.51l-1.02,-2.99l3.79,-1.66l5.01,-0.24l4.53,2.61l0.48,-0.06l0.07,-0.48l-2.18,-3.82l-0.23,-4.67l3.98,-0.9l5.97,0.21l5.49,-0.64l0.27,-0.65l-1.83,-2.31l2.56,-2.9l2.87,-0.17l4.8,-2.47l6.54,-0.67l1.03,-1.42l6.25,-0.45l2.32,1.11l5.53,-2.7l4.5,0.08l0.39,-0.28l0.66,-2.15l2.26,-2.12l5.69,-2.11l3.21,1.29l-2.46,0.94l-0.25,0.42l0.34,0.35l5.41,0.77l0.61,2.33l0.58,0.25l2.2,-1.22l7.13,0.07l5.51,2.47l1.79,1.72l-0.53,2.24l-9.16,4.15l-1.97,1.52l0.16,0.71l6.77,1.91l2.16,-0.78l1.13,2.74l0.67,0.11l1.01,-1.15l3.81,-0.73l7.7,0.77l0.54,1.99l0.36,0.29l10.47,0.71l0.43,-0.38l0.13,-3.23l4.87,0.78l3.95,-0.02l3.83,2.4l1.03,2.71l-1.35,1.79l0.02,0.5l3.15,3.64l4.07,1.96l0.53,-0.18l2.23,-4.47l3.95,1.93l4.16,-1.21l4.73,1.39l2.05,-1.26l3.94,0.62l0.43,-0.55l-1.68,-4.02l2.89,-1.8l22.31,3.03l2.16,2.75l6.55,3.51l10.29,-0.81l4.82,0.73l1.85,1.66l-0.29,3.08l0.25,0.41l3.08,1.26l3.56,-0.88l4.35,-0.11l4.8,0.87l4.57,-0.47l4.23,3.79l0.43,0.07l3.1,-1.4l0.16,-0.6l-1.88,-2.62l0.85,-1.52l7.71,1.21l5.22,-0.26l7.09,2.09l9.59,5.22l6.35,4.11l-0.2,2.38l1.88,1.41l0.6,-0.42l-0.48,-2.53l6.15,0.57l4.4,3.51l-1.97,1.43l-4.0,0.41l-0.36,0.39l-0.06,3.79l-0.74,0.62l-2.07,-0.11l-1.91,-1.39l-3.14,-1.11l-0.78,-1.85l-2.72,-0.68l-2.63,0.49l-1.04,-1.1l0.46,-1.31l-0.5,-0.51l-3.0,0.98l-0.22,0.58l0.99,1.7l-1.21,1.48l-3.04,1.68l-3.12,-0.28l-0.4,0.23l0.09,0.46l2.2,2.09l1.46,3.2l1.15,1.1l0.24,1.33l-0.42,0.67l-4.63,-0.77l-6.96,2.9l-2.19,0.44l-7.6,5.06l-0.84,1.45l-3.61,-2.37l-6.24,2.82l-0.94,-1.15l-0.53,-0.08l-2.28,1.52l-3.2,-0.49l-0.44,0.27l-0.78,2.37l-3.05,3.78l0.09,1.47l0.29,0.36l2.54,0.72l-0.29,4.53l-1.97,0.11l-0.35,0.26l-1.07,2.94l0.8,1.45l-3.91,1.58l-1.05,3.95l-3.48,0.77l-0.3,0.3l-0.72,3.29l-3.09,2.65l-0.7,-1.74l-2.44,-12.44l1.16,-4.71l2.04,-2.06l0.22,-1.64l3.8,-0.86l4.46,-4.61l4.28,-3.81l4.48,-3.01l2.17,-5.63l-0.42,-0.54l-3.04,0.33l-1.77,3.31l-5.86,3.86l-1.86,-4.25l-0.45,-0.23l-6.46,1.3l-6.47,6.44l-0.01,0.55l1.58,1.74l-8.24,1.17l0.15,-2.2l-0.34,-0.42l-3.89,-0.56l-3.25,1.81l-7.62,-0.62l-8.45,1.19l-17.71,15.41l0.22,0.7l3.74,0.41l1.36,2.17l2.43,0.76l1.88,-1.68l2.4,0.2l3.4,3.54l0.08,2.6l-1.95,3.42l-0.21,3.9l-1.1,5.06l-3.71,4.54l-0.87,2.21l-8.29,8.89l-3.19,1.7l-1.32,0.03l-1.45,-1.36l-0.49,-0.04l-2.27,1.5l0.41,-3.65l-0.59,-2.47l1.75,-0.89l2.91,0.53l0.42,-0.2l1.68,-3.03l0.87,-3.46l0.97,-1.18l1.32,-2.88l-0.45,-0.56l-4.14,0.95l-2.19,1.25l-3.41,-0.0l-1.06,-2.93l-2.97,-2.3l-4.28,-1.06l-1.75,-5.07l-2.66,-5.01l-2.29,-1.29l-3.75,-1.01l-3.44,0.08l-3.18,0.62l-2.24,1.77l0.05,0.66l1.18,0.69l0.02,1.43l-1.33,1.05l-2.26,3.51l-0.04,1.43l-3.16,1.84l-2.82,-1.16l-3.01,0.23l-1.35,-1.07l-1.5,-0.35l-3.9,2.31l-3.22,0.52l-2.27,0.79l-3.05,-0.51l-2.21,0.03l-1.48,-1.6l-2.6,-1.63l-2.63,-0.43l-5.46,1.01l-3.23,-1.25l-0.72,-2.57l-5.2,-1.24l-2.75,-1.36l-0.5,0.12l-2.59,3.45l0.84,2.1l-2.06,1.93l-3.41,-0.77l-2.42,-0.12l-1.83,-1.54l-2.53,-0.05l-2.42,-0.98l-3.86,1.57l-4.72,2.78l-3.3,0.75l-1.55,-1.92l-3.0,0.41l-1.11,-1.33l-1.62,-0.59l-1.31,-1.94l-1.38,-0.6l-3.7,0.79l-3.31,-1.83l-0.51,0.11l-0.99,1.29l-5.29,-8.05l-2.96,-2.48l0.65,-0.77l0.01,-0.51l-0.5,-0.11l-6.2,3.21l-1.84,0.15l0.15,-1.39l-0.26,-0.42l-3.22,-1.17l-2.46,0.7l-0.69,-3.16l-0.32,-0.31l-4.5,-0.75l-2.47,1.47l-6.19,1.27l-1.29,0.86l-9.51,1.3l-1.15,1.17l-0.03,0.53l1.47,1.9l-1.89,0.69l-0.22,0.56l0.31,0.6l-2.11,1.44l0.03,0.68l3.75,2.12l-0.39,0.98l-3.23,-0.13l-0.86,0.86l-3.09,-1.59l-3.97,0.07l-2.66,1.35l-8.32,-3.56l-4.07,0.06l-5.39,3.68l-0.39,2.0l-2.03,-1.5l-0.59,0.13l-2.0,3.59l0.57,0.93l-1.28,2.16l0.06,0.48l2.13,2.17l1.95,0.04l1.37,1.82l-0.23,1.46l0.25,0.43l0.83,0.33l-0.8,1.31l-2.49,0.62l-2.49,3.2l0.0,0.49l2.17,2.78l-0.15,2.18l2.5,3.24l-1.58,1.59l-0.7,-0.13l-1.63,-1.72l-2.29,-0.84l-0.94,-1.31l-2.34,-0.63l-1.48,0.4l-0.43,-0.47l-3.51,-1.48l-5.76,-1.01l-0.45,0.19l-2.89,-2.34l-2.9,-1.2l-1.53,-1.29l1.29,-0.43l2.08,-2.61l-0.05,-0.55l-0.89,-0.79l3.05,-1.06l0.27,-0.42l-0.07,-0.69l-0.49,-0.35l-1.73,0.39l0.04,-0.68l1.04,-0.72l2.66,-0.48l0.4,-1.32l-0.5,-1.6l0.92,-1.54l0.03,-1.17l-0.29,-0.37l-3.69,-1.06l-1.41,0.02l-1.42,-1.41l-2.19,0.38l-2.77,-1.01l-0.03,-0.59l-0.89,-1.43l-2.0,-0.32l-0.11,-0.54l0.49,-0.53l0.01,-0.53l-1.6,-1.9l-3.58,0.02l-0.88,0.73l-0.46,-0.07l-1.0,-2.79l2.22,-0.02l0.97,-0.74l0.07,-0.57l-0.9,-1.04l-1.35,-0.48l-0.11,-0.7l-0.95,-0.58l-1.38,-1.99l0.46,-0.98l-0.51,-1.96l-2.45,-0.84l-1.21,0.3l-0.46,-0.76l-2.46,-0.83l-0.72,-1.87l-0.21,-1.69l-0.99,-0.85l0.85,-1.17l-0.7,-3.21l1.66,-1.97l-0.16,-0.79ZM749.2,170.72l-0.6,0.4l-0.13,0.16l-0.01,-0.51l0.74,-0.05ZM871.88,65.81l2.17,-0.13l3.19,1.16l-2.39,1.09l-5.63,0.48l-0.26,-0.84l2.92,-1.76ZM797.39,48.49l-2.0,1.36l-3.8,-0.42l-4.25,-1.8l0.35,-0.97l9.69,1.83ZM783.67,46.12l-1.63,3.09l-8.98,-0.13l-4.09,1.14l-4.54,-2.97l1.16,-3.01l3.05,-0.89l6.5,0.22l8.54,2.56ZM778.2,134.98l-0.56,-0.9l0.27,-0.12l0.29,1.01ZM778.34,135.48l0.94,3.53l-0.05,3.38l1.05,3.39l2.18,5.0l-2.89,-0.83l-0.49,0.26l-1.54,4.65l2.42,3.5l-0.04,1.13l-1.24,-1.24l-0.61,0.06l-1.09,1.61l-0.28,-1.61l0.27,-3.1l-0.28,-3.4l0.58,-2.47l0.11,-4.39l-1.46,-3.36l0.21,-4.32l2.15,-1.46l0.07,-0.34ZM771.95,56.61l1.76,-1.42l2.89,-0.42l3.28,1.71l0.14,0.6l-3.27,0.03l-4.81,-0.5ZM683.76,31.09l-13.01,1.93l4.03,-6.35l1.82,-0.56l1.73,0.34l5.99,2.98l-0.56,1.66ZM670.85,27.93l-5.08,0.64l-6.86,-1.57l-3.99,-2.05l-2.1,-4.16l-2.6,-0.87l5.72,-3.5l5.2,-1.28l4.69,2.85l5.59,5.4l-0.56,4.53ZM564.15,68.94l-0.64,0.17l-7.85,-0.57l-0.86,-2.04l-4.28,-1.17l-0.28,-1.94l2.27,-0.89l0.25,-0.39l-0.08,-2.38l4.81,-3.97l-0.15,-0.7l-1.47,-0.38l5.3,-3.81l0.15,-0.44l-0.58,-1.94l5.28,-2.51l8.21,-3.27l8.28,-0.96l4.35,-1.94l4.6,-0.64l1.36,1.61l-1.34,1.28l-16.43,4.94l-7.97,4.88l-7.74,9.63l0.66,4.14l4.16,3.27ZM548.81,18.48l-5.5,1.18l-0.58,1.02l-2.59,0.84l-2.13,-1.07l1.12,-1.42l-0.3,-0.65l-2.33,-0.07l1.68,-0.36l3.47,-0.06l0.42,1.29l0.66,0.16l1.38,-1.34l2.15,-0.88l2.94,1.01l-0.39,0.36ZM477.37,133.15l-4.08,0.05l-2.56,-0.32l0.33,-0.87l3.17,-1.03l3.24,0.96l-0.09,1.23Z", "name": "Russia"}, "RW": {"path": "M497.0,288.25l0.71,1.01l-0.11,1.09l-1.63,0.03l-1.04,1.39l-0.83,-0.11l0.51,-1.2l0.08,-1.34l0.42,-0.41l0.7,0.14l1.19,-0.61Z", "name": "Rwanda"}, "RS": {"path": "M469.4,163.99l0.42,-0.5l-0.01,-0.52l-1.15,-1.63l1.43,-0.62l1.33,0.12l1.17,1.06l0.46,1.13l1.34,0.64l0.35,1.35l1.46,0.9l0.76,-0.29l0.2,0.69l-0.48,0.78l0.22,1.12l1.05,1.22l-0.77,0.8l-0.37,1.52l-1.21,0.08l0.24,-0.64l-0.39,-0.54l-2.08,-1.64l-0.9,0.05l-0.48,0.94l-2.12,-1.37l0.53,-1.6l-1.11,-1.37l0.51,-1.1l-0.41,-0.57Z", "name": "Serbia"}, "TL": {"path": "M734.55,307.93l-0.1,-0.97l4.5,-0.86l-2.82,1.28l-1.59,0.55Z", "name": "Timor-Leste"}, "TM": {"path": "M553.03,173.76l-0.04,0.34l-0.09,-0.22l0.13,-0.12ZM555.87,172.66l0.45,-0.1l1.48,0.74l2.06,2.43l4.07,-0.18l0.38,-0.51l-0.32,-1.19l1.92,-0.94l1.91,-1.59l2.94,1.39l0.43,2.47l1.19,0.67l2.58,-0.13l0.62,0.4l1.32,3.12l4.54,3.44l2.67,1.45l3.06,1.14l-0.04,1.05l-1.33,-0.75l-0.59,0.19l-0.32,0.84l-2.2,0.81l-0.46,2.13l-1.21,0.74l-1.91,0.42l-0.73,1.33l-1.56,0.31l-2.22,-0.94l-0.2,-2.17l-0.38,-0.36l-1.73,-0.09l-2.76,-2.46l-2.14,-0.4l-2.84,-1.48l-1.78,-0.27l-1.24,0.53l-1.57,-0.08l-2.0,1.69l-1.7,0.43l-0.36,-1.58l0.36,-2.98l-0.22,-0.4l-1.65,-0.84l0.54,-1.69l-0.34,-0.52l-1.22,-0.13l0.36,-1.64l2.22,0.59l2.2,-0.95l0.12,-0.65l-1.77,-1.74l-0.66,-1.57Z", "name": "Turkmenistan"}, "TJ": {"path": "M597.75,178.82l-2.54,-0.44l-0.47,0.34l-0.24,1.7l0.43,0.45l2.64,-0.22l3.18,0.95l4.39,-0.41l0.56,2.37l0.52,0.29l0.67,-0.24l1.11,0.49l0.21,2.13l-3.76,-0.21l-1.8,1.32l-1.76,0.74l-0.61,-0.58l0.21,-2.23l-0.64,-0.49l-0.07,-0.93l-1.36,-0.66l-0.45,0.07l-1.08,1.01l-0.55,1.48l-1.31,-0.05l-0.95,1.16l-0.9,-0.35l-1.86,0.74l1.26,-2.83l-0.54,-2.17l-1.67,-0.82l0.33,-0.66l2.18,-0.04l1.19,-1.63l0.76,-1.79l2.43,-0.5l-0.26,1.0l0.73,1.05Z", "name": "Tajikistan"}, "RO": {"path": "M487.53,154.23l0.6,0.24l2.87,3.98l-0.17,2.69l0.45,1.42l1.32,0.81l1.35,-0.42l0.76,0.36l0.02,0.31l-0.83,0.45l-0.59,-0.22l-0.54,0.3l-0.62,3.3l-1.0,-0.22l-2.07,-1.13l-2.95,0.71l-1.25,0.76l-3.51,-0.15l-1.89,-0.47l-0.87,0.16l-0.82,-1.3l0.29,-0.26l-0.06,-0.64l-1.09,-0.34l-0.56,0.5l-1.05,-0.64l-0.39,-1.39l-1.36,-0.65l-0.35,-1.0l-0.83,-0.75l1.54,-0.54l2.66,-4.21l2.4,-1.24l2.96,0.34l1.48,0.73l0.79,-0.45l1.78,-0.3l0.75,-0.74l0.79,0.0Z", "name": "Romania"}, "GW": {"path": "M386.23,253.6l-0.29,0.84l0.15,0.6l-2.21,0.59l-0.86,0.96l-1.04,-0.83l-1.09,-0.23l-0.54,-1.06l-0.66,-0.49l2.41,-0.48l4.13,0.1Z", "name": "Guinea-Bissau"}, "GT": {"path": "M195.08,249.77l-2.48,-0.37l-1.03,-0.45l-1.14,-0.89l0.3,-0.99l-0.24,-0.68l0.96,-1.66l2.98,-0.01l0.4,-0.37l-0.19,-1.28l-1.67,-1.4l0.51,-0.4l0.0,-1.05l3.85,0.02l-0.21,4.53l0.4,0.43l1.46,0.38l-1.48,0.98l-0.35,0.7l0.12,0.57l-2.2,1.96Z", "name": "Guatemala"}, "GR": {"path": "M487.07,174.59l-0.59,1.43l-0.37,0.21l-2.84,-0.35l-3.03,0.77l-0.18,0.68l1.28,1.23l-0.61,0.23l-1.14,0.0l-1.2,-1.39l-0.63,0.03l-0.53,1.01l0.56,1.76l1.03,1.19l-0.56,0.38l-0.05,0.62l2.52,2.12l0.02,0.87l-1.78,-0.59l-0.48,0.56l0.5,1.0l-1.07,0.2l-0.3,0.53l0.75,2.01l-0.98,0.02l-1.84,-1.12l-1.37,-4.2l-2.21,-2.95l-0.11,-0.56l1.04,-1.28l0.2,-0.95l0.85,-0.66l0.03,-0.46l1.32,-0.21l1.01,-0.64l1.22,0.05l0.65,-0.56l2.26,-0.0l1.82,-0.75l1.85,1.0l2.28,-0.28l0.35,-0.39l0.01,-0.77l0.34,0.22ZM480.49,192.16l0.58,0.4l-0.68,-0.12l0.11,-0.28ZM482.52,192.82l2.51,0.06l0.24,0.32l-1.99,0.13l-0.77,-0.51Z", "name": "Greece"}, "GQ": {"path": "M448.79,279.62l0.02,2.22l-4.09,0.0l0.69,-2.27l3.38,0.05Z", "name": "Eq. Guinea"}, "GY": {"path": "M277.42,270.07l-0.32,1.83l-1.32,0.57l-0.23,0.46l-0.28,2.0l1.11,1.82l0.83,0.19l0.32,1.25l1.13,1.62l-1.21,-0.19l-1.08,0.71l-1.77,0.5l-0.44,0.46l-0.86,-0.09l-1.32,-1.01l-0.77,-2.27l0.36,-1.9l0.68,-1.23l-0.57,-1.17l-0.74,-0.43l0.12,-1.16l-0.9,-0.69l-1.1,0.09l-1.31,-1.48l0.53,-0.72l-0.04,-0.84l1.99,-0.86l0.05,-0.59l-0.71,-0.78l0.14,-0.57l1.66,-1.24l1.36,0.77l1.41,1.49l0.06,1.15l0.37,0.38l0.8,0.05l2.06,1.86Z", "name": "Guyana"}, "GE": {"path": "M521.71,168.93l5.29,0.89l4.07,2.01l1.41,-0.44l2.07,0.56l0.68,1.1l1.07,0.55l-0.12,0.59l0.98,1.29l-1.01,-0.13l-1.81,-0.83l-0.94,0.47l-3.23,0.43l-2.29,-1.39l-2.33,0.05l0.21,-0.97l-0.76,-2.26l-1.45,-1.12l-1.43,-0.39l-0.41,-0.42Z", "name": "Georgia"}, "GB": {"path": "M412.61,118.72l-2.19,3.22l-0.0,0.45l5.13,-0.3l-0.53,2.37l-2.2,3.12l0.29,0.63l2.37,0.21l2.33,4.3l1.76,0.69l2.2,5.12l2.94,0.77l-0.23,1.62l-1.15,0.88l-0.1,0.52l0.82,1.42l-1.86,1.43l-3.3,-0.02l-4.12,0.87l-1.04,-0.58l-0.47,0.06l-1.51,1.41l-2.12,-0.34l-1.86,1.18l-0.6,-0.29l3.19,-3.0l2.16,-0.69l0.28,-0.41l-0.34,-0.36l-3.73,-0.53l-0.4,-0.76l2.2,-0.87l0.17,-0.61l-1.26,-1.67l0.36,-1.7l3.38,0.28l0.43,-0.33l0.37,-1.99l-1.79,-2.49l-3.11,-0.72l-0.38,-0.59l0.79,-1.35l-0.04,-0.46l-0.82,-0.97l-0.61,0.01l-0.68,0.84l-0.1,-2.34l-1.23,-1.88l0.85,-3.47l1.77,-2.68l1.85,0.26l2.17,-0.22ZM406.26,132.86l-1.01,1.77l-1.57,-0.59l-1.16,0.01l0.37,-1.54l-0.39,-1.39l1.45,-0.1l2.3,1.84Z", "name": "United Kingdom"}, "GA": {"path": "M453.24,279.52l-0.08,0.98l0.7,1.29l2.36,0.24l-0.98,2.63l1.18,1.79l0.25,1.78l-0.29,1.52l-0.6,0.93l-1.84,-0.09l-1.23,-1.11l-0.66,0.23l-0.15,0.84l-1.42,0.26l-1.02,0.7l-0.11,0.52l0.77,1.35l-1.34,0.97l-3.94,-4.3l-1.44,-2.45l0.06,-0.6l0.54,-0.81l1.05,-3.46l4.17,-0.07l0.4,-0.4l-0.02,-2.66l2.39,0.21l1.25,-0.27Z", "name": "Gabon"}, "GN": {"path": "M391.8,254.11l0.47,0.8l1.11,-0.32l0.98,0.7l1.07,0.2l2.26,-1.22l0.64,0.44l1.13,1.56l-0.48,1.4l0.8,0.3l-0.08,0.48l0.46,0.68l-0.35,1.36l1.05,2.61l-1.0,0.69l0.03,1.41l-0.72,-0.06l-1.08,1.0l-0.24,-0.27l0.07,-1.11l-1.05,-1.54l-1.79,0.21l-0.35,-2.01l-1.6,-2.18l-2.0,-0.0l-1.31,0.54l-1.95,2.18l-1.86,-2.19l-1.2,-0.78l-0.3,-1.11l-0.8,-0.85l0.65,-0.72l0.81,-0.03l1.64,-0.8l0.23,-1.87l2.67,0.64l0.89,-0.3l1.21,0.15Z", "name": "Guinea"}, "GM": {"path": "M379.31,251.39l0.1,-0.35l2.43,-0.07l0.74,-0.61l0.51,-0.03l0.77,0.49l-1.03,-0.3l-1.87,0.9l-1.65,-0.04ZM384.03,250.91l0.91,0.05l0.75,-0.24l-0.59,0.31l-1.08,-0.13Z", "name": "Gambia"}, "GL": {"path": "M353.02,1.2l14.69,4.67l-3.68,1.89l-22.97,0.86l-0.36,0.27l0.12,0.43l1.55,1.18l8.79,-0.66l7.48,2.07l4.86,-1.77l1.66,1.73l-2.53,3.19l-0.01,0.48l0.46,0.15l6.35,-2.2l12.06,-2.31l7.24,1.13l1.09,1.99l-9.79,4.01l-1.44,1.32l-7.87,0.98l-0.35,0.41l0.38,0.38l5.07,0.24l-2.53,3.58l-2.07,3.81l0.08,6.05l2.57,3.11l-3.22,0.2l-4.12,1.66l-0.05,0.72l4.45,2.65l0.51,3.75l-2.3,0.4l-0.25,0.64l2.79,3.69l-4.82,0.31l-0.36,0.29l0.16,0.44l2.62,1.8l-0.59,1.22l-3.3,0.7l-3.45,0.01l-0.29,0.68l3.03,3.12l0.02,1.34l-4.4,-1.73l-1.72,1.35l0.15,0.66l3.31,1.15l3.13,2.71l0.81,3.16l-3.85,0.75l-4.89,-4.26l-0.47,-0.03l-0.17,0.44l0.79,2.86l-2.71,2.21l-0.13,0.44l0.37,0.27l8.73,0.34l-12.32,6.64l-7.24,1.48l-2.94,0.08l-2.69,1.75l-3.43,4.41l-5.24,2.84l-1.73,0.18l-7.12,2.1l-2.15,2.52l-0.13,2.99l-1.19,2.45l-4.01,3.09l-0.14,0.44l0.97,2.9l-2.28,6.48l-3.1,0.2l-3.83,-3.07l-4.86,-0.02l-2.25,-1.93l-1.7,-3.79l-4.3,-4.84l-1.21,-2.49l-0.44,-3.8l-3.32,-3.63l0.84,-2.86l-1.56,-1.7l2.28,-4.6l3.83,-1.74l1.03,-1.96l0.52,-3.47l-0.59,-0.41l-4.17,2.21l-2.07,0.58l-2.72,-1.28l-0.15,-2.71l0.85,-2.09l2.01,-0.06l5.06,1.2l0.46,-0.23l-0.14,-0.49l-6.54,-4.47l-2.67,0.55l-1.58,-0.86l2.56,-4.01l-0.03,-0.48l-1.5,-1.74l-4.98,-8.5l-3.13,-1.96l0.03,-1.88l-0.24,-0.37l-6.85,-3.02l-5.36,-0.38l-12.7,0.58l-2.78,-1.57l-3.66,-2.77l5.73,-1.45l5.0,-0.28l0.38,-0.38l-0.35,-0.41l-10.67,-1.38l-5.3,-2.06l0.25,-1.54l18.41,-5.26l1.22,-2.27l-0.25,-0.55l-6.14,-1.86l1.68,-1.77l8.55,-4.03l3.59,-0.63l0.3,-0.54l-0.88,-2.27l5.47,-1.47l7.65,-0.95l7.55,-0.05l3.04,1.85l6.48,-3.27l5.81,2.22l3.56,0.5l5.16,1.94l0.5,-0.21l-0.17,-0.52l-5.71,-3.13l0.28,-2.13l8.12,-3.6l8.7,0.28l3.35,-2.34l8.71,-0.6l19.93,0.8Z", "name": "Greenland"}, "GH": {"path": "M420.53,257.51l-0.01,0.72l0.96,1.2l0.24,3.73l0.59,0.95l-0.51,2.1l0.19,1.41l1.02,2.21l-6.97,2.84l-1.8,-0.57l0.04,-0.89l-1.02,-2.04l0.61,-2.65l1.07,-2.32l-0.96,-6.47l5.01,0.07l0.94,-0.39l0.61,0.11Z", "name": "Ghana"}, "OM": {"path": "M568.09,230.93l-0.91,1.67l-1.22,0.04l-0.6,0.76l-0.41,1.51l0.27,1.58l-1.16,0.05l-1.56,0.97l-0.76,1.74l-1.62,0.05l-0.98,0.65l-0.17,1.15l-0.89,0.52l-1.49,-0.18l-2.4,0.94l-2.47,-5.4l7.35,-2.71l1.67,-5.23l-1.12,-2.09l0.05,-0.83l0.67,-1.0l0.07,-1.05l0.9,-0.42l-0.05,-2.07l0.7,-0.01l1.0,1.62l1.51,1.08l3.3,0.84l1.73,2.29l0.81,0.37l-1.23,2.35l-0.99,0.79Z", "name": "Oman"}, "TN": {"path": "M448.1,188.24l-1.0,1.27l-0.02,1.32l0.84,0.88l-0.28,2.09l-1.53,1.32l-0.12,0.42l0.48,1.54l1.42,0.32l0.53,1.11l0.9,0.52l-0.11,1.67l-3.54,2.64l-0.1,2.38l-0.58,0.3l-0.96,-4.45l-1.54,-1.25l-0.16,-0.78l-1.92,-1.56l-0.18,-1.76l1.51,-1.62l0.59,-2.34l-0.38,-2.78l0.42,-1.21l2.45,-1.05l1.29,0.26l-0.06,1.11l0.58,0.38l1.47,-0.73Z", "name": "Tunisia"}, "JO": {"path": "M518.64,201.38l-5.14,1.56l-0.19,0.65l2.16,2.39l-0.89,1.14l-1.71,0.34l-1.71,1.8l-2.34,-0.37l1.21,-4.32l0.56,-4.07l2.8,0.94l4.46,-2.71l0.79,2.66Z", "name": "Jordan"}, "HR": {"path": "M455.59,162.84l1.09,0.07l-0.82,0.94l-0.27,-1.01ZM456.96,162.92l0.62,-0.41l1.73,0.45l0.42,-0.4l-0.01,-0.59l0.86,-0.52l0.2,-1.05l1.63,-0.68l2.57,1.68l2.07,0.6l0.87,-0.31l1.05,1.57l-0.52,0.63l-1.05,-0.56l-1.68,0.04l-2.1,-0.5l-1.29,0.06l-0.57,0.49l-0.59,-0.47l-0.62,0.16l-0.46,1.7l1.79,2.42l2.79,2.75l-1.18,-0.87l-2.21,-0.87l-1.67,-1.78l0.13,-0.63l-1.05,-1.19l-0.32,-1.27l-1.42,-0.43Z", "name": "Croatia"}, "HT": {"path": "M237.05,238.38l-1.16,0.43l-0.91,-0.55l0.05,-0.2l2.02,0.31ZM237.53,238.43l1.06,0.12l-0.05,0.01l-1.01,-0.12ZM239.25,238.45l0.79,-0.51l0.06,-0.62l-1.02,-1.0l0.02,-0.82l-0.3,-0.4l-0.93,-0.32l3.16,0.45l0.02,1.84l-0.48,0.34l-0.08,0.58l0.54,0.72l-1.78,-0.26Z", "name": "Haiti"}, "HU": {"path": "M462.08,157.89l0.65,-1.59l-0.09,-0.44l0.64,-0.0l0.39,-0.34l0.1,-0.69l1.75,0.87l2.32,-0.37l0.43,-0.66l3.49,-0.78l0.69,-0.78l0.57,-0.14l2.57,0.93l0.67,-0.23l1.03,0.65l0.08,0.37l-1.42,0.71l-2.59,4.14l-1.8,0.53l-1.68,-0.1l-2.74,1.23l-1.85,-0.54l-2.54,-1.66l-0.66,-1.1Z", "name": "Hungary"}, "HN": {"path": "M199.6,249.52l-1.7,-1.21l0.06,-0.94l3.04,-2.14l2.37,0.28l1.27,-0.09l1.1,-0.52l1.3,0.28l1.14,-0.25l1.38,0.37l2.23,1.37l-2.36,0.93l-1.23,-0.39l-0.88,1.3l-1.28,0.99l-0.98,-0.22l-0.42,0.52l-0.96,0.05l-0.36,0.41l0.04,0.88l-0.52,0.6l-0.3,0.04l-0.3,-0.55l-0.66,-0.31l0.11,-0.67l-0.48,-0.65l-0.87,-0.26l-0.73,0.2Z", "name": "Honduras"}, "PR": {"path": "M256.17,238.73l-0.26,0.27l-2.83,0.05l-0.07,-0.55l1.95,-0.1l1.22,0.33Z", "name": "Puerto Rico"}, "PS": {"path": "M509.21,203.07l0.1,-0.06l-0.02,0.03l-0.09,0.03ZM509.36,202.91l-0.02,-0.63l-0.33,-0.16l0.31,-1.09l0.24,0.1l-0.2,1.78Z", "name": "Palestine"}, "PT": {"path": "M401.84,187.38l-0.64,0.47l-1.13,-0.35l-0.91,0.17l0.28,-1.78l-0.24,-1.78l-1.25,-0.56l-0.45,-0.84l0.17,-1.66l1.01,-1.18l0.69,-2.92l-0.04,-1.39l-0.59,-1.9l1.3,-0.85l0.84,1.35l3.1,-0.3l0.46,0.99l-1.05,0.94l-0.03,2.16l-0.41,0.57l-0.08,1.1l-0.79,0.18l-0.26,0.59l0.91,1.6l-0.63,1.75l0.76,1.09l-1.1,1.52l0.07,1.05Z", "name": "Portugal"}, "PY": {"path": "M274.9,336.12l0.74,1.52l-0.16,3.45l0.32,0.41l2.64,0.5l1.11,-0.47l1.4,0.59l0.36,0.6l0.53,3.42l1.27,0.4l0.98,-0.38l0.51,0.27l-0.0,1.18l-1.21,5.32l-2.09,1.9l-1.8,0.4l-4.71,-0.98l2.2,-3.63l-0.32,-1.5l-2.78,-1.28l-3.03,-1.94l-2.07,-0.44l-4.34,-4.06l0.91,-2.9l0.08,-1.42l1.07,-2.04l4.13,-0.72l2.18,0.03l2.05,1.17l0.03,0.59Z", "name": "Paraguay"}, "PA": {"path": "M213.8,263.68l0.26,-1.52l-0.36,-0.26l-0.01,-0.49l0.44,-0.1l0.93,1.4l1.26,0.03l0.77,0.49l1.38,-0.23l2.51,-1.11l0.86,-0.72l3.45,0.85l1.4,1.18l0.41,1.74l-0.21,0.34l-0.53,-0.12l-0.47,0.29l-0.16,0.6l-0.68,-1.28l0.45,-0.49l-0.19,-0.66l-0.47,-0.13l-0.54,-0.84l-1.5,-0.75l-1.1,0.16l-0.75,0.99l-1.62,0.84l-0.18,0.96l0.85,0.97l-0.58,0.45l-0.69,0.08l-0.34,-1.18l-1.27,0.03l-0.71,-1.05l-2.59,-0.46Z", "name": "Panama"}, "PG": {"path": "M808.58,298.86l2.54,2.56l-0.13,0.26l-0.33,0.12l-0.87,-0.78l-1.22,-2.16ZM801.41,293.04l0.5,0.29l0.26,0.27l-0.49,-0.35l-0.27,-0.21ZM803.17,294.58l0.59,0.5l0.08,1.06l-0.29,-0.91l-0.38,-0.65ZM796.68,298.41l0.52,0.75l1.43,-0.19l2.27,-1.81l-0.01,-1.43l1.12,0.16l-0.04,1.1l-0.7,1.28l-1.12,0.18l-0.62,0.79l-2.46,1.11l-1.17,-0.0l-3.08,-1.25l3.41,0.0l0.45,-0.68ZM789.15,303.55l2.31,1.8l1.59,2.61l1.34,0.13l-0.06,0.66l0.31,0.43l1.06,0.24l0.06,0.65l2.25,1.05l-1.22,0.13l-0.72,-0.63l-4.56,-0.65l-3.22,-2.87l-1.49,-2.34l-3.27,-1.1l-2.38,0.72l-1.59,0.86l-0.2,0.42l0.27,1.55l-1.55,0.68l-1.36,-0.4l-2.21,-0.09l-0.08,-15.41l8.39,2.93l2.95,2.4l0.6,1.64l4.02,1.49l0.31,0.68l-1.76,0.21l-0.33,0.52l0.55,1.68Z", "name": "Papua New Guinea"}, "PE": {"path": "M244.96,295.21l-1.26,-0.07l-0.57,0.42l-1.93,0.45l-2.98,1.75l-0.36,1.36l-0.58,0.8l0.12,1.37l-1.24,0.59l-0.22,1.22l-0.62,0.84l1.04,2.27l1.28,1.44l-0.41,0.84l0.32,0.57l1.48,0.13l1.16,1.37l2.21,0.07l1.63,-1.08l-0.13,3.02l0.3,0.4l1.14,0.29l1.31,-0.34l1.9,3.59l-0.48,0.85l-0.17,3.85l-0.94,1.59l0.35,0.75l-0.47,1.07l0.98,1.97l-2.1,3.82l-0.98,0.5l-2.17,-1.28l-0.39,-1.16l-4.95,-2.58l-4.46,-2.79l-1.84,-1.51l-0.91,-1.84l0.3,-0.96l-2.11,-3.33l-4.82,-9.68l-1.04,-1.2l-0.87,-1.94l-3.4,-2.48l0.58,-1.18l-1.13,-2.23l0.66,-1.49l1.45,-1.15l-0.6,0.98l0.07,0.92l0.47,0.36l1.74,0.03l0.97,1.17l0.54,0.07l1.42,-1.03l0.6,-1.84l1.42,-2.02l3.04,-1.04l2.73,-2.62l0.86,-1.74l-0.1,-1.87l1.44,1.02l0.9,1.25l1.06,0.59l1.7,2.73l1.86,0.31l1.45,-0.61l0.96,0.39l1.36,-0.19l1.45,0.89l-1.4,2.21l0.31,0.61l0.59,0.05l0.47,0.5Z", "name": "Peru"}, "PK": {"path": "M615.09,192.34l-1.83,1.81l-2.6,0.39l-3.73,-0.68l-1.58,1.33l-0.09,0.42l1.77,4.39l1.7,1.23l-1.69,1.27l-0.12,2.14l-2.33,2.64l-1.6,2.8l-2.46,2.67l-3.03,-0.07l-2.76,2.83l0.05,0.6l1.5,1.11l0.26,1.9l1.44,1.5l0.37,1.68l-5.01,-0.01l-1.78,1.7l-1.42,-0.52l-0.76,-1.87l-2.27,-2.15l-11.61,0.86l0.71,-2.34l3.43,-1.32l0.25,-0.44l-0.21,-1.24l-1.2,-0.65l-0.28,-2.46l-2.29,-1.14l-1.28,-1.94l2.82,0.94l2.62,-0.38l1.42,0.33l0.76,-0.56l1.71,0.19l3.25,-1.14l0.27,-0.36l0.08,-2.19l1.18,-1.32l1.68,0.0l0.58,-0.82l1.6,-0.3l1.19,0.16l0.98,-0.78l0.02,-1.88l0.93,-1.47l1.48,-0.66l0.19,-0.55l-0.66,-1.25l2.04,-0.11l0.69,-1.01l-0.02,-1.16l1.11,-1.06l-0.17,-1.78l-0.49,-1.03l1.15,-0.98l5.42,-0.91l2.6,-0.82l1.6,1.16l0.97,2.34l3.45,0.97Z", "name": "Pakistan"}, "PH": {"path": "M737.01,263.84l0.39,2.97l-0.44,1.18l-0.55,-1.53l-0.67,-0.14l-1.17,1.28l0.65,2.09l-0.42,0.69l-2.48,-1.23l-0.57,-1.49l0.65,-1.03l-0.1,-0.54l-1.59,-1.19l-0.56,0.08l-0.65,0.87l-1.23,0.0l-1.58,0.97l0.83,-1.8l2.56,-1.42l0.65,0.84l0.45,0.13l1.9,-0.69l0.56,-1.11l1.5,-0.06l0.38,-0.43l-0.09,-1.19l1.21,0.71l0.36,2.02ZM733.59,256.58l0.05,0.75l0.08,0.26l-0.8,-0.42l-0.18,-0.71l0.85,0.12ZM734.08,256.1l-0.12,-1.12l-1.0,-1.27l1.36,0.03l0.53,0.73l0.51,2.04l-1.27,-0.4ZM733.76,257.68l0.38,0.98l-0.32,0.15l-0.07,-1.13ZM724.65,238.43l1.46,0.7l0.72,-0.31l-0.32,1.17l0.79,1.71l-0.57,1.84l-1.53,1.04l-0.39,2.25l0.56,2.04l1.63,0.57l1.16,-0.27l2.71,1.23l-0.19,1.08l0.76,0.84l-0.08,0.36l-1.4,-0.9l-0.88,-1.27l-0.66,0.0l-0.38,0.55l-1.6,-1.31l-2.15,0.36l-0.87,-0.39l0.07,-0.61l0.66,-0.55l-0.01,-0.62l-0.75,-0.59l-0.72,0.44l-0.74,-0.87l-0.39,-2.49l0.32,0.27l0.66,-0.28l0.26,-3.97l0.7,-2.02l1.14,0.0ZM731.03,258.87l-0.88,0.85l-1.19,1.94l-1.05,-1.19l0.93,-1.1l0.32,-1.47l0.52,-0.06l-0.27,1.15l0.22,0.45l0.49,-0.12l1.0,-1.32l-0.08,0.85ZM726.83,255.78l0.83,0.38l1.17,-0.0l-0.02,0.48l-2.0,1.4l0.03,-2.26ZM724.81,252.09l-0.38,1.27l-1.42,-1.95l1.2,0.05l0.6,0.63ZM716.55,261.82l1.1,-0.95l0.03,-0.03l-0.28,0.36l-0.85,0.61ZM719.22,259.06l0.04,-0.06l0.8,-1.53l0.16,0.75l-1.0,0.84Z", "name": "Philippines"}, "PL": {"path": "M468.44,149.42l-1.11,-1.54l-1.86,-0.33l-0.48,-1.05l-1.72,-0.37l-0.65,0.69l-0.72,-0.36l0.11,-0.61l-0.33,-0.46l-1.75,-0.27l-1.04,-0.93l-0.94,-1.94l0.16,-1.22l-0.62,-1.8l-0.78,-1.07l0.57,-1.04l-0.48,-1.43l1.41,-0.83l6.91,-2.71l2.14,0.5l0.52,0.91l5.51,0.44l4.55,-0.05l1.07,0.31l0.48,0.84l0.15,1.58l0.65,1.2l-0.01,0.99l-1.27,0.58l-0.19,0.54l0.73,1.48l0.08,1.55l1.2,2.76l-0.17,0.58l-1.23,0.44l-2.27,2.72l0.18,0.95l-1.97,-1.03l-1.98,0.4l-1.36,-0.28l-1.24,0.58l-1.07,-0.97l-1.16,0.24Z", "name": "Poland"}, "ZM": {"path": "M481.47,313.3l0.39,0.31l2.52,0.14l0.99,1.17l2.01,0.35l1.4,-0.64l0.69,1.17l1.78,0.33l1.84,2.35l2.23,0.18l0.4,-0.43l-0.21,-2.74l-0.62,-0.3l-0.48,0.32l-1.98,-1.17l0.72,-5.29l-0.51,-1.18l0.57,-1.3l3.68,-0.62l0.26,0.63l1.21,0.63l0.9,-0.22l2.16,0.67l1.33,0.71l1.07,1.02l0.56,1.87l-0.88,2.7l0.43,2.09l-0.73,0.87l-0.76,2.37l0.59,0.68l-6.6,1.83l-0.29,0.44l0.19,1.45l-1.68,0.35l-1.43,1.02l-0.38,0.87l-0.87,0.26l-3.48,3.69l-4.16,-0.53l-1.52,-1.0l-1.77,-0.13l-1.83,0.52l-3.04,-3.4l0.11,-7.59l4.82,0.03l0.39,-0.49l-0.18,-0.76l0.33,-0.83l-0.4,-1.36l0.24,-1.05Z", "name": "Zambia"}, "EH": {"path": "M384.42,230.28l0.25,-0.79l1.06,-1.29l0.8,-3.51l3.38,-2.78l0.7,-1.81l0.06,4.84l-1.98,0.2l-0.94,1.59l0.39,3.56l-3.7,-0.01ZM392.01,218.1l0.7,-1.8l1.77,-0.24l2.09,0.34l0.95,-0.62l1.28,-0.07l-0.0,2.51l-6.79,-0.12Z", "name": "W. Sahara"}, "EE": {"path": "M485.71,115.04l2.64,0.6l2.56,0.11l-1.6,1.91l0.61,3.54l-0.81,0.87l-1.78,-0.01l-3.22,-1.76l-1.8,0.45l0.21,-1.53l-0.58,-0.41l-0.69,0.34l-1.26,-1.03l-0.17,-1.63l2.83,-0.92l3.05,-0.52Z", "name": "Estonia"}, "EG": {"path": "M492.06,205.03l1.46,0.42l2.95,-1.64l2.04,-0.21l1.53,0.3l0.59,1.19l0.69,0.04l0.41,-0.64l1.81,0.58l1.95,0.16l1.04,-0.51l1.42,4.08l-2.03,4.54l-1.66,-1.77l-1.76,-3.85l-0.64,-0.12l-0.36,0.67l1.04,2.88l3.44,6.95l1.78,3.04l2.03,2.65l-0.36,0.53l0.23,2.01l2.7,2.19l-28.41,0.0l0.0,-18.96l-0.73,-2.2l0.59,-1.56l-0.32,-1.26l0.68,-0.99l3.06,-0.04l4.82,1.52Z", "name": "Egypt"}, "ZA": {"path": "M467.14,373.21l-0.13,-1.96l-0.68,-1.56l0.7,-0.68l-0.13,-2.33l-4.56,-8.19l0.77,-0.86l0.6,0.45l0.69,1.31l2.83,0.72l1.5,-0.26l2.24,-1.39l0.19,-9.55l1.35,2.3l-0.21,1.5l0.61,1.2l0.4,0.19l1.79,-0.27l2.6,-2.07l0.69,-1.32l0.96,-0.48l2.19,1.04l2.04,0.13l1.77,-0.65l0.85,-2.12l1.38,-0.33l1.59,-2.76l2.15,-1.89l3.41,-1.87l2.0,0.45l1.02,-0.28l0.99,0.2l1.75,5.29l-0.38,3.25l-0.81,-0.23l-1.0,0.46l-0.87,1.68l-0.05,1.16l1.97,1.84l1.47,-0.29l0.69,-1.18l1.09,0.01l-0.76,3.69l-0.58,1.09l-2.2,1.79l-3.17,4.76l-2.8,2.83l-3.57,2.88l-2.53,1.05l-1.22,0.14l-0.51,0.7l-1.18,-0.32l-1.39,0.5l-2.59,-0.52l-1.61,0.33l-1.18,-0.11l-2.55,1.1l-2.1,0.44l-1.6,1.07l-0.85,0.05l-0.93,-0.89l-0.93,-0.15l-0.97,-1.13l-0.25,0.05ZM491.45,364.19l0.62,-0.93l1.48,-0.59l1.18,-2.19l-0.07,-0.49l-1.99,-1.69l-1.66,0.56l-1.43,1.14l-1.34,1.73l0.02,0.51l1.88,2.11l1.31,-0.16Z", "name": "South Africa"}, "EC": {"path": "M231.86,285.53l0.29,1.59l-0.69,1.45l-2.61,2.51l-3.13,1.11l-1.53,2.18l-0.49,1.68l-1.0,0.73l-1.02,-1.11l-1.78,-0.16l0.67,-1.15l-0.24,-0.86l1.25,-2.13l-0.54,-1.09l-0.67,-0.08l-0.72,0.87l-0.87,-0.64l0.35,-0.69l-0.36,-1.96l0.81,-0.51l0.45,-1.51l0.92,-1.57l-0.07,-0.97l2.65,-1.33l2.75,1.35l0.77,1.05l2.12,0.35l0.76,-0.32l1.96,1.21Z", "name": "Ecuador"}, "IT": {"path": "M451.59,158.63l3.48,0.94l-0.21,1.17l0.3,0.83l-1.49,-0.24l-2.04,1.1l-0.21,0.39l0.13,1.45l-0.25,1.12l0.82,1.57l2.39,1.63l1.31,2.54l2.79,2.43l2.05,0.08l0.21,0.23l-0.39,0.33l0.09,0.67l4.05,1.97l2.17,1.76l-0.16,0.36l-1.17,-1.08l-2.18,-0.49l-0.44,0.2l-1.05,1.91l0.14,0.54l1.57,0.95l-0.19,0.98l-1.06,0.33l-1.25,2.34l-0.37,0.08l0.0,-0.33l1.0,-2.45l-1.73,-3.17l-1.12,-0.51l-0.88,-1.33l-1.51,-0.51l-1.27,-1.25l-1.75,-0.18l-4.12,-3.21l-1.62,-1.65l-1.03,-3.19l-3.53,-1.36l-1.3,0.51l-1.69,1.41l0.16,-0.72l-0.28,-0.47l-1.14,-0.33l-0.53,-1.96l0.72,-0.78l0.04,-0.48l-0.65,-1.17l0.8,0.39l1.4,-0.23l1.11,-0.84l0.52,0.35l1.19,-0.1l0.75,-1.2l1.53,0.33l1.36,-0.56l0.35,-1.14l1.08,0.32l0.68,-0.64l1.98,-0.44l0.42,0.82ZM459.19,184.75l-0.65,1.65l0.32,1.05l-0.31,0.89l-1.5,-0.85l-4.5,-1.67l0.19,-0.82l2.67,0.23l3.78,-0.48ZM443.93,176.05l1.18,1.66l-0.3,3.32l-1.06,-0.01l-0.77,0.73l-0.53,-0.44l-0.1,-3.37l-0.39,-1.22l1.04,0.01l0.92,-0.68Z", "name": "Italy"}, "VN": {"path": "M690.56,230.25l-2.7,1.82l-2.09,2.46l-0.63,1.95l4.31,6.45l2.32,1.65l1.43,1.94l1.11,4.59l-0.32,4.24l-1.93,1.54l-2.84,1.61l-2.11,2.15l-2.73,2.06l-0.59,-1.05l0.63,-1.53l-0.13,-0.47l-1.34,-1.04l1.51,-0.71l2.55,-0.18l0.3,-0.63l-0.82,-1.14l4.0,-2.07l0.31,-3.05l-0.57,-1.77l0.42,-2.66l-0.73,-1.97l-1.86,-1.76l-3.63,-5.29l-2.72,-1.46l0.36,-0.47l1.5,-0.64l0.21,-0.52l-0.97,-2.27l-0.37,-0.24l-2.83,-0.02l-2.24,-3.9l0.83,-0.4l4.39,-0.29l2.06,-1.31l1.15,0.89l1.88,0.4l-0.17,1.51l1.35,1.16l1.67,0.45Z", "name": "Vietnam"}, "SB": {"path": "M826.69,311.6l-0.61,0.09l-0.2,-0.33l0.37,0.15l0.44,0.09ZM824.18,307.38l-0.26,-0.3l-0.31,-0.91l0.03,0.0l0.54,1.21ZM823.04,309.33l-1.66,-0.22l-0.2,-0.52l1.16,0.28l0.69,0.46ZM819.28,304.68l1.14,0.65l0.02,0.03l-0.81,-0.44l-0.35,-0.23Z", "name": "Solomon Is."}, "ET": {"path": "M516.04,247.79l1.1,0.84l1.63,-0.45l0.68,0.47l1.63,0.03l2.01,0.94l1.73,1.66l1.64,2.07l-1.52,2.04l0.16,1.72l0.39,0.38l2.05,0.0l-0.36,1.03l2.86,3.58l8.32,3.08l1.31,0.02l-6.32,6.75l-3.1,0.11l-2.36,1.77l-1.47,0.04l-0.86,0.79l-1.38,-0.0l-1.32,-0.81l-2.29,1.05l-0.76,0.98l-3.29,-0.41l-3.07,-2.07l-1.8,-0.07l-0.62,-0.6l0.0,-1.24l-0.28,-0.38l-1.15,-0.37l-1.4,-2.59l-1.19,-0.68l-0.47,-1.0l-1.27,-1.23l-1.16,-0.22l0.43,-0.72l1.45,-0.28l0.41,-0.95l-0.03,-2.21l0.68,-2.44l1.05,-0.63l1.43,-3.06l1.57,-1.37l1.02,-2.51l0.35,-1.88l2.52,0.46l0.44,-0.24l0.58,-1.43Z", "name": "Ethiopia"}, "SO": {"path": "M525.13,288.48l-1.13,-1.57l-0.03,-8.86l2.66,-3.38l1.67,-0.13l2.13,-1.69l3.41,-0.23l7.08,-7.55l2.91,-3.69l0.08,-4.82l2.98,-0.67l1.24,-0.86l0.45,-0.0l-0.2,3.0l-1.21,3.62l-2.73,5.97l-2.13,3.65l-5.03,6.16l-8.56,6.4l-2.78,3.08l-0.8,1.56Z", "name": "Somalia"}, "ZW": {"path": "M498.91,341.09l-1.11,-0.22l-0.92,0.28l-2.09,-0.44l-1.5,-1.11l-1.89,-0.43l-0.62,-1.4l-0.01,-0.84l-0.3,-0.38l-0.97,-0.25l-2.71,-2.74l-1.92,-3.32l3.83,0.45l3.73,-3.82l1.08,-0.44l0.26,-0.77l1.25,-0.9l1.41,-0.26l0.5,0.89l1.99,-0.05l1.72,1.17l1.11,0.17l1.05,0.66l0.01,2.99l-0.59,3.76l0.38,0.86l-0.23,1.23l-0.39,0.35l-0.63,1.81l-2.43,2.75Z", "name": "Zimbabwe"}, "ES": {"path": "M416.0,169.21l1.07,1.17l4.61,1.38l1.06,-0.57l2.6,1.26l2.71,-0.3l0.09,1.12l-2.14,1.8l-3.11,0.61l-0.31,0.31l-0.2,0.89l-1.54,1.69l-0.97,2.4l0.84,1.74l-1.32,1.27l-0.48,1.68l-1.88,0.65l-1.66,2.07l-5.36,-0.01l-1.79,1.08l-0.89,0.98l-0.88,-0.17l-0.79,-0.82l-0.68,-1.59l-2.37,-0.63l-0.11,-0.5l1.21,-1.82l-0.77,-1.13l0.61,-1.68l-0.76,-1.62l0.87,-0.49l0.09,-1.25l0.42,-0.6l0.03,-2.11l0.99,-0.69l0.13,-0.5l-1.03,-1.73l-1.46,-0.11l-0.61,0.38l-1.06,0.0l-0.52,-1.23l-0.53,-0.21l-1.32,0.67l-0.01,-1.49l-0.75,-0.96l3.03,-1.88l2.99,0.53l3.32,-0.02l2.63,0.51l6.01,-0.06Z", "name": "Spain"}, "ER": {"path": "M520.38,246.23l3.42,2.43l3.5,3.77l0.84,0.54l-0.95,-0.01l-3.51,-3.89l-2.33,-1.15l-1.73,-0.07l-0.91,-0.51l-1.26,0.51l-1.34,-1.02l-0.61,0.17l-0.66,1.61l-2.35,-0.43l-0.17,-0.67l1.29,-5.29l0.61,-0.61l1.95,-0.53l0.87,-1.01l1.17,2.41l0.68,2.33l1.49,1.43Z", "name": "Eritrea"}, "ME": {"path": "M468.91,172.53l-1.22,-1.02l0.47,-1.81l0.89,-0.72l2.26,1.51l-0.5,0.57l-0.75,-0.27l-1.14,1.73Z", "name": "Montenegro"}, "MD": {"path": "M488.41,153.73l1.4,-0.27l1.72,0.93l1.07,0.15l0.85,0.65l-0.14,0.84l0.96,0.85l1.12,2.47l-1.15,-0.07l-0.66,-0.41l-0.52,0.25l-0.09,0.86l-1.08,1.89l-0.27,-0.86l0.25,-1.34l-0.16,-1.6l-3.29,-4.34Z", "name": "Moldova"}, "MG": {"path": "M545.91,319.14l0.4,3.03l0.62,1.21l-0.21,1.02l-0.57,-0.8l-0.69,-0.01l-0.47,0.76l0.41,2.12l-0.18,0.87l-0.73,0.78l-0.15,2.14l-4.71,15.2l-1.06,2.88l-3.92,1.64l-3.12,-1.49l-0.6,-1.21l-0.19,-2.4l-0.86,-2.05l-0.21,-1.77l0.38,-1.62l1.21,-0.75l0.01,-0.76l1.19,-2.04l0.23,-1.66l-1.06,-2.99l-0.19,-2.21l0.81,-1.33l0.32,-1.46l4.63,-1.22l3.44,-3.0l0.85,-1.4l-0.08,-0.7l0.78,-0.04l1.38,-1.77l0.13,-1.64l0.45,-0.61l1.16,1.69l0.59,1.6Z", "name": "Madagascar"}, "MA": {"path": "M378.78,230.02l0.06,-0.59l0.92,-0.73l0.82,-1.37l-0.09,-1.04l0.79,-1.7l1.31,-1.58l0.96,-0.59l0.66,-1.55l0.09,-1.47l0.81,-1.48l1.72,-1.07l1.55,-2.69l1.16,-0.96l2.44,-0.39l1.94,-1.82l1.31,-0.78l2.09,-2.28l-0.51,-3.65l1.24,-3.7l1.5,-1.75l4.46,-2.57l2.37,-4.47l1.44,0.01l1.68,1.21l2.32,-0.19l3.47,0.65l0.8,1.54l0.16,1.71l0.86,2.96l0.56,0.59l-0.26,0.61l-3.05,0.44l-1.26,1.05l-1.33,0.22l-0.33,0.37l-0.09,1.78l-2.68,1.0l-1.07,1.42l-4.47,1.13l-4.04,2.01l-0.54,4.64l-1.15,0.06l-0.92,0.61l-1.96,-0.35l-2.42,0.54l-0.74,1.9l-0.86,0.4l-1.14,3.26l-3.53,3.01l-0.8,3.55l-0.96,1.1l-0.29,0.82l-4.95,0.18Z", "name": "Morocco"}, "UZ": {"path": "M598.64,172.75l-1.63,1.52l0.06,0.64l1.85,1.12l1.97,-0.64l2.21,1.17l-2.52,1.68l-2.59,-0.22l-0.18,-0.41l0.46,-1.23l-0.45,-0.53l-3.35,0.69l-2.1,3.51l-1.87,-0.12l-1.03,1.51l0.22,0.55l1.64,0.62l0.46,1.83l-1.19,2.49l-2.66,-0.53l0.05,-1.36l-0.26,-0.39l-3.3,-1.23l-2.56,-1.4l-4.4,-3.34l-1.34,-3.14l-1.08,-0.6l-2.58,0.13l-0.69,-0.44l-0.47,-2.52l-3.37,-1.6l-0.43,0.05l-2.07,1.72l-2.1,1.01l-0.21,0.47l0.28,1.01l-1.91,0.03l-0.09,-10.5l5.99,-1.7l6.19,3.54l2.71,2.84l7.05,-0.67l2.71,2.01l-0.17,2.81l0.39,0.42l0.9,0.02l0.44,2.14l0.38,0.32l2.94,0.09l0.95,1.42l1.28,-0.24l1.05,-2.04l4.43,-2.5Z", "name": "Uzbekistan"}, "MM": {"path": "M673.9,230.21l-1.97,1.57l-0.57,0.96l-1.4,0.6l-1.36,1.05l-1.99,0.36l-1.08,2.66l-0.91,0.4l-0.19,0.55l1.21,2.27l2.52,3.43l-0.79,1.91l-0.74,0.41l-0.17,0.52l0.65,1.37l1.61,1.95l0.25,2.58l0.9,2.13l-1.92,3.57l0.68,-2.25l-0.81,-1.74l0.19,-2.65l-1.05,-1.53l-1.24,-6.17l-1.12,-2.26l-0.6,-0.13l-4.34,3.02l-2.39,-0.65l0.77,-2.84l-0.52,-2.61l-1.91,-2.96l0.25,-0.75l-0.29,-0.51l-1.33,-0.3l-1.61,-1.93l-0.1,-1.3l0.82,-0.24l0.04,-1.64l1.02,-0.52l0.21,-0.45l-0.23,-0.95l0.54,-0.96l0.08,-2.22l1.46,0.45l0.47,-0.2l1.12,-2.19l0.16,-1.35l1.33,-2.16l-0.0,-1.52l2.89,-1.66l1.63,0.44l0.5,-0.44l-0.17,-1.4l0.64,-0.36l0.08,-1.04l0.77,-0.11l0.71,1.35l1.06,0.69l-0.03,3.86l-2.38,2.37l-0.3,3.15l0.46,0.43l2.28,-0.38l0.51,2.08l1.47,0.67l-0.6,1.8l0.19,0.48l2.97,1.48l1.64,-0.55l0.02,0.32Z", "name": "Myanmar"}, "ML": {"path": "M392.61,254.08l-0.19,-2.37l-0.99,-0.87l-0.44,-1.3l-0.09,-1.28l0.81,-0.58l0.35,-1.24l2.37,0.65l1.31,-0.47l0.86,0.15l0.66,-0.56l9.83,-0.04l0.38,-0.28l0.56,-1.8l-0.44,-0.65l-2.35,-21.95l3.27,-0.04l16.7,11.38l0.74,1.31l2.5,1.09l0.02,1.38l0.44,0.39l2.34,-0.21l0.01,5.38l-1.28,1.61l-0.26,1.49l-5.31,0.57l-1.07,0.92l-2.9,0.1l-0.86,-0.48l-1.38,0.36l-2.4,1.08l-0.6,0.87l-1.85,1.09l-0.43,0.7l-0.79,0.39l-1.44,-0.21l-0.81,0.84l-0.34,1.64l-1.91,2.02l-0.06,1.03l-0.67,1.22l0.13,1.16l-0.97,0.39l-0.23,-0.64l-0.52,-0.24l-1.35,0.4l-0.34,0.55l-2.69,-0.28l-0.37,-0.35l-0.02,-0.9l-0.65,-0.35l0.45,-0.64l-0.03,-0.53l-2.12,-2.44l-0.76,-0.01l-2.0,1.16l-0.78,-0.15l-0.8,-0.67l-1.21,0.23Z", "name": "Mali"}, "MN": {"path": "M676.61,146.48l3.81,1.68l5.67,-1.0l2.37,0.41l2.34,1.5l1.79,1.75l2.29,-0.03l3.12,0.52l2.47,-0.81l3.41,-0.59l3.53,-2.21l1.25,0.29l1.53,1.13l2.27,-0.21l-2.66,5.01l0.64,1.68l0.47,0.21l1.32,-0.38l2.38,0.48l2.02,-1.11l1.76,0.89l2.06,2.02l-0.13,0.53l-1.72,-0.29l-3.77,0.46l-1.88,0.99l-1.76,1.99l-3.71,1.17l-2.45,1.6l-3.83,-0.87l-0.41,0.17l-1.31,1.99l1.04,2.24l-1.52,0.9l-1.74,1.57l-2.79,1.02l-3.78,0.13l-4.05,1.05l-2.77,1.52l-1.16,-0.85l-2.94,0.0l-3.62,-1.79l-2.58,-0.49l-3.4,0.41l-5.12,-0.67l-2.63,0.06l-1.31,-1.6l-1.4,-3.0l-1.48,-0.33l-3.13,-1.94l-6.16,-0.93l-0.71,-1.06l0.86,-3.82l-1.93,-2.71l-3.5,-1.18l-1.95,-1.58l-0.5,-1.72l2.34,-0.52l4.75,-2.8l3.62,-1.47l2.18,0.97l2.46,0.05l1.81,1.53l2.46,0.12l3.95,0.71l2.43,-2.28l0.08,-0.48l-0.9,-1.72l2.24,-2.98l2.62,1.27l4.94,1.17l0.43,2.24Z", "name": "Mongolia"}, "MK": {"path": "M472.8,173.98l0.49,-0.71l3.57,-0.71l1.0,0.77l0.13,1.45l-0.65,0.53l-1.15,-0.05l-1.12,0.67l-1.39,0.22l-0.79,-0.55l-0.29,-1.03l0.19,-0.6Z", "name": "Macedonia"}, "MW": {"path": "M505.5,309.31l0.85,1.95l0.15,2.86l-0.69,1.65l0.71,1.8l0.06,1.28l0.49,0.64l0.07,1.06l0.4,0.55l0.8,-0.23l0.55,0.61l0.69,-0.21l0.34,0.6l0.19,2.94l-1.04,0.62l-0.54,1.25l-1.11,-1.08l-0.16,-1.56l0.51,-1.31l-0.32,-1.3l-0.99,-0.65l-0.82,0.12l-2.36,-1.64l0.63,-1.96l0.82,-1.18l-0.46,-2.01l0.9,-2.86l-0.94,-2.51l0.96,0.18l0.29,0.4Z", "name": "Malawi"}, "MR": {"path": "M407.36,220.66l-2.58,0.03l-0.39,0.44l2.42,22.56l0.36,0.43l-0.39,1.24l-9.75,0.04l-0.56,0.53l-0.91,-0.11l-1.27,0.45l-1.61,-0.66l-0.97,0.03l-0.36,0.29l-0.38,1.35l-0.42,0.23l-2.93,-3.4l-2.96,-1.52l-1.62,-0.03l-1.27,0.54l-1.12,-0.2l-0.65,0.4l-0.08,-0.49l0.68,-1.29l0.31,-2.43l-0.57,-3.91l0.23,-1.21l-0.69,-1.5l-1.15,-1.02l0.25,-0.39l9.58,0.02l0.4,-0.45l-0.46,-3.68l0.47,-1.04l2.12,-0.21l0.36,-0.4l-0.08,-6.4l7.81,0.13l0.41,-0.4l0.01,-3.31l7.76,5.35Z", "name": "Mauritania"}, "UG": {"path": "M498.55,276.32l0.7,-0.46l1.65,0.5l1.96,-0.57l1.7,0.01l1.45,-0.98l0.91,1.33l1.33,3.95l-2.57,4.03l-1.46,-0.4l-2.54,0.91l-1.37,1.61l-0.01,0.81l-2.42,-0.01l-2.26,1.01l-0.17,-1.59l0.58,-1.04l0.14,-1.94l1.37,-2.28l1.78,-1.58l-0.17,-0.65l-0.72,-0.24l0.13,-2.43Z", "name": "Uganda"}, "MY": {"path": "M717.47,273.46l-1.39,0.65l-2.12,-0.41l-2.88,-0.0l-0.38,0.28l-0.84,2.75l-0.99,0.96l-1.21,3.29l-1.73,0.45l-2.45,-0.68l-1.39,0.31l-1.33,1.15l-1.59,-0.14l-1.41,0.44l-1.44,-1.19l-0.18,-0.73l1.34,0.53l1.93,-0.47l0.75,-2.22l4.02,-1.03l2.75,-3.21l0.82,0.94l0.64,-0.05l0.4,-0.65l0.96,0.06l0.42,-0.36l0.24,-2.68l1.81,-1.64l1.21,-1.86l0.63,-0.01l1.07,1.05l0.34,1.28l3.44,1.35l-0.06,0.35l-1.37,0.1l-0.35,0.54l0.32,0.88ZM673.68,269.59l0.17,1.09l0.47,0.33l1.65,-0.3l0.87,-0.94l1.61,1.52l0.98,1.56l-0.12,2.81l0.41,2.29l0.95,0.9l0.88,2.44l-1.27,0.12l-5.1,-3.67l-0.34,-1.29l-1.37,-1.59l-0.33,-1.97l-0.88,-1.4l0.25,-1.68l-0.46,-1.05l1.63,0.84Z", "name": "Malaysia"}, "MX": {"path": "M133.12,200.41l0.2,0.47l9.63,3.33l6.96,-0.02l0.4,-0.4l0.0,-0.74l3.77,0.0l3.55,2.93l1.39,2.83l1.52,1.04l2.08,0.82l0.47,-0.14l1.46,-2.0l1.73,-0.04l1.59,0.98l2.05,3.35l1.47,1.56l1.26,3.14l2.18,1.02l2.26,0.58l-1.18,3.72l-0.42,5.04l1.79,4.89l1.62,1.89l0.61,1.52l1.2,1.42l2.55,0.66l1.37,1.1l7.54,-1.89l1.86,-1.3l1.14,-4.3l4.1,-1.21l3.57,-0.11l0.32,0.3l-0.06,0.94l-1.26,1.45l-0.67,1.71l0.38,0.7l-0.72,2.27l-0.49,-0.3l-1.0,0.08l-1.0,1.39l-0.47,-0.11l-0.53,0.47l-4.26,-0.02l-0.4,0.4l-0.0,1.06l-1.1,0.26l0.1,0.44l1.82,1.44l0.56,0.91l-3.19,0.21l-1.21,2.09l0.24,0.72l-0.2,0.44l-2.24,-2.18l-1.45,-0.93l-2.22,-0.69l-1.52,0.22l-3.07,1.16l-10.55,-3.85l-2.86,-1.96l-3.78,-0.92l-1.08,-1.19l-2.62,-1.43l-1.18,-1.54l-0.38,-0.81l0.66,-0.63l-0.18,-0.53l0.52,-0.76l0.01,-0.91l-2.0,-3.82l-2.21,-2.63l-2.53,-2.09l-1.19,-1.62l-2.2,-1.17l-0.3,-0.43l0.34,-1.48l-0.21,-0.45l-1.23,-0.6l-1.36,-1.2l-0.59,-1.78l-1.54,-0.47l-2.44,-2.55l-0.16,-0.9l-1.33,-2.03l-0.84,-1.99l-0.16,-1.33l-1.81,-1.1l-0.97,0.05l-1.31,-0.7l-0.57,0.22l-0.4,1.12l0.72,3.77l3.51,3.89l0.28,0.78l0.53,0.26l0.41,1.43l1.33,1.73l1.58,1.41l0.8,2.39l1.43,2.41l0.13,1.32l0.37,0.36l1.04,0.08l1.67,2.28l-0.85,0.76l-0.66,-1.51l-1.68,-1.54l-2.91,-1.87l0.06,-1.82l-0.54,-1.68l-2.91,-2.03l-0.55,0.09l-1.95,-1.1l-0.88,-0.94l0.68,-0.08l0.93,-1.01l0.08,-1.78l-1.93,-1.94l-1.46,-0.77l-3.75,-7.56l4.88,-0.42Z", "name": "Mexico"}, "IL": {"path": "M507.76,203.05l0.4,-0.78l0.18,0.4l-0.33,1.03l0.52,0.44l0.68,-0.22l-0.86,3.6l-1.16,-3.32l0.59,-0.74l-0.03,-0.41ZM508.73,200.34l0.37,-1.02l0.64,0.0l0.52,-0.51l-0.49,1.53l-0.56,-0.24l-0.48,0.23Z", "name": "Israel"}, "FR": {"path": "M444.48,172.62l-0.64,1.78l-0.58,-0.31l-0.49,-1.72l0.4,-0.89l1.0,-0.72l0.3,1.85ZM429.64,147.1l1.78,1.58l1.46,-0.13l2.1,1.42l1.35,0.27l1.23,0.83l3.04,0.5l-1.03,1.85l-0.3,2.12l-0.41,0.32l-0.95,-0.24l-0.5,0.43l0.06,0.61l-1.81,1.92l-0.04,1.42l0.55,0.38l0.88,-0.36l0.61,0.97l-0.03,1.0l0.57,0.91l-0.75,1.09l0.65,2.39l1.27,0.57l-0.18,0.82l-2.01,1.53l-4.77,-0.8l-3.82,1.0l-0.53,1.85l-2.49,0.34l-2.71,-1.31l-1.16,0.57l-4.31,-1.29l-0.72,-0.86l1.19,-1.78l0.39,-6.45l-2.58,-3.3l-1.9,-1.66l-3.72,-1.23l-0.19,-1.72l2.81,-0.61l4.12,0.81l0.47,-0.48l-0.6,-2.77l1.94,0.95l5.83,-2.54l0.92,-2.74l1.6,-0.49l0.24,0.78l1.36,0.33l1.05,1.19ZM289.01,278.39l-0.81,0.8l-0.78,0.12l-0.5,-0.66l-0.56,-0.1l-0.91,0.6l-0.46,-0.22l1.09,-2.96l-0.96,-1.77l-0.17,-1.49l1.07,-1.77l2.32,0.75l2.51,2.01l0.3,0.74l-2.14,3.96Z", "name": "France"}, "XS": {"path": "M531.15,258.94l1.51,0.12l5.13,-0.95l5.3,-1.48l-0.01,4.4l-2.67,3.39l-1.85,0.01l-8.04,-2.94l-2.55,-3.17l1.12,-1.71l2.04,2.34Z", "name": "Somaliland"}, "FI": {"path": "M492.17,76.39l-0.23,3.5l3.52,2.63l-2.08,2.88l-0.02,0.44l2.8,4.56l-1.59,3.31l2.16,3.24l-0.94,2.39l0.14,0.47l3.44,2.51l-0.77,1.62l-7.52,6.95l-4.5,0.31l-4.38,1.37l-3.8,0.74l-1.44,-1.96l-2.17,-1.11l0.5,-3.66l-1.16,-3.33l1.09,-2.08l2.21,-2.42l5.67,-4.32l1.64,-0.83l0.21,-0.42l-0.46,-2.02l-3.38,-1.89l-0.75,-1.43l-0.22,-6.74l-6.79,-4.8l0.8,-0.62l2.54,2.12l3.46,-0.12l3.0,0.96l2.51,-2.11l1.17,-3.08l3.55,-1.38l2.76,1.53l-0.95,2.79Z", "name": "Finland"}, "FJ": {"path": "M869.95,326.98l-1.21,0.41l-0.08,-0.23l2.97,-1.21l-0.14,0.42l-1.54,0.61ZM867.58,329.25l0.43,0.37l-0.27,0.88l-1.24,0.28l-1.04,-0.24l-0.14,-0.66l0.63,-0.58l0.92,0.26l0.7,-0.31Z", "name": "Fiji"}, "FK": {"path": "M274.36,425.85l1.44,1.08l-0.47,0.73l-3.0,0.89l-0.96,-1.0l-0.52,-0.05l-1.83,1.29l-0.73,-0.88l2.46,-1.64l1.93,0.76l1.67,-1.19Z", "name": "Falkland Is."}, "NI": {"path": "M202.33,252.67l0.81,-0.18l1.03,-1.02l-0.04,-0.88l0.68,-0.0l0.63,-0.54l0.97,0.22l1.53,-1.26l0.58,-0.99l1.17,0.34l2.41,-0.94l0.13,1.32l-0.81,1.94l0.1,2.74l-0.36,0.37l-0.11,1.75l-0.47,0.81l0.18,1.14l-1.73,-0.85l-0.71,0.27l-1.47,-0.6l-0.52,0.16l-4.01,-3.81Z", "name": "Nicaragua"}, "NL": {"path": "M430.31,143.39l0.6,-0.5l2.13,-4.8l3.2,-1.33l1.74,0.08l0.33,0.8l-0.59,2.92l-0.5,0.99l-1.26,0.0l-0.4,0.45l0.33,2.7l-2.2,-1.78l-2.62,0.58l-0.75,-0.11Z", "name": "Netherlands"}, "NO": {"path": "M491.44,67.41l6.8,2.89l-2.29,0.86l-0.15,0.65l2.33,2.38l-4.98,1.79l0.84,-2.45l-0.18,-0.48l-3.55,-1.8l-3.89,1.52l-1.42,3.38l-2.12,1.72l-2.64,-1.0l-3.11,0.21l-2.66,-2.22l-0.5,-0.01l-1.41,1.1l-1.44,0.17l-0.35,0.35l-0.32,2.47l-4.32,-0.64l-0.44,0.29l-0.58,2.11l-2.45,0.2l-4.15,7.68l-3.88,5.76l0.78,1.62l-0.64,1.16l-2.24,-0.06l-0.38,0.24l-1.66,3.89l0.15,5.17l1.57,2.04l-0.78,4.16l-2.02,2.48l-0.85,1.63l-1.3,-1.75l-0.58,-0.07l-4.87,4.19l-3.1,0.79l-3.16,-1.7l-0.85,-3.77l-0.77,-8.55l2.14,-2.31l6.55,-3.27l5.02,-4.17l10.63,-13.84l10.98,-8.7l5.35,-1.91l4.34,0.12l3.69,-3.64l4.49,0.19l4.37,-0.89ZM484.55,20.04l4.26,1.75l-3.1,2.55l-7.1,0.65l-7.08,-0.9l-0.37,-1.31l-0.37,-0.29l-3.44,-0.1l-2.08,-2.0l6.87,-1.44l3.9,1.31l2.39,-1.64l6.13,1.4ZM481.69,33.93l-4.45,1.74l-3.54,-0.99l1.12,-0.9l0.05,-0.58l-1.06,-1.22l4.22,-0.89l1.09,1.97l2.57,0.87ZM466.44,24.04l7.43,3.77l-5.41,1.86l-1.58,4.08l-2.26,1.2l-1.12,4.11l-2.61,0.18l-4.79,-2.86l1.84,-1.54l-0.1,-0.68l-3.69,-1.53l-4.77,-4.51l-1.73,-3.89l6.11,-1.82l1.54,1.92l3.57,-0.08l1.2,-1.96l3.32,-0.18l3.05,1.92Z", "name": "Norway"}, "NA": {"path": "M474.26,330.66l-0.97,0.04l-0.38,0.4l-0.07,8.9l-2.09,0.08l-0.39,0.4l-0.0,17.42l-1.98,1.23l-1.17,0.17l-2.44,-0.66l-0.48,-1.13l-0.99,-0.74l-0.54,0.05l-0.9,1.01l-1.53,-1.68l-0.93,-1.88l-1.99,-8.56l-0.06,-3.12l-0.33,-1.52l-2.3,-3.34l-1.91,-4.83l-1.96,-2.43l-0.12,-1.57l2.33,-0.79l1.43,0.07l1.81,1.13l10.23,-0.25l1.84,1.23l5.87,0.35ZM474.66,330.64l6.51,-1.6l1.9,0.39l-1.69,0.4l-1.31,0.83l-1.12,-0.94l-4.29,0.92Z", "name": "Namibia"}, "VU": {"path": "M839.04,322.8l0.22,1.14l-0.44,0.03l-0.2,-1.45l0.42,0.27Z", "name": "Vanuatu"}, "NC": {"path": "M838.78,341.24l-0.33,0.22l-2.9,-1.75l-3.26,-3.37l1.65,0.83l4.85,4.07Z", "name": "New Caledonia"}, "NE": {"path": "M454.75,226.53l1.33,1.37l0.48,0.07l1.27,-0.7l0.53,3.52l0.94,0.83l0.17,0.92l0.81,0.69l-0.44,0.95l-0.96,5.26l-0.13,3.22l-3.04,2.31l-1.22,3.57l1.02,1.24l-0.0,1.46l0.39,0.4l1.13,0.04l-0.9,1.25l-1.47,-2.42l-0.86,-0.29l-2.09,1.37l-1.74,-0.67l-1.45,-0.17l-0.85,0.35l-1.36,-0.07l-1.64,1.09l-1.06,0.05l-2.94,-1.28l-1.44,0.59l-1.01,-0.03l-0.97,-0.94l-2.7,-0.98l-2.69,0.3l-0.87,0.64l-0.47,1.6l-0.75,1.16l-0.12,1.53l-1.57,-1.1l-1.31,0.24l0.03,-0.81l-0.32,-0.41l-2.59,-0.52l-0.15,-1.16l-1.35,-1.6l-0.29,-1.0l0.13,-0.84l1.29,-0.08l1.08,-0.92l3.31,-0.22l2.22,-0.41l0.32,-0.34l0.2,-1.47l1.39,-1.88l-0.01,-5.66l3.36,-1.12l7.24,-5.12l8.42,-4.92l3.69,1.06Z", "name": "Niger"}, "NG": {"path": "M456.32,253.89l0.64,0.65l-0.28,1.04l-2.11,2.01l-2.03,5.18l-1.37,1.16l-1.15,3.18l-1.33,0.66l-1.46,-0.97l-1.21,0.16l-1.38,1.36l-0.91,0.24l-1.79,4.06l-2.33,0.81l-1.11,-0.07l-0.86,0.5l-1.71,-0.05l-1.19,-1.39l-0.89,-1.89l-1.77,-1.66l-3.95,-0.08l0.07,-5.21l0.42,-1.43l1.95,-2.3l-0.14,-0.91l0.43,-1.18l-0.53,-1.41l0.25,-2.92l0.72,-1.07l0.32,-1.34l0.46,-0.39l2.47,-0.28l2.34,0.89l1.15,1.02l1.28,0.04l1.22,-0.58l3.03,1.27l1.49,-0.14l1.36,-1.0l1.33,0.07l0.82,-0.35l3.45,0.8l1.82,-1.32l1.84,2.67l0.66,0.16Z", "name": "Nigeria"}, "NZ": {"path": "M857.8,379.65l1.86,3.12l0.44,0.18l0.3,-0.38l0.03,-1.23l0.38,0.27l0.57,2.31l2.02,0.94l1.81,0.27l1.57,-1.06l0.7,0.18l-1.15,3.59l-1.98,0.11l-0.74,1.2l0.2,1.11l-2.42,3.98l-1.49,0.92l-1.04,-0.85l1.21,-2.05l-0.81,-2.01l-2.63,-1.25l0.04,-0.57l1.82,-1.19l0.43,-2.34l-0.16,-2.03l-0.95,-1.82l-0.06,-0.72l-3.11,-3.64l-0.79,-1.52l1.56,1.45l1.76,0.66l0.65,2.34ZM853.83,393.59l0.57,1.24l0.59,0.16l1.42,-0.97l0.46,0.79l0.0,1.03l-2.47,3.48l-1.26,1.2l-0.06,0.5l0.55,0.87l-1.41,0.07l-2.33,1.38l-2.03,5.02l-3.02,2.16l-2.06,-0.06l-1.71,-1.04l-2.47,-0.2l-0.27,-0.73l1.22,-2.1l3.05,-2.94l1.62,-0.59l4.02,-2.82l1.57,-1.67l1.07,-2.16l0.88,-0.7l0.48,-1.75l1.24,-0.97l0.35,0.79Z", "name": "New Zealand"}, "NP": {"path": "M641.14,213.62l0.01,3.19l-1.74,0.04l-4.8,-0.86l-1.58,-1.39l-3.37,-0.34l-7.65,-3.7l0.8,-2.09l2.33,-1.7l1.77,0.75l2.49,1.76l1.38,0.41l0.99,1.35l1.9,0.52l1.99,1.17l5.49,0.9Z", "name": "Nepal"}, "XK": {"path": "M472.77,172.64l-1.08,-1.29l0.96,-0.77l0.29,-0.83l1.98,1.64l-0.36,0.67l-1.79,0.58Z", "name": "Kosovo"}, "CI": {"path": "M407.4,259.27l0.86,0.42l0.56,0.9l1.13,0.53l1.19,-0.61l0.97,-0.08l1.42,0.54l0.6,3.24l-1.03,2.08l-0.65,2.84l1.06,2.33l-0.06,0.53l-2.54,-0.47l-1.66,0.03l-3.06,0.46l-4.11,1.6l0.32,-3.06l-1.18,-1.31l-1.32,-0.66l0.42,-0.85l-0.2,-1.4l0.5,-0.67l0.01,-1.59l0.84,-0.32l0.26,-0.5l-1.15,-3.01l0.12,-0.5l0.51,-0.25l0.66,0.31l1.93,0.02l0.67,-0.71l0.71,-0.14l0.25,0.69l0.57,0.22l1.4,-0.61Z", "name": "C\u00f4te d'Ivoire"}, "CH": {"path": "M444.62,156.35l-0.29,0.87l0.18,0.53l1.13,0.58l1.0,0.1l-0.1,0.65l-0.79,0.38l-1.72,-0.37l-0.45,0.23l-0.45,1.04l-0.75,0.06l-0.84,-0.4l-1.32,1.0l-0.96,0.12l-0.88,-0.55l-0.81,-1.3l-0.49,-0.16l-0.63,0.26l0.02,-0.65l1.71,-1.66l0.1,-0.56l0.93,0.08l0.58,-0.46l1.99,0.02l0.66,-0.61l2.19,0.79Z", "name": "Switzerland"}, "CO": {"path": "M242.07,254.93l-1.7,0.59l-0.59,1.18l-1.7,1.69l-0.38,1.93l-0.67,1.43l0.31,0.57l1.03,0.13l0.25,0.9l0.57,0.64l-0.04,2.34l1.64,1.42l3.16,-0.24l1.26,0.28l1.67,2.06l0.41,0.13l4.09,-0.39l0.45,0.22l-0.92,1.95l-0.2,1.8l0.52,1.83l0.75,1.05l-1.12,1.1l0.07,0.63l0.84,0.51l0.74,1.29l-0.39,-0.45l-0.59,-0.01l-0.71,0.74l-4.71,-0.05l-0.4,0.41l0.03,1.57l0.33,0.39l1.11,0.2l-1.68,0.4l-0.29,0.38l-0.01,1.82l1.16,1.14l0.34,1.25l-1.05,7.05l-1.04,-0.87l1.26,-1.99l-0.13,-0.56l-2.18,-1.23l-1.38,0.2l-1.14,-0.38l-1.27,0.61l-1.55,-0.26l-1.38,-2.46l-1.23,-0.75l-0.85,-1.2l-1.67,-1.19l-0.86,0.13l-2.11,-1.32l-1.01,0.31l-1.8,-0.29l-0.52,-0.91l-3.09,-1.68l0.77,-0.52l-0.1,-1.12l0.41,-0.64l1.34,-0.32l2.0,-2.88l-0.11,-0.57l-0.66,-0.43l0.39,-1.38l-0.52,-2.1l0.49,-0.83l-0.4,-2.13l-0.97,-1.35l0.17,-0.66l0.86,-0.08l0.47,-0.75l-0.46,-1.63l1.41,-0.07l1.8,-1.69l0.93,-0.24l0.3,-0.38l0.45,-2.76l1.22,-1.0l1.44,-0.04l0.45,-0.5l1.91,0.12l2.93,-1.84l1.15,-1.14l0.91,0.46l-0.25,0.45Z", "name": "Colombia"}, "CN": {"path": "M740.23,148.97l4.57,1.3l2.8,2.17l0.98,2.9l0.38,0.27l3.8,0.0l2.32,-1.28l3.29,-0.75l-0.96,2.09l-1.02,1.28l-0.85,3.4l-1.52,2.73l-2.76,-0.5l-2.4,1.13l-0.21,0.45l0.64,2.57l-0.32,3.2l-0.94,0.06l-0.37,0.89l-0.91,-1.01l-0.64,0.07l-0.92,1.57l-3.73,1.25l-0.26,0.48l0.26,1.06l-1.5,-0.08l-1.09,-0.86l-0.56,0.06l-1.67,2.06l-2.7,1.56l-2.03,1.88l-3.4,0.83l-1.93,1.4l-1.15,0.34l0.33,-0.7l-0.41,-0.89l1.79,-1.79l0.02,-0.54l-1.32,-1.56l-0.48,-0.1l-2.24,1.09l-2.83,2.06l-1.51,1.83l-2.28,0.13l-1.55,1.49l-0.04,0.5l1.32,1.97l2.0,0.58l0.31,1.35l1.98,0.84l3.0,-1.96l2.0,1.02l1.49,0.11l0.22,0.83l-3.37,0.86l-1.12,1.48l-2.5,1.52l-1.29,1.99l0.14,0.56l2.57,1.48l0.97,2.7l3.17,4.63l-0.03,1.66l-1.35,0.65l-0.2,0.51l0.6,1.47l1.4,0.91l-0.89,3.82l-1.43,0.38l-3.85,6.44l-2.27,3.11l-6.78,4.57l-2.73,0.29l-1.45,1.04l-0.62,-0.61l-0.55,-0.01l-1.36,1.25l-3.39,1.27l-2.61,0.4l-1.1,2.79l-0.81,0.09l-0.49,-1.42l0.5,-0.85l-0.25,-0.59l-3.36,-0.84l-1.3,0.4l-2.31,-0.62l-0.94,-0.84l0.33,-1.28l-0.3,-0.49l-2.19,-0.46l-1.13,-0.93l-0.47,-0.02l-2.06,1.36l-4.29,0.28l-2.76,1.05l-0.28,0.43l0.32,2.53l-0.59,-0.03l-0.19,-1.34l-0.55,-0.34l-1.68,0.7l-2.46,-1.23l0.62,-1.87l-0.26,-0.51l-1.37,-0.44l-0.54,-2.22l-0.45,-0.3l-2.13,0.35l0.24,-2.48l2.39,-2.4l0.03,-4.31l-1.19,-0.92l-0.78,-1.49l-0.41,-0.21l-1.41,0.19l-1.98,-0.3l0.46,-1.07l-1.17,-1.7l-0.55,-0.11l-1.63,1.05l-2.25,-0.57l-2.89,1.73l-2.25,1.98l-1.75,0.29l-1.17,-0.71l-3.31,-0.65l-1.48,0.79l-1.04,1.27l-0.12,-1.17l-0.54,-0.34l-1.44,0.54l-5.55,-0.86l-1.98,-1.16l-1.89,-0.54l-0.99,-1.35l-1.34,-0.37l-2.55,-1.79l-2.01,-0.84l-1.21,0.56l-5.57,-3.45l-0.53,-2.31l1.19,0.25l0.48,-0.37l0.08,-1.42l-0.98,-1.56l0.15,-2.44l-2.69,-3.32l-4.12,-1.23l-0.67,-2.0l-1.92,-1.48l-0.38,-0.7l-0.51,-3.01l-1.52,-0.66l-0.7,0.13l-0.48,-2.05l0.55,-0.51l-0.09,-0.82l2.03,-1.19l1.6,-0.54l2.56,0.38l0.42,-0.22l0.85,-1.7l3.0,-0.33l1.1,-1.26l4.05,-1.77l0.39,-0.91l-0.17,-1.44l1.45,-0.67l0.2,-0.52l-2.07,-4.9l4.51,-1.12l1.37,-0.73l1.89,-5.51l4.98,0.86l1.51,-1.7l0.11,-2.87l1.99,-0.38l1.83,-2.06l0.49,-0.13l0.68,2.08l2.23,1.77l3.44,1.16l1.55,2.29l-0.92,3.49l0.96,1.67l6.54,1.13l2.95,1.87l1.47,0.35l1.06,2.62l1.53,1.91l3.05,0.08l5.14,0.67l3.37,-0.41l2.36,0.43l3.65,1.8l3.06,0.04l1.45,0.88l2.87,-1.59l3.95,-1.02l3.83,-0.14l3.06,-1.14l1.77,-1.6l1.72,-1.01l0.17,-0.49l-1.1,-2.05l1.02,-1.54l4.02,0.8l2.45,-1.61l3.76,-1.19l1.96,-2.13l1.63,-0.83l3.51,-0.4l1.92,0.34l0.46,-0.3l0.17,-1.5l-2.27,-2.22l-2.11,-1.09l-2.18,1.11l-2.32,-0.47l-1.29,0.32l-0.4,-0.82l2.73,-5.16l3.02,1.06l3.53,-2.06l0.18,-1.68l2.16,-3.35l1.49,-1.35l-0.03,-1.85l-1.07,-0.85l1.54,-1.26l2.98,-0.59l3.23,-0.09l3.64,0.99l2.04,1.16l3.29,6.71l0.92,3.19ZM696.92,237.31l-1.87,1.08l-1.63,-0.64l-0.06,-1.79l1.03,-0.98l2.58,-0.69l1.16,0.05l0.3,0.54l-0.98,1.06l-0.53,1.37Z", "name": "China"}, "CM": {"path": "M457.92,257.49l1.05,1.91l-1.4,0.16l-1.05,-0.23l-0.45,0.22l-0.54,1.19l0.08,0.45l1.48,1.47l1.05,0.45l1.01,2.46l-1.52,2.99l-0.68,0.68l-0.13,3.69l2.38,3.84l1.09,0.8l0.24,2.48l-3.67,-1.14l-11.27,-0.13l0.23,-1.79l-0.98,-1.66l-1.19,-0.54l-0.44,-0.97l-0.6,-0.42l1.71,-4.27l0.75,-0.13l1.38,-1.36l0.65,-0.03l1.71,0.99l1.93,-1.12l1.14,-3.18l1.38,-1.17l2.0,-5.14l2.17,-2.13l0.3,-1.64l-0.86,-0.88l0.03,-0.33l0.94,1.28l0.07,3.22Z", "name": "Cameroon"}, "CL": {"path": "M246.5,429.18l-3.14,1.83l-0.57,3.16l-0.64,0.05l-2.68,-1.06l-2.82,-2.33l-3.04,-1.89l-0.69,-1.85l0.63,-2.14l-1.21,-2.11l-0.31,-5.37l1.01,-2.91l2.57,-2.38l-0.18,-0.68l-3.16,-0.77l2.05,-2.47l0.77,-4.65l2.32,0.9l0.54,-0.29l1.31,-6.31l-0.22,-0.44l-1.68,-0.8l-0.56,0.28l-0.7,3.36l-0.81,-0.22l1.56,-9.41l1.15,-2.24l-0.71,-2.82l-0.18,-2.84l1.01,-0.33l3.26,-9.14l1.07,-4.22l-0.56,-4.21l0.74,-2.34l-0.29,-3.27l1.46,-3.34l2.04,-16.59l-0.66,-7.76l1.03,-0.53l0.54,-0.9l0.79,1.14l0.32,1.78l1.25,1.16l-0.69,2.55l1.33,2.9l0.97,3.59l0.46,0.29l1.5,-0.3l0.11,0.23l-0.76,2.44l-2.57,1.23l-0.23,0.37l0.08,4.33l-0.46,0.77l0.56,1.21l-1.58,1.51l-1.68,2.62l-0.89,2.47l0.2,2.7l-1.48,2.73l1.12,5.09l0.64,0.61l-0.01,2.29l-1.38,2.68l0.01,2.4l-1.89,2.04l0.02,2.75l0.69,2.57l-1.43,1.13l-1.26,5.68l0.39,3.51l-0.97,0.89l0.58,3.5l1.02,1.14l-0.65,1.02l0.15,0.57l1.0,0.53l0.16,0.69l-1.03,0.85l0.26,1.75l-0.89,4.03l-1.31,2.66l0.24,1.75l-0.71,1.83l-1.99,1.7l0.3,3.67l0.88,1.19l1.58,0.01l0.01,2.21l1.04,1.95l5.98,0.63ZM248.69,430.79l0.0,7.33l0.4,0.4l3.52,0.05l-0.44,0.75l-1.94,0.98l-2.49,-0.37l-1.88,-1.06l-2.55,-0.49l-5.59,-3.71l-2.38,-2.63l4.1,2.48l3.32,1.23l0.45,-0.12l1.29,-1.57l0.83,-2.32l2.05,-1.24l1.31,0.29Z", "name": "Chile"}, "XC": {"path": "M504.91,192.87l0.34,0.01l0.27,-0.07l-0.29,0.26l-0.31,-0.2Z", "name": "N. Cyprus"}, "CA": {"path": "M280.06,145.6l-1.67,2.88l0.07,0.49l0.5,0.04l1.46,-0.98l1.0,0.42l-0.56,0.72l0.17,0.62l2.22,0.89l1.35,-0.71l1.95,0.78l-0.66,2.01l0.5,0.51l1.32,-0.42l0.98,3.17l-0.91,2.41l-0.8,0.08l-1.23,-0.45l0.47,-2.25l-0.89,-0.83l-0.48,0.06l-2.78,2.63l-0.34,-0.02l1.02,-0.85l-0.14,-0.69l-2.4,-0.77l-7.4,0.08l-0.17,-0.41l1.3,-0.94l0.02,-0.64l-0.73,-0.58l1.85,-1.74l2.57,-5.16l1.47,-1.79l1.99,-1.05l0.46,0.06l-1.53,2.45ZM68.32,74.16l4.13,0.95l4.02,2.14l2.61,0.4l2.47,-1.89l2.88,-1.31l3.85,0.48l3.71,-1.94l3.82,-1.04l1.56,1.68l0.49,0.08l1.87,-1.04l0.65,-1.98l1.24,0.35l4.16,3.94l0.54,0.01l2.75,-2.49l0.26,2.59l0.49,0.35l3.08,-0.73l1.04,-1.27l2.73,0.23l3.83,1.86l5.86,1.61l3.47,0.75l2.44,-0.26l2.73,1.78l-2.98,1.81l-0.19,0.41l0.31,0.32l4.53,0.92l6.87,-0.5l2.0,-0.69l2.49,2.39l0.53,0.02l2.72,-2.16l-0.02,-0.64l-2.16,-1.54l1.15,-1.06l4.83,-0.61l1.84,0.95l2.48,2.31l3.01,-0.23l4.55,1.92l3.85,-0.67l3.61,0.1l0.41,-0.44l-0.25,-2.36l1.79,-0.61l3.49,1.32l-0.01,3.77l0.31,0.39l0.45,-0.22l1.48,-3.16l1.74,0.1l0.41,-0.3l1.13,-4.37l-2.78,-3.11l-2.8,-1.74l0.19,-4.64l2.71,-3.07l2.98,0.67l2.41,1.95l3.19,4.8l-1.99,1.97l0.21,0.68l4.33,0.84l-0.01,4.15l0.25,0.37l0.44,-0.09l3.07,-3.15l2.54,2.39l-0.61,3.33l2.42,2.88l0.61,0.0l2.61,-3.08l1.88,-3.82l0.17,-4.58l6.72,0.94l3.13,2.04l0.13,1.82l-1.76,2.19l-0.01,0.49l1.66,2.16l-0.26,1.71l-4.68,2.8l-3.28,0.61l-2.47,-1.2l-0.55,0.23l-0.73,2.04l-2.38,3.43l-0.74,1.77l-2.74,2.57l-3.44,0.25l-2.21,1.78l-0.28,2.53l-2.82,0.55l-3.12,3.22l-2.72,4.31l-1.03,3.17l-0.14,4.31l0.33,0.41l3.44,0.57l2.24,5.95l0.45,0.23l3.4,-0.69l4.52,1.51l2.43,1.31l1.91,1.73l3.1,0.96l2.62,1.46l6.6,0.54l-0.35,2.74l0.81,3.53l1.81,3.78l3.83,3.3l0.45,0.04l2.1,-1.28l1.37,-3.69l-1.31,-5.38l-1.45,-1.58l3.57,-1.47l2.84,-2.46l1.52,-2.8l-0.25,-2.55l-1.7,-3.07l-2.85,-2.61l2.8,-3.95l-1.08,-3.37l-0.79,-5.67l1.36,-0.7l6.76,1.41l2.12,-0.96l5.12,3.36l1.05,1.61l4.08,0.26l-0.06,2.87l0.83,4.7l0.3,0.32l2.16,0.54l1.73,2.06l0.5,0.09l3.63,-2.03l2.52,-4.19l1.26,-1.32l7.6,11.72l-0.92,2.04l0.16,0.51l3.3,1.97l2.22,1.98l4.1,0.98l1.43,0.99l0.95,2.79l2.1,0.68l0.84,1.08l0.17,3.45l-3.37,2.26l-4.22,1.24l-3.06,2.63l-4.06,0.51l-5.35,-0.69l-6.39,0.2l-2.3,2.41l-3.26,1.51l-6.47,7.15l-0.06,0.48l0.44,0.19l2.13,-0.52l4.17,-4.24l5.12,-2.62l3.52,-0.3l1.69,1.21l-2.12,2.21l0.81,3.47l1.02,2.61l3.47,1.6l4.14,-0.45l2.15,-2.8l0.26,1.48l1.14,0.8l-2.56,1.69l-5.5,1.82l-2.54,1.27l-2.74,2.15l-1.4,-0.16l-0.07,-2.01l4.14,-2.44l0.18,-0.45l-0.39,-0.29l-6.63,0.45l-1.39,-1.49l-0.14,-4.43l-1.11,-0.91l-1.82,0.39l-0.66,-0.66l-0.6,0.03l-1.91,2.39l-0.82,2.52l-0.8,1.27l-1.67,0.56l-0.46,0.76l-8.31,0.07l-1.21,0.62l-2.35,1.97l-0.71,-0.14l-1.37,0.96l-1.12,-0.48l-4.74,1.26l-0.9,1.17l0.21,0.62l1.73,0.3l-1.81,0.31l-1.85,0.81l-2.11,-0.13l-2.95,1.78l-0.69,-0.09l1.39,-2.1l1.73,-1.21l0.1,-2.29l1.16,-1.99l0.49,0.53l2.03,0.42l1.2,-1.16l0.02,-0.47l-2.66,-3.51l-2.28,-0.61l-5.64,-0.71l-0.4,-0.57l-0.79,0.13l0.2,-0.41l-0.22,-0.55l-0.68,-0.26l0.19,-1.26l-0.78,-0.73l0.31,-0.64l-0.29,-0.57l-2.6,-0.44l-0.75,-1.63l-0.94,-0.66l-4.31,-0.65l-1.13,1.19l-1.48,0.59l-0.85,1.06l-2.83,-0.76l-2.09,0.39l-2.39,-0.97l-4.24,-0.7l-0.57,-0.4l-0.41,-1.63l-0.4,-0.3l-0.85,0.02l-0.39,0.4l-0.01,0.85l-69.13,-0.01l-6.51,-4.52l-4.5,-1.38l-1.26,-2.66l0.33,-1.93l-0.23,-0.43l-3.01,-1.35l-0.55,-2.77l-2.89,-2.38l-0.04,-1.45l1.39,-1.83l-0.28,-2.55l-4.16,-2.2l-4.07,-6.6l-4.02,-3.22l-1.3,-1.88l-0.5,-0.13l-2.51,1.21l-2.23,1.87l-3.85,-3.88l-2.44,-1.04l-2.22,-0.13l0.03,-37.49ZM260.37,148.65l3.04,0.76l2.26,1.2l-3.78,-0.95l-1.53,-1.01ZM249.4,3.81l6.68,0.49l5.32,0.79l4.26,1.57l-0.07,1.1l-5.85,2.53l-6.02,1.21l-2.39,1.39l-0.18,0.45l0.39,0.29l4.01,-0.02l-4.65,2.82l-4.2,1.74l-4.19,4.59l-5.03,0.92l-1.67,1.15l-7.47,0.59l-0.37,0.37l0.32,0.42l2.41,0.49l-0.81,0.47l-0.12,0.59l1.83,2.41l-2.02,1.59l-3.81,1.51l-1.32,2.16l-3.38,1.53l-0.22,0.48l0.35,1.19l0.4,0.29l3.88,-0.18l0.03,0.61l-6.33,2.95l-6.41,-1.4l-7.43,0.79l-3.72,-0.62l-4.4,-0.25l-0.23,-1.83l4.29,-1.11l0.28,-0.51l-1.1,-3.45l1.0,-0.25l6.58,2.28l0.47,-0.16l-0.05,-0.49l-3.41,-3.45l-3.58,-0.98l1.48,-1.55l4.34,-1.29l0.97,-2.19l-0.16,-0.48l-3.42,-2.13l-0.81,-2.26l6.2,0.22l2.24,0.58l3.91,-2.1l0.2,-0.43l-0.35,-0.32l-5.64,-0.67l-8.73,0.36l-4.26,-1.9l-2.12,-2.4l-2.78,-1.66l-0.41,-1.52l3.31,-1.03l2.93,-0.2l4.91,-0.99l3.7,-2.27l2.87,0.3l2.62,1.67l0.56,-0.14l1.82,-3.2l3.13,-0.94l4.44,-0.69l7.53,-0.26l1.48,0.67l7.19,-1.06l10.8,0.79ZM203.85,57.54l0.01,0.42l1.97,2.97l0.68,-0.02l2.24,-3.72l5.95,-1.86l4.01,4.64l-0.35,2.91l0.5,0.43l4.95,-1.36l2.32,-1.8l5.31,2.28l3.27,2.11l0.3,1.84l0.48,0.33l4.42,-0.99l2.64,2.87l5.97,1.77l2.06,1.72l2.11,3.71l-4.19,1.86l-0.01,0.73l5.9,2.83l3.94,0.94l3.78,3.95l3.46,0.25l-0.63,2.37l-4.11,4.47l-2.76,-1.56l-3.9,-3.94l-3.59,0.41l-0.33,0.34l-0.19,2.72l2.63,2.38l3.42,1.89l0.94,0.97l1.55,3.75l-0.7,2.29l-2.74,-0.92l-6.25,-3.15l-0.51,0.13l0.05,0.52l6.07,5.69l0.18,0.59l-6.09,-1.39l-5.31,-2.24l-2.63,-1.66l0.6,-0.77l-0.12,-0.6l-7.39,-4.01l-0.59,0.37l0.03,0.79l-6.73,0.6l-1.69,-1.1l1.36,-2.46l4.51,-0.07l5.15,-0.52l0.31,-0.6l-0.74,-1.3l0.78,-1.84l3.21,-4.05l-0.67,-2.35l-1.11,-1.6l-3.84,-2.1l-4.35,-1.28l0.91,-0.63l0.06,-0.61l-2.65,-2.75l-2.34,-0.36l-1.89,-1.46l-0.53,0.03l-1.24,1.23l-4.36,0.55l-9.04,-0.99l-9.26,-1.98l-1.6,-1.22l2.22,-1.77l0.13,-0.44l-0.38,-0.27l-3.22,-0.02l-0.72,-4.25l1.83,-4.04l2.42,-1.85l5.5,-1.1l-1.39,2.35ZM261.19,159.33l2.07,0.61l1.44,-0.04l-1.15,0.63l-2.94,-1.23l-0.4,-0.68l0.36,-0.37l0.61,1.07ZM230.83,84.39l-2.37,0.18l-0.49,-1.63l0.93,-2.09l1.94,-0.51l1.62,0.99l0.02,1.52l-1.66,1.54ZM229.43,58.25l0.11,0.65l-4.87,-0.21l-2.72,0.62l-3.1,-2.57l0.08,-1.26l0.86,-0.23l5.57,0.51l4.08,2.5ZM222.0,105.02l-0.72,1.49l-0.63,-0.19l-0.48,-0.84l0.81,-0.99l0.65,0.05l0.37,0.46ZM183.74,38.32l2.9,1.7l4.79,-0.01l1.84,1.46l-0.49,1.68l0.23,0.48l2.82,1.14l1.76,1.26l7.01,0.65l4.1,-1.1l5.03,-0.43l3.93,0.35l2.48,1.77l0.46,1.7l-1.3,1.1l-3.56,1.01l-3.23,-0.59l-7.17,0.76l-5.09,0.09l-3.99,-0.6l-6.42,-1.54l-0.79,-2.51l-0.3,-2.49l-2.64,-2.5l-5.32,-0.72l-2.52,-1.4l0.68,-1.57l4.78,0.31ZM207.38,91.35l0.4,1.56l0.56,0.26l1.06,-0.52l1.32,0.96l5.42,2.57l0.2,1.68l0.46,0.35l1.68,-0.28l1.15,0.85l-1.55,0.87l-3.61,-0.88l-1.32,-1.69l-0.57,-0.06l-2.45,2.1l-3.12,1.79l-0.7,-1.87l-0.42,-0.26l-2.16,0.24l1.39,-1.39l0.32,-3.14l0.76,-3.35l1.18,0.22ZM215.49,102.6l-2.67,1.95l-1.4,-0.07l-0.3,-0.58l1.53,-1.48l2.84,0.18ZM202.7,24.12l2.53,1.59l-2.87,1.4l-4.53,4.05l-4.25,0.38l-5.03,-0.68l-2.45,-2.04l0.03,-1.62l1.82,-1.37l0.14,-0.45l-0.38,-0.27l-4.45,0.04l-2.59,-1.76l-1.41,-2.29l1.57,-2.32l1.62,-1.66l2.44,-0.39l0.25,-0.65l-0.6,-0.74l4.86,-0.25l3.24,3.11l8.16,2.3l1.9,3.61ZM187.47,59.2l-2.76,3.49l-2.38,-0.15l-1.44,-3.84l0.04,-2.2l1.19,-1.88l2.3,-1.23l5.07,0.17l4.11,1.02l-3.24,3.72l-2.88,0.89ZM186.07,48.79l-1.08,1.53l-3.34,-0.34l-2.56,-1.1l1.03,-1.75l3.25,-1.23l1.95,1.58l0.75,1.3ZM185.71,35.32l-5.3,-0.2l-0.32,-0.71l4.31,0.07l1.3,0.84ZM180.68,32.48l-3.34,1.0l-1.79,-1.1l-0.98,-1.87l-0.15,-1.73l4.1,0.53l2.67,1.7l-0.51,1.47ZM180.9,76.31l-1.1,1.08l-3.13,-1.23l-2.12,0.43l-2.71,-1.57l1.72,-1.09l1.55,-1.72l3.81,1.9l1.98,2.2ZM169.74,54.87l2.96,0.97l4.17,-0.57l0.41,0.88l-2.14,2.11l0.09,0.64l3.55,1.92l-0.4,3.72l-3.79,1.65l-2.17,-0.35l-1.72,-1.74l-6.02,-3.5l0.03,-0.85l4.68,0.54l0.4,-0.21l-0.05,-0.45l-2.48,-2.81l2.46,-1.95ZM174.45,40.74l1.37,1.73l0.07,2.44l-1.05,3.45l-3.79,0.47l-2.32,-0.69l0.05,-2.64l-0.44,-0.41l-3.68,0.35l-0.12,-3.1l2.45,0.1l3.67,-1.73l3.41,0.29l0.37,-0.26ZM170.05,31.55l0.67,1.56l-3.33,-0.49l-4.22,-1.77l-4.35,-0.16l1.4,-0.94l-0.06,-0.7l-2.81,-1.23l-0.12,-1.39l4.39,0.68l6.62,1.98l1.81,2.47ZM134.5,58.13l-1.02,1.82l0.45,0.58l5.4,-1.39l3.33,2.29l0.49,-0.03l2.6,-2.23l1.94,1.32l2.0,4.5l0.7,0.06l1.3,-2.29l-1.63,-4.46l1.69,-0.54l2.31,0.71l2.65,1.81l2.49,7.92l8.48,4.27l-0.19,1.35l-3.79,0.33l-0.26,0.67l1.4,1.49l-0.58,1.1l-4.23,-0.64l-4.43,-1.19l-3.0,0.28l-4.66,1.47l-10.52,1.04l-1.43,-2.02l-3.42,-1.2l-2.21,0.43l-2.51,-2.86l4.84,-1.05l3.6,0.19l3.27,-0.78l0.31,-0.39l-0.31,-0.39l-4.84,-1.06l-8.79,0.27l-0.85,-1.07l5.26,-1.66l0.27,-0.45l-0.4,-0.34l-3.8,0.06l-3.81,-1.06l1.81,-3.01l1.66,-1.79l6.48,-2.81l1.97,0.71ZM158.7,56.61l-1.7,2.44l-3.2,-2.75l0.37,-0.3l3.11,-0.18l1.42,0.79ZM149.61,42.73l1.01,1.89l0.5,0.18l2.14,-0.82l2.23,0.19l0.36,2.04l-1.33,2.09l-8.28,0.76l-6.35,2.15l-3.41,0.1l-0.19,-0.96l4.9,-2.08l0.23,-0.46l-0.41,-0.31l-11.25,0.59l-2.89,-0.74l3.04,-4.44l2.14,-1.32l6.81,1.69l4.58,3.06l4.37,0.39l0.36,-0.63l-3.36,-4.6l1.85,-1.53l2.18,0.51l0.77,2.26ZM144.76,34.41l-4.36,1.44l-3.0,-1.4l1.46,-1.24l3.47,-0.52l2.96,0.71l-0.52,1.01ZM145.13,29.83l-1.9,0.66l-3.67,-0.0l2.27,-1.61l3.3,0.95ZM118.92,65.79l-6.03,2.02l-1.33,-1.9l-5.38,-2.28l2.59,-5.05l2.16,-3.14l-0.02,-0.48l-1.97,-2.41l7.64,-0.7l3.6,1.02l6.3,0.27l4.42,2.95l-2.53,0.98l-6.24,3.43l-3.1,3.28l-0.11,2.01ZM129.54,35.53l-0.28,3.37l-1.72,1.62l-2.33,0.28l-4.61,2.19l-3.86,0.76l-2.64,-0.87l3.72,-3.4l5.01,-3.34l3.72,0.07l3.0,-0.67ZM111.09,152.69l-0.67,0.24l-3.85,-1.37l-0.83,-1.17l-2.12,-1.07l-0.66,-1.02l-2.4,-0.55l-0.74,-1.71l6.02,1.45l2.0,2.55l2.52,1.39l0.73,1.27ZM87.8,134.64l0.89,0.29l1.86,-0.21l-0.65,3.34l1.69,2.33l-1.31,-1.33l-0.99,-1.62l-1.17,-0.98l-0.33,-1.82Z", "name": "Canada"}, "CG": {"path": "M466.72,276.48l-0.1,1.03l-1.25,2.97l-0.19,3.62l-0.46,1.78l-0.23,0.63l-1.61,1.19l-1.21,1.39l-1.09,2.43l0.04,2.09l-3.25,3.24l-0.5,-0.24l-0.5,-0.83l-1.36,-0.02l-0.98,0.89l-1.68,-0.99l-1.54,1.24l-1.52,-1.96l1.57,-1.14l0.11,-0.52l-0.77,-1.35l2.1,-0.66l0.39,-0.73l1.05,0.82l2.21,0.11l1.12,-1.37l0.37,-1.81l-0.27,-2.09l-1.13,-1.5l1.0,-2.69l-0.13,-0.45l-0.92,-0.58l-1.6,0.17l-0.51,-0.94l0.1,-0.61l2.75,0.09l3.97,1.24l0.51,-0.33l0.17,-1.28l1.24,-2.21l1.28,-1.14l2.76,0.49Z", "name": "Congo"}, "CF": {"path": "M461.16,278.2l-0.26,-1.19l-1.09,-0.77l-0.84,-1.17l-0.29,-1.0l-1.04,-1.15l0.08,-3.43l0.58,-0.49l1.16,-2.35l1.85,-0.17l0.61,-0.62l0.97,0.58l3.15,-0.96l2.48,-1.92l0.02,-0.96l2.81,0.02l2.36,-1.17l1.93,-2.85l1.16,-0.93l1.11,-0.3l0.27,0.86l1.34,1.47l-0.39,2.01l0.3,1.01l4.01,2.75l0.17,0.93l2.63,2.31l0.6,1.44l2.08,1.4l-3.84,-0.21l-1.94,0.88l-1.23,-0.49l-2.67,1.2l-1.29,-0.18l-0.51,0.36l-0.6,1.22l-3.35,-0.65l-1.57,-0.91l-2.42,-0.83l-1.45,0.91l-0.97,1.27l-0.26,1.56l-3.22,-0.43l-1.49,1.33l-0.94,1.62Z", "name": "Central African Rep."}, "CD": {"path": "M487.01,272.38l2.34,-0.14l1.35,1.84l1.34,0.45l0.86,-0.39l1.21,0.12l1.07,-0.41l0.54,0.89l2.04,1.54l-0.14,2.72l0.7,0.54l-1.38,1.13l-1.53,2.54l-0.17,2.05l-0.59,1.08l-0.02,1.72l-0.72,0.84l-0.66,3.01l0.63,1.32l-0.44,4.26l0.64,1.47l-0.37,1.22l0.86,1.8l1.53,1.41l0.3,1.26l0.44,0.5l-4.08,0.75l-0.92,1.81l0.51,1.34l-0.74,5.43l0.17,0.38l2.45,1.46l0.54,-0.1l0.12,1.62l-1.28,-0.01l-1.85,-2.35l-1.94,-0.45l-0.48,-1.13l-0.55,-0.2l-1.41,0.74l-1.71,-0.3l-1.01,-1.18l-2.49,-0.19l-0.44,-0.77l-1.98,-0.21l-2.88,0.36l0.11,-2.41l-0.85,-1.13l-0.16,-1.36l0.32,-1.73l-0.46,-0.89l-0.04,-1.49l-0.4,-0.39l-2.53,0.02l0.1,-0.41l-0.39,-0.49l-1.28,0.01l-0.43,0.45l-1.62,0.32l-0.83,1.79l-1.09,-0.28l-2.4,0.52l-1.37,-1.91l-1.3,-3.3l-0.38,-0.27l-7.39,-0.03l-2.46,0.42l0.5,-0.45l0.37,-1.47l0.66,-0.38l0.92,0.08l0.73,-0.82l0.87,0.02l0.31,0.68l1.4,0.36l3.59,-3.63l0.01,-2.23l1.02,-2.29l2.69,-2.39l0.43,-0.99l0.49,-1.96l0.17,-3.51l1.25,-2.95l0.36,-3.14l0.86,-1.13l1.1,-0.66l3.57,1.73l3.65,0.73l0.46,-0.21l0.8,-1.46l1.24,0.19l2.61,-1.17l0.81,0.44l1.04,-0.03l0.59,-0.66l0.7,-0.16l1.81,0.25Z", "name": "Dem. Rep. Congo"}, "CZ": {"path": "M458.46,144.88l1.22,1.01l1.47,0.23l0.13,0.93l1.36,0.68l0.54,-0.2l0.24,-0.55l1.15,0.25l0.53,1.09l1.68,0.18l0.6,0.84l-1.04,0.73l-0.96,1.28l-1.6,0.17l-0.55,0.56l-1.04,-0.46l-1.05,0.15l-2.12,-0.96l-1.05,0.34l-1.2,1.12l-1.56,-0.87l-2.57,-2.1l-0.53,-1.88l4.7,-2.52l0.71,0.26l0.9,-0.28Z", "name": "Czech Rep."}, "CY": {"path": "M504.36,193.47l0.43,0.28l-1.28,0.57l-0.92,-0.28l-0.24,-0.46l2.01,-0.13Z", "name": "Cyprus"}, "CR": {"path": "M211.34,258.05l0.48,0.99l1.6,1.6l-0.54,0.45l0.29,1.42l-0.25,1.19l-1.09,-0.59l-0.05,-1.25l-2.46,-1.42l-0.28,-0.77l-0.66,-0.45l-0.45,-0.0l-0.11,1.04l-1.32,-0.95l0.31,-1.3l-0.36,-0.6l0.31,-0.27l1.42,0.58l1.29,-0.14l0.56,0.56l0.74,0.17l0.55,-0.27Z", "name": "Costa Rica"}, "CU": {"path": "M221.21,227.25l1.27,1.02l2.19,-0.28l4.43,3.33l2.08,0.43l-0.1,0.38l0.36,0.5l1.75,0.1l1.48,0.84l-3.11,0.51l-4.15,-0.03l0.77,-0.67l-0.04,-0.64l-1.2,-0.74l-1.49,-0.16l-0.7,-0.61l-0.56,-1.4l-0.4,-0.25l-1.34,0.1l-2.2,-0.66l-0.88,-0.58l-3.18,-0.4l-0.27,-0.16l0.58,-0.74l-0.36,-0.29l-2.72,-0.05l-1.7,1.29l-0.91,0.03l-0.61,0.69l-1.01,0.22l1.11,-1.29l1.01,-0.52l3.69,-1.01l3.98,0.21l2.21,0.84Z", "name": "Cuba"}, "SZ": {"path": "M500.35,351.36l0.5,2.04l-0.38,0.89l-1.05,0.21l-1.23,-1.2l-0.02,-0.64l0.83,-1.57l1.34,0.27Z", "name": "Swaziland"}, "SY": {"path": "M511.0,199.79l0.05,-1.33l0.54,-1.36l1.28,-0.99l0.13,-0.45l-0.41,-1.11l-1.14,-0.36l-0.19,-1.74l0.52,-1.0l1.29,-1.21l0.2,-1.18l0.59,0.23l2.62,-0.76l1.36,0.52l2.06,-0.01l2.95,-1.08l3.25,-0.26l-0.67,0.94l-1.28,0.66l-0.21,0.4l0.23,2.01l-0.88,3.19l-10.15,5.73l-2.15,-0.85Z", "name": "Syria"}, "KG": {"path": "M621.35,172.32l-3.87,1.69l-0.96,1.18l-3.04,0.34l-1.13,1.86l-2.36,-0.35l-1.99,0.63l-2.39,1.4l0.06,0.95l-0.4,0.37l-4.52,0.43l-3.02,-0.93l-2.37,0.17l0.11,-0.79l2.32,0.42l1.13,-0.88l1.99,0.2l3.21,-2.14l-0.03,-0.69l-2.97,-1.57l-1.94,0.65l-1.22,-0.74l1.71,-1.58l-0.12,-0.67l-0.36,-0.15l0.32,-0.77l1.36,-0.35l4.02,1.02l0.49,-0.3l0.35,-1.59l1.09,-0.48l3.42,1.22l1.11,-0.31l7.64,0.39l1.16,1.0l1.23,0.39Z", "name": "Kyrgyzstan"}, "KE": {"path": "M506.26,284.69l1.87,-2.56l0.93,-2.15l-1.38,-4.08l-1.06,-1.6l2.82,-2.75l0.79,0.26l0.12,1.41l0.86,0.83l1.9,0.11l3.28,2.13l3.57,0.44l1.05,-1.12l1.96,-0.9l0.82,0.68l1.16,0.09l-1.78,2.45l0.03,9.12l1.3,1.94l-1.37,0.78l-0.67,1.03l-1.08,0.46l-0.34,1.67l-0.81,1.07l-0.45,1.55l-0.68,0.56l-3.2,-2.23l-0.35,-1.58l-8.86,-4.98l0.14,-1.6l-0.57,-1.04Z", "name": "Kenya"}, "SS": {"path": "M481.71,263.34l1.07,-0.72l1.2,-3.18l1.36,-0.26l1.61,1.99l0.87,0.34l1.1,-0.41l1.5,0.07l0.57,0.53l2.49,0.0l0.44,-0.63l1.07,-0.4l0.45,-0.84l0.59,-0.33l1.9,1.33l1.6,-0.2l2.83,-3.33l-0.32,-2.21l1.59,-0.52l-0.24,1.6l0.3,1.83l1.35,1.18l0.2,1.87l0.35,0.41l0.02,1.53l-0.23,0.47l-1.42,0.25l-0.85,1.44l0.3,0.6l1.4,0.16l1.11,1.08l0.59,1.13l1.03,0.53l1.28,2.36l-4.41,3.98l-1.74,0.01l-1.89,0.55l-1.47,-0.52l-1.15,0.57l-2.96,-2.62l-1.3,0.49l-1.06,-0.15l-0.79,0.39l-0.82,-0.22l-1.8,-2.7l-1.91,-1.1l-0.66,-1.5l-2.62,-2.32l-0.18,-0.94l-2.37,-1.6Z", "name": "S. Sudan"}, "SR": {"path": "M283.12,270.19l2.1,0.53l-1.08,1.95l0.2,1.72l0.93,1.49l-0.59,2.03l-0.43,0.71l-1.12,-0.42l-1.32,0.22l-0.93,-0.2l-0.46,0.26l-0.25,0.73l0.33,0.7l-0.89,-0.13l-1.39,-1.97l-0.31,-1.34l-0.97,-0.31l-0.89,-1.47l0.35,-1.61l1.45,-0.82l0.33,-1.87l2.61,0.44l0.57,-0.47l1.75,-0.16Z", "name": "Suriname"}, "KH": {"path": "M689.52,249.39l0.49,1.45l-0.28,2.74l-4.0,1.86l-0.16,0.6l0.68,0.95l-2.06,0.17l-2.05,0.97l-1.82,-0.32l-2.12,-3.7l-0.55,-2.85l1.4,-1.85l3.02,-0.45l2.23,0.35l2.01,0.98l0.51,-0.14l0.95,-1.48l1.74,0.74Z", "name": "Cambodia"}, "SV": {"path": "M195.8,250.13l1.4,-1.19l2.24,1.45l0.98,-0.27l0.44,0.2l-0.27,1.05l-1.14,-0.03l-3.64,-1.21Z", "name": "El Salvador"}, "SK": {"path": "M476.82,151.17l-1.14,1.9l-2.73,-0.92l-0.82,0.2l-0.74,0.8l-3.46,0.73l-0.47,0.69l-1.76,0.33l-1.88,-1.0l-0.18,-0.81l0.38,-0.75l1.87,-0.32l1.74,-1.89l0.83,0.16l0.79,-0.34l1.51,1.04l1.34,-0.63l1.25,0.3l1.65,-0.42l1.81,0.95Z", "name": "Slovakia"}, "KR": {"path": "M737.51,185.84l0.98,-0.1l0.87,-1.17l2.69,-0.32l0.33,-0.29l1.76,2.79l0.58,1.76l0.02,3.12l-0.8,1.32l-2.21,0.55l-1.93,1.13l-1.8,0.19l-0.2,-1.1l0.43,-2.28l-0.95,-2.56l1.43,-0.37l0.23,-0.62l-1.43,-2.06Z", "name": "Korea"}, "SI": {"path": "M456.18,162.07l-0.51,-1.32l0.18,-1.05l1.69,0.2l1.42,-0.71l2.09,-0.07l0.62,-0.51l0.21,0.47l-1.61,0.67l-0.44,1.34l-0.66,0.24l-0.26,0.82l-1.22,-0.49l-0.84,0.46l-0.69,-0.04Z", "name": "Slovenia"}, "KP": {"path": "M736.77,185.16l-0.92,-0.42l-0.88,0.62l-1.21,-0.88l0.96,-1.15l0.59,-2.59l-0.46,-0.74l-2.09,-0.77l1.64,-1.52l2.72,-1.58l1.58,-1.91l1.11,0.78l2.17,0.11l0.41,-0.5l-0.3,-1.22l3.52,-1.18l0.94,-1.4l0.98,1.08l-2.19,2.18l0.01,2.14l-1.06,0.54l-1.41,1.4l-1.7,0.52l-1.25,1.09l-0.14,1.98l0.94,0.45l1.15,1.04l-0.13,0.26l-2.6,0.29l-1.13,1.29l-1.22,0.08Z", "name": "Dem. Rep. Korea"}, "KW": {"path": "M540.81,207.91l0.37,0.86l-0.17,0.76l0.6,1.53l-0.95,0.04l-0.82,-1.28l-1.57,-0.18l1.31,-1.88l1.22,0.17Z", "name": "Kuwait"}, "SN": {"path": "M390.09,248.21l0.12,1.55l0.49,1.46l0.96,0.82l0.05,1.28l-1.26,-0.19l-0.75,0.33l-1.84,-0.61l-5.84,-0.13l-2.54,0.51l-0.22,-1.03l1.77,0.04l2.01,-0.91l1.03,0.48l1.09,0.04l1.29,-0.62l0.14,-0.58l-0.51,-0.74l-1.81,0.25l-1.13,-0.63l-0.79,0.04l-0.72,0.61l-2.31,0.06l-0.92,-1.77l-0.81,-0.64l0.64,-0.35l2.46,-3.74l1.04,0.19l1.38,-0.56l1.19,-0.02l2.72,1.37l3.03,3.48Z", "name": "Senegal"}, "SL": {"path": "M394.46,264.11l-1.73,1.98l-0.58,1.33l-2.07,-1.06l-1.22,-1.26l-0.65,-2.39l1.16,-0.96l0.67,-1.17l1.21,-0.52l1.66,0.0l1.03,1.64l0.52,2.41Z", "name": "Sierra Leone"}, "KZ": {"path": "M552.8,172.89l0.46,-1.27l-0.48,-1.05l-2.96,-1.19l-1.06,-2.58l-1.37,-0.87l-0.03,-0.3l1.95,0.23l0.45,-0.38l0.08,-1.96l1.75,-0.41l2.1,0.45l0.48,-0.33l0.45,-3.04l-0.45,-2.09l-0.41,-0.31l-2.42,0.15l-2.36,-0.73l-2.87,1.37l-2.17,0.61l-0.85,-0.34l0.13,-1.61l-1.6,-2.12l-2.02,-0.08l-1.78,-1.82l1.29,-2.18l-0.57,-0.95l1.62,-2.91l2.21,1.63l0.63,-0.27l0.29,-2.22l4.92,-3.43l3.71,-0.08l8.4,3.6l2.92,-1.36l3.77,-0.06l3.11,1.66l0.51,-0.11l0.6,-0.81l3.31,0.13l0.39,-0.25l0.63,-1.57l-0.17,-0.5l-3.5,-1.98l1.87,-1.27l-0.13,-1.03l1.98,-0.72l0.18,-0.62l-1.59,-2.06l0.81,-0.82l9.23,-1.18l1.33,-0.88l6.18,-1.26l2.26,-1.42l4.08,0.68l0.73,3.33l0.51,0.3l2.48,-0.8l2.79,1.02l-0.17,1.56l0.43,0.44l2.55,-0.24l4.89,-2.53l0.03,0.32l3.15,2.61l5.56,8.47l0.65,0.02l1.12,-1.46l3.15,1.74l3.76,-0.78l1.15,0.49l1.14,1.8l1.84,0.76l0.99,1.29l3.35,-0.25l1.02,1.52l-1.6,1.81l-1.93,0.28l-0.34,0.38l-0.11,3.05l-1.13,1.16l-4.75,-1.0l-0.46,0.27l-1.76,5.47l-1.1,0.59l-4.91,1.23l-0.27,0.54l2.1,4.97l-1.37,0.63l-0.23,0.41l0.13,1.13l-0.88,-0.25l-1.42,-1.13l-7.89,-0.4l-0.92,0.31l-3.73,-1.22l-1.42,0.63l-0.53,1.66l-3.72,-0.94l-1.85,0.43l-0.76,1.4l-4.65,2.62l-1.13,2.08l-0.44,0.01l-0.92,-1.4l-2.87,-0.09l-0.45,-2.14l-0.38,-0.32l-0.8,-0.01l0.0,-2.96l-3.0,-2.22l-7.31,0.58l-2.35,-2.68l-6.71,-3.69l-6.45,1.83l-0.29,0.39l0.1,10.85l-0.7,0.08l-1.62,-2.17l-1.83,-0.96l-3.11,0.59l-0.64,0.51Z", "name": "Kazakhstan"}, "SA": {"path": "M537.53,210.34l2.0,0.24l0.9,1.32l1.49,-0.06l0.87,2.08l1.29,0.76l0.51,0.99l1.56,1.03l-0.1,1.9l0.32,0.9l1.58,2.47l0.76,0.53l0.7,-0.04l1.68,4.23l7.53,1.33l0.51,-0.29l0.77,1.25l-1.55,4.87l-7.29,2.52l-7.3,1.03l-2.34,1.17l-1.88,2.74l-0.76,0.28l-0.82,-0.78l-0.91,0.12l-2.88,-0.51l-3.51,0.25l-0.86,-0.56l-0.57,0.15l-0.66,1.27l0.16,1.11l-0.43,0.32l-0.93,-1.4l-0.33,-1.16l-1.23,-0.88l-1.27,-2.06l-0.78,-2.22l-1.73,-1.79l-1.14,-0.48l-1.54,-2.31l-0.21,-3.41l-1.44,-2.93l-1.27,-1.16l-1.33,-0.57l-1.31,-3.37l-0.77,-0.67l-0.97,-1.97l-2.8,-4.03l-1.06,-0.17l0.37,-1.96l0.2,-0.72l2.74,0.3l1.08,-0.84l0.6,-0.94l1.74,-0.35l0.65,-1.03l0.71,-0.4l0.1,-0.62l-2.06,-2.28l4.39,-1.22l0.48,-0.37l2.77,0.69l3.66,1.9l7.03,5.5l4.87,0.3Z", "name": "Saudi Arabia"}, "SE": {"path": "M480.22,89.3l-4.03,1.17l-2.43,2.86l0.26,2.57l-8.77,6.64l-1.78,5.79l1.78,2.68l2.22,1.96l-2.07,3.77l-2.72,1.13l-0.95,6.04l-1.29,3.01l-2.74,-0.31l-0.4,0.22l-1.31,2.59l-2.34,0.13l-0.75,-3.09l-2.08,-4.03l-1.83,-4.96l1.0,-1.93l2.14,-2.7l0.83,-4.45l-1.6,-2.17l-0.15,-4.94l1.48,-3.39l2.58,-0.15l0.87,-1.59l-0.78,-1.57l3.76,-5.59l4.04,-7.48l2.17,0.01l0.39,-0.29l0.57,-2.07l4.37,0.64l0.46,-0.34l0.33,-2.56l1.1,-0.13l6.94,4.87l0.06,6.32l0.66,1.36Z", "name": "Sweden"}, "SD": {"path": "M505.98,259.4l-0.34,-0.77l-1.17,-0.9l-0.26,-1.61l0.29,-1.81l-0.34,-0.46l-1.16,-0.17l-0.54,0.59l-1.23,0.11l-0.28,0.65l0.53,0.65l0.17,1.22l-2.44,3.0l-0.96,0.19l-2.39,-1.4l-0.95,0.52l-0.38,0.78l-1.11,0.41l-0.29,0.5l-1.94,0.0l-0.54,-0.52l-1.81,-0.09l-0.95,0.4l-2.45,-2.35l-2.07,0.54l-0.73,1.26l-0.6,2.1l-1.25,0.58l-0.75,-0.62l0.27,-2.65l-1.48,-1.78l-0.22,-1.48l-0.92,-0.96l-0.02,-1.29l-0.57,-1.16l-0.68,-0.16l0.69,-1.29l-0.18,-1.14l0.65,-0.62l0.03,-0.55l-0.36,-0.41l1.55,-2.97l1.91,0.16l0.43,-0.4l-0.1,-10.94l2.49,-0.01l0.4,-0.4l-0.0,-4.82l29.02,0.0l0.64,2.04l-0.49,0.66l0.36,2.69l0.93,3.16l2.12,1.55l-0.89,1.04l-1.72,0.39l-0.98,0.9l-1.43,5.65l0.24,1.15l-0.38,2.06l-0.96,2.38l-1.53,1.31l-1.32,2.91l-1.22,0.86l-0.37,1.34Z", "name": "Sudan"}, "DO": {"path": "M241.8,239.2l0.05,-0.65l-0.46,-0.73l0.42,-0.44l0.19,-1.0l-0.09,-1.53l1.66,0.01l1.99,0.63l0.33,0.67l1.28,0.19l0.33,0.76l1.0,0.08l0.8,0.62l-0.45,0.51l-1.13,-0.47l-1.88,-0.01l-1.27,0.59l-0.75,-0.55l-1.01,0.54l-0.79,1.4l-0.23,-0.61Z", "name": "Dominican Rep."}, "DJ": {"path": "M528.43,256.18l-0.45,0.66l-0.58,-0.25l-1.51,0.13l-0.18,-1.01l1.45,-1.95l0.83,0.17l0.77,-0.44l0.2,1.0l-1.2,0.51l-0.06,0.7l0.73,0.47Z", "name": "Djibouti"}, "DK": {"path": "M452.28,129.07l-1.19,2.24l-2.13,-1.6l-0.23,-0.95l2.98,-0.95l0.57,1.26ZM447.74,126.31l-0.26,0.57l-0.88,-0.07l-1.8,2.53l0.48,1.69l-1.09,0.36l-1.61,-0.39l-0.89,-1.69l-0.07,-3.43l0.96,-1.73l2.02,-0.2l1.09,-1.07l1.33,-0.67l-0.05,1.06l-0.73,1.41l0.3,1.0l1.2,0.64Z", "name": "Denmark"}, "DE": {"path": "M453.14,155.55l-0.55,-0.36l-1.2,-0.1l-1.87,0.57l-2.13,-0.13l-0.56,0.63l-0.86,-0.6l-0.96,0.09l-2.57,-0.93l-0.85,0.67l-1.47,-0.02l0.24,-1.75l1.23,-2.14l-0.28,-0.59l-3.52,-0.58l-0.92,-0.66l0.12,-1.2l-0.48,-0.88l0.27,-2.17l-0.37,-3.03l1.41,-0.22l0.63,-1.26l0.66,-3.19l-0.41,-1.18l0.26,-0.39l1.66,-0.15l0.33,0.54l0.62,0.07l1.7,-1.69l-0.54,-3.02l1.37,0.33l1.31,-0.37l0.31,1.18l2.25,0.71l-0.02,0.92l0.5,0.4l2.55,-0.65l1.34,-0.87l2.57,1.24l1.06,0.98l0.48,1.44l-0.57,0.74l-0.0,0.48l0.87,1.15l0.57,1.64l-0.14,1.29l0.82,1.7l-1.5,-0.07l-0.56,0.57l-4.47,2.15l-0.22,0.54l0.68,2.26l2.58,2.16l-0.66,1.11l-0.79,0.36l-0.23,0.43l0.32,1.87Z", "name": "Germany"}, "YE": {"path": "M528.27,246.72l0.26,-0.42l-0.22,-1.01l0.19,-1.5l0.92,-0.69l-0.07,-1.35l0.39,-0.75l1.01,0.47l3.34,-0.27l3.76,0.41l0.95,0.81l1.36,-0.58l1.74,-2.62l2.18,-1.09l6.86,-0.94l2.48,5.41l-1.64,0.76l-0.56,1.9l-6.23,2.16l-2.29,1.8l-1.93,0.05l-1.41,1.02l-4.24,0.74l-1.72,1.49l-3.28,0.19l-0.52,-1.18l0.02,-1.51l-1.34,-3.29Z", "name": "Yemen"}, "DZ": {"path": "M441.46,188.44l-0.32,1.07l0.39,2.64l-0.54,2.16l-1.58,1.82l0.37,2.39l1.91,1.55l0.18,0.8l1.42,1.03l1.84,7.23l0.12,1.16l-0.57,5.0l0.2,1.51l-0.87,0.99l-0.02,0.51l1.41,1.86l0.14,1.2l0.89,1.48l0.5,0.16l0.98,-0.41l1.73,1.08l0.82,1.23l-8.22,4.81l-7.23,5.11l-3.43,1.13l-2.3,0.21l-0.28,-1.59l-2.56,-1.09l-0.67,-1.25l-26.12,-17.86l0.01,-3.47l3.77,-1.88l2.44,-0.41l2.12,-0.75l1.08,-1.42l2.81,-1.05l0.35,-2.08l1.33,-0.29l1.04,-0.94l3.47,-0.69l0.46,-1.08l-0.1,-0.45l-0.58,-0.52l-0.82,-2.81l-0.19,-1.83l-0.78,-1.49l2.03,-1.31l2.63,-0.48l1.7,-1.22l2.31,-0.84l8.24,-0.73l1.49,0.38l2.28,-1.1l2.46,-0.02l0.92,0.6l1.35,-0.05Z", "name": "Algeria"}, "US": {"path": "M892.72,99.2l1.31,0.53l1.41,-0.37l1.89,0.98l1.89,0.42l-1.32,0.58l-2.9,-1.53l-2.08,0.22l-0.26,-0.15l0.07,-0.67ZM183.22,150.47l0.37,1.47l1.12,0.85l4.23,0.7l2.39,0.98l2.17,-0.38l1.85,0.5l-1.55,0.65l-3.49,2.61l-0.16,0.77l0.5,0.39l2.33,-0.61l1.77,1.02l5.15,-2.4l-0.31,0.65l0.25,0.56l1.36,0.38l1.71,1.16l4.7,-0.88l0.67,0.85l1.31,0.21l0.58,0.58l-1.34,0.17l-2.18,-0.32l-3.6,0.89l-2.71,3.25l0.35,0.9l0.59,-0.0l0.55,-0.6l-1.36,4.65l0.29,3.09l0.67,1.58l0.61,0.45l1.77,-0.44l1.6,-1.96l0.14,-2.21l-0.82,-1.96l0.11,-1.13l1.19,-2.37l0.44,-0.33l0.48,0.75l0.4,-0.29l0.4,-1.37l0.6,-0.47l0.24,-0.8l1.69,0.49l1.65,1.08l-0.03,2.37l-1.27,1.13l-0.0,1.13l0.87,0.36l1.66,-1.29l0.5,0.17l0.5,2.6l-2.49,3.75l0.17,0.61l1.54,0.62l1.48,0.17l1.92,-0.44l4.72,-2.15l2.16,-1.8l-0.05,-1.24l0.75,-0.22l3.92,0.36l2.12,-1.05l0.21,-0.4l-0.28,-1.48l3.27,-2.4l8.32,-0.02l0.56,-0.82l1.9,-0.77l0.93,-1.51l0.74,-2.37l1.58,-1.98l0.92,0.62l1.47,-0.47l0.8,0.66l-0.0,4.09l1.96,2.6l-2.34,1.31l-5.37,2.09l-1.83,2.72l0.02,1.79l0.83,1.59l0.54,0.23l-6.19,0.94l-2.2,0.89l-0.23,0.48l0.45,0.29l2.99,-0.46l-2.19,0.56l-1.13,0.0l-0.15,-0.32l-0.48,0.08l-0.76,0.82l0.22,0.67l0.32,0.06l-0.41,1.62l-1.27,1.58l-1.48,-1.07l-0.49,-0.04l-0.16,0.46l0.52,1.58l0.61,0.59l0.03,0.79l-0.95,1.38l-1.21,-1.22l-0.27,-2.27l-0.35,-0.35l-0.42,0.25l-0.48,1.27l0.33,1.41l-0.97,-0.27l-0.48,0.24l0.18,0.5l1.52,0.83l0.1,2.52l0.79,0.51l0.52,3.42l-1.42,1.88l-2.47,0.8l-1.71,1.66l-1.31,0.25l-1.27,1.03l-0.43,0.99l-2.69,1.78l-2.64,3.03l-0.45,2.12l0.45,2.08l0.85,2.38l1.09,1.9l0.04,1.2l1.16,3.06l-0.18,2.69l-0.55,1.43l-0.47,0.21l-0.89,-0.23l-0.49,-1.18l-0.87,-0.56l-2.75,-5.16l0.48,-1.68l-0.72,-1.78l-2.01,-2.38l-1.12,-0.53l-2.72,1.18l-1.47,-1.35l-1.57,-0.68l-2.99,0.31l-2.17,-0.3l-2.0,0.19l-1.15,0.46l-0.19,0.58l0.39,0.63l0.14,1.34l-0.84,-0.2l-0.84,0.46l-1.58,-0.07l-2.08,-1.44l-2.09,0.33l-1.91,-0.62l-3.73,0.84l-2.39,2.07l-2.54,1.22l-1.45,1.41l-0.61,1.38l0.34,3.71l-0.29,0.02l-3.5,-1.33l-1.25,-3.11l-1.44,-1.5l-2.24,-3.56l-1.76,-1.09l-2.27,-0.01l-1.71,2.07l-1.76,-0.69l-1.16,-0.74l-1.52,-2.98l-3.93,-3.16l-4.34,-0.0l-0.4,0.4l-0.0,0.74l-6.5,0.02l-9.02,-3.14l-0.34,-0.71l-5.7,0.49l-0.43,-1.29l-1.62,-1.61l-1.14,-0.38l-0.55,-0.88l-1.28,-0.13l-1.01,-0.77l-2.22,-0.27l-0.43,-0.3l-0.36,-1.58l-2.4,-2.83l-2.01,-3.85l-0.06,-0.9l-2.92,-3.26l-0.33,-2.29l-1.3,-1.66l0.52,-2.37l-0.09,-2.57l-0.78,-2.3l0.95,-2.82l0.61,-5.68l-0.47,-4.27l-1.46,-4.08l3.19,0.79l1.26,2.83l0.69,0.08l0.69,-1.14l-1.1,-4.79l68.76,-0.0l0.4,-0.4l0.14,-0.86ZM32.44,67.52l1.73,1.97l0.55,0.05l0.99,-0.79l3.65,0.24l-0.09,0.62l0.32,0.45l3.83,0.77l2.61,-0.43l5.19,1.4l4.84,0.43l1.89,0.57l3.42,-0.7l6.14,1.87l-0.03,38.06l0.38,0.4l2.39,0.11l2.31,0.98l3.9,3.99l0.55,0.04l2.4,-2.03l2.16,-1.04l1.2,1.71l3.95,3.14l4.09,6.63l4.2,2.29l0.06,1.83l-1.02,1.23l-1.16,-1.08l-2.04,-1.03l-0.67,-2.89l-3.28,-3.03l-1.65,-3.57l-6.35,-0.32l-2.82,-1.01l-5.26,-3.85l-6.77,-2.04l-3.53,0.3l-4.81,-1.69l-3.25,-1.63l-2.78,0.8l-0.28,0.46l0.44,2.21l-3.91,0.96l-2.26,1.27l-2.3,0.65l-0.27,-1.65l1.05,-3.42l2.49,-1.09l0.16,-0.6l-0.69,-0.96l-0.55,-0.1l-3.19,2.12l-1.78,2.56l-3.55,2.61l-0.04,0.61l1.56,1.52l-2.07,2.29l-5.11,2.57l-0.77,1.66l-3.76,1.77l-0.92,1.73l-2.69,1.38l-1.81,-0.22l-6.95,3.32l-3.97,0.91l4.85,-2.5l2.59,-1.86l3.26,-0.52l1.19,-1.4l3.42,-2.1l2.59,-2.27l0.42,-2.68l1.23,-2.1l-0.04,-0.46l-0.45,-0.11l-2.68,1.03l-0.63,-0.49l-0.53,0.03l-1.05,1.04l-1.36,-1.54l-0.66,0.08l-0.32,0.62l-0.58,-1.14l-0.56,-0.16l-2.41,1.42l-1.07,-0.0l-0.17,-1.75l0.3,-1.71l-1.61,-1.33l-3.41,0.59l-1.96,-1.63l-1.57,-0.84l-0.15,-2.21l-1.7,-1.43l0.82,-1.88l1.99,-2.12l0.88,-1.92l1.71,-0.24l2.04,0.51l1.87,-1.77l1.91,0.25l1.91,-1.23l0.17,-0.43l-0.47,-1.82l-1.07,-0.7l1.39,-1.17l0.12,-0.45l-0.39,-0.26l-1.65,0.07l-2.66,0.88l-0.75,0.78l-1.92,-0.8l-3.46,0.44l-3.44,-0.91l-1.06,-1.61l-2.65,-1.99l2.91,-1.43l5.5,-2.0l1.52,0.0l-0.26,1.62l0.41,0.46l5.29,-0.16l0.3,-0.65l-2.03,-2.59l-3.14,-1.68l-1.79,-2.12l-2.4,-1.83l-3.09,-1.24l1.04,-1.69l4.23,-0.14l3.36,-2.07l0.73,-2.27l2.39,-1.99l2.42,-0.52l4.65,-1.97l2.46,0.23l3.71,-2.35l3.5,0.89ZM37.6,123.41l-2.25,1.23l-0.95,-0.69l-0.29,-1.24l3.21,-1.63l1.42,0.21l0.67,0.7l-1.8,1.42ZM31.06,234.03l0.98,0.47l0.74,0.87l-1.77,1.07l-0.44,-1.53l0.49,-0.89ZM29.34,232.07l0.18,0.05l0.08,0.05l-0.16,0.03l-0.11,-0.14ZM25.16,230.17l0.05,-0.03l0.18,0.22l-0.13,-0.01l-0.1,-0.18ZM5.89,113.26l-1.08,0.41l-2.21,-1.12l1.53,-0.4l1.62,0.28l0.14,0.83Z", "name": "United States"}, "UY": {"path": "M286.85,372.74l-0.92,1.5l-2.59,1.44l-1.69,-0.52l-1.42,0.26l-2.39,-1.19l-1.52,0.08l-1.27,-1.3l0.16,-1.5l0.56,-0.79l-0.02,-2.73l1.21,-4.74l1.19,-0.21l2.37,2.0l1.08,0.03l4.36,3.17l1.22,1.6l-0.96,1.5l0.61,1.4Z", "name": "Uruguay"}, "LB": {"path": "M510.37,198.01l-0.88,0.51l1.82,-3.54l0.62,0.08l0.22,0.61l-1.13,0.88l-0.65,1.47Z", "name": "Lebanon"}, "LA": {"path": "M689.54,248.53l-1.76,-0.74l-0.49,0.15l-0.94,1.46l-1.32,-0.64l0.62,-0.98l0.11,-2.17l-2.04,-2.42l-0.25,-2.65l-1.9,-2.1l-2.15,-0.31l-0.78,0.91l-1.12,0.06l-1.05,-0.4l-2.06,1.2l-0.04,-1.59l0.61,-2.68l-0.36,-0.49l-1.35,-0.1l-0.11,-1.23l-0.96,-0.88l1.96,-1.89l0.39,0.36l1.33,0.07l0.42,-0.45l-0.34,-2.66l0.7,-0.21l1.28,1.81l1.11,2.35l0.36,0.23l2.82,0.02l0.71,1.67l-1.39,0.65l-0.72,0.93l0.13,0.6l2.91,1.51l3.6,5.25l1.88,1.78l0.56,1.62l-0.35,1.96Z", "name": "Lao PDR"}, "TW": {"path": "M724.01,226.68l-0.74,1.48l-0.9,-1.52l-0.25,-1.74l1.38,-2.44l1.73,-1.74l0.64,0.44l-1.85,5.52Z", "name": "Taiwan"}, "TT": {"path": "M266.64,259.32l0.28,-1.16l1.13,-0.22l-0.06,1.2l-1.35,0.18Z", "name": "Trinidad and Tobago"}, "TR": {"path": "M513.21,175.47l3.64,1.17l3.05,-0.44l2.1,0.26l3.11,-1.56l2.46,-0.13l2.19,1.33l0.33,0.82l-0.22,1.33l0.25,0.44l2.28,1.13l-1.17,0.57l-0.21,0.45l0.75,3.2l-0.41,1.16l1.13,1.92l-0.55,0.22l-0.9,-0.67l-2.91,-0.37l-1.24,0.46l-4.23,0.41l-2.81,1.05l-1.91,0.01l-1.52,-0.53l-2.58,0.75l-0.66,-0.45l-0.62,0.3l-0.12,1.45l-0.89,0.84l-0.47,-0.67l0.79,-1.3l-0.41,-0.2l-1.43,0.23l-2.0,-0.63l-2.02,1.65l-3.51,0.3l-2.13,-1.53l-2.7,-0.1l-0.86,1.24l-1.38,0.27l-2.29,-1.44l-2.71,-0.01l-1.37,-2.65l-1.68,-1.52l1.07,-1.99l-0.09,-0.49l-1.27,-1.12l2.37,-2.41l3.7,-0.11l1.28,-2.24l4.49,0.37l3.21,-1.97l2.81,-0.82l3.99,-0.06l4.29,2.07ZM488.79,176.72l-1.72,1.31l-0.5,-0.88l1.37,-2.57l-0.7,-0.85l1.7,-0.63l1.8,0.34l0.46,1.17l1.76,0.78l-2.87,0.32l-1.3,1.01Z", "name": "Turkey"}, "LK": {"path": "M624.16,268.99l-1.82,0.48l-0.99,-1.67l-0.42,-3.46l0.95,-3.43l1.21,0.98l2.26,4.19l-0.34,2.33l-0.85,0.58Z", "name": "Sri Lanka"}, "LV": {"path": "M489.16,122.85l0.96,0.66l0.22,1.65l0.68,1.76l-3.65,1.7l-2.23,-1.58l-1.29,-0.26l-0.68,-0.77l-2.42,0.34l-4.16,-0.23l-2.47,0.9l0.06,-1.98l1.13,-2.06l1.95,-1.02l2.12,2.58l2.01,-0.07l0.38,-0.33l0.44,-2.52l1.76,-0.53l3.06,1.7l2.15,0.07Z", "name": "Latvia"}, "LT": {"path": "M486.93,129.3l0.17,1.12l-1.81,0.98l-0.72,2.02l-2.47,1.18l-2.1,-0.02l-0.73,-1.05l-1.06,-0.3l-0.09,-1.87l-3.56,-1.13l-0.43,-2.36l2.48,-0.94l4.12,0.22l2.25,-0.31l0.52,0.69l1.24,0.21l2.19,1.56Z", "name": "Lithuania"}, "LU": {"path": "M436.08,149.45l-0.48,-0.07l0.3,-1.28l0.27,0.4l-0.09,0.96Z", "name": "Luxembourg"}, "LR": {"path": "M399.36,265.97l0.18,1.54l-0.48,0.99l0.08,0.47l2.47,1.8l-0.33,2.8l-2.65,-1.13l-5.78,-4.61l0.58,-1.32l2.1,-2.33l0.86,-0.22l0.77,1.14l-0.14,0.85l0.59,0.87l1.0,0.14l0.76,-0.99Z", "name": "Liberia"}, "LS": {"path": "M491.06,363.48l-0.49,0.15l-1.49,-1.67l1.1,-1.43l2.19,-1.44l1.51,1.27l-0.98,1.82l-1.23,0.38l-0.62,0.93Z", "name": "Lesotho"}, "TH": {"path": "M670.27,255.86l-1.41,3.87l0.15,2.0l0.38,0.36l1.38,0.07l0.9,2.04l0.55,2.34l1.4,1.44l1.61,0.38l0.96,0.97l-0.5,0.64l-1.1,0.2l-0.34,-1.18l-2.04,-1.1l-0.63,0.23l-0.63,-0.62l-0.48,-1.3l-2.56,-2.63l-0.73,0.41l0.95,-3.89l2.16,-4.22ZM670.67,254.77l-0.92,-2.18l-0.26,-2.61l-2.14,-3.06l0.71,-0.49l0.89,-2.59l-3.61,-5.45l0.87,-0.51l1.05,-2.58l1.74,-0.18l2.6,-1.59l0.76,0.56l0.13,1.39l0.37,0.36l1.23,0.09l-0.51,2.28l0.05,2.42l0.6,0.34l2.43,-1.42l0.77,0.39l1.47,-0.07l0.71,-0.88l1.48,0.14l1.71,1.88l0.25,2.65l1.92,2.11l-0.1,1.89l-0.61,0.86l-2.22,-0.33l-3.5,0.64l-1.6,2.12l0.36,2.58l-1.51,-0.79l-1.84,-0.01l0.28,-1.52l-0.4,-0.47l-2.21,0.01l-0.4,0.37l-0.19,2.74l-0.34,0.93Z", "name": "Thailand"}, "TF": {"path": "M596.68,420.38l-3.2,0.18l-0.05,-1.26l0.39,-1.41l1.3,0.78l2.08,0.35l-0.52,1.36Z", "name": "Fr. S. Antarctic Lands"}, "TG": {"path": "M422.7,257.63l-0.09,1.23l1.53,1.52l0.08,1.09l0.5,0.65l-0.11,5.62l0.49,1.47l-1.31,0.35l-1.02,-2.13l-0.18,-1.12l0.53,-2.19l-0.63,-1.16l-0.22,-3.68l-1.01,-1.4l0.07,-0.28l1.37,0.03Z", "name": "Togo"}, "TD": {"path": "M480.25,235.49l0.12,9.57l-2.1,0.05l-1.14,1.89l-0.69,1.63l0.34,0.73l-0.66,0.91l0.24,0.89l-0.86,1.95l0.45,0.5l0.6,-0.1l0.34,0.64l0.03,1.38l0.9,1.04l-1.45,0.43l-1.27,1.03l-1.83,2.76l-2.16,1.07l-2.31,-0.15l-0.86,0.25l-0.26,0.49l0.17,0.61l-2.11,1.68l-2.85,0.87l-1.09,-0.57l-0.73,0.66l-1.12,0.1l-1.1,-3.12l-1.25,-0.64l-1.22,-1.22l0.29,-0.64l3.01,0.04l0.35,-0.6l-1.3,-2.2l-0.08,-3.31l-0.97,-1.66l0.22,-1.04l-0.38,-0.48l-1.22,-0.04l0.0,-1.25l-0.98,-1.07l0.96,-3.01l3.25,-2.65l0.13,-3.33l0.95,-5.18l0.52,-1.07l-0.1,-0.48l-0.91,-0.78l-0.2,-0.96l-0.8,-0.58l-0.55,-3.65l2.1,-1.2l19.57,9.83Z", "name": "Chad"}, "LY": {"path": "M483.48,203.15l-0.75,1.1l0.29,1.39l-0.6,1.83l0.73,2.14l0.0,24.12l-2.48,0.01l-0.41,0.85l-19.41,-9.76l-4.41,2.28l-1.37,-1.33l-3.82,-1.1l-1.14,-1.65l-1.98,-1.23l-1.22,0.32l-0.66,-1.11l-0.17,-1.26l-1.28,-1.69l0.87,-1.19l-0.07,-4.34l0.43,-2.27l-0.86,-3.45l1.13,-0.76l0.22,-1.16l-0.2,-1.03l3.48,-2.61l0.29,-1.94l2.45,0.8l1.18,-0.21l1.98,0.44l3.15,1.18l1.37,2.54l5.72,1.67l2.64,1.35l1.61,-0.72l1.29,-1.34l-0.44,-2.34l0.66,-1.13l1.67,-1.21l1.57,-0.35l3.14,0.53l1.08,1.28l3.99,0.78l0.36,0.54Z", "name": "Libya"}, "AE": {"path": "M550.76,223.97l1.88,-0.4l3.84,0.02l4.78,-4.75l0.19,0.36l0.26,1.58l-0.81,0.01l-0.39,0.35l-0.08,2.04l-0.81,0.63l-0.01,0.96l-0.66,0.99l-0.39,1.41l-7.08,-1.25l-0.7,-1.96Z", "name": "United Arab Emirates"}, "VE": {"path": "M240.68,256.69l0.53,0.75l-0.02,1.06l-1.07,1.78l0.95,2.0l0.42,0.22l1.4,-0.44l0.56,-1.83l-0.77,-1.17l-0.1,-1.47l2.82,-0.93l0.26,-0.49l-0.28,-0.96l0.3,-0.28l0.66,1.31l1.96,0.26l1.4,1.22l0.08,0.68l0.39,0.35l4.81,-0.22l1.49,1.11l1.92,0.31l1.67,-0.84l0.22,-0.6l3.44,-0.14l-0.17,0.55l0.86,1.19l2.19,0.35l1.67,1.1l0.37,1.86l0.41,0.32l1.55,0.17l-1.66,1.35l-0.22,0.92l0.65,0.97l-1.67,0.54l-0.3,0.4l0.04,0.99l-0.56,0.57l-0.01,0.55l1.85,2.27l-0.66,0.69l-4.47,1.29l-0.72,0.54l-3.69,-0.9l-0.71,0.27l-0.02,0.7l0.91,0.53l-0.08,1.54l0.35,1.58l0.35,0.31l1.66,0.17l-1.3,0.52l-0.48,1.13l-2.68,0.91l-0.6,0.77l-1.57,0.13l-1.17,-1.13l-0.8,-2.52l-1.25,-1.26l1.02,-1.23l-1.29,-2.95l0.18,-1.62l1.0,-2.21l-0.2,-0.49l-1.14,-0.46l-4.02,0.36l-1.82,-2.1l-1.57,-0.33l-2.99,0.22l-1.06,-0.97l0.25,-1.23l-0.2,-1.01l-0.59,-0.69l-0.29,-1.06l-1.08,-0.39l0.78,-2.79l1.9,-2.11Z", "name": "Venezuela"}, "AF": {"path": "M600.7,188.88l-1.57,1.3l-0.1,0.48l0.8,2.31l-1.09,1.04l-0.03,1.27l-0.48,0.71l-2.16,-0.08l-0.37,0.59l0.78,1.48l-1.38,0.69l-1.06,1.69l0.06,1.7l-0.65,0.52l-0.91,-0.21l-1.91,0.36l-0.48,0.77l-1.88,0.13l-1.4,1.56l-0.18,2.32l-2.91,1.02l-1.65,-0.23l-0.71,0.55l-1.41,-0.3l-2.41,0.39l-3.52,-1.17l1.96,-2.35l-0.21,-1.78l-0.3,-0.34l-1.63,-0.4l-0.19,-1.58l-0.75,-2.03l0.95,-1.36l-0.19,-0.6l-0.73,-0.28l1.47,-4.8l2.14,0.9l2.12,-0.36l0.74,-1.34l1.77,-0.39l1.54,-0.92l0.63,-2.31l1.87,-0.5l0.49,-0.81l0.94,0.56l2.13,0.11l2.55,0.92l1.95,-0.83l0.65,0.43l0.56,-0.13l0.69,-1.12l1.57,-0.08l0.72,-1.66l0.79,-0.74l0.8,0.39l-0.17,0.56l0.71,0.58l-0.08,2.39l1.11,0.95ZM601.37,188.71l1.73,-0.71l1.43,-1.18l4.03,0.35l-2.23,0.74l-4.95,0.8Z", "name": "Afghanistan"}, "IQ": {"path": "M530.82,187.47l0.79,0.66l1.26,-0.28l1.46,3.08l1.63,0.94l0.14,1.23l-1.22,1.05l-0.53,2.52l1.73,2.67l3.12,1.62l1.15,1.88l-0.38,1.85l0.39,0.48l0.41,-0.0l0.02,1.07l0.76,0.94l-2.47,-0.1l-1.71,2.44l-4.31,-0.2l-7.02,-5.48l-3.73,-1.94l-2.88,-0.73l-0.85,-2.87l5.45,-3.02l0.95,-3.43l-0.19,-1.96l1.27,-0.7l1.22,-1.7l0.87,-0.36l2.69,0.34Z", "name": "Iraq"}, "IS": {"path": "M384.14,88.06l-0.37,2.61l2.54,2.51l-2.9,2.75l-9.19,3.4l-9.25,-1.66l1.7,-1.22l-0.1,-0.7l-4.05,-1.47l2.96,-0.53l0.33,-0.43l-0.11,-1.2l-0.33,-0.36l-4.67,-0.85l1.28,-2.04l3.45,-0.56l3.77,2.72l0.44,0.02l3.64,-2.16l3.3,1.08l3.98,-2.16l3.58,0.26Z", "name": "Iceland"}, "IR": {"path": "M533.43,187.16l-1.27,-2.15l0.42,-0.98l-0.71,-3.04l1.03,-0.5l0.33,0.83l1.26,1.35l2.05,0.51l1.11,-0.16l2.89,-2.11l0.62,-0.14l0.39,0.46l-0.72,1.2l0.06,0.49l1.56,1.53l0.65,0.04l0.67,1.81l2.56,0.83l1.87,1.48l3.69,0.49l3.91,-0.76l0.47,-0.73l2.17,-0.6l1.66,-1.54l1.51,0.08l1.18,-0.53l1.59,0.24l2.83,1.48l1.88,0.3l2.77,2.47l1.77,0.18l0.18,1.99l-1.68,5.49l0.24,0.5l0.61,0.23l-0.82,1.48l0.8,2.18l0.19,1.71l0.3,0.34l1.63,0.4l0.15,1.32l-2.15,2.35l-0.01,0.53l2.21,3.03l2.34,1.24l0.06,2.14l1.24,0.72l0.11,0.69l-3.31,1.27l-1.08,3.03l-9.68,-1.68l-0.99,-3.05l-1.43,-0.73l-2.17,0.46l-2.47,1.26l-2.83,-0.82l-2.46,-2.02l-2.41,-0.8l-3.42,-6.06l-0.48,-0.2l-1.18,0.39l-1.44,-0.82l-0.5,0.08l-0.65,0.74l-0.97,-1.01l-0.02,-1.31l-0.71,-0.39l0.26,-1.81l-1.29,-2.11l-3.13,-1.63l-1.58,-2.43l0.5,-1.9l1.31,-1.26l-0.19,-1.66l-1.74,-1.1l-1.57,-3.3Z", "name": "Iran"}, "AM": {"path": "M536.99,182.33l-0.28,0.03l-1.23,-2.13l-0.93,0.01l-0.62,-0.66l-0.69,-0.07l-0.96,-0.81l-1.56,-0.62l0.19,-1.12l-0.26,-0.79l2.72,-0.36l1.09,1.01l-0.17,0.92l1.02,0.78l-0.47,0.62l0.08,0.56l2.04,1.23l0.04,1.4Z", "name": "Armenia"}, "AL": {"path": "M470.32,171.8l0.74,0.03l0.92,0.89l-0.17,1.95l0.36,1.28l1.01,0.82l-1.82,2.83l-0.19,-0.61l-1.25,-0.89l-0.18,-1.2l0.53,-2.82l-0.54,-1.47l0.6,-0.83Z", "name": "Albania"}, "AO": {"path": "M461.55,300.03l1.26,3.15l1.94,2.36l2.47,-0.53l1.25,0.32l0.44,-0.18l0.93,-1.92l1.31,-0.08l0.41,-0.44l0.47,-0.0l-0.1,0.41l0.39,0.49l2.65,-0.02l0.03,1.19l0.48,1.01l-0.34,1.52l0.18,1.55l0.83,1.04l-0.13,2.85l0.54,0.39l3.96,-0.41l-0.1,1.79l0.39,1.05l-0.24,1.43l-4.7,-0.03l-0.4,0.39l-0.12,8.13l2.92,3.49l-3.83,0.88l-5.89,-0.36l-1.88,-1.24l-10.47,0.22l-1.3,-1.01l-1.85,-0.16l-2.4,0.77l-0.15,-1.06l0.33,-2.16l1.0,-3.45l1.35,-3.2l2.24,-2.8l0.33,-2.06l-0.13,-1.53l-0.8,-1.08l-1.21,-2.87l0.87,-1.62l-1.27,-4.12l-1.17,-1.53l2.47,-0.63l7.03,0.03ZM451.71,298.87l-0.47,-1.25l1.25,-1.11l0.32,0.3l-0.99,1.03l-0.12,1.03Z", "name": "Angola"}, "AR": {"path": "M249.29,428.93l-2.33,-0.52l-5.83,-0.43l-0.89,-1.66l0.05,-2.37l-0.45,-0.4l-1.43,0.18l-0.67,-0.91l-0.2,-3.13l1.88,-1.47l0.79,-2.04l-0.25,-1.7l1.3,-2.68l0.91,-4.15l-0.22,-1.69l0.85,-0.45l0.2,-0.44l-0.27,-1.16l-0.98,-0.68l0.59,-0.92l-0.05,-0.5l-1.04,-1.07l-0.52,-3.1l0.97,-0.86l-0.42,-3.58l1.2,-5.43l1.38,-0.98l0.16,-0.43l-0.75,-2.79l-0.01,-2.43l1.78,-1.75l0.06,-2.57l1.43,-2.85l0.01,-2.58l-0.69,-0.74l-1.09,-4.52l1.47,-2.7l-0.18,-2.79l0.85,-2.35l1.59,-2.46l1.73,-1.64l0.05,-0.52l-0.6,-0.84l0.44,-0.85l-0.07,-4.19l2.7,-1.44l0.86,-2.75l-0.21,-0.71l1.76,-2.01l2.9,0.57l1.38,1.78l0.68,-0.08l0.87,-1.87l2.39,0.09l4.95,4.77l2.17,0.49l3.0,1.92l2.47,1.0l0.25,0.82l-2.37,3.93l0.23,0.59l5.39,1.16l2.12,-0.44l2.45,-2.16l0.5,-2.38l0.76,-0.31l0.98,1.2l-0.04,1.8l-3.67,2.51l-2.85,2.66l-3.43,3.88l-1.3,5.07l0.01,2.72l-0.54,0.73l-0.36,3.28l3.14,2.64l-0.16,2.11l1.4,1.11l-0.1,1.09l-2.29,3.52l-3.55,1.49l-4.92,0.6l-2.71,-0.29l-0.43,0.51l0.5,1.65l-0.49,2.1l0.38,1.42l-1.19,0.83l-2.36,0.38l-2.3,-1.04l-1.38,0.83l0.41,3.64l1.69,0.91l1.4,-0.71l0.36,0.76l-2.04,0.86l-2.01,1.89l-0.97,4.63l-2.34,0.1l-2.09,1.78l-0.61,2.75l2.46,2.31l2.17,0.63l-0.7,2.32l-2.83,1.73l-1.73,3.86l-2.17,1.22l-1.16,1.67l0.75,3.76l1.04,1.28ZM256.71,438.88l-2.0,0.15l-1.4,-1.22l-3.82,-0.1l-0.0,-5.83l1.6,3.05l3.26,2.07l3.08,0.78l-0.71,1.1Z", "name": "Argentina"}, "AU": {"path": "M705.8,353.26l0.26,0.04l0.17,-0.47l-0.48,-1.42l0.92,1.11l0.45,0.15l0.27,-0.39l-0.1,-1.56l-1.98,-3.63l1.09,-3.31l-0.24,-1.57l0.34,-0.62l0.38,1.06l0.43,-0.19l0.99,-1.7l1.91,-0.83l1.29,-1.15l1.81,-0.91l0.96,-0.17l0.92,0.26l1.92,-0.95l1.47,-0.28l1.03,-0.8l1.43,0.04l2.78,-0.84l1.36,-1.15l0.71,-1.45l1.41,-1.26l0.3,-2.58l1.27,-1.59l0.78,1.65l0.54,0.19l1.07,-0.51l0.15,-0.6l-0.73,-1.0l0.45,-0.71l0.78,0.39l0.58,-0.3l0.28,-1.82l1.87,-2.14l1.12,-0.39l0.28,-0.58l0.62,0.17l0.53,-0.73l1.87,-0.57l1.65,1.05l1.35,1.48l3.39,0.38l0.43,-0.54l-0.46,-1.23l1.05,-1.79l1.04,-0.61l0.14,-0.55l-0.25,-0.41l0.88,-1.17l1.31,-0.77l1.3,0.27l2.1,-0.48l0.31,-0.4l-0.05,-1.3l-0.92,-0.77l1.48,0.56l1.41,1.07l2.11,0.65l0.81,-0.2l1.4,0.7l1.69,-0.66l0.8,0.19l0.64,-0.33l0.71,0.77l-1.33,1.94l-0.71,0.07l-0.35,0.51l0.24,0.86l-1.52,2.35l0.12,1.05l2.15,1.65l1.97,0.85l3.04,2.36l1.97,0.65l0.55,0.88l2.72,0.85l1.84,-1.1l2.07,-5.97l-0.42,-3.59l0.3,-1.73l0.47,-0.87l-0.31,-0.68l1.09,-3.28l0.46,-0.47l0.4,0.71l0.16,1.51l0.65,0.52l0.16,1.04l0.85,1.21l0.12,2.38l0.9,2.0l0.57,0.18l1.3,-0.78l1.69,1.7l-0.2,1.08l0.53,2.2l0.39,1.3l0.68,0.48l0.6,1.95l-0.19,1.48l0.81,1.76l6.01,3.69l-0.11,0.76l1.38,1.58l0.95,2.77l0.58,0.22l0.72,-0.41l0.8,0.9l0.61,0.01l0.46,2.41l4.81,4.71l0.66,2.02l-0.07,3.31l1.14,2.2l-0.13,2.24l-1.1,3.68l0.03,1.64l-0.47,1.89l-1.05,2.4l-1.9,1.47l-1.72,3.51l-2.38,6.09l-0.24,2.82l-1.14,0.8l-2.85,0.15l-2.31,1.19l-2.51,2.25l-3.09,-1.57l0.3,-1.15l-0.54,-0.47l-1.5,0.63l-2.01,1.94l-7.12,-2.18l-1.48,-1.63l-1.14,-3.74l-1.45,-1.26l-1.81,-0.26l0.56,-1.18l-0.61,-2.1l-0.72,-0.1l-1.14,1.82l-0.9,0.21l0.63,-0.82l0.36,-1.55l0.92,-1.31l-0.13,-2.34l-0.7,-0.22l-2.0,2.34l-1.51,0.93l-0.94,2.01l-1.35,-0.81l-0.02,-1.52l-1.57,-2.04l-1.09,-0.88l0.24,-0.33l-0.14,-0.59l-3.21,-1.69l-1.83,-0.12l-2.54,-1.35l-4.58,0.28l-6.02,1.9l-2.53,-0.13l-2.62,1.41l-2.13,0.63l-1.49,2.6l-3.49,0.31l-2.29,-0.5l-3.48,0.43l-1.6,1.47l-0.81,-0.04l-2.37,1.63l-3.26,-0.1l-3.72,-2.21l0.04,-1.05l1.19,-0.46l0.49,-0.89l0.21,-2.97l-0.28,-1.64l-1.34,-2.86l-0.38,-1.47l0.05,-1.72l-0.95,-1.7l-0.18,-0.97l-1.01,-0.99l-0.29,-1.98l-1.13,-1.75ZM784.92,393.44l2.65,1.02l3.23,-0.96l1.09,0.14l0.15,3.06l-0.85,1.13l-0.17,1.63l-0.87,-0.24l-1.57,1.91l-1.68,-0.18l-1.4,-2.36l-0.37,-2.04l-1.39,-2.51l0.04,-0.8l1.15,0.18Z", "name": "Australia"}, "AT": {"path": "M462.89,152.8l0.04,2.25l-1.07,0.0l-0.33,0.63l0.36,0.51l-1.04,2.13l-2.02,0.07l-1.33,0.7l-5.29,-0.99l-0.47,-0.93l-0.44,-0.21l-2.47,0.55l-0.42,0.51l-3.18,-0.81l0.43,-0.91l1.12,0.78l0.6,-0.17l0.25,-0.58l1.93,0.12l1.86,-0.56l1.0,0.08l0.68,0.57l0.62,-0.15l0.26,-0.77l-0.3,-1.78l0.8,-0.44l0.68,-1.15l1.52,0.85l0.47,-0.06l1.34,-1.25l0.64,-0.17l1.81,0.92l1.28,-0.11l0.7,0.37Z", "name": "Austria"}, "IN": {"path": "M623.34,207.03l-1.24,1.04l-0.97,2.55l0.22,0.51l8.04,3.87l3.42,0.37l1.57,1.38l4.92,0.88l2.18,-0.04l0.38,-0.3l0.29,-1.24l-0.32,-1.64l0.14,-0.87l0.82,-0.31l0.45,2.48l2.28,1.02l1.77,-0.38l4.14,0.1l0.38,-0.36l0.18,-1.66l-0.5,-0.65l1.37,-0.29l2.25,-1.99l2.7,-1.62l1.93,0.62l1.8,-0.98l0.79,1.14l-0.68,0.91l0.26,0.63l2.42,0.36l0.09,0.47l-0.83,0.75l0.13,1.07l-1.52,-0.29l-3.24,1.86l-0.13,1.78l-1.32,2.14l-0.18,1.39l-0.93,1.82l-1.64,-0.5l-0.52,0.37l-0.09,2.63l-0.56,1.11l0.19,0.81l-0.53,0.27l-1.18,-3.73l-1.08,-0.27l-0.38,0.31l-0.24,1.0l-0.66,-0.66l0.54,-1.06l1.22,-0.34l1.15,-2.25l-0.24,-0.56l-1.57,-0.47l-4.34,-0.28l-0.18,-1.56l-0.35,-0.35l-1.11,-0.12l-1.91,-1.12l-0.56,0.17l-0.88,1.82l0.11,0.49l1.36,1.07l-1.09,0.69l-0.69,1.11l0.18,0.56l1.24,0.57l-0.32,1.54l0.85,1.94l0.36,2.01l-0.22,0.59l-4.58,0.52l-0.33,0.42l0.13,1.8l-1.17,1.36l-3.65,1.81l-2.79,3.03l-4.32,3.28l-0.18,1.27l-4.65,1.79l-0.77,2.16l0.64,5.3l-1.06,2.49l-0.01,3.94l-1.24,0.28l-1.14,1.93l0.39,0.84l-1.68,0.53l-1.04,1.83l-0.65,0.47l-2.06,-2.05l-2.1,-6.02l-2.2,-3.64l-1.05,-4.75l-2.29,-3.57l-1.76,-8.2l0.01,-3.11l-0.49,-2.53l-0.55,-0.29l-3.53,1.52l-1.53,-0.27l-2.86,-2.77l0.85,-0.67l0.08,-0.55l-0.74,-1.03l-2.67,-2.06l1.24,-1.32l5.34,0.01l0.39,-0.49l-0.5,-2.29l-1.42,-1.46l-0.27,-1.93l-1.43,-1.2l2.31,-2.37l3.05,0.06l2.62,-2.85l1.6,-2.81l2.4,-2.73l0.07,-2.04l1.97,-1.48l-0.02,-0.65l-1.93,-1.31l-0.82,-1.78l-0.8,-2.21l0.9,-0.89l3.59,0.65l2.92,-0.42l2.33,-2.19l2.31,2.85l-0.24,2.13l0.99,1.59l-0.05,0.82l-1.34,-0.28l-0.47,0.48l0.7,3.06l2.62,1.99l2.99,1.65Z", "name": "India"}, "TZ": {"path": "M495.56,296.42l2.8,-3.12l-0.02,-0.81l-0.64,-1.3l0.68,-0.52l0.14,-1.47l-0.76,-1.25l0.31,-0.11l2.26,0.03l-0.51,2.76l0.76,1.3l0.5,0.12l1.05,-0.53l1.19,-0.12l0.61,0.24l1.43,-0.62l0.1,-0.67l-0.71,-0.62l1.57,-1.7l8.65,4.86l0.32,1.53l3.34,2.33l-1.05,2.8l0.13,1.61l1.63,1.12l-0.6,1.76l-0.01,2.33l1.89,4.03l0.57,0.43l-1.46,1.08l-2.61,0.94l-1.43,-0.04l-1.06,0.77l-2.29,0.36l-2.87,-0.68l-0.83,0.07l-0.63,-0.75l-0.31,-2.78l-1.32,-1.35l-3.25,-0.77l-3.96,-1.58l-1.18,-2.41l-0.32,-1.75l-1.76,-1.49l0.42,-1.05l-0.44,-0.89l0.08,-0.96l-0.46,-0.58l0.06,-0.56Z", "name": "Tanzania"}, "AZ": {"path": "M539.29,175.73l1.33,0.32l1.94,-1.8l2.3,3.34l1.43,0.43l-1.26,0.15l-0.35,0.32l-0.8,3.14l-0.99,0.96l0.05,1.11l-1.26,-1.13l0.7,-1.18l-0.04,-0.47l-0.74,-0.86l-1.48,0.15l-2.34,1.71l-0.03,-1.27l-2.03,-1.35l0.47,-0.62l-0.08,-0.56l-1.03,-0.79l0.29,-0.43l-0.14,-0.58l-1.13,-0.86l1.89,0.68l1.69,0.06l0.37,-0.87l-0.81,-1.37l0.42,0.06l1.63,1.72ZM533.78,180.57l0.61,0.46l0.69,-0.0l0.59,1.15l-0.68,-0.15l-1.21,-1.45Z", "name": "Azerbaijan"}, "IE": {"path": "M405.08,135.42l0.35,2.06l-1.75,2.78l-4.22,1.88l-2.84,-0.4l1.73,-3.0l-1.18,-3.53l4.6,-3.74l0.32,1.15l-0.49,1.74l0.4,0.51l1.47,-0.04l1.6,0.6Z", "name": "Ireland"}, "ID": {"path": "M756.47,287.89l0.69,4.01l2.79,1.78l0.51,-0.1l2.04,-2.59l2.71,-1.43l2.05,-0.0l3.9,1.73l2.46,0.45l0.08,15.12l-1.75,-1.54l-2.54,-0.51l-0.88,0.71l-2.32,0.06l0.69,-1.33l1.45,-0.64l0.23,-0.46l-0.65,-2.74l-1.24,-2.21l-5.04,-2.29l-2.09,-0.23l-3.68,-2.27l-0.55,0.13l-0.65,1.07l-0.52,0.12l-0.55,-1.89l-1.21,-0.78l1.84,-0.62l1.72,0.05l0.39,-0.52l-0.21,-0.66l-0.38,-0.28l-3.45,-0.0l-1.13,-1.48l-2.1,-0.43l-0.52,-0.6l2.69,-0.48l1.28,-0.78l3.66,0.94l0.3,0.71ZM757.91,300.34l-0.62,0.82l-0.1,-0.8l0.59,-1.12l0.13,1.1ZM747.38,292.98l0.34,0.72l-1.22,-0.57l-4.68,-0.1l0.27,-0.62l2.78,-0.09l2.52,0.67ZM741.05,285.25l-0.67,-2.88l0.64,-2.01l0.41,0.86l1.21,0.18l0.16,0.7l-0.1,1.68l-0.84,-0.16l-0.46,0.3l-0.34,1.34ZM739.05,293.5l-0.5,0.44l-1.34,-0.36l-0.17,-0.37l1.73,-0.08l0.27,0.36ZM721.45,284.51l-0.19,1.97l2.24,2.23l0.54,0.02l1.27,-1.07l2.75,-0.5l-0.9,1.21l-2.11,0.93l-0.16,0.6l2.22,3.01l-0.3,1.07l1.36,1.74l-2.26,0.85l-0.28,-0.31l0.12,-1.19l-1.64,-1.34l0.17,-2.23l-0.56,-0.39l-1.67,0.76l-0.23,0.39l0.3,6.17l-1.1,0.25l-0.69,-0.47l0.64,-2.21l-0.39,-2.42l-0.39,-0.34l-0.8,-0.01l-0.58,-1.29l0.98,-1.6l0.35,-1.96l1.32,-3.87ZM728.59,296.27l0.38,0.49l-0.02,1.28l-0.88,0.49l-0.53,-0.47l1.04,-1.79ZM729.04,286.98l0.27,-0.05l-0.02,0.13l-0.24,-0.08ZM721.68,284.05l0.16,-0.32l1.89,-1.65l1.83,0.68l3.16,0.35l2.94,-0.1l2.39,-1.66l-1.73,2.13l-1.66,0.43l-2.41,-0.48l-4.17,0.13l-2.39,0.51ZM730.55,310.47l1.11,-1.93l2.03,-0.82l0.08,0.62l-1.45,1.67l-1.77,0.46ZM728.12,305.88l-0.1,0.38l-3.46,0.66l-2.91,-0.27l-0.0,-0.25l1.54,-0.41l1.66,0.73l1.67,-0.19l1.61,-0.65ZM722.9,310.24l-0.64,0.03l-2.26,-1.2l1.11,-0.24l1.78,1.41ZM716.26,305.77l0.88,0.51l1.28,-0.17l0.2,0.35l-4.65,0.73l0.39,-0.67l1.15,-0.02l0.75,-0.73ZM711.66,293.84l-0.38,-0.16l-2.54,1.01l-1.12,-1.44l-1.69,-0.13l-1.16,-0.75l-3.04,0.77l-1.1,-1.15l-3.31,-0.11l-0.35,-3.05l-1.35,-0.95l-1.11,-1.98l-0.33,-2.06l0.27,-2.14l0.9,-1.01l0.37,1.15l2.09,1.49l1.53,-0.48l1.82,0.08l1.38,-1.19l1.0,-0.18l2.28,0.67l2.26,-0.53l1.52,-3.64l1.01,-0.99l0.78,-2.57l4.1,0.3l-1.11,1.77l0.02,0.46l1.7,2.2l-0.23,1.39l2.07,1.71l-2.33,0.42l-0.88,1.9l0.1,2.05l-2.4,1.9l-0.06,2.45l-0.7,2.79ZM692.58,302.03l0.35,0.26l4.8,0.25l0.78,-0.97l4.17,1.09l1.13,1.68l3.69,0.45l2.13,1.04l-1.8,0.6l-2.77,-0.99l-4.8,-0.12l-5.24,-1.41l-1.84,-0.25l-1.11,0.3l-4.26,-0.97l-0.7,-1.14l-1.59,-0.13l1.18,-1.65l2.74,0.13l2.87,1.13l0.26,0.68ZM685.53,299.17l-2.22,0.04l-2.06,-2.03l-3.15,-2.01l-2.93,-3.51l-3.11,-5.33l-2.2,-2.12l-1.64,-4.06l-2.32,-1.69l-1.27,-2.07l-1.96,-1.5l-2.51,-2.65l-0.11,-0.66l4.81,0.53l2.15,2.38l3.31,2.74l2.35,2.66l2.7,0.17l1.95,1.59l1.54,2.17l1.59,0.95l-0.84,1.71l0.15,0.52l1.44,0.87l0.79,0.1l0.4,1.58l0.87,1.4l1.96,0.39l1.0,1.31l-0.6,3.01l-0.09,3.5Z", "name": "Indonesia"}, "UA": {"path": "M492.5,162.44l1.28,-2.49l1.82,0.19l0.66,-0.23l0.09,-0.71l-0.25,-0.75l-0.79,-0.72l-0.33,-1.21l-0.86,-0.62l-0.02,-1.19l-1.13,-0.86l-1.15,-0.19l-2.04,-1.0l-1.66,0.32l-0.66,0.47l-0.92,-0.0l-0.84,0.78l-2.48,0.7l-1.18,-0.71l-3.07,-0.36l-0.89,0.43l-0.24,-0.55l-1.11,-0.7l0.35,-0.93l1.26,-1.02l-0.54,-1.23l2.04,-2.43l1.4,-0.62l0.25,-1.19l-1.04,-2.39l0.83,-0.13l1.28,-0.84l1.8,-0.07l2.47,0.26l2.86,0.81l1.88,0.06l0.86,0.44l1.04,-0.41l0.77,0.66l2.18,-0.15l0.92,0.3l0.52,-0.34l0.15,-1.53l0.56,-0.54l2.85,-0.05l0.84,-0.72l3.04,-0.18l1.23,1.46l-0.48,0.77l0.21,1.03l0.36,0.32l1.8,0.14l0.93,2.08l3.18,1.15l1.94,-0.45l1.67,1.49l1.4,-0.03l3.35,0.96l0.02,0.54l-0.96,1.59l0.47,1.97l-0.26,0.7l-2.36,0.28l-1.29,0.89l-0.23,1.38l-1.83,0.27l-1.58,0.97l-2.41,0.21l-2.16,1.17l-0.21,0.38l0.34,2.26l1.23,0.75l2.13,-0.08l-0.14,0.31l-2.65,0.53l-3.23,1.69l-0.87,-0.39l0.42,-1.1l-0.25,-0.52l-2.21,-0.73l2.35,-1.06l0.12,-0.65l-0.93,-0.82l-3.62,-0.74l-0.13,-0.89l-0.46,-0.34l-2.61,0.59l-0.91,1.69l-1.71,2.04l-0.86,-0.4l-1.62,0.27Z", "name": "Ukraine"}, "QA": {"path": "M549.33,221.64l-0.76,-0.23l-0.14,-1.64l0.84,-1.29l0.47,0.52l0.04,1.34l-0.45,1.3Z", "name": "Qatar"}, "MZ": {"path": "M508.58,318.75l-0.34,-2.57l0.51,-2.05l3.55,0.63l2.5,-0.38l1.02,-0.76l1.49,0.01l2.74,-0.98l1.66,-1.2l0.5,9.24l0.41,1.23l-0.68,1.67l-0.93,1.71l-1.5,1.5l-5.16,2.28l-2.78,2.73l-1.02,0.53l-1.71,1.8l-0.98,0.57l-0.35,2.41l1.16,1.94l0.49,2.17l0.43,0.31l-0.06,2.06l-0.39,1.17l0.5,0.72l-0.25,0.73l-0.92,0.83l-5.12,2.39l-1.22,1.36l0.21,1.13l0.58,0.39l-0.11,0.72l-1.22,-0.01l-0.73,-2.97l0.42,-3.09l-1.78,-5.37l2.49,-2.81l0.69,-1.89l0.44,-0.43l0.28,-1.53l-0.39,-0.93l0.59,-3.65l-0.01,-3.26l-1.49,-1.16l-1.2,-0.22l-1.74,-1.17l-1.92,0.01l-0.29,-2.08l7.06,-1.96l1.28,1.09l0.89,-0.1l0.67,0.44l0.1,0.73l-0.51,1.29l0.19,1.81l1.75,1.83l0.65,-0.13l0.71,-1.65l1.17,-0.86l-0.26,-3.47l-1.05,-1.85l-1.04,-0.94Z", "name": "Mozambique"}}, "height": 440.7063107441331, "projection": {"type": "mill", "centralMeridian": 11.5}, "width": 900.0});
 
assets/src/scss/admin.scss CHANGED
@@ -141,13 +141,17 @@ $breakpoints: (
141
  @include breakpoint(medium) {
142
  column-gap: 3rem;
143
  display: grid;
144
- grid-template-columns: 200px 1fr;
145
  grid-template-rows: auto;
146
  }
147
 
148
  a {
149
  color: var(--zerospam-accent);
150
  }
 
 
 
 
151
  }
152
 
153
  a.zerospam-dashboard__menu-link {
@@ -318,13 +322,47 @@ a.zerospam-dashboard__menu-link {
318
 
319
  &--map {
320
  @include breakpoint(medium) {
321
- width: calc(60% - var(--zerospam-block-gap));
322
  }
323
  }
324
 
325
  &--list {
326
  @include breakpoint(medium) {
327
- width: calc(40% - var(--zerospam-block-gap));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
328
  }
329
  }
330
  }
@@ -339,25 +377,6 @@ a.zerospam-dashboard__menu-link {
339
 
340
  .zerospam-block {
341
  margin: calc(var(--zerospam-block-gap) / 2);
342
-
343
- &--facebook,
344
- &--twitter {
345
- background-color: transparent;
346
- border: 0;
347
- box-shadow: none;
348
- }
349
-
350
- &--facebook {
351
- @include breakpoint(medium) {
352
- width: 340px;
353
- }
354
- }
355
-
356
- &--twitter {
357
- @include breakpoint(medium) {
358
- width: calc(100% - (var(--zerospam-block-gap) * 2) - 340px);
359
- }
360
- }
361
  }
362
  }
363
 
@@ -458,6 +477,10 @@ a.zerospam-dashboard__menu-link {
458
  }
459
  }
460
 
 
 
 
 
461
  .button {
462
  @extend %button;
463
  }
@@ -531,6 +554,12 @@ a.zerospam-dashboard__menu-link {
531
  }
532
  }
533
 
 
 
 
 
 
 
534
  .zerospam-form-field-container {
535
  align-items: center;
536
  column-gap: 10px;
@@ -668,8 +697,6 @@ a.zerospam-dashboard__menu-link {
668
  &wpforms,
669
  &contactform7,
670
  &givewp,
671
- &memberpress_registration,
672
- &memberpress_login,
673
  &mailchimp4wp,
674
  &woocommerce_registration,
675
  &gravityforms,
@@ -727,13 +754,6 @@ a.zerospam-dashboard__menu-link {
727
  }
728
  }
729
 
730
- &memberpress_registration,
731
- &memberpress_login {
732
- &::before {
733
- background-image: url("../img/icon-memberpress.svg");
734
- }
735
- }
736
-
737
  &givewp {
738
  &::before {
739
  background-image: url("../../modules/give/icon-givewp.png");
@@ -759,11 +779,104 @@ a.zerospam-dashboard__menu-link {
759
  }
760
  }
761
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
762
  .zerospam-list {
763
  list-style: none;
764
  margin: 0;
765
  padding: 0;
766
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
767
  &--data-actions,
768
  &--data {
769
  li {
141
  @include breakpoint(medium) {
142
  column-gap: 3rem;
143
  display: grid;
144
+ grid-template-columns: 300px minmax(0, 1fr);
145
  grid-template-rows: auto;
146
  }
147
 
148
  a {
149
  color: var(--zerospam-accent);
150
  }
151
+
152
+ &__sections {
153
+ margin-bottom: 40px;
154
+ }
155
  }
156
 
157
  a.zerospam-dashboard__menu-link {
322
 
323
  &--map {
324
  @include breakpoint(medium) {
325
+ width: calc(65% - var(--zerospam-block-gap));
326
  }
327
  }
328
 
329
  &--list {
330
  @include breakpoint(medium) {
331
+ width: calc(35% - var(--zerospam-block-gap));
332
+ }
333
+ }
334
+
335
+ &--line-chart {
336
+ @include breakpoint(medium) {
337
+ width: calc(65% - var(--zerospam-block-gap));
338
+ }
339
+ }
340
+
341
+ &--pie-chart {
342
+ @include breakpoint(medium) {
343
+ width: calc(35% - var(--zerospam-block-gap));
344
+ }
345
+ }
346
+
347
+ &--review {
348
+ .zerospam-block__content {
349
+ @include breakpoint(medium) {
350
+ column-gap: 40px;
351
+ display: flex;
352
+ }
353
+ }
354
+
355
+ .zerospam-block__content-col {
356
+ &:first-child {
357
+ flex-grow: 1;
358
+ }
359
+
360
+ &:last-child {
361
+ @include breakpoint(medium) {
362
+ flex-shrink: 0;
363
+ width: 32%;
364
+ }
365
+ }
366
  }
367
  }
368
  }
377
 
378
  .zerospam-block {
379
  margin: calc(var(--zerospam-block-gap) / 2);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
380
  }
381
  }
382
 
477
  }
478
  }
479
 
480
+ select {
481
+ padding-right: 33px;
482
+ }
483
+
484
  .button {
485
  @extend %button;
486
  }
554
  }
555
  }
556
 
557
+ .check-column {
558
+ input[type="checkbox"] {
559
+ display: block;
560
+ }
561
+ }
562
+
563
  .zerospam-form-field-container {
564
  align-items: center;
565
  column-gap: 10px;
697
  &wpforms,
698
  &contactform7,
699
  &givewp,
 
 
700
  &mailchimp4wp,
701
  &woocommerce_registration,
702
  &gravityforms,
754
  }
755
  }
756
 
 
 
 
 
 
 
 
757
  &givewp {
758
  &::before {
759
  background-image: url("../../modules/give/icon-givewp.png");
779
  }
780
  }
781
 
782
+ @for $i from 1 through 10 {
783
+ @keyframes row#{$i} {
784
+ 0% {
785
+ background-position: 0% 0%;
786
+ }
787
+ 50% {
788
+ background-position: #{(($i * 5) + 45%)} 0%;
789
+ }
790
+ 100% {
791
+ background-position: 0% 0%;
792
+ }
793
+ }
794
+ }
795
+
796
+ .zerospam-tag {
797
+ background-color: var(--zerospam-accent);
798
+ border-radius: 2px;
799
+ color: #fff;
800
+ display: inline-block;
801
+ padding: 3px;
802
+ font-size: 10px;
803
+ line-height: 1;
804
+ margin: 3px;
805
+ vertical-align: middle;
806
+ }
807
+
808
+ .zerospam-list__item--blocked {
809
+ background: rgba(255, 41, 41, 0.25) !important;
810
+ }
811
+
812
  .zerospam-list {
813
  list-style: none;
814
  margin: 0;
815
  padding: 0;
816
 
817
+ &--top {
818
+ font-size: 12px;
819
+ line-height: 1;
820
+
821
+ li {
822
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
823
+ align-items: center;
824
+ display: flex;
825
+ margin: 0;
826
+ padding: 6px;
827
+
828
+ @for $i from 1 through 10 {
829
+ &:nth-child(#{$i}) {
830
+ animation: row#{$i} 5s ease infinite;
831
+ animation-delay: #{$i * 0.1}s;
832
+ background: linear-gradient(
833
+ 90deg,
834
+ rgba(255, 255, 255, 1) 0%,
835
+ #fff #{(($i * 5) + 30%)},
836
+ rgba(255, 41, 41, calc(0.6 / #{$i})) 100%
837
+ );
838
+ background-size: 200%;
839
+ }
840
+ }
841
+ }
842
+
843
+ .button {
844
+ @extend %button-small;
845
+ }
846
+
847
+ .zerospam-list__value {
848
+ &--label {
849
+ flex-grow: 1;
850
+ overflow: hidden;
851
+ text-overflow: ellipsis;
852
+ white-space: nowrap;
853
+ }
854
+
855
+ &--count {
856
+ font-size: 0.95em;
857
+ font-weight: bold;
858
+ margin: 0 20px;
859
+ text-align: right;
860
+ width: 35px;
861
+ }
862
+
863
+ &--actions,
864
+ &--count {
865
+ flex-grow: 0;
866
+ flex-shrink: 0;
867
+ }
868
+
869
+ &--actions {
870
+ text-align: right;
871
+ width: 85px;
872
+ }
873
+
874
+ img {
875
+ vertical-align: sub;
876
+ }
877
+ }
878
+ }
879
+
880
  &--data-actions,
881
  &--data {
882
  li {
core/admin/class-dashboard.php CHANGED
@@ -183,27 +183,9 @@ class Dashboard {
183
  </li>
184
  </ul>
185
 
186
- <div class="zerospam-block" style="margin-top: 40px;">
187
- <div class="zerospam-block__content">
188
- <?php
189
- echo sprintf(
190
- wp_kses(
191
- /* translators: %s: url */
192
- __( '<p><strong>We want to hear from you!</strong> <a href="%1$s" target="_blank" rel="noreferrer noopener">Submit your review</a> for 10&#37; off a Zero Spam license.</p>', 'zero-spam' ),
193
- array(
194
- 'strong' => array(),
195
- 'a' => array(
196
- 'target' => array(),
197
- 'href' => array(),
198
- 'rel' => array(),
199
- ),
200
- )
201
- ),
202
- 'https://wordpress.org/support/plugin/zero-spam/reviews/?filter=5'
203
- );
204
- ?>
205
- </div>
206
- </div>
207
  </div>
208
  <div class="zerospam-dashboard__col">
209
  <?php if ( ! empty( $_REQUEST['zerospam-msg'] ) ) : ?>
@@ -220,37 +202,85 @@ class Dashboard {
220
  case 'reports':
221
  ?>
222
  <div class="zerospam-blocks">
223
- <div class="zerospam-block zerospam-block--twitter">
224
- <a class="twitter-timeline" data-height="350" href="https://twitter.com/ZeroSpamOrg?ref_src=twsrc%5Etfw">Tweets by ZeroSpamOrg</a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
225
- </div>
226
-
227
- <div class="zerospam-block zerospam-block--facebook">
228
- <iframe src="https://www.facebook.com/plugins/page.php?href=https%3A%2F%2Fwww.facebook.com%2Fzerospamorg&tabs=timeline&width=340&height=354&small_header=false&adapt_container_width=true&hide_cover=false&show_facepile=true&appId=2704301689814493" width="340" height="354" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share"></iframe>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229
  </div>
230
 
231
  <div class="zerospam-block zerospam-block--map">
232
- <h3 class="zerospam-block__headline"><?php esc_html_e( 'Detections World Map', 'zero-spam' ); ?></h3>
233
  <div class="zerospam-block__content">
234
  <?php require ZEROSPAM_PATH . 'includes/templates/admin-map.php'; ?>
235
  </div>
236
  </div>
237
 
238
  <div class="zerospam-block zerospam-block--list">
239
- <h3 class="zerospam-block__headline"><?php esc_html_e( 'Most Detections by IP Address', 'zero-spam' ); ?></h3>
240
  <div class="zerospam-block__content">
241
  <?php require ZEROSPAM_PATH . 'includes/templates/admin-ips.php'; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
242
  </div>
243
  </div>
244
 
245
- <div class="zerospam-block zerospam-block--list">
246
- <h3 class="zerospam-block__headline"><?php esc_html_e( 'Detections by Location', 'zero-spam' ); ?></h3>
247
  <div class="zerospam-block__content">
248
  <?php require ZEROSPAM_PATH . 'includes/templates/admin-pie.php'; ?>
249
  </div>
250
  </div>
251
 
252
- <div class="zerospam-block zerospam-block--map">
253
- <h3 class="zerospam-block__headline"><?php esc_html_e( 'Detection History', 'zero-spam' ); ?></h3>
254
  <div class="zerospam-block__content">
255
  <?php require ZEROSPAM_PATH . 'includes/templates/admin-line-chart.php'; ?>
256
  </div>
183
  </li>
184
  </ul>
185
 
186
+ <iframe src="https://www.facebook.com/plugins/page.php?href=https%3A%2F%2Fwww.facebook.com%2Fzerospamorg&tabs=timeline&width=300&height=635&small_header=false&adapt_container_width=true&hide_cover=false&show_facepile=true&appId=2704301689814493" width="300" height="635" style="border:none;overflow:hidden;margin-bottom:40px;" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share"></iframe>
187
+
188
+ <a class="twitter-timeline" data-height="604" href="https://twitter.com/ZeroSpamOrg?ref_src=twsrc%5Etfw">Tweets by ZeroSpamOrg</a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
  </div>
190
  <div class="zerospam-dashboard__col">
191
  <?php if ( ! empty( $_REQUEST['zerospam-msg'] ) ) : ?>
202
  case 'reports':
203
  ?>
204
  <div class="zerospam-blocks">
205
+ <div class="zerospam-block zerospam-block--review">
206
+ <h3 class="zerospam-block__headline"><?php esc_html_e( 'Detections by the Hour', 'zero-spam' ); ?></h3>
207
+ <div class="zerospam-block__content">
208
+ <div class="zerospam-block__content-col">
209
+ <?php require ZEROSPAM_PATH . 'includes/templates/admin-bar-chart.php'; ?>
210
+ </div>
211
+ <div class="zerospam-block__content-col">
212
+ <?php require ZEROSPAM_PATH . 'includes/templates/admin-hours-list.php'; ?>
213
+ <p style="margin-top: 20px">
214
+ <?php
215
+ printf(
216
+ wp_kses(
217
+ /* translators: %s: Replaced with the Zero Spam URL */
218
+ __( '<strong>We need you!</strong> Help support development and new features by reviewing us on WordPress.org &mdash; once reviewed, contact us to get a <strong>10&#37; off coupon</strong> on any <a href="%1$s" target="_blank" rel="noreferrer noopener">Zero Spam license</a>.', 'zero-spam' ),
219
+ array(
220
+ 'strong' => array(),
221
+ 'a' => array(
222
+ 'target' => array(),
223
+ 'href' => array(),
224
+ 'rel' => array(),
225
+ ),
226
+ 'em' => array(),
227
+ 'br' => array(),
228
+ )
229
+ ),
230
+ 'https://www.zerospam.org/subscribe/'
231
+ );
232
+ ?>
233
+ </p>
234
+ <p><a href="https://wordpress.org/support/plugin/zero-spam/reviews/?filter=5" target="_blank" rel="noreferrer noopener" class="button button-primary"><?php _e( 'Submit Review', 'zero-spam' ); ?> &#8594;</a></p>
235
+ </div>
236
+ </div>
237
  </div>
238
 
239
  <div class="zerospam-block zerospam-block--map">
240
+ <h3 class="zerospam-block__headline"><?php esc_html_e( 'Detection Heat Map', 'zero-spam' ); ?></h3>
241
  <div class="zerospam-block__content">
242
  <?php require ZEROSPAM_PATH . 'includes/templates/admin-map.php'; ?>
243
  </div>
244
  </div>
245
 
246
  <div class="zerospam-block zerospam-block--list">
247
+ <h3 class="zerospam-block__headline"><?php esc_html_e( 'Most Detections the Last 30 Days', 'zero-spam' ); ?></h3>
248
  <div class="zerospam-block__content">
249
  <?php require ZEROSPAM_PATH . 'includes/templates/admin-ips.php'; ?>
250
+ <p style="margin-top: 25px;">
251
+ <strong><?php _e( 'Still seeing spam/malicious activity?', 'zero-spam' ); ?></strong><br />
252
+ <?php
253
+ printf(
254
+ wp_kses(
255
+ /* translators: %s: Replaced with the Zero Spam URL */
256
+ __( 'We use the latest techniques available, but <em>nothing is 100&#37;</em>. <a href="%1$s" target="_blank" rel="noreferrer noopener">Contact us</a> if seeing a large amount a malicious activity for help.', 'zero-spam' ),
257
+ array(
258
+ 'strong' => array(),
259
+ 'a' => array(
260
+ 'target' => array(),
261
+ 'href' => array(),
262
+ 'rel' => array(),
263
+ ),
264
+ 'em' => array(),
265
+ 'br' => array(),
266
+ )
267
+ ),
268
+ esc_url( ZEROSPAM_URL )
269
+ )
270
+ ?>
271
+ </p>
272
  </div>
273
  </div>
274
 
275
+ <div class="zerospam-block zerospam-block--pie-chart">
276
+ <h3 class="zerospam-block__headline"><?php esc_html_e( 'Last 14 Days by Location', 'zero-spam' ); ?></h3>
277
  <div class="zerospam-block__content">
278
  <?php require ZEROSPAM_PATH . 'includes/templates/admin-pie.php'; ?>
279
  </div>
280
  </div>
281
 
282
+ <div class="zerospam-block zerospam-block--line-chart">
283
+ <h3 class="zerospam-block__headline"><?php esc_html_e( 'Last 14 Days of Detections', 'zero-spam' ); ?></h3>
284
  <div class="zerospam-block__content">
285
  <?php require ZEROSPAM_PATH . 'includes/templates/admin-line-chart.php'; ?>
286
  </div>
core/admin/tables/class-logtable.php CHANGED
@@ -31,6 +31,49 @@ class LogTable extends WP_List_Table {
31
  parent::__construct( $args );
32
  }
33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  /**
35
  * Column values
36
  */
@@ -46,7 +89,7 @@ class LogTable extends WP_List_Table {
46
 
47
  $types = apply_filters( 'zerospam_types', array() );
48
  if ( ! empty( $types[ $value ] ) ) {
49
- $type .= $types[ $value ];
50
  } else {
51
  $type .= $value;
52
  }
@@ -301,7 +344,7 @@ class LogTable extends WP_List_Table {
301
  <select name="type" id="filter-by-type">
302
  <option value=""><?php _e( 'All types', 'zero-spam' ); ?></option>
303
  <?php foreach ( $options as $key => $value ) : ?>
304
- <option<?php if ( $current_type === $key ) : ?> selected="selected"<?php endif; ?> value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value ); ?></option>
305
  <?php endforeach; ?>
306
  </select>
307
 
@@ -322,72 +365,29 @@ class LogTable extends WP_List_Table {
322
  <?php
323
  }
324
 
325
- /**
326
- * Define table columns
327
- */
328
- public function get_columns() {
329
- $columns = array(
330
- 'cb' => '<input type="checkbox" />',
331
- 'date_recorded' => __( 'Date', 'zero-spam' ),
332
- 'log_type' => __( 'Type', 'zero-spam' ),
333
- 'user_ip' => __( 'IP Address', 'zero-spam' ),
334
- 'country' => __( 'Country', 'zero-spam' ),
335
- 'region' => __( 'Region', 'zero-spam' ),
336
- 'actions' => __( 'Actions', 'zero-spam' ),
337
- );
338
-
339
- return $columns;
340
- }
341
-
342
- /**
343
- * Sortable columns
344
- */
345
- public function get_sortable_columns() {
346
- $sortable_columns = array(
347
- 'date_recorded' => array( 'date_recorded', false ),
348
- 'log_type' => array( 'log_type', false ),
349
- 'user_ip' => array( 'user_ip', false ),
350
- 'country' => array( 'country', false ),
351
- 'region' => array( 'region', false ),
352
- );
353
-
354
- return $sortable_columns;
355
- }
356
-
357
- /**
358
- * Column contact
359
- */
360
- public function column_cb( $item ) {
361
- return sprintf(
362
- '<input type="checkbox" name="%1$s[]" value="%2$s" />',
363
- /*$1%s*/ 'ids',
364
- /*$2%s*/ $item['log_id']
365
- );
366
- }
367
-
368
  /**
369
  * Process bulk actions
370
  */
371
  public function process_bulk_action() {
372
  global $wpdb;
373
 
374
- $ids = ( isset( $_REQUEST['ids'] ) ) ? sanitize_text_field( wp_unslash( $_REQUEST['ids'] ) ) : '';
 
 
 
 
 
375
 
376
  switch ( $this->current_action() ) {
377
  case 'delete':
378
- $nonce = ( isset( $_REQUEST['zerospam_nonce'] ) ) ? sanitize_text_field( wp_unslash( $_REQUEST['zerospam_nonce'] ) ) : '';
379
- if ( ! wp_verify_nonce( $nonce, 'zerospam_nonce' ) ) {
380
- return false;
381
- }
382
-
383
  if ( ! empty ( $ids ) && is_array( $ids ) ) {
384
  foreach ( $ids as $k => $log_id ) {
385
- ZeroSpam\Includes\DB::delete( 'log', 'log_id', $log_id );
386
  }
387
  }
388
  break;
389
  case 'delete_all':
390
- ZeroSpam\Includes\DB::delete_all( 'log' );
391
  break;
392
  }
393
  }
31
  parent::__construct( $args );
32
  }
33
 
34
+ /**
35
+ * Define table columns
36
+ */
37
+ public function get_columns() {
38
+ $columns = array(
39
+ 'cb' => '<input type="checkbox" />',
40
+ 'date_recorded' => __( 'Date', 'zero-spam' ),
41
+ 'log_type' => __( 'Type', 'zero-spam' ),
42
+ 'user_ip' => __( 'IP Address', 'zero-spam' ),
43
+ 'country' => __( 'Country', 'zero-spam' ),
44
+ 'region' => __( 'Region', 'zero-spam' ),
45
+ 'actions' => __( 'Actions', 'zero-spam' ),
46
+ );
47
+
48
+ return $columns;
49
+ }
50
+
51
+ /**
52
+ * Sortable columns
53
+ */
54
+ public function get_sortable_columns() {
55
+ $sortable_columns = array(
56
+ 'date_recorded' => array( 'date_recorded', false ),
57
+ 'log_type' => array( 'log_type', false ),
58
+ 'user_ip' => array( 'user_ip', false ),
59
+ 'country' => array( 'country', false ),
60
+ 'region' => array( 'region', false ),
61
+ );
62
+
63
+ return $sortable_columns;
64
+ }
65
+
66
+ /**
67
+ * Checkbox column
68
+ */
69
+ public function column_cb( $item ) {
70
+ return sprintf(
71
+ '<input type="checkbox" name="%1$s[]" value="%2$s" />',
72
+ /*$1%s*/ 'ids',
73
+ /*$2%s*/ $item['log_id']
74
+ );
75
+ }
76
+
77
  /**
78
  * Column values
79
  */
89
 
90
  $types = apply_filters( 'zerospam_types', array() );
91
  if ( ! empty( $types[ $value ] ) ) {
92
+ $type .= $types[ $value ]['label'];
93
  } else {
94
  $type .= $value;
95
  }
344
  <select name="type" id="filter-by-type">
345
  <option value=""><?php _e( 'All types', 'zero-spam' ); ?></option>
346
  <?php foreach ( $options as $key => $value ) : ?>
347
+ <option<?php if ( $current_type === $key ) : ?> selected="selected"<?php endif; ?> value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value['label'] ); ?></option>
348
  <?php endforeach; ?>
349
  </select>
350
 
365
  <?php
366
  }
367
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
368
  /**
369
  * Process bulk actions
370
  */
371
  public function process_bulk_action() {
372
  global $wpdb;
373
 
374
+ $nonce = ( isset( $_REQUEST['zerospam_nonce'] ) ) ? sanitize_text_field( wp_unslash( $_REQUEST['zerospam_nonce'] ) ) : '';
375
+ if ( ! wp_verify_nonce( $nonce, 'zerospam_nonce' ) || empty( $_REQUEST['ids'] ) ) {
376
+ return false;
377
+ }
378
+
379
+ $ids = array_map( 'sanitize_text_field', $_REQUEST['ids'] );
380
 
381
  switch ( $this->current_action() ) {
382
  case 'delete':
 
 
 
 
 
383
  if ( ! empty ( $ids ) && is_array( $ids ) ) {
384
  foreach ( $ids as $k => $log_id ) {
385
+ \ZeroSpam\Includes\DB::delete( 'log', 'log_id', $log_id );
386
  }
387
  }
388
  break;
389
  case 'delete_all':
390
+ \ZeroSpam\Includes\DB::delete_all( 'log' );
391
  break;
392
  }
393
  }
core/class-utilities.php CHANGED
@@ -17,6 +17,17 @@ defined( 'ABSPATH' ) || die();
17
  */
18
  class Utilities {
19
 
 
 
 
 
 
 
 
 
 
 
 
20
  /**
21
  * Returns the time since two dates.
22
  *
@@ -253,23 +264,18 @@ class Utilities {
253
  * @param string $value Setting value.
254
  */
255
  public static function update_setting( $key, $value ) {
256
- $settings = \ZeroSpam\Core\Settings::get_settings();
257
- $new_settings = array();
258
-
259
- if ( ! isset( $settings[ $key ] ) ) {
260
  self::log( $key . ' is not a valid setting key.' );
261
  return false;
262
  }
263
 
264
- foreach ( $settings as $k => $array ) {
265
- if ( $key === $k ) {
266
- $new_settings[ $k ] = $value;
267
- } else {
268
- $new_settings[ $k ] = isset( $array['value'] ) ? $array['value'] : false;
269
- }
270
- }
271
 
272
- update_option( 'wpzerospam', $new_settings, true );
273
 
274
  return true;
275
  }
17
  */
18
  class Utilities {
19
 
20
+ /**
21
+ * Returns a clean domain name
22
+ *
23
+ * @param string $domain Domain name.
24
+ */
25
+ public static function clean_domain( $domain ) {
26
+ $domain_url = esc_url( $domain );
27
+
28
+ return str_ireplace( 'www.', '', wp_parse_url( $domain_url, PHP_URL_HOST ) );
29
+ }
30
+
31
  /**
32
  * Returns the time since two dates.
33
  *
264
  * @param string $value Setting value.
265
  */
266
  public static function update_setting( $key, $value ) {
267
+ $settings = \ZeroSpam\Core\Settings::get_settings();
268
+ if ( empty( $settings[ $key ] ) ) {
 
 
269
  self::log( $key . ' is not a valid setting key.' );
270
  return false;
271
  }
272
 
273
+ $module = $settings[ $key ]['module'];
274
+ $module_settings = get_option( "zero-spam-$module" );
275
+
276
+ $module_settings[ $key ] = $value;
 
 
 
277
 
278
+ update_option( "zero-spam-$module", $module_settings, true );
279
 
280
  return true;
281
  }
includes/class-cli.php CHANGED
@@ -17,17 +17,20 @@ class ZeroSpamCLI {
17
  * Outputs settings
18
  */
19
  public function settings() {
20
- $zerospam_settings = \ZeroSpam\Core\Settings::get_settings();
21
- $settings = array();
22
 
23
- foreach ( $zerospam_settings as $key => $setting ) {
24
- $settings[] = array(
25
- 'setting' => $key,
26
- 'value' => isset( $setting['value'] ) ? $setting['value'] : false,
27
- );
 
 
 
28
  }
29
 
30
- $fields = array( 'setting', 'value' );
31
  WP_CLI\Utils\format_items( 'table', $settings, $fields );
32
  }
33
 
17
  * Outputs settings
18
  */
19
  public function settings() {
20
+ $modules = \ZeroSpam\Core\Settings::get_settings_by_module();
21
+ $settings = array();
22
 
23
+ foreach ( $modules as $module => $module_settings ) {
24
+ foreach ( $module_settings as $key => $setting ) {
25
+ $settings[] = array(
26
+ 'module' => $module,
27
+ 'setting' => $key,
28
+ 'value' => isset( $setting['value'] ) ? $setting['value'] : false,
29
+ );
30
+ }
31
  }
32
 
33
+ $fields = array( 'module', 'setting', 'value' );
34
  WP_CLI\Utils\format_items( 'table', $settings, $fields );
35
  }
36
 
includes/class-plugin.php CHANGED
@@ -150,11 +150,6 @@ class Plugin {
150
  new \ZeroSpam\Modules\FluentForms\FluentForms();
151
  }
152
 
153
- // MemberPress plugin module.
154
- if ( is_plugin_active( 'memberpress/memberpress.php' ) ) {
155
- new \ZeroSpam\Modules\MemberPress\MemberPress();
156
- }
157
-
158
  // Mailchimp for WordPress plugin module.
159
  if ( is_plugin_active( 'mailchimp-for-wp/mailchimp-for-wp.php' ) ) {
160
  new \ZeroSpam\Modules\MailchimpForWP\MailchimpForWP();
@@ -180,7 +175,9 @@ class Plugin {
180
  * @param array $types Types of detections.
181
  */
182
  public function types( $types ) {
183
- $types['blocked'] = __( 'Blocked', 'zero-spam' );
 
 
184
 
185
  return $types;
186
  }
150
  new \ZeroSpam\Modules\FluentForms\FluentForms();
151
  }
152
 
 
 
 
 
 
153
  // Mailchimp for WordPress plugin module.
154
  if ( is_plugin_active( 'mailchimp-for-wp/mailchimp-for-wp.php' ) ) {
155
  new \ZeroSpam\Modules\MailchimpForWP\MailchimpForWP();
175
  * @param array $types Types of detections.
176
  */
177
  public function types( $types ) {
178
+ $types['blocked'] = array(
179
+ 'label' => __( 'Blocked', 'zero-spam' ),
180
+ );
181
 
182
  return $types;
183
  }
includes/templates/admin-bar-chart.php ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Admin bar chart
4
+ *
5
+ * @package ZeroSpam
6
+ */
7
+
8
+ if ( empty( $entries ) ) {
9
+ echo sprintf(
10
+ wp_kses(
11
+ __( 'Nothing to report.', 'zero-spam' ),
12
+ array(
13
+ 'strong' => array(),
14
+ )
15
+ )
16
+ );
17
+
18
+ return;
19
+ }
20
+
21
+ wp_enqueue_script(
22
+ 'zerospam-chart',
23
+ plugins_url( 'assets/js/Chart.bundle.min.js', ZEROSPAM ),
24
+ array( 'jquery' ),
25
+ '2.9.4',
26
+ false
27
+ );
28
+
29
+ wp_enqueue_style(
30
+ 'zerospam-chart',
31
+ plugins_url( 'assets/css/Chart.min.css', ZEROSPAM ),
32
+ array(),
33
+ '2.9.4'
34
+ );
35
+
36
+
37
+ // Create the datasets to display on the line chart
38
+ $labels = array();
39
+ $datasets = array();
40
+
41
+ // Detections
42
+ $datasets['detections'] = array(
43
+ 'label' => __( 'Total', 'zero-spam' ),
44
+ 'data' => array(),
45
+ 'borderColor' => '#3F0008',
46
+ 'backgroundColor' => '#3F0008',
47
+ 'fill' => false,
48
+ );
49
+
50
+ for ( $x = 0; $x < 24; $x++ ) {
51
+ $time = strtotime('-' . $x . ' hour');
52
+ $date_key = gmdate( 'ga', $time );
53
+
54
+ $labels[] = $date_key;
55
+
56
+ $datasets['detections']['data'][ $date_key ] = 0;
57
+
58
+ foreach ( $entries as $key => $entry ) {
59
+ $entry_date_key = gmdate( 'ga', strtotime( $entry['date_recorded'] ) );
60
+
61
+ if ( $date_key === $entry_date_key ) {
62
+ // Detections
63
+ if ( empty( $datasets['detections']['data'][ $date_key ] ) ) {
64
+ $datasets['detections']['data'][ $date_key ] = 1;
65
+ } else {
66
+ $datasets['detections']['data'][ $date_key ]++;
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ $labels = array_reverse( $labels );
73
+ ksort( $datasets['detections']['data'] );
74
+ ?>
75
+
76
+ <canvas id="zerospam-bar-chart"></canvas>
77
+ <script>
78
+ (function($) {
79
+ $(function() {
80
+ var lineChart = document.getElementById('zerospam-bar-chart');
81
+ var lineChartAnalytics= new Chart(lineChart, {
82
+ type: 'bar',
83
+ data: {
84
+ labels: <?php echo wp_json_encode( $labels ); ?>,
85
+ datasets:[
86
+ <?php foreach ( $datasets as $key => $data ) : ?>
87
+ <?php echo wp_json_encode( $data ); ?>,
88
+ <?php endforeach; ?>
89
+ ],
90
+ },
91
+ options: {
92
+ plugins: {
93
+ legend: {
94
+ display: false
95
+ }
96
+ }
97
+ }
98
+ });
99
+ });
100
+ })(jQuery);
101
+ </script>
includes/templates/admin-header.php CHANGED
@@ -4,97 +4,96 @@
4
  *
5
  * @package ZeroSpam
6
  */
7
-
8
  ?>
9
 
10
  <header class="zerospam-header">
11
- <img src="<?php echo plugin_dir_url( ZEROSPAM ) . 'assets/img/text-zero-spam.svg' ?>" width="250" />
12
- <div class="zerospam-header__status">
13
- <?php
14
- $status = \ZeroSpam\Core\Settings::get_settings( 'zerospam' );
15
- if ( 'enabled' !== $status ) :
16
- echo '<img src="' . plugin_dir_url( ZEROSPAM ) . 'assets/img/icon-error.svg" class="zerospam-small-icon" />';
17
- echo sprintf(
18
- wp_kses(
19
- /* translators: %1s: Replaced with the Zero Spam URL */
20
- __( '<strong>Enhanced Protection is <a href="%1$s">DISABLED</a>.</strong>', 'zero-spam' ),
21
- array(
22
- 'h3' => array(),
23
- 'p' => array(),
24
- 'a' => array(
25
- 'href' => array(),
26
- 'class' => array(),
27
- 'rel' => array(),
28
- ),
29
- 'strong' => array(),
30
- )
31
- ),
32
- admin_url( "options-general.php?page=wordpress-zero-spam-settings&subview=zerospam" )
33
- );
34
- else :
35
- $license_key = \ZeroSpam\Core\Settings::get_settings( 'zerospam_license' );
36
- if ( $license_key ) :
37
- $license = \ZeroSpam\Modules\Zero_Spam::get_license( $license_key );
38
- if ( empty( $license['license_key'] ) ) :
39
- echo '<img src="' . plugin_dir_url( ZEROSPAM ) . 'assets/img/icon-error.svg" class="zerospam-small-icon" />';
40
- echo sprintf(
41
- wp_kses(
42
- /* translators: %1s: Replaced with the Zero Spam URL */
43
- __( '<strong>Enhanced Protection is <a href="%1$s">DISABLED</a> (invalid license).</strong>', 'zero-spam' ),
44
- array(
45
- 'h3' => array(),
46
- 'p' => array(),
47
- 'a' => array(
48
- 'href' => array(),
49
- 'class' => array(),
50
- 'rel' => array(),
51
- ),
52
- 'strong' => array(),
53
- )
54
- ),
55
- admin_url( "options-general.php?page=wordpress-zero-spam-settings&subview=zerospam" )
56
- );
57
- else :
58
- echo '<img src="' . plugin_dir_url( ZEROSPAM ) . 'assets/img/icon-success.svg" class="zerospam-small-icon" />';
59
- echo sprintf(
60
- wp_kses(
61
- /* translators: %1s: Replaced with the Zero Spam URL */
62
- __( '<strong>Protected &mdash; %1s queries available</strong>', 'zero-spam' ),
63
- array(
64
- 'h3' => array(),
65
- 'p' => array(),
66
- 'a' => array(
67
- 'href' => array(),
68
- 'class' => array(),
69
- 'rel' => array(),
70
- ),
71
- 'strong' => array(),
72
- )
73
- ),
74
- number_format( $license['queries_remaining'], 0 )
75
- );
76
- endif;
77
- else:
78
- echo '<img src="' . plugin_dir_url( ZEROSPAM ) . 'assets/img/icon-error.svg" class="zerospam-small-icon" />';
79
- echo sprintf(
80
- wp_kses(
81
- /* translators: %1s: Replaced with the Zero Spam URL, %2$s: Replaced with the DDoD attack wiki URL */
82
- __( '<strong>Enhanced Protection is <a href="%1$s">DISABLED</a>.</strong>', 'zero-spam' ),
83
- array(
84
- 'h3' => array(),
85
- 'p' => array(),
86
- 'a' => array(
87
- 'href' => array(),
88
- 'class' => array(),
89
- 'rel' => array(),
90
- ),
91
- 'strong' => array(),
92
- )
93
- ),
94
- admin_url( "options-general.php?page=wordpress-zero-spam-settings&subview=zerospam" )
95
- );
96
- endif;
97
- endif;
98
- ?>
99
- </div>
100
  </header>
4
  *
5
  * @package ZeroSpam
6
  */
 
7
  ?>
8
 
9
  <header class="zerospam-header">
10
+ <img src="<?php echo plugin_dir_url( ZEROSPAM ) . 'assets/img/text-zero-spam.svg' ?>" width="250" />
11
+ <div class="zerospam-header__status">
12
+ <?php
13
+ $status = \ZeroSpam\Core\Settings::get_settings( 'zerospam' );
14
+ if ( 'enabled' !== $status ) :
15
+ echo '<img src="' . plugin_dir_url( ZEROSPAM ) . 'assets/img/icon-error.svg" class="zerospam-small-icon" />';
16
+ echo sprintf(
17
+ wp_kses(
18
+ /* translators: %1s: Replaced with the Zero Spam URL */
19
+ __( '<strong>Enhanced Protection is <a href="%1$s">DISABLED</a>.</strong>', 'zero-spam' ),
20
+ array(
21
+ 'h3' => array(),
22
+ 'p' => array(),
23
+ 'a' => array(
24
+ 'href' => array(),
25
+ 'class' => array(),
26
+ 'rel' => array(),
27
+ ),
28
+ 'strong' => array(),
29
+ )
30
+ ),
31
+ admin_url( "options-general.php?page=wordpress-zero-spam-settings&subview=zerospam" )
32
+ );
33
+ else :
34
+ $license_key = \ZeroSpam\Core\Settings::get_settings( 'zerospam_license' );
35
+ if ( $license_key ) :
36
+ $license = \ZeroSpam\Modules\Zero_Spam::get_license( $license_key );
37
+ if ( empty( $license['license_key'] ) ) :
38
+ echo '<img src="' . plugin_dir_url( ZEROSPAM ) . 'assets/img/icon-error.svg" class="zerospam-small-icon" />';
39
+ echo sprintf(
40
+ wp_kses(
41
+ /* translators: %1s: Replaced with the Zero Spam URL */
42
+ __( '<strong>Enhanced Protection is <a href="%1$s">DISABLED</a> (invalid license).</strong>', 'zero-spam' ),
43
+ array(
44
+ 'h3' => array(),
45
+ 'p' => array(),
46
+ 'a' => array(
47
+ 'href' => array(),
48
+ 'class' => array(),
49
+ 'rel' => array(),
50
+ ),
51
+ 'strong' => array(),
52
+ )
53
+ ),
54
+ admin_url( "options-general.php?page=wordpress-zero-spam-settings&subview=zerospam" )
55
+ );
56
+ else :
57
+ echo '<img src="' . plugin_dir_url( ZEROSPAM ) . 'assets/img/icon-success.svg" class="zerospam-small-icon" />';
58
+ echo sprintf(
59
+ wp_kses(
60
+ /* translators: %1s: Replaced with the Zero Spam URL */
61
+ __( '<strong>%1s queries available</strong>', 'zero-spam' ),
62
+ array(
63
+ 'h3' => array(),
64
+ 'p' => array(),
65
+ 'a' => array(
66
+ 'href' => array(),
67
+ 'class' => array(),
68
+ 'rel' => array(),
69
+ ),
70
+ 'strong' => array(),
71
+ )
72
+ ),
73
+ number_format( $license['queries_remaining'], 0 )
74
+ );
75
+ endif;
76
+ else:
77
+ echo '<img src="' . plugin_dir_url( ZEROSPAM ) . 'assets/img/icon-error.svg" class="zerospam-small-icon" />';
78
+ echo sprintf(
79
+ wp_kses(
80
+ /* translators: %1s: Replaced with the Zero Spam URL, %2$s: Replaced with the DDoD attack wiki URL */
81
+ __( '<strong>Enhanced Protection is <a href="%1$s">DISABLED</a>.</strong>', 'zero-spam' ),
82
+ array(
83
+ 'h3' => array(),
84
+ 'p' => array(),
85
+ 'a' => array(
86
+ 'href' => array(),
87
+ 'class' => array(),
88
+ 'rel' => array(),
89
+ ),
90
+ 'strong' => array(),
91
+ )
92
+ ),
93
+ admin_url( "options-general.php?page=wordpress-zero-spam-settings&subview=zerospam" )
94
+ );
95
+ endif;
96
+ endif;
97
+ ?>
98
+ </div>
99
  </header>
includes/templates/admin-hours-list.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Admin hours list
4
+ *
5
+ * @package ZeroSpam
6
+ */
7
+
8
+ $data = array(
9
+ '12am' => 0,
10
+ '1am' => 0,
11
+ '2am' => 0,
12
+ '3am' => 0,
13
+ '4am' => 0,
14
+ '5am' => 0,
15
+ '6am' => 0,
16
+ '7am' => 0,
17
+ '8am' => 0,
18
+ '9am' => 0,
19
+ '10am' => 0,
20
+ '11am' => 0,
21
+ '12pm' => 0,
22
+ '1pm' => 0,
23
+ '2pm' => 0,
24
+ '3pm' => 0,
25
+ '4pm' => 0,
26
+ '5pm' => 0,
27
+ '6pm' => 0,
28
+ '7pm' => 0,
29
+ '8pm' => 0,
30
+ '9pm' => 0,
31
+ '10pm' => 0,
32
+ '11pm' => 0,
33
+ );
34
+ foreach ( $entries as $key => $entry ) {
35
+ $entry_date_key = gmdate( 'ga', strtotime( $entry['date_recorded'] ) );
36
+ $data[ $entry_date_key ]++;
37
+ }
38
+
39
+ arsort( $data );
40
+ array_splice( $data, 5 );
41
+ ?>
42
+ <h3><?php _e( 'All-time Detections by Hour', 'zero-spam' ); ?></h3>
43
+ <ul class="zerospam-list zerospam-list--top">
44
+ <?php foreach ( $data as $time => $count ) : ?>
45
+ <li class="zerospam-list__item">
46
+ <span class="zerospam-list__value zerospam-list__value--label">
47
+ <?php echo $time; ?>
48
+ </span>
49
+ <span class="zerospam-list__value zerospam-list__value--count"><?php echo number_format( $count, 0 ); ?></span>
50
+ </li>
51
+ <?php endforeach; ?>
52
+ </ul>
includes/templates/admin-ips.php CHANGED
@@ -18,58 +18,68 @@ if ( empty( $entries ) ) {
18
  return;
19
  }
20
 
21
- $ips = array();
22
- foreach ( $entries as $key => $entry ) {
23
- if ( empty( $ips[ $entry['user_ip'] ] ) ) {
24
- $ips[ $entry['user_ip'] ] = array(
25
- 'count' => 1,
26
- 'country' => ! empty( $entry['country'] ) ? $entry['country'] : false,
27
- );
28
- } else {
29
- $ips[ $entry['user_ip'] ]['count']++;
 
 
 
 
 
 
 
 
 
 
 
 
30
  }
31
  }
32
 
33
- if ( $ips ) {
34
- arsort( $ips );
35
- }
 
 
36
  ?>
37
- <ul class="zerospam-list zerospam-list--data-actions">
38
  <?php
39
  $limit = 12;
40
  $cnt = 0;
41
- foreach ( $ips as $ip => $data ) :
42
  $cnt++;
43
  if ( $cnt > $limit ) {
44
  break;
45
  }
 
 
46
  ?>
47
- <li>
48
- <span class="zerospam-list__value">
49
- <?php if ( ! empty( $data['country'] ) ) : ?>
 
50
  <img
51
- src="<?php echo esc_url( ZeroSpam\Core\Utilities::country_flag_url( $data['country'] ) ); ?>"
52
- alt="<?php echo esc_attr( $data['country'] ); ?>"
53
  class="zerospam-flag"
54
  width="14"
55
  height="14"
 
56
  />
57
  <?php endif; ?>
58
  <a href="<?php echo esc_url( ZEROSPAM_URL ); ?>ip-lookup/<?php echo urlencode( $ip ); ?>" target="_blank" rel="noopener noreferrer">
59
  <?php echo esc_html( $ip ); ?>
60
  </a>
61
  </span>
62
- <span class="zerospam-list__value">
63
- <?php if ( ! empty( $data['country'] ) ) : ?>
64
- <?php echo ZeroSpam\Core\Utilities::countries( $data['country'] ); ?>
65
- <?php else: ?>
66
- <?php esc_html_e( 'Unknown', 'zero-spam' ); ?>
67
- <?php endif; ?>
68
- </span>
69
- <span class="zerospam-list__value"><?php echo number_format( $data['count'], 0 ); ?></span>
70
- <span class="zerospam-list__value">
71
  <?php
72
- $blocked = ZeroSpam\Includes\DB::blocked( $ip );
73
  if ( $blocked ) :
74
  ?>
75
  <button
@@ -81,12 +91,12 @@ if ( $ips ) {
81
  data-type="<?php echo esc_attr( $blocked['blocked_type'] ); ?>"
82
  aria-label="<?php esc_html_e( 'Update Block', 'zero-spam' ); ?>"
83
  >
84
- <img src="<?php echo plugin_dir_url( ZEROSPAM ); ?>assets/img/icon-edit.svg" width="13" />
85
  </button>
86
  <?php
87
  else :
88
  ?>
89
- <button class="button zerospam-block-trigger" data-ip="<?php echo esc_attr( $ip ); ?>" aria-label="<?php esc_html_e( 'Block IP', 'zero-spam' ); ?>"><img src="<?php echo plugin_dir_url( ZEROSPAM ); ?>assets/img/icon-blocked.svg" width="13" /></button>
90
  <?php
91
  endif;
92
  ?>
18
  return;
19
  }
20
 
21
+ $data = array();
22
+ for ( $x = 0; $x < 30; $x++ ) {
23
+ $time = strtotime('-' . $x . ' days');
24
+ $date_key = gmdate( 'M. j', $time );
25
+
26
+ foreach ( $entries as $key => $entry ) {
27
+ $entry_date_key = gmdate( 'M. j', strtotime( $entry['date_recorded'] ) );
28
+
29
+ if ( $date_key === $entry_date_key ) {
30
+ if ( empty( $data[ $entry['user_ip'] ] ) ) {
31
+ $data[ $entry['user_ip'] ] = array(
32
+ 'count' => 1,
33
+ );
34
+ } else {
35
+ $data[ $entry['user_ip'] ]['count']++;
36
+ }
37
+
38
+ if ( ! empty( $entry['country'] ) ) {
39
+ $data[ $entry['user_ip'] ]['country'] = $entry['country'];
40
+ }
41
+ }
42
  }
43
  }
44
 
45
+ uasort($data, function($a, $b){
46
+ return $b['count'] <=> $a['count'];
47
+ });
48
+
49
+ array_splice( $data, 12 );
50
  ?>
51
+ <ul class="zerospam-list zerospam-list--top">
52
  <?php
53
  $limit = 12;
54
  $cnt = 0;
55
+ foreach ( $data as $ip => $info ) :
56
  $cnt++;
57
  if ( $cnt > $limit ) {
58
  break;
59
  }
60
+
61
+ $blocked = ZeroSpam\Includes\DB::blocked( $ip );
62
  ?>
63
+ <li class="zerospam-list__item<?php if ( $blocked ) : ?> zerospam-list__item--blocked<?php endif; ?>">
64
+ <span class="zerospam-list__value zerospam-list__value--label">
65
+ <?php if ( $blocked ) : ?><span class="zerospam-tag"><?php _e( 'Blocked', 'zero-spam' ); ?></span><?php endif; ?>
66
+ <?php if ( ! empty( $info['country'] ) ) : ?>
67
  <img
68
+ src="<?php echo esc_url( ZeroSpam\Core\Utilities::country_flag_url( $info['country'] ) ); ?>"
69
+ alt="<?php echo esc_attr( $info['country'] ); ?>"
70
  class="zerospam-flag"
71
  width="14"
72
  height="14"
73
+ title="<?php echo esc_attr( \ZeroSpam\Core\Utilities::countries( $info['country'] ) ); ?>"
74
  />
75
  <?php endif; ?>
76
  <a href="<?php echo esc_url( ZEROSPAM_URL ); ?>ip-lookup/<?php echo urlencode( $ip ); ?>" target="_blank" rel="noopener noreferrer">
77
  <?php echo esc_html( $ip ); ?>
78
  </a>
79
  </span>
80
+ <span class="zerospam-list__value zerospam-list__value--count"><?php echo number_format( $info['count'], 0 ); ?></span>
81
+ <span class="zerospam-list__value zerospam-list__value--actions">
 
 
 
 
 
 
 
82
  <?php
 
83
  if ( $blocked ) :
84
  ?>
85
  <button
91
  data-type="<?php echo esc_attr( $blocked['blocked_type'] ); ?>"
92
  aria-label="<?php esc_html_e( 'Update Block', 'zero-spam' ); ?>"
93
  >
94
+ <?php _e( 'Edit Block', 'zero-spam' ); ?>
95
  </button>
96
  <?php
97
  else :
98
  ?>
99
+ <button class="button zerospam-block-trigger" data-ip="<?php echo esc_attr( $ip ); ?>"><?php _e( 'Block', 'zero-spam' ); ?></button>
100
  <?php
101
  endif;
102
  ?>
includes/templates/admin-line-chart.php CHANGED
@@ -33,23 +33,81 @@ wp_enqueue_style(
33
  '2.9.4'
34
  );
35
 
36
- $data = array();
37
- foreach ( $entries as $key => $entry ) :
38
- $date_key = gmdate( 'Y-m-d', strtotime( $entry['date_recorded'] ) );
39
- if ( empty( $data[ $date_key ] ) ) {
40
- $data[ $date_key ] = 1;
41
- } else {
42
- $data[ $date_key ]++;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  }
44
- endforeach;
45
 
46
- ksort( $data );
 
47
 
48
- $labels = array();
49
- $chart_data = array();
50
- foreach ( $data as $date => $count ) {
51
- $labels[] = gmdate( 'M j, Y', strtotime( $date ) );
52
- $chart_data[] = $count;
53
  }
54
  ?>
55
 
@@ -62,20 +120,23 @@ foreach ( $data as $date => $count ) {
62
  type: 'line',
63
  data: {
64
  labels: <?php echo wp_json_encode( $labels ); ?>,
65
- datasets: [{
66
- label: '<?php esc_html_e( 'Number of Detections', 'zero-spam' ); ?>',
67
- data: <?php echo wp_json_encode( $chart_data ); ?>,
68
- backgroundColor: 'rgba(88, 0, 15, 0.5)',
69
- borderColor: '#63000D',
70
- borderWidth: 2,
71
- pointBorderWidth: 2,
72
- pointBackgroundColor: '#58000f',
73
- pointRadius: 2,
74
- fill: false,
75
- }],
76
  },
77
  options: {
78
- legend: false
 
 
 
 
 
 
 
 
 
79
  }
80
  });
81
  });
33
  '2.9.4'
34
  );
35
 
36
+
37
+ // Create the datasets to display on the line chart
38
+ $labels = array();
39
+ $datasets = array();
40
+
41
+ // Detections
42
+ $datasets['detections'] = array(
43
+ 'label' => __( 'Total', 'zero-spam' ),
44
+ 'data' => array(),
45
+ 'borderColor' => '#3F0008',
46
+ 'backgroundColor' => '#3F0008',
47
+ 'fill' => false,
48
+ );
49
+
50
+ // Create the log types
51
+ $all_types = apply_filters( 'zerospam_types', array() );
52
+ $types = array();
53
+ foreach ( $entries as $key => $entry ) {
54
+ if ( ! in_array( $entry['log_type'], $types ) ) {
55
+ $types[] = $entry['log_type'];
56
+ }
57
+ }
58
+
59
+ foreach ( $types as $type ) {
60
+ $datasets[ $type ] = array(
61
+ 'label' => ! empty( $all_types[ $type ]['label'] ) ? $all_types[ $type ]['label'] : $type,
62
+ 'data' => array(),
63
+ 'borderColor' => ! empty( $all_types[ $type ]['color'] ) ? $all_types[ $type ]['color'] : '#3F0008',
64
+ 'backgroundColor' => ! empty( $all_types[ $type ]['color'] ) ? $all_types[ $type ]['color'] : '#3F0008',
65
+ 'fill' => false,
66
+ );
67
+ }
68
+
69
+ for ( $x = 0; $x < 14; $x++ ) {
70
+ $time = strtotime('-' . $x . ' days');
71
+ $date_key = gmdate( 'M. d', $time );
72
+
73
+ $labels[] = $date_key;
74
+
75
+ $datasets['detections']['data'][ $date_key ] = 0;
76
+
77
+ foreach ( $types as $type ) {
78
+ $datasets[ $type ]['data'][ $date_key ] = 0;
79
+ }
80
+
81
+ foreach ( $entries as $key => $entry ) {
82
+ $entry_date_key = gmdate( 'M. d', strtotime( $entry['date_recorded'] ) );
83
+
84
+ if ( $date_key === $entry_date_key ) {
85
+ // Detections
86
+ if ( empty( $datasets['detections']['data'][ $date_key ] ) ) {
87
+ $datasets['detections']['data'][ $date_key ] = 1;
88
+ } else {
89
+ $datasets['detections']['data'][ $date_key ]++;
90
+ }
91
+
92
+ // Types
93
+ foreach ( $types as $type ) {
94
+ if ( $type === $entry['log_type'] ) {
95
+ if ( ! $datasets[ $type ]['data'][ $date_key ] ) {
96
+ $datasets[ $type ]['data'][ $date_key ] = 1;
97
+ } else {
98
+ $datasets[ $type ]['data'][ $date_key ]++;
99
+ }
100
+ }
101
+ }
102
+ }
103
  }
104
+ }
105
 
106
+ $labels = array_reverse( $labels );
107
+ ksort( $datasets['detections']['data'] );
108
 
109
+ foreach ( $types as $type ) {
110
+ ksort( $datasets[ $type ]['data'] );
 
 
 
111
  }
112
  ?>
113
 
120
  type: 'line',
121
  data: {
122
  labels: <?php echo wp_json_encode( $labels ); ?>,
123
+ datasets:[
124
+ <?php foreach ( $datasets as $key => $data ) : ?>
125
+ <?php echo wp_json_encode( $data ); ?>,
126
+ <?php endforeach; ?>
127
+ ],
 
 
 
 
 
 
128
  },
129
  options: {
130
+ plugins: {
131
+ legend: {
132
+ position: 'bottom',
133
+ labels: {
134
+ boxWidth: 10,
135
+ boxHeight: 10,
136
+ padding: 15,
137
+ }
138
+ }
139
+ }
140
  }
141
  });
142
  });
includes/templates/admin-map.php CHANGED
@@ -20,12 +20,11 @@ if ( empty( $entries ) ) {
20
 
21
  $regions_data = array();
22
  $coords = array();
 
23
  $locations = array();
24
 
25
  foreach ( $entries as $key => $entry ) {
26
  if ( ! empty( $entry['latitude'] ) && ! empty( $entry['longitude'] ) ) {
27
- $coords[] = array( $entry['latitude'], $entry['longitude'] );
28
-
29
  $name = '';
30
  if ( ! empty( $entry['city'] ) ) {
31
  $name .= $entry['city'];
@@ -45,7 +44,27 @@ foreach ( $entries as $key => $entry ) {
45
  $name .= $entry['country'];
46
  }
47
 
48
- $locations[] = $name;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  }
50
 
51
  if ( ! empty( $entry['country'] ) ) {
@@ -58,19 +77,10 @@ foreach ( $entries as $key => $entry ) {
58
  }
59
  }
60
 
61
- if ( empty( $locations ) ) :
62
- echo sprintf(
63
- wp_kses(
64
- /* translators: %s: url */
65
- __( 'Current detections have no geolocation information available. Enable ipstack and/or IPinfo on the <a href="%1$s">settings page</a>.', 'zero-spam' ),
66
- array(
67
- 'a' => array( 'href' => array() ),
68
- )
69
- ),
70
- esc_url( admin_url( 'options-general.php?page=wordpress-zero-spam-settings' ) ),
71
- );
72
- return;
73
- endif;
74
 
75
  wp_enqueue_script(
76
  'zerospam-jvectormap',
@@ -82,7 +92,7 @@ wp_enqueue_script(
82
 
83
  wp_enqueue_script(
84
  'zerospam-jvectormap-world',
85
- plugins_url( 'assets/js/jquery-jvectormap-world-mill.js', ZEROSPAM ),
86
  array( 'zerospam-jvectormap' ),
87
  '2.0.5',
88
  false
@@ -101,45 +111,54 @@ wp_enqueue_style(
101
  (function($) {
102
  var regionsData = <?php echo wp_json_encode( $regions_data ); ?>;
103
  var coords = <?php echo wp_json_encode( $coords ); ?>;
104
- var names = <?php echo wp_json_encode( $locations ); ?>;
105
 
106
  $(function() {
107
  $('#world-map').vectorMap({
108
- map: 'world_mill',
109
  backgroundColor: 'transparent',
110
  markers: coords,
111
  markerStyle: {
112
  initial: {
113
- fill: '#BE0000',
114
- stroke: '#000000',
115
  "fill-opacity": 1,
116
- "stroke-width": 1,
117
- "stroke-opacity": 0.5,
118
- r: 3
119
  },
120
  },
121
  regionStyle: {
122
  initial: {
123
- fill: '#f1f1f1',
124
  "fill-opacity": 1,
125
- stroke: '#ccd0d4',
126
  "stroke-width": 1,
127
- "stroke-opacity": 0.5
128
  },
129
  },
130
  series: {
 
 
 
 
 
131
  regions: [{
132
  values: regionsData,
133
- scale: ['#FFA17C','#63000D'],
134
  normalizeFunction: 'polynomial'
135
  }]
136
  },
137
- onMarkerTipShow: function(event, label, index){
138
- label.html( names[index] );
 
 
 
 
 
 
 
139
  },
140
- onRegionTipShow: function(e, el, code){
141
- el.html( el.html() + ' (<?php _e( 'Detections', 'zero-spam' ); ?>: ' + regionsData[code] + ')' );
142
- }
143
  });
144
  });
145
  })(jQuery);
20
 
21
  $regions_data = array();
22
  $coords = array();
23
+ $coords_data = array();
24
  $locations = array();
25
 
26
  foreach ( $entries as $key => $entry ) {
27
  if ( ! empty( $entry['latitude'] ) && ! empty( $entry['longitude'] ) ) {
 
 
28
  $name = '';
29
  if ( ! empty( $entry['city'] ) ) {
30
  $name .= $entry['city'];
44
  $name .= $entry['country'];
45
  }
46
 
47
+ if ( ! $name ) {
48
+ $name = __( 'Unknown', 'zero-spam' );
49
+ }
50
+
51
+ $coord_key = $entry['latitude'] . $entry['longitude'];
52
+ if ( empty( $coords[ $coord_key ] ) ) {
53
+ $coords_data[ $coord_key ] = 1;
54
+ $coords[ $coord_key ] = array(
55
+ 'latLng' => array(
56
+ $entry['latitude'],
57
+ $entry['longitude']
58
+ )
59
+ );
60
+ $locations[ $coord_key ] = array(
61
+ 'name' => $name,
62
+ 'count' => 0,
63
+ );
64
+ } else {
65
+ $coords_data[ $coord_key ]++;
66
+ $locations[ $coord_key ]['count']++;
67
+ }
68
  }
69
 
70
  if ( ! empty( $entry['country'] ) ) {
77
  }
78
  }
79
 
80
+ $locations_data = array();
81
+ foreach ( $locations as $key => $loc ) {
82
+ $locations_data[ $key ] = $loc['name'] . ': ' . $loc['count'];
83
+ }
 
 
 
 
 
 
 
 
 
84
 
85
  wp_enqueue_script(
86
  'zerospam-jvectormap',
92
 
93
  wp_enqueue_script(
94
  'zerospam-jvectormap-world',
95
+ plugins_url( 'assets/js/jquery-jvectormap-world-merc.js', ZEROSPAM ),
96
  array( 'zerospam-jvectormap' ),
97
  '2.0.5',
98
  false
111
  (function($) {
112
  var regionsData = <?php echo wp_json_encode( $regions_data ); ?>;
113
  var coords = <?php echo wp_json_encode( $coords ); ?>;
114
+ var names = <?php echo wp_json_encode( $locations_data ); ?>;
115
 
116
  $(function() {
117
  $('#world-map').vectorMap({
118
+ map: 'world_merc',
119
  backgroundColor: 'transparent',
120
  markers: coords,
121
  markerStyle: {
122
  initial: {
123
+ fill: '#be0000',
124
+ stroke: '#fff',
125
  "fill-opacity": 1,
126
+ "stroke-width": 2,
127
+ "stroke-opacity": 1,
128
+ r: 2
129
  },
130
  },
131
  regionStyle: {
132
  initial: {
133
+ fill: '#e7e7e7',
134
  "fill-opacity": 1,
135
+ stroke: '#fff',
136
  "stroke-width": 1,
137
+ "stroke-opacity": 1
138
  },
139
  },
140
  series: {
141
+ markers: [{
142
+ attribute: 'r',
143
+ scale: [5, 15],
144
+ values: <?php echo wp_json_encode( $coords_data ); ?>
145
+ }],
146
  regions: [{
147
  values: regionsData,
148
+ scale: ['#ffe2e2','#ff2929'],
149
  normalizeFunction: 'polynomial'
150
  }]
151
  },
152
+ onRegionTipShow: function(e, el, code) {
153
+ if ( regionsData[code] ) {
154
+ el.html( el.html() + ': ' + regionsData[code] );
155
+ } else {
156
+ el.html( el.html() );
157
+ }
158
+ },
159
+ onMarkerTipShow: function(e, tip, code) {
160
+ tip.html( names[code] );
161
  },
 
 
 
162
  });
163
  });
164
  })(jQuery);
includes/templates/admin-modal-details.php CHANGED
@@ -65,7 +65,7 @@ endif;
65
  $detection_types = apply_filters( 'zerospam_types', array() );
66
  if ( ! empty( $detection_types[ $item['log_type'] ] ) ) :
67
  echo wp_kses(
68
- $detection_types[ $item['log_type'] ] . ' &mdash; <code>' . $item['log_type'] . '</code>',
69
  array( 'code' => array() )
70
  );
71
  else :
65
  $detection_types = apply_filters( 'zerospam_types', array() );
66
  if ( ! empty( $detection_types[ $item['log_type'] ] ) ) :
67
  echo wp_kses(
68
+ $detection_types[ $item['log_type'] ]['label'] . ' &mdash; <code>' . $item['log_type'] . '</code>',
69
  array( 'code' => array() )
70
  );
71
  else :
includes/templates/admin-pie.php CHANGED
@@ -33,35 +33,40 @@ $predefined_colors = array(
33
  '#ffe5e9',
34
  );
35
 
36
- $countries = array();
37
- foreach ( $entries as $key => $entry ) :
 
 
 
38
 
39
- if ( empty( $entry['country'] ) ) :
40
- continue;
41
- endif;
42
 
43
- $k = ZeroSpam\Core\Utilities::countries( $entry['country'] );
 
 
 
 
44
 
45
- if ( empty( $countries[ $k ] ) ) :
46
- $countries[ $k ] = 1;
47
- else :
48
- $countries[ $k ]++;
49
- endif;
50
- endforeach;
 
 
 
51
 
52
- if ( empty( $countries ) ) :
53
- echo sprintf(
54
- wp_kses(
55
- /* translators: %s: url */
56
- __( 'No geolocation information available, enable ipstack and/or IPinfo on the <a href="%1$s">settings page</a>.', 'zero-spam' ),
57
- array(
58
- 'a' => array( 'href' => array() ),
59
- )
60
- ),
61
- esc_url( admin_url( 'options-general.php?page=wordpress-zero-spam-settings' ) ),
62
- );
63
- return;
64
- endif;
65
 
66
  wp_enqueue_script(
67
  'zerospam-chart',
@@ -77,25 +82,6 @@ wp_enqueue_style(
77
  array(),
78
  '2.9.4'
79
  );
80
-
81
- if ( $countries ) :
82
- arsort( $countries );
83
- endif;
84
-
85
- $labels = array();
86
- $data = array();
87
- $colors = array();
88
- $count = 0;
89
- foreach ( $countries as $key => $value ) :
90
- if ( $count >= $limit ) :
91
- break;
92
- endif;
93
-
94
- $labels[] = $key;
95
- $data[] = $value;
96
- $colors[] = $predefined_colors[ $count ];
97
- $count++;
98
- endforeach;
99
  ?>
100
 
101
  <canvas id="zerospam-pie-countries"></canvas>
@@ -108,16 +94,19 @@ endforeach;
108
  data: {
109
  labels: <?php echo wp_json_encode( $labels ); ?>,
110
  datasets: [{
111
- data: <?php echo wp_json_encode( $data ); ?>,
112
- backgroundColor: <?php echo wp_json_encode( $colors ); ?>,
113
- borderWidth: 0,
114
- borderColor: '#f1f1f1'
115
  }],
116
  },
117
  options: {
118
- legend: {
119
- position: 'right',
120
- fullWidth: false
 
 
 
 
 
121
  }
122
  }
123
  });
33
  '#ffe5e9',
34
  );
35
 
36
+ $data = array();
37
+ $labels = array();
38
+ for ( $x = 0; $x < 14; $x++ ) {
39
+ $time = strtotime('-' . $x . ' days');
40
+ $date_key = gmdate( 'M. j', $time );
41
 
42
+ foreach ( $entries as $key => $entry ) {
43
+ $entry_date_key = gmdate( 'M. j', strtotime( $entry['date_recorded'] ) );
 
44
 
45
+ if ( $date_key === $entry_date_key ) {
46
+ if ( ! empty( $entry['country_name'] ) ) {
47
+ if ( ! in_array( $entry['country_name'], $labels ) ) {
48
+ $labels[] = $entry['country_name'];
49
+ }
50
 
51
+ if ( empty( $data[ $entry['country_name'] ] ) ) {
52
+ $data[ $entry['country_name'] ] = 1;
53
+ } else {
54
+ $data[ $entry['country_name'] ]++;
55
+ }
56
+ } else {
57
+ if ( ! in_array( __( 'Unknown', 'zero-spam' ), $labels ) ) {
58
+ $labels[] = __( 'Unknown', 'zero-spam' );
59
+ }
60
 
61
+ if ( empty( $data['unknown'] ) ) {
62
+ $data['unknown'] = 1;
63
+ } else {
64
+ $data['unknown']++;
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
 
 
 
 
70
 
71
  wp_enqueue_script(
72
  'zerospam-chart',
82
  array(),
83
  '2.9.4'
84
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  ?>
86
 
87
  <canvas id="zerospam-pie-countries"></canvas>
94
  data: {
95
  labels: <?php echo wp_json_encode( $labels ); ?>,
96
  datasets: [{
97
+ data: <?php echo wp_json_encode( array_values( $data ) ); ?>,
98
+ backgroundColor: <?php echo wp_json_encode( $predefined_colors ); ?>,
 
 
99
  }],
100
  },
101
  options: {
102
+ plugins: {
103
+ legend: {
104
+ position: 'right',
105
+ labels: {
106
+ boxWidth: 15,
107
+ boxHeight: 15,
108
+ }
109
+ }
110
  }
111
  }
112
  });
modules/class-security.php CHANGED
@@ -20,11 +20,22 @@ class Security {
20
  * Constructor
21
  */
22
  public function __construct() {
23
- // It can be considered a security risk to make your WP version visible &
24
- // public you should hide it.
25
  remove_action( 'wp_head', 'wp_generator' );
26
 
27
- // XML-RPC can significantly amplify the brute-force attacks.
28
- add_filter( 'xmlrpc_enabled', '__return_false' );
 
 
 
 
 
 
 
 
 
 
 
29
  }
30
  }
20
  * Constructor
21
  */
22
  public function __construct() {
23
+ // It can be considered a security risk to make your WP version visible &
24
+ // public you should hide it.
25
  remove_action( 'wp_head', 'wp_generator' );
26
 
27
+ // XML-RPC can significantly amplify the brute-force attacks.
28
+ add_filter( 'xmlrpc_enabled', '__return_false' );
29
+
30
+ // Fired on detections.
31
+ add_action( 'zero_spam_detection', array( $this, 'handle_detection' ), 10, 2 );
32
+ }
33
+
34
+ /**
35
+ * Handles detections.
36
+ *
37
+ * @param array $validation_errors Array of validation errors.
38
+ */
39
+ public function handle_detection( $details, $validation_errors ) {
40
  }
41
  }
modules/class-zerospam.php CHANGED
@@ -14,12 +14,6 @@ defined( 'ABSPATH' ) || die();
14
  * Zero Spam
15
  */
16
  class Zero_Spam {
17
-
18
- /**
19
- * The zerospam.org API endpoint
20
- */
21
- const API_ENDPOINT = ZEROSPAM_URL . 'wp-json/zero-spam-store/v1/';
22
-
23
  /**
24
  * Constructor
25
  */
@@ -228,15 +222,18 @@ class Zero_Spam {
228
  * Global API data.
229
  */
230
  public function global_api_data() {
231
- $api_data = array();
232
- $api_data['reporter_email'] = sanitize_email( get_bloginfo( 'admin_email' ) );
233
- $api_data['domain'] = esc_url( site_url() );
234
- $api_data['wp_version'] = sanitize_text_field( get_bloginfo( 'version' ) );
235
- $api_data['wp_admin_email'] = sanitize_email( get_bloginfo( 'admin_email' ) );
236
- $api_data['wp_zero_spam_version'] = sanitize_text_field( ZEROSPAM_VERSION );
237
- $api_data['wp_language'] = sanitize_text_field( strtolower( get_bloginfo( 'language' ) ) );
238
- $api_data['wp_site_name'] = sanitize_text_field( get_bloginfo( 'name' ) );
239
- $api_data['wp_site_tagline'] = sanitize_text_field( get_bloginfo( 'description' ) );
 
 
 
240
 
241
  return $api_data;
242
  }
@@ -260,7 +257,7 @@ class Zero_Spam {
260
  }
261
  }
262
 
263
- $endpoint = self::API_ENDPOINT . 'submit-report/';
264
 
265
  $ip = \ZeroSpam\Core\User::get_ip();
266
 
@@ -268,58 +265,13 @@ class Zero_Spam {
268
  return false;
269
  }
270
 
271
- // Define the data to send to the report API.
272
- $compliant = sanitize_text_field( $data['type'] );
273
- if ( ! empty( $data['failed'] ) ) {
274
- $compliant .= ' - ' . sanitize_text_field( $data['failed'] );
275
- }
276
-
277
  $api_data = array(
278
- 'report_type' => 'ip_address',
279
- 'ip_address' => sanitize_text_field( $ip ),
280
- 'compliant' => sanitize_text_field( $compliant ),
 
281
  );
282
 
283
- // Add specially defined data to the API report.
284
-
285
- // From comments.
286
- if ( ! empty( $data['comment_author_email'] ) && \ZeroSpam\Core\Utilities::is_email( $data['comment_author_email'] ) ) {
287
- $api_data['email_address'] = sanitize_email( $data['comment_author_email'] );
288
-
289
- if ( ! empty( $data['comment_author'] ) ) {
290
- $api_data['email_name'] = sanitize_text_field( $data['comment_author'] );
291
- }
292
- }
293
-
294
- // From registration.
295
- if ( ! empty( $data['user_email'] ) && \ZeroSpam\Core\Utilities::is_email( $data['user_email'] ) ) {
296
- $api_data['email_address'] = sanitize_email( $data['user_email'] );
297
- }
298
-
299
- // From WooCommerce registration.
300
- if ( ! empty( $data['email'] ) && \ZeroSpam\Core\Utilities::is_email( $data['email'] ) ) {
301
- $api_data['email_address'] = sanitize_email( $data['email'] );
302
- }
303
-
304
- if ( ! empty( $data['post'] ) ) {
305
- // From MemberPress.
306
- if ( ! empty( $data['post']['user_email'] ) && \ZeroSpam\Core\Utilities::is_email( $data['post']['user_email'] ) ) {
307
- $api_data['email_address'] = sanitize_email( $data['post']['user_email'] );
308
- }
309
-
310
- // From Mailchimp for WordPress.
311
- if ( ! empty( $data['post']['EMAIL'] ) && \ZeroSpam\Core\Utilities::is_email( $data['post']['EMAIL'] ) ) {
312
- $api_data['email_address'] = sanitize_email( $data['post']['EMAIL'] );
313
- }
314
- }
315
-
316
- if ( ! empty( $data['data'] ) ) {
317
- // From GiveWP.
318
- if ( ! empty( $data['data']['give_email'] ) && \ZeroSpam\Core\Utilities::is_email( $data['data']['give_email'] ) ) {
319
- $api_data['email_address'] = sanitize_email( $data['post']['give_email'] );
320
- }
321
- }
322
-
323
  // Add data that should be included in every API report.
324
  $global_data = self::global_api_data();
325
  $api_data = array_merge( $api_data, $global_data );
@@ -329,12 +281,91 @@ class Zero_Spam {
329
  'body' => array( 'data' => $api_data ),
330
  );
331
 
 
332
  $response = wp_remote_post( $endpoint, $args );
333
-
334
  if ( is_wp_error( $response ) ) {
335
  //echo $response->get_error_message();
336
  }
337
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
338
  update_site_option( 'zero_spam_last_api_request', current_time( 'mysql' ) );
339
  }
340
 
@@ -409,7 +440,7 @@ class Zero_Spam {
409
  if ( gmdate( 'Y-m-d', strtotime( $first_query_date ) ) !== gmdate( 'Y-m-d' ) ) {
410
  // New day.
411
  update_site_option( 'zero_spam_last_api_query', current_time( 'mysql' ) . '*1' );
412
- } elseif ( $num_queries > 100 ) {
413
  return false;
414
  } else {
415
  update_site_option( 'zero_spam_last_api_query', $first_query_date . '*' . ( $num_queries+1 ) );
14
  * Zero Spam
15
  */
16
  class Zero_Spam {
 
 
 
 
 
 
17
  /**
18
  * Constructor
19
  */
222
  * Global API data.
223
  */
224
  public function global_api_data() {
225
+ $api_data = array();
226
+ $api_data['reporter_email'] = sanitize_email( get_bloginfo( 'admin_email' ) );
227
+ $api_data['app_key'] = \ZeroSpam\Core\Utilities::clean_domain( esc_url( site_url() ) );
228
+ $api_data['app_type'] = 'wordpress';
229
+ $api_data['app_details'] = array(
230
+ 'app_version' => sanitize_text_field( get_bloginfo( 'version' ) ),
231
+ 'app_type_version' => sanitize_text_field( ZEROSPAM_VERSION ),
232
+ 'app_language' => sanitize_text_field( strtolower( get_bloginfo( 'language' ) ) ),
233
+ 'app_email' => sanitize_email( get_bloginfo( 'admin_email' ) ),
234
+ 'app_name' => sanitize_text_field( get_bloginfo( 'name' ) ),
235
+ 'app_desc' => sanitize_text_field( get_bloginfo( 'description' ) ),
236
+ );
237
 
238
  return $api_data;
239
  }
257
  }
258
  }
259
 
260
+ $endpoint = ZEROSPAM_URL . 'wp-json/v5.4/report/';
261
 
262
  $ip = \ZeroSpam\Core\User::get_ip();
263
 
265
  return false;
266
  }
267
 
 
 
 
 
 
 
268
  $api_data = array(
269
+ 'report_type' => 'ip_address',
270
+ 'report_module' => sanitize_text_field( $data['type'] ),
271
+ 'report_key' => sanitize_text_field( $ip ),
272
+ 'report_failed' => sanitize_text_field( $data['failed'] ),
273
  );
274
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
275
  // Add data that should be included in every API report.
276
  $global_data = self::global_api_data();
277
  $api_data = array_merge( $api_data, $global_data );
281
  'body' => array( 'data' => $api_data ),
282
  );
283
 
284
+ // Send IP report
285
  $response = wp_remote_post( $endpoint, $args );
 
286
  if ( is_wp_error( $response ) ) {
287
  //echo $response->get_error_message();
288
  }
289
 
290
+ // Send email report if needed.
291
+ $valid_email_fields = array(
292
+ 'comment_author_email', // Comments
293
+ 'user_email', // Registration
294
+ 'email', // WooCommerce Registration
295
+ 'post' => array( // Mailchimp
296
+ 'EMAIL'
297
+ ),
298
+ 'data' => array( // Give
299
+ 'give_email'
300
+ )
301
+ );
302
+
303
+ $valid_name_fields = array(
304
+ 'comment_author', // Comment
305
+ 'user_login', // Register
306
+ 'username', // WooCommerce Registration
307
+ 'data' => array( // Give
308
+ 'give_first',
309
+ 'give_last',
310
+ )
311
+ );
312
+
313
+ $report_details = array(
314
+ 'report_type' => 'email_address',
315
+ 'report_module' => sanitize_text_field( $data['type'] ),
316
+ 'report_failed' => sanitize_text_field( $data['failed'] ),
317
+ 'email_details' => array(
318
+ 'names' => array(),
319
+ 'companies' => array(),
320
+ 'titles' => array(),
321
+ 'phones' => array(),
322
+ 'locations' => array(),
323
+ )
324
+ );
325
+ foreach ( $valid_email_fields as $key => $field ) {
326
+ if ( is_array( $field ) ) {
327
+ foreach( $field as $k => $f ) {
328
+ if ( ! empty( $data[ $key ][ $f ] ) && \ZeroSpam\Core\Utilities::is_email( $data[ $key ][ $f ] ) ) {
329
+ $report_details['report_key'] = sanitize_email( $data[ $key ][ $f ] );
330
+ break;
331
+ }
332
+ }
333
+ } elseif ( ! empty( $data[ $field ] ) && \ZeroSpam\Core\Utilities::is_email( $data[ $field ] ) ) {
334
+ $report_details['report_key'] = sanitize_email( $data[ $field ] );
335
+ }
336
+
337
+ if ( ! empty( $report_details['report_key'] ) ) {
338
+ foreach ( $valid_name_fields as $k => $f ) {
339
+ if ( is_array( $f ) ) {
340
+ $name = '';
341
+ foreach( $f as $k1 => $f1 ) {
342
+ if ( ! empty( $data[ $k ][ $f1 ] ) ) {
343
+ if ( $name ) { $name .= " "; }
344
+ $name .= $data[ $k ][ $f1 ];
345
+ }
346
+ }
347
+
348
+ $report_details['email_details']['names'][] = sanitize_text_field( $name );
349
+ } elseif ( ! empty( $data[ $f ] ) ) {
350
+ $report_details['email_details']['names'][] = sanitize_text_field( $data[ $f ] );
351
+ }
352
+ }
353
+
354
+ $args = array(
355
+ 'body' => array(
356
+ 'data' => array_merge( $report_details, $global_data )
357
+ )
358
+ );
359
+
360
+ $response = wp_remote_post( $endpoint, $args );
361
+ print_r($response);
362
+ die();
363
+
364
+ // Only send one email report per detection
365
+ break;
366
+ }
367
+ }
368
+
369
  update_site_option( 'zero_spam_last_api_request', current_time( 'mysql' ) );
370
  }
371
 
440
  if ( gmdate( 'Y-m-d', strtotime( $first_query_date ) ) !== gmdate( 'Y-m-d' ) ) {
441
  // New day.
442
  update_site_option( 'zero_spam_last_api_query', current_time( 'mysql' ) . '*1' );
443
+ } elseif ( $num_queries > 200 ) {
444
  return false;
445
  } else {
446
  update_site_option( 'zero_spam_last_api_query', $first_query_date . '*' . ( $num_queries+1 ) );
modules/comments/class-comments.php CHANGED
@@ -54,7 +54,10 @@ class Comments {
54
  * @param array $types Array of available detection types.
55
  */
56
  public function types( $types ) {
57
- $types['comment'] = __( 'Comment', 'zero-spam' );
 
 
 
58
 
59
  return $types;
60
  }
54
  * @param array $types Array of available detection types.
55
  */
56
  public function types( $types ) {
57
+ $types['comment'] = array(
58
+ 'label' => __( 'Comment', 'zero-spam' ),
59
+ 'color' => '#0073aa',
60
+ );
61
 
62
  return $types;
63
  }
modules/contactform7/class-contactform7.php CHANGED
@@ -139,7 +139,10 @@ class ContactForm7 {
139
  * @param array $types Array of available detection types.
140
  */
141
  public function types( $types ) {
142
- $types['contactform7'] = __( 'Contact Form 7', 'zero-spam' );
 
 
 
143
 
144
  return $types;
145
  }
139
  * @param array $types Array of available detection types.
140
  */
141
  public function types( $types ) {
142
+ $types['contactform7'] = array(
143
+ 'label' => __( 'Contact Form 7', 'zero-spam' ),
144
+ 'color' => '#1c457e',
145
+ );
146
 
147
  return $types;
148
  }
modules/davidwalsh/class-davidwalsh.php CHANGED
@@ -39,17 +39,6 @@ class DavidWalsh {
39
  add_action( 'login_enqueue_scripts', array( $this, 'scripts' ) );
40
  add_action( 'zerospam_fluentforms_scripts', array( $this, 'enqueue_script' ) );
41
  add_action( 'zerospam_mailchimp4wp_scripts', array( $this, 'enqueue_script' ) );
42
- add_action( 'zerospam_memberpress_login_scripts', array( $this, 'enqueue_script' ) );
43
- add_filter(
44
- 'zerospam_memberpress_registration_scripts',
45
- function( $scripts ) {
46
- $scripts[] = 'zerospam-davidwalsh';
47
-
48
- return $scripts;
49
- },
50
- 10,
51
- 1
52
- );
53
 
54
  add_filter( 'zerospam_preprocess_comment_submission', array( $this, 'validate_post' ), 10, 3 );
55
  add_filter( 'zerospam_preprocess_registration_submission', array( $this, 'validate_post' ), 10, 3 );
@@ -57,8 +46,6 @@ class DavidWalsh {
57
  add_filter( 'zerospam_preprocess_wpforms_submission', array( $this, 'validate_post' ), 10, 3 );
58
  add_filter( 'zerospam_preprocess_fluentform_submission', array( $this, 'validate_post' ), 10, 3 );
59
  add_filter( 'zerospam_preprocess_login_attempt', array( $this, 'validate_post' ), 10, 3 );
60
- add_filter( 'zerospam_preprocess_memberpress_registration', array( $this, 'validate_post' ), 10, 3 );
61
- add_filter( 'zerospam_preprocess_memberpress_login', array( $this, 'validate_post' ), 10, 3 );
62
  add_filter( 'zerospam_preprocess_mailchimp4wp', array( $this, 'validate_post' ), 10, 3 );
63
  add_filter( 'zerospam_process_woocommerce_registration', array( $this, 'validate_post' ), 10, 3 );
64
  add_filter( 'zerospam_process_givewp_submission', array( $this, 'validate_post' ), 10, 3 );
39
  add_action( 'login_enqueue_scripts', array( $this, 'scripts' ) );
40
  add_action( 'zerospam_fluentforms_scripts', array( $this, 'enqueue_script' ) );
41
  add_action( 'zerospam_mailchimp4wp_scripts', array( $this, 'enqueue_script' ) );
 
 
 
 
 
 
 
 
 
 
 
42
 
43
  add_filter( 'zerospam_preprocess_comment_submission', array( $this, 'validate_post' ), 10, 3 );
44
  add_filter( 'zerospam_preprocess_registration_submission', array( $this, 'validate_post' ), 10, 3 );
46
  add_filter( 'zerospam_preprocess_wpforms_submission', array( $this, 'validate_post' ), 10, 3 );
47
  add_filter( 'zerospam_preprocess_fluentform_submission', array( $this, 'validate_post' ), 10, 3 );
48
  add_filter( 'zerospam_preprocess_login_attempt', array( $this, 'validate_post' ), 10, 3 );
 
 
49
  add_filter( 'zerospam_preprocess_mailchimp4wp', array( $this, 'validate_post' ), 10, 3 );
50
  add_filter( 'zerospam_process_woocommerce_registration', array( $this, 'validate_post' ), 10, 3 );
51
  add_filter( 'zerospam_process_givewp_submission', array( $this, 'validate_post' ), 10, 3 );
modules/fluentforms/class-fluentforms.php CHANGED
@@ -196,7 +196,10 @@ class FluentForms {
196
  * @param array $types Array of available detection types.
197
  */
198
  public function types( $types ) {
199
- $types['fluent_form'] = __( 'Fluent Form', 'zero-spam' );
 
 
 
200
 
201
  return $types;
202
  }
196
  * @param array $types Array of available detection types.
197
  */
198
  public function types( $types ) {
199
+ $types['fluent_form'] = array(
200
+ 'label' => __( 'Fluent Form', 'zero-spam' ),
201
+ 'color' => '#0171ff',
202
+ );
203
 
204
  return $types;
205
  }
modules/formidable/class-formidable.php CHANGED
@@ -48,7 +48,10 @@ class Formidable {
48
  * @param array $types Array of available detection types.
49
  */
50
  public function types( $types ) {
51
- $types['formidable'] = __( 'Formidable', 'zero-spam' );
 
 
 
52
 
53
  return $types;
54
  }
48
  * @param array $types Array of available detection types.
49
  */
50
  public function types( $types ) {
51
+ $types['formidable'] = array(
52
+ 'label' => __( 'Formidable', 'zero-spam' ),
53
+ 'color' => '#f04d21',
54
+ );
55
 
56
  return $types;
57
  }
modules/give/class-give.php CHANGED
@@ -164,7 +164,10 @@ class Give {
164
  * @param array $types Array of available detection types.
165
  */
166
  public function types( $types ) {
167
- $types['givewp'] = __( 'GiveWP', 'zero-spam' );
 
 
 
168
 
169
  return $types;
170
  }
164
  * @param array $types Array of available detection types.
165
  */
166
  public function types( $types ) {
167
+ $types['givewp'] = array(
168
+ 'label' => __( 'GiveWP', 'zero-spam' ),
169
+ 'color' => '#66b25b',
170
+ );
171
 
172
  return $types;
173
  }
modules/gravityforms/class-gravityforms.php CHANGED
@@ -38,19 +38,48 @@ class GravityForms {
38
  'enabled' === \ZeroSpam\Core\Settings::get_settings( 'verify_gravityforms' ) &&
39
  \ZeroSpam\Core\Access::process()
40
  ) {
41
- // Adds Zero Spam's honeypot field.
42
  add_filter( 'gform_form_tag', array( $this, 'add_honeypot' ), 60, 2 );
43
 
44
- // Processes the form.
45
  add_action( 'gform_abort_submission_with_confirmation', array( $this, 'process_form' ), 10, 2 );
46
  add_filter( 'gform_confirmation', array( $this, 'confirmation_message' ), 10, 4 );
47
- /*
48
  // Load scripts.
49
  add_action( 'wp_print_scripts', array( $this, 'add_scripts' ), 999 );
50
- */
51
  }
52
  }
53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  /**
55
  * Load the scripts
56
  *
@@ -64,16 +93,16 @@ class GravityForms {
64
 
65
  /**
66
  * Adds Zero Spam's honeypot field.
67
- *
68
- * @see https://docs.gravityforms.com/gform_form_tag/#h-add-hidden-input
69
- *
70
  * @param string $form_tag The string containing the <form> tag
71
- * @param array $form The current form object to be filtered.
72
  */
73
  public function add_honeypot( $form_tag, $form ) {
74
- $form_tag .= \ZeroSpam\Core\Utilities::honeypot_field();
75
 
76
- return $form_tag;
77
  }
78
 
79
  public function confirmation_message( $confirmation, $form, $entry, $ajax ) {
@@ -119,6 +148,7 @@ class GravityForms {
119
  }
120
 
121
  if ( ! empty( $validation_errors ) ) {
 
122
  $do_abort = true;
123
 
124
  // Failed validations, log & send details if enabled.
@@ -140,32 +170,6 @@ class GravityForms {
140
  return $do_abort;
141
  }
142
 
143
- /**
144
- * Add to the types array
145
- *
146
- * @param array $types Array of available detection types.
147
- */
148
- public function types( $types ) {
149
- $types['gravityforms'] = __( 'Gravity Forms', 'zero-spam' );
150
-
151
- return $types;
152
- }
153
-
154
- /**
155
- * Admin section
156
- *
157
- * @param array $sections Array of available setting sections.
158
- */
159
- public function sections( $sections ) {
160
- $sections['gravityforms'] = array(
161
- 'title' => __( 'Gravity Forms', 'zero-spam' ),
162
- 'icon' => 'modules/gravityforms/icon-gravity-forms.svg',
163
- 'supports' => array( 'honeypot', 'email' ),
164
- );
165
-
166
- return $sections;
167
- }
168
-
169
  /**
170
  * Admin settings
171
  *
38
  'enabled' === \ZeroSpam\Core\Settings::get_settings( 'verify_gravityforms' ) &&
39
  \ZeroSpam\Core\Access::process()
40
  ) {
41
+ // Adds Zero Spam's honeypot field.
42
  add_filter( 'gform_form_tag', array( $this, 'add_honeypot' ), 60, 2 );
43
 
44
+ // Processes the form.
45
  add_action( 'gform_abort_submission_with_confirmation', array( $this, 'process_form' ), 10, 2 );
46
  add_filter( 'gform_confirmation', array( $this, 'confirmation_message' ), 10, 4 );
47
+ /*
48
  // Load scripts.
49
  add_action( 'wp_print_scripts', array( $this, 'add_scripts' ), 999 );
50
+ */
51
  }
52
  }
53
 
54
+ /**
55
+ * Add to the types array
56
+ *
57
+ * @param array $types Array of available detection types.
58
+ */
59
+ public function types( $types ) {
60
+ $types['gravityforms'] = array(
61
+ 'label' => __( 'Gravity Forms', 'zero-spam' ),
62
+ 'color' => '#f15a29',
63
+ );
64
+
65
+ return $types;
66
+ }
67
+
68
+ /**
69
+ * Admin section
70
+ *
71
+ * @param array $sections Array of available setting sections.
72
+ */
73
+ public function sections( $sections ) {
74
+ $sections['gravityforms'] = array(
75
+ 'title' => __( 'Gravity Forms', 'zero-spam' ),
76
+ 'icon' => 'modules/gravityforms/icon-gravity-forms.svg',
77
+ 'supports' => array( 'honeypot', 'email' ),
78
+ );
79
+
80
+ return $sections;
81
+ }
82
+
83
  /**
84
  * Load the scripts
85
  *
93
 
94
  /**
95
  * Adds Zero Spam's honeypot field.
96
+ *
97
+ * @see https://docs.gravityforms.com/gform_form_tag/#h-add-hidden-input
98
+ *
99
  * @param string $form_tag The string containing the <form> tag
100
+ * @param array $form The current form object to be filtered.
101
  */
102
  public function add_honeypot( $form_tag, $form ) {
103
+ $form_tag .= \ZeroSpam\Core\Utilities::honeypot_field();
104
 
105
+ return $form_tag;
106
  }
107
 
108
  public function confirmation_message( $confirmation, $form, $entry, $ajax ) {
148
  }
149
 
150
  if ( ! empty( $validation_errors ) ) {
151
+ do_action( 'zero_spam_detection', $details, $validation_errors );
152
  $do_abort = true;
153
 
154
  // Failed validations, log & send details if enabled.
170
  return $do_abort;
171
  }
172
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  /**
174
  * Admin settings
175
  *
modules/login/class-login.php CHANGED
@@ -151,7 +151,10 @@ class Login {
151
  * @param array $types Array of available detection types.
152
  */
153
  public function types( $types ) {
154
- $types['login'] = __( 'Login Attempt', 'zero-spam' );
 
 
 
155
 
156
  return $types;
157
  }
151
  * @param array $types Array of available detection types.
152
  */
153
  public function types( $types ) {
154
+ $types['login'] = array(
155
+ 'label' => __( 'Login', 'zero-spam' ),
156
+ 'color' => '#7b90ff',
157
+ );
158
 
159
  return $types;
160
  }
modules/mailchimpforwp/class-mailchimpforwp.php CHANGED
@@ -160,7 +160,10 @@ class MailchimpForWP {
160
  * @param array $types Array of available detection types.
161
  */
162
  public function types( $types ) {
163
- $types['mailchimp4wp'] = __( 'Mailchimp for WordPress', 'zero-spam' );
 
 
 
164
 
165
  return $types;
166
  }
160
  * @param array $types Array of available detection types.
161
  */
162
  public function types( $types ) {
163
+ $types['mailchimp4wp'] = array(
164
+ 'label' => __( 'Mailchimp for WordPress', 'zero-spam' ),
165
+ 'color' => '#c44',
166
+ );
167
 
168
  return $types;
169
  }
modules/memberpress/class-memberpress.php DELETED
@@ -1,375 +0,0 @@
1
- <?php
2
- /**
3
- * MemberPress class
4
- *
5
- * @package ZeroSpam
6
- */
7
-
8
- namespace ZeroSpam\Modules\MemberPress;
9
-
10
- // Security Note: Blocks direct access to the plugin PHP files.
11
- defined( 'ABSPATH' ) || die();
12
-
13
- /**
14
- * MemberPress
15
- */
16
- class MemberPress {
17
- /**
18
- * Constructor
19
- */
20
- public function __construct() {
21
- add_action( 'init', array( $this, 'init' ), 0 );
22
- }
23
-
24
- /**
25
- * Fires after WordPress has finished loading but before any headers are sent.
26
- */
27
- public function init() {
28
- global $wp_query;
29
-
30
- add_filter( 'zerospam_setting_sections', array( $this, 'sections' ) );
31
- add_filter( 'zerospam_settings', array( $this, 'settings' ), 10, 1 );
32
- add_filter( 'zerospam_types', array( $this, 'types' ), 10, 1 );
33
-
34
- if ( \ZeroSpam\Core\Access::process() ) {
35
- if ( 'enabled' === \ZeroSpam\Core\Settings::get_settings( 'verify_memberpress_registration' ) ) {
36
- // Add Zero Spam's honeypot field to the registration form.
37
- add_action( 'mepr-checkout-before-submit', array( $this, 'add_honeypot' ) );
38
-
39
- // Preprocess registration form submissions.
40
- add_filter( 'mepr-validate-signup', array( $this, 'process_registration_form' ), 10, 1 );
41
-
42
- // Add registration scripts.
43
- add_filter( 'mepr-signup-scripts', array( $this, 'scripts' ), 10, 1 );
44
- }
45
-
46
- if ( 'enabled' === \ZeroSpam\Core\Settings::get_settings( 'verify_memberpress_login' ) ) {
47
- // Add Zero Spam's honeypot field to the login form.
48
- add_action( 'mepr-login-form-before-submit', array( $this, 'add_honeypot' ) );
49
-
50
- // Preprocess login form submissions.
51
- add_filter( 'mepr-validate-login', array( $this, 'process_login_form' ), 10, 1 );
52
-
53
- // Add login scripts.
54
- add_action(
55
- 'the_post',
56
- function() {
57
- $mepr_options = \MeprOptions::fetch();
58
- $login_page_id = ( ! empty( $mepr_options->login_page_id ) && $mepr_options->login_page_id > 0 ) ? $mepr_options->login_page_id : 0;
59
- $is_login_page = is_page( $login_page_id );
60
-
61
- if ( $is_login_page ) {
62
- do_action( 'zerospam_memberpress_login_scripts' );
63
- }
64
- }
65
- );
66
- }
67
- }
68
- }
69
-
70
- /**
71
- * Load the add-on scripts
72
- *
73
- * @param array $prereqs Script keys.
74
- */
75
- public function scripts( $prereqs ) {
76
- $scripts = apply_filters( 'zerospam_memberpress_registration_scripts', $prereqs );
77
-
78
- return $scripts;
79
- }
80
-
81
- /**
82
- * Adds Zero Spam's honeypot field.
83
- */
84
- public function add_honeypot() {
85
- // @codingStandardsIgnoreLine
86
- echo \ZeroSpam\Core\Utilities::honeypot_field();
87
- }
88
-
89
- /**
90
- * Processes a registration submission.
91
- *
92
- * @param array $errors Array of errors.
93
- */
94
- public function process_registration_form( $errors ) {
95
- // @codingStandardsIgnoreLine
96
- $post = \ZeroSpam\Core\Utilities::sanitize_array( $_POST );
97
-
98
- // Get the error message.
99
- $error_message = \ZeroSpam\Core\Utilities::detection_message( 'memberpress_regsitration_spam_message' );
100
-
101
- // Create the details array for logging & sharing data.
102
- $details = array(
103
- 'post' => $post,
104
- 'type' => 'memberpress_registration',
105
- );
106
-
107
- // Check Zero Spam's honeypot field.
108
- $honeypot_field_name = \ZeroSpam\Core\Utilities::get_honeypot();
109
-
110
- // Begin validation checks.
111
- $validation_errors = array();
112
-
113
- if ( isset( $post[ $honeypot_field_name ] ) && ! empty( $post[ $honeypot_field_name ] ) ) {
114
- // Failed the honeypot check.
115
- $validation_errors[] = 'honeypot';
116
- }
117
-
118
- // Check email.
119
- if ( ! empty( $post['user_email'] ) && ! \ZeroSpam\Core\Utilities::is_email( $post['user_email'] ) ) {
120
- $validation_errors[] = 'invalid_email';
121
- }
122
-
123
- // Check blocked email domains.
124
- if (
125
- ! empty( $post['user_email'] ) &&
126
- \ZeroSpam\Core\Utilities::is_email_domain_blocked( $post['user_email'] )
127
- ) {
128
- // Email domain has been blocked.
129
- $validation_errors[] = 'blocked_email_domain';
130
- }
131
-
132
- // Fire hook for additional validation (ex. David Walsh script).
133
- // @codingStandardsIgnoreLine
134
- $filtered_errors = apply_filters( 'zerospam_preprocess_memberpress_registration', array(), $post, 'memberpress_regsitration_spam_message' );
135
-
136
- if ( ! empty( $filtered_errors ) ) {
137
- foreach ( $filtered_errors as $key => $message ) {
138
- $validation_errors[] = str_replace( 'zerospam_', '', $key );
139
- }
140
- }
141
-
142
- if ( ! empty( $validation_errors ) ) {
143
- // Failed validations, log & send details if enabled.
144
- foreach ( $validation_errors as $key => $fail ) {
145
- $details['failed'] = $fail;
146
-
147
- // Log the detection if enabled.
148
- if ( 'enabled' === \ZeroSpam\Core\Settings::get_settings( 'log_blocked_memberpress_registrations' ) ) {
149
- \ZeroSpam\Includes\DB::log( 'memberpress_registration', $details );
150
- }
151
-
152
- // Share the detection if enabled.
153
- if ( 'enabled' === \ZeroSpam\Core\Settings::get_settings( 'share_data' ) ) {
154
- do_action( 'zerospam_share_detection', $details );
155
- }
156
- }
157
-
158
- $errors[] = $error_message;
159
- }
160
-
161
- return $errors;
162
- }
163
-
164
- /**
165
- * Processes a login submission.
166
- *
167
- * @param array $errors Array of errors.
168
- */
169
- public function process_login_form( $errors ) {
170
- // @codingStandardsIgnoreLine
171
- $post = \ZeroSpam\Core\Utilities::sanitize_array( $_POST );
172
-
173
- // Get the error message.
174
- $error_message = \ZeroSpam\Core\Utilities::detection_message( 'memberpress_login_spam_message' );
175
-
176
- // Create the details array for logging & sharing data.
177
- $details = array(
178
- 'post' => $post,
179
- 'type' => 'memberpress_login',
180
- );
181
-
182
- // Check Zero Spam's honeypot field.
183
- $honeypot_field_name = \ZeroSpam\Core\Utilities::get_honeypot();
184
-
185
- // Begin validation checks.
186
- $validation_errors = array();
187
-
188
- if ( isset( $post[ $honeypot_field_name ] ) && ! empty( $post[ $honeypot_field_name ] ) ) {
189
- // Failed the honeypot check.
190
- $validation_errors[] = 'honeypot';
191
- }
192
-
193
- // Fire hook for additional validation (ex. David Walsh script).
194
- // @codingStandardsIgnoreLine
195
- $filtered_errors = apply_filters( 'zerospam_preprocess_memberpress_login', array(), $post, 'memberpress_login_spam_message' );
196
- if ( ! empty( $filtered_errors ) ) {
197
- foreach ( $filtered_errors as $key => $message ) {
198
- $validation_errors[] = str_replace( 'zerospam_', '', $key );
199
- }
200
- }
201
-
202
- if ( ! empty( $validation_errors ) ) {
203
- // Failed validations, log & send details if enabled.
204
- foreach ( $validation_errors as $key => $fail ) {
205
- $details['failed'] = $fail;
206
-
207
- // Log the detection if enabled.
208
- if ( 'enabled' === \ZeroSpam\Core\Settings::get_settings( 'log_blocked_memberpress_logins' ) ) {
209
- \ZeroSpam\Includes\DB::log( 'memberpress_login', $details );
210
- }
211
-
212
- // Share the detection if enabled.
213
- if ( 'enabled' === \ZeroSpam\Core\Settings::get_settings( 'share_data' ) ) {
214
- do_action( 'zerospam_share_detection', $details );
215
- }
216
- }
217
-
218
- $errors[] = $error_message;
219
- }
220
-
221
- return $errors;
222
- }
223
-
224
- /**
225
- * Add to the types array
226
- *
227
- * @param array $types Array of available detection types.
228
- */
229
- public function types( $types ) {
230
- $types['memberpress_registration'] = __( 'MemberPress Registration', 'zero-spam' );
231
- $types['memberpress_login'] = __( 'MemberPress Login', 'zero-spam' );
232
-
233
- return $types;
234
- }
235
-
236
- /**
237
- * Admin section
238
- *
239
- * @param array $sections Array of available setting sections.
240
- */
241
- public function sections( $sections ) {
242
- $sections['memberpress'] = array(
243
- 'title' => __( 'MemberPress', 'zero-spam' ),
244
- );
245
-
246
- return $sections;
247
- }
248
-
249
- /**
250
- * Admin settings
251
- *
252
- * @param array $settings Array of available settings.
253
- */
254
- public function settings( $settings ) {
255
- $options = get_option( 'zero-spam-memberpress' );
256
-
257
- $default_spam_message = __( 'Your IP has been flagged as spam/malicious.', 'zero-spam' );
258
-
259
- // Registration protection.
260
- $settings['memberpress_registration_info'] = array(
261
- 'section' => 'memberpress',
262
- 'module' => 'memberpress',
263
- 'type' => 'html',
264
- 'html' => sprintf(
265
- wp_kses(
266
- __( '<h3 style="margin: 0">Registration Protection</h3>', 'zero-spam' ),
267
- array(
268
- 'h3' => array(
269
- 'style' => array(),
270
- ),
271
- )
272
- )
273
- ),
274
- );
275
-
276
- $settings['verify_memberpress_registration'] = array(
277
- 'title' => __( 'Protect Registration Forms', 'zero-spam' ),
278
- 'section' => 'memberpress',
279
- 'module' => 'memberpress',
280
- 'type' => 'checkbox',
281
- 'options' => array(
282
- 'enabled' => __( 'Monitor MemberPress registrations for malicious or automated spambots.', 'zero-spam' ),
283
- ),
284
- 'value' => ! empty( $options['verify_memberpress_registration'] ) ? $options['verify_memberpress_registration'] : false,
285
- 'recommended' => 'enabled',
286
- );
287
-
288
- $settings['memberpress_regsitration_spam_message'] = array(
289
- 'title' => __( 'Registration Spam/Malicious Message', 'zero-spam' ),
290
- 'desc' => __( 'When registration protection is enabled, the message displayed to the user when a submission has been detected as spam/malicious.', 'zero-spam' ),
291
- 'section' => 'memberpress',
292
- 'module' => 'memberpress',
293
- 'type' => 'text',
294
- 'field_class' => 'large-text',
295
- 'placeholder' => $default_spam_message,
296
- 'value' => ! empty( $options['memberpress_regsitration_spam_message'] ) ? $options['memberpress_regsitration_spam_message'] : $default_spam_message,
297
- 'recommended' => $default_spam_message,
298
- );
299
-
300
- $settings['log_blocked_memberpress_registrations'] = array(
301
- 'title' => __( 'Log Blocked Registrations', 'zero-spam' ),
302
- 'section' => 'memberpress',
303
- 'module' => 'memberpress',
304
- 'type' => 'checkbox',
305
- 'desc' => wp_kses(
306
- __( 'Enables logging blocked registration attempts. <strong>Recommended for enhanced protection.</strong>', 'zero-spam' ),
307
- array( 'strong' => array() )
308
- ),
309
- 'options' => array(
310
- 'enabled' => __( 'Enabled', 'zero-spam' ),
311
- ),
312
- 'value' => ! empty( $options['log_blocked_memberpress_registrations'] ) ? $options['log_blocked_memberpress_registrations'] : false,
313
- 'recommended' => 'enabled',
314
- );
315
-
316
- // User login protection.
317
- $settings['memberpress_login_info'] = array(
318
- 'section' => 'memberpress',
319
- 'module' => 'memberpress',
320
- 'type' => 'html',
321
- 'html' => sprintf(
322
- wp_kses(
323
- __( '<h3 style="margin-bottom: 0">User Login Protection</h3>', 'zero-spam' ),
324
- array(
325
- 'h3' => array(
326
- 'style' => array(),
327
- ),
328
- )
329
- )
330
- ),
331
- );
332
-
333
- $settings['verify_memberpress_login'] = array(
334
- 'title' => __( 'Protect Login Forms', 'zero-spam' ),
335
- 'section' => 'memberpress',
336
- 'module' => 'memberpress',
337
- 'type' => 'checkbox',
338
- 'options' => array(
339
- 'enabled' => __( 'Monitor MemberPress logins for malicious or automated spambots.', 'zero-spam' ),
340
- ),
341
- 'value' => ! empty( $options['verify_memberpress_login'] ) ? $options['verify_memberpress_login'] : false,
342
- 'recommended' => 'enabled',
343
- );
344
-
345
- $settings['memberpress_login_spam_message'] = array(
346
- 'title' => __( 'Login Spam/Malicious Message', 'zero-spam' ),
347
- 'desc' => __( 'When login protection is enabled, the message displayed to the user when a submission has been detected as spam/malicious.', 'zero-spam' ),
348
- 'section' => 'memberpress',
349
- 'module' => 'memberpress',
350
- 'type' => 'text',
351
- 'field_class' => 'large-text',
352
- 'placeholder' => $default_spam_message,
353
- 'value' => ! empty( $options['memberpress_login_spam_message'] ) ? $options['memberpress_login_spam_message'] : $default_spam_message,
354
- 'recommended' => $default_spam_message,
355
- );
356
-
357
- $settings['log_blocked_memberpress_logins'] = array(
358
- 'title' => __( 'Log Blocked Logins', 'zero-spam' ),
359
- 'section' => 'memberpress',
360
- 'module' => 'memberpress',
361
- 'type' => 'checkbox',
362
- 'desc' => wp_kses(
363
- __( 'Enables logging blocked login attempts. <strong>Recommended for enhanced protection.</strong>', 'zero-spam' ),
364
- array( 'strong' => array() )
365
- ),
366
- 'options' => array(
367
- 'enabled' => __( 'Enabled', 'zero-spam' ),
368
- ),
369
- 'value' => ! empty( $options['log_blocked_memberpress_logins'] ) ? $options['log_blocked_memberpress_logins'] : false,
370
- 'recommended' => 'enabled',
371
- );
372
-
373
- return $settings;
374
- }
375
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/registration/class-registration.php CHANGED
@@ -51,7 +51,10 @@ class Registration {
51
  * @param array $types Array of available detection types.
52
  */
53
  public function types( $types ) {
54
- $types['registration'] = __( 'Registration', 'zero-spam' );
 
 
 
55
 
56
  return $types;
57
  }
51
  * @param array $types Array of available detection types.
52
  */
53
  public function types( $types ) {
54
+ $types['registration'] = array(
55
+ 'label' => __( 'Registration', 'zero-spam' ),
56
+ 'color' => '#3858e9',
57
+ );
58
 
59
  return $types;
60
  }
modules/woocommerce/class-woocommerce.php CHANGED
@@ -33,7 +33,10 @@ class WooCommerce {
33
  * @param array $types Array of available detection types.
34
  */
35
  public function types( $types ) {
36
- $types['woocommerce_registration'] = __( 'WooCommerce Registration', 'zero-spam' );
 
 
 
37
 
38
  return $types;
39
  }
33
  * @param array $types Array of available detection types.
34
  */
35
  public function types( $types ) {
36
+ $types['woocommerce_registration'] = array(
37
+ 'label' => __( 'Woo Registration', 'zero-spam' ),
38
+ 'color' => '#7f54b3',
39
+ );
40
 
41
  return $types;
42
  }
modules/wpforms/class-wpforms.php CHANGED
@@ -155,7 +155,10 @@ class WPForms {
155
  * @param array $types Array of available detection types.
156
  */
157
  public function types( $types ) {
158
- $types['wpforms'] = __( 'WPForms', 'zero-spam' );
 
 
 
159
 
160
  return $types;
161
  }
155
  * @param array $types Array of available detection types.
156
  */
157
  public function types( $types ) {
158
+ $types['wpforms'] = array(
159
+ 'label' => __( 'WPForms', 'zero-spam' ),
160
+ 'color' => '#e27730',
161
+ );
162
 
163
  return $types;
164
  }
readme.txt CHANGED
@@ -5,7 +5,7 @@ Donate link: https://www.zerospam.org/subscribe/
5
  Requires at least: 5.2
6
  Tested up to: 6.0.2
7
  Requires PHP: 7.3
8
- Stable tag: 5.4.0
9
  License: GNU GPLv3
10
  License URI: https://choosealicense.com/licenses/gpl-3.0/
11
 
@@ -32,11 +32,9 @@ Protect against spam & malicious users using an advanced, highly-configurable fi
32
  = But wait, there's more! =
33
 
34
  * Protects comments, user registration &amp; login forms
35
- * Protects [wpDiscuz](https://wordpress.org/plugins/wpdiscuz/) comment forms
36
  * Protects [GiveWP](https://givewp.com/ref/1118/) forms & helps prevent testing stolen credit cards
37
- * Protects [Contact Form 7](https://wordpress.org/plugins/contact-form-7/) form submissions
38
- * Protects [Gravity Forms](https://www.gravityforms.com/), [Contact Form 7](https://wordpress.org/plugins/contact-form-7/), [WPForms](https://wordpress.org/plugins/wpforms-lite/), [Formidable Form Builder](https://wordpress.org/plugins/formidable/) & [Fluent Forms](https://wordpress.org/plugins/fluentform/) forms
39
- * Protects [MemberPress](https://memberpress.com/) & [WooCommerce](https://wordpress.org/plugins/woocommerce/) registrations
40
  * Protects [Mailchimp for WordPress](https://wordpress.org/plugins/mailchimp-for-wp/) sign-ups
41
  * and **can be integrated into any existing theme or plugin**
42
 
@@ -107,6 +105,15 @@ If hosting with Pantheon, see their [known issues page](https://pantheon.io/docs
107
 
108
  == Changelog ==
109
 
 
 
 
 
 
 
 
 
 
110
  = v5.4.0 =
111
 
112
  * chore(admin): updated the after-activation message
5
  Requires at least: 5.2
6
  Tested up to: 6.0.2
7
  Requires PHP: 7.3
8
+ Stable tag: 5.4.1
9
  License: GNU GPLv3
10
  License URI: https://choosealicense.com/licenses/gpl-3.0/
11
 
32
  = But wait, there's more! =
33
 
34
  * Protects comments, user registration &amp; login forms
 
35
  * Protects [GiveWP](https://givewp.com/ref/1118/) forms & helps prevent testing stolen credit cards
36
+ * Protects [Gravity Forms](https://www.gravityforms.com/), [Contact Form 7](https://wordpress.org/plugins/contact-form-7/), [WPForms](https://wordpress.org/plugins/wpforms-lite/), [Formidable Form Builder](https://wordpress.org/plugins/formidable/), [Fluent Forms](https://wordpress.org/plugins/fluentform/) & [wpDiscuz](https://wordpress.org/plugins/wpdiscuz/) forms
37
+ * Protects [WooCommerce](https://wordpress.org/plugins/woocommerce/) registrations
 
38
  * Protects [Mailchimp for WordPress](https://wordpress.org/plugins/mailchimp-for-wp/) sign-ups
39
  * and **can be integrated into any existing theme or plugin**
40
 
105
 
106
  == Changelog ==
107
 
108
+ = v5.4.1 =
109
+
110
+ * feat(dashboard): dashboard ui enhancements
111
+ * perf(sharing): performance improvements when sharing data
112
+ * fix(memberpress): removed memberpress support, they made fundamental changes to their plugin that's ganna require a rework
113
+ * fix(uninstall): fix issue where the plugin couldn't be deleted
114
+ * fix(cli): resolves #33
115
+ * chore(charts): updated chart.js tp 3.9.1
116
+
117
  = v5.4.0 =
118
 
119
  * chore(admin): updated the after-activation message
uninstall.php CHANGED
@@ -16,7 +16,28 @@ $tables = array(
16
  'blacklist' => 'wpzerospam_blacklist',
17
  );
18
 
19
- $modules = \ZeroSpam\Core\Settings::get_settings_by_module();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
  if ( is_multisite() ) {
22
  // @codingStandardsIgnoreLine
@@ -34,7 +55,7 @@ if ( is_multisite() ) {
34
  delete_option( 'zero_spam_last_api_report' );
35
  delete_option( 'zero-spam-last-update' );
36
 
37
- foreach ( $modules as $module => $settings ) {
38
  delete_option( "zero-spam-$module" );
39
  }
40
 
16
  'blacklist' => 'wpzerospam_blacklist',
17
  );
18
 
19
+ $modules = array(
20
+ 'comments',
21
+ 'contactform7',
22
+ 'davidwalsh',
23
+ 'fluentforms',
24
+ 'formidable',
25
+ 'givewp',
26
+ 'gravityforms',
27
+ 'login',
28
+ 'mailchimp4wp',
29
+ 'registration',
30
+ 'woocommerce',
31
+ 'wpforms',
32
+ 'debug',
33
+ 'google',
34
+ 'ipinfo',
35
+ 'ipstack',
36
+ 'project_honeypot',
37
+ 'security',
38
+ 'stop_forum_spam',
39
+ 'zerospam',
40
+ );
41
 
42
  if ( is_multisite() ) {
43
  // @codingStandardsIgnoreLine
55
  delete_option( 'zero_spam_last_api_report' );
56
  delete_option( 'zero-spam-last-update' );
57
 
58
+ foreach ( $modules as $key => $module ) {
59
  delete_option( "zero-spam-$module" );
60
  }
61
 
wordpress-zero-spam.php CHANGED
@@ -13,7 +13,7 @@
13
  * Plugin Name: Zero Spam for WordPress
14
  * Plugin URI: https://www.highfivery.com/projects/zero-spam/
15
  * Description: Tired of all the ineffective WordPress anti-spam & security plugins? Zero Spam for WordPress makes blocking spam &amp; malicious activity a cinch. <strong>Just activate, configure, and say goodbye to spam.</strong>
16
- * Version: 5.4.0
17
  * Requires at least: 5.2
18
  * Requires PHP: 7.3
19
  * Author: Highfivery LLC
@@ -31,7 +31,7 @@ defined( 'ABSPATH' ) || die();
31
  define( 'ZEROSPAM', __FILE__ );
32
  define( 'ZEROSPAM_PATH', plugin_dir_path( ZEROSPAM ) );
33
  define( 'ZEROSPAM_PLUGIN_BASE', plugin_basename( ZEROSPAM ) );
34
- define( 'ZEROSPAM_VERSION', '5.4.0' );
35
 
36
  if ( defined( 'ZEROSPAM_DEVELOPMENT_URL' ) ) {
37
  define( 'ZEROSPAM_URL', ZEROSPAM_DEVELOPMENT_URL );
13
  * Plugin Name: Zero Spam for WordPress
14
  * Plugin URI: https://www.highfivery.com/projects/zero-spam/
15
  * Description: Tired of all the ineffective WordPress anti-spam & security plugins? Zero Spam for WordPress makes blocking spam &amp; malicious activity a cinch. <strong>Just activate, configure, and say goodbye to spam.</strong>
16
+ * Version: 5.4.1
17
  * Requires at least: 5.2
18
  * Requires PHP: 7.3
19
  * Author: Highfivery LLC
31
  define( 'ZEROSPAM', __FILE__ );
32
  define( 'ZEROSPAM_PATH', plugin_dir_path( ZEROSPAM ) );
33
  define( 'ZEROSPAM_PLUGIN_BASE', plugin_basename( ZEROSPAM ) );
34
+ define( 'ZEROSPAM_VERSION', '5.4.1' );
35
 
36
  if ( defined( 'ZEROSPAM_DEVELOPMENT_URL' ) ) {
37
  define( 'ZEROSPAM_URL', ZEROSPAM_DEVELOPMENT_URL );