@featurevisor/core 2.13.0 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/coverage/clover.xml +906 -557
  3. package/coverage/coverage-final.json +11 -8
  4. package/coverage/lcov-report/builder/allocator.ts.html +1 -1
  5. package/coverage/lcov-report/builder/buildScopedConditions.ts.html +1 -1
  6. package/coverage/lcov-report/builder/buildScopedDatafile.ts.html +1 -1
  7. package/coverage/lcov-report/builder/buildScopedSegments.ts.html +1 -1
  8. package/coverage/lcov-report/builder/index.html +38 -8
  9. package/coverage/lcov-report/builder/mutateVariables.ts.html +400 -0
  10. package/coverage/lcov-report/builder/mutator.ts.html +796 -0
  11. package/coverage/lcov-report/builder/revision.ts.html +1 -1
  12. package/coverage/lcov-report/builder/traffic.ts.html +1 -1
  13. package/coverage/lcov-report/config/index.html +1 -1
  14. package/coverage/lcov-report/config/projectConfig.ts.html +1 -1
  15. package/coverage/lcov-report/datasource/adapter.ts.html +1 -1
  16. package/coverage/lcov-report/datasource/datasource.ts.html +4 -4
  17. package/coverage/lcov-report/datasource/filesystemAdapter.ts.html +23 -23
  18. package/coverage/lcov-report/datasource/index.html +1 -1
  19. package/coverage/lcov-report/datasource/index.ts.html +1 -1
  20. package/coverage/lcov-report/index.html +28 -28
  21. package/coverage/lcov-report/linter/attributeSchema.ts.html +1 -1
  22. package/coverage/lcov-report/linter/checkCircularDependency.ts.html +1 -1
  23. package/coverage/lcov-report/linter/checkPercentageExceedingSlot.ts.html +1 -1
  24. package/coverage/lcov-report/linter/conditionSchema.ts.html +7 -7
  25. package/coverage/lcov-report/linter/featureSchema.ts.html +789 -318
  26. package/coverage/lcov-report/linter/groupSchema.ts.html +1 -1
  27. package/coverage/lcov-report/linter/index.html +34 -19
  28. package/coverage/lcov-report/linter/lintProject.ts.html +25 -25
  29. package/coverage/lcov-report/linter/mutationNotation.ts.html +1309 -0
  30. package/coverage/lcov-report/linter/printError.ts.html +1 -1
  31. package/coverage/lcov-report/linter/schema.ts.html +69 -69
  32. package/coverage/lcov-report/linter/segmentSchema.ts.html +1 -1
  33. package/coverage/lcov-report/linter/testSchema.ts.html +5 -5
  34. package/coverage/lcov-report/list/index.html +1 -1
  35. package/coverage/lcov-report/list/matrix.ts.html +1 -1
  36. package/coverage/lcov-report/parsers/index.html +1 -1
  37. package/coverage/lcov-report/parsers/index.ts.html +1 -1
  38. package/coverage/lcov-report/parsers/json.ts.html +1 -1
  39. package/coverage/lcov-report/parsers/yml.ts.html +2 -2
  40. package/coverage/lcov-report/tester/cliFormat.ts.html +1 -1
  41. package/coverage/lcov-report/tester/helpers.ts.html +1 -1
  42. package/coverage/lcov-report/tester/index.html +1 -1
  43. package/coverage/lcov-report/utils/git.ts.html +1 -1
  44. package/coverage/lcov-report/utils/index.html +1 -1
  45. package/coverage/lcov.info +1839 -1120
  46. package/lib/builder/buildDatafile.js +8 -3
  47. package/lib/builder/buildDatafile.js.map +1 -1
  48. package/lib/builder/mutateVariables.d.ts +14 -0
  49. package/lib/builder/mutateVariables.js +90 -0
  50. package/lib/builder/mutateVariables.js.map +1 -0
  51. package/lib/builder/mutateVariables.spec.d.ts +1 -0
  52. package/lib/builder/mutateVariables.spec.js +1045 -0
  53. package/lib/builder/mutateVariables.spec.js.map +1 -0
  54. package/lib/builder/mutator.d.ts +20 -0
  55. package/lib/builder/mutator.js +223 -0
  56. package/lib/builder/mutator.js.map +1 -0
  57. package/lib/builder/mutator.spec.d.ts +1 -0
  58. package/lib/builder/mutator.spec.js +368 -0
  59. package/lib/builder/mutator.spec.js.map +1 -0
  60. package/lib/linter/featureSchema.d.ts +7 -7
  61. package/lib/linter/featureSchema.js +138 -62
  62. package/lib/linter/featureSchema.js.map +1 -1
  63. package/lib/linter/featureSchema.spec.js +150 -0
  64. package/lib/linter/featureSchema.spec.js.map +1 -1
  65. package/lib/linter/mutationNotation.d.ts +47 -0
  66. package/lib/linter/mutationNotation.js +381 -0
  67. package/lib/linter/mutationNotation.js.map +1 -0
  68. package/lib/linter/mutationNotation.spec.d.ts +1 -0
  69. package/lib/linter/mutationNotation.spec.js +549 -0
  70. package/lib/linter/mutationNotation.spec.js.map +1 -0
  71. package/package.json +2 -2
  72. package/src/builder/buildDatafile.ts +29 -3
  73. package/src/builder/mutateVariables.spec.ts +1134 -0
  74. package/src/builder/mutateVariables.ts +105 -0
  75. package/src/builder/mutator.spec.ts +413 -0
  76. package/src/builder/mutator.ts +237 -0
  77. package/src/linter/featureSchema.spec.ts +182 -0
  78. package/src/linter/featureSchema.ts +254 -97
  79. package/src/linter/mutationNotation.spec.ts +642 -0
  80. package/src/linter/mutationNotation.ts +408 -0
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">69.79% </span>
26
+ <span class="strong">70.82% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>335/480</span>
28
+ <span class='fraction'>369/521</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">59.94% </span>
33
+ <span class="strong">61.28% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>202/337</span>
35
+ <span class='fraction'>220/359</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">74.64% </span>
40
+ <span class="strong">75% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>53/71</span>
42
+ <span class='fraction'>54/72</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">74.02% </span>
47
+ <span class="strong">74.94% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>322/435</span>
49
+ <span class='fraction'>356/475</span>
50
50
  </div>
51
51
 
52
52
 
@@ -1676,7 +1676,164 @@
1676
1676
  <a name='L1611'></a><a href='#L1611'>1611</a>
1677
1677
  <a name='L1612'></a><a href='#L1612'>1612</a>
1678
1678
  <a name='L1613'></a><a href='#L1613'>1613</a>
1679
- <a name='L1614'></a><a href='#L1614'>1614</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1679
+ <a name='L1614'></a><a href='#L1614'>1614</a>
1680
+ <a name='L1615'></a><a href='#L1615'>1615</a>
1681
+ <a name='L1616'></a><a href='#L1616'>1616</a>
1682
+ <a name='L1617'></a><a href='#L1617'>1617</a>
1683
+ <a name='L1618'></a><a href='#L1618'>1618</a>
1684
+ <a name='L1619'></a><a href='#L1619'>1619</a>
1685
+ <a name='L1620'></a><a href='#L1620'>1620</a>
1686
+ <a name='L1621'></a><a href='#L1621'>1621</a>
1687
+ <a name='L1622'></a><a href='#L1622'>1622</a>
1688
+ <a name='L1623'></a><a href='#L1623'>1623</a>
1689
+ <a name='L1624'></a><a href='#L1624'>1624</a>
1690
+ <a name='L1625'></a><a href='#L1625'>1625</a>
1691
+ <a name='L1626'></a><a href='#L1626'>1626</a>
1692
+ <a name='L1627'></a><a href='#L1627'>1627</a>
1693
+ <a name='L1628'></a><a href='#L1628'>1628</a>
1694
+ <a name='L1629'></a><a href='#L1629'>1629</a>
1695
+ <a name='L1630'></a><a href='#L1630'>1630</a>
1696
+ <a name='L1631'></a><a href='#L1631'>1631</a>
1697
+ <a name='L1632'></a><a href='#L1632'>1632</a>
1698
+ <a name='L1633'></a><a href='#L1633'>1633</a>
1699
+ <a name='L1634'></a><a href='#L1634'>1634</a>
1700
+ <a name='L1635'></a><a href='#L1635'>1635</a>
1701
+ <a name='L1636'></a><a href='#L1636'>1636</a>
1702
+ <a name='L1637'></a><a href='#L1637'>1637</a>
1703
+ <a name='L1638'></a><a href='#L1638'>1638</a>
1704
+ <a name='L1639'></a><a href='#L1639'>1639</a>
1705
+ <a name='L1640'></a><a href='#L1640'>1640</a>
1706
+ <a name='L1641'></a><a href='#L1641'>1641</a>
1707
+ <a name='L1642'></a><a href='#L1642'>1642</a>
1708
+ <a name='L1643'></a><a href='#L1643'>1643</a>
1709
+ <a name='L1644'></a><a href='#L1644'>1644</a>
1710
+ <a name='L1645'></a><a href='#L1645'>1645</a>
1711
+ <a name='L1646'></a><a href='#L1646'>1646</a>
1712
+ <a name='L1647'></a><a href='#L1647'>1647</a>
1713
+ <a name='L1648'></a><a href='#L1648'>1648</a>
1714
+ <a name='L1649'></a><a href='#L1649'>1649</a>
1715
+ <a name='L1650'></a><a href='#L1650'>1650</a>
1716
+ <a name='L1651'></a><a href='#L1651'>1651</a>
1717
+ <a name='L1652'></a><a href='#L1652'>1652</a>
1718
+ <a name='L1653'></a><a href='#L1653'>1653</a>
1719
+ <a name='L1654'></a><a href='#L1654'>1654</a>
1720
+ <a name='L1655'></a><a href='#L1655'>1655</a>
1721
+ <a name='L1656'></a><a href='#L1656'>1656</a>
1722
+ <a name='L1657'></a><a href='#L1657'>1657</a>
1723
+ <a name='L1658'></a><a href='#L1658'>1658</a>
1724
+ <a name='L1659'></a><a href='#L1659'>1659</a>
1725
+ <a name='L1660'></a><a href='#L1660'>1660</a>
1726
+ <a name='L1661'></a><a href='#L1661'>1661</a>
1727
+ <a name='L1662'></a><a href='#L1662'>1662</a>
1728
+ <a name='L1663'></a><a href='#L1663'>1663</a>
1729
+ <a name='L1664'></a><a href='#L1664'>1664</a>
1730
+ <a name='L1665'></a><a href='#L1665'>1665</a>
1731
+ <a name='L1666'></a><a href='#L1666'>1666</a>
1732
+ <a name='L1667'></a><a href='#L1667'>1667</a>
1733
+ <a name='L1668'></a><a href='#L1668'>1668</a>
1734
+ <a name='L1669'></a><a href='#L1669'>1669</a>
1735
+ <a name='L1670'></a><a href='#L1670'>1670</a>
1736
+ <a name='L1671'></a><a href='#L1671'>1671</a>
1737
+ <a name='L1672'></a><a href='#L1672'>1672</a>
1738
+ <a name='L1673'></a><a href='#L1673'>1673</a>
1739
+ <a name='L1674'></a><a href='#L1674'>1674</a>
1740
+ <a name='L1675'></a><a href='#L1675'>1675</a>
1741
+ <a name='L1676'></a><a href='#L1676'>1676</a>
1742
+ <a name='L1677'></a><a href='#L1677'>1677</a>
1743
+ <a name='L1678'></a><a href='#L1678'>1678</a>
1744
+ <a name='L1679'></a><a href='#L1679'>1679</a>
1745
+ <a name='L1680'></a><a href='#L1680'>1680</a>
1746
+ <a name='L1681'></a><a href='#L1681'>1681</a>
1747
+ <a name='L1682'></a><a href='#L1682'>1682</a>
1748
+ <a name='L1683'></a><a href='#L1683'>1683</a>
1749
+ <a name='L1684'></a><a href='#L1684'>1684</a>
1750
+ <a name='L1685'></a><a href='#L1685'>1685</a>
1751
+ <a name='L1686'></a><a href='#L1686'>1686</a>
1752
+ <a name='L1687'></a><a href='#L1687'>1687</a>
1753
+ <a name='L1688'></a><a href='#L1688'>1688</a>
1754
+ <a name='L1689'></a><a href='#L1689'>1689</a>
1755
+ <a name='L1690'></a><a href='#L1690'>1690</a>
1756
+ <a name='L1691'></a><a href='#L1691'>1691</a>
1757
+ <a name='L1692'></a><a href='#L1692'>1692</a>
1758
+ <a name='L1693'></a><a href='#L1693'>1693</a>
1759
+ <a name='L1694'></a><a href='#L1694'>1694</a>
1760
+ <a name='L1695'></a><a href='#L1695'>1695</a>
1761
+ <a name='L1696'></a><a href='#L1696'>1696</a>
1762
+ <a name='L1697'></a><a href='#L1697'>1697</a>
1763
+ <a name='L1698'></a><a href='#L1698'>1698</a>
1764
+ <a name='L1699'></a><a href='#L1699'>1699</a>
1765
+ <a name='L1700'></a><a href='#L1700'>1700</a>
1766
+ <a name='L1701'></a><a href='#L1701'>1701</a>
1767
+ <a name='L1702'></a><a href='#L1702'>1702</a>
1768
+ <a name='L1703'></a><a href='#L1703'>1703</a>
1769
+ <a name='L1704'></a><a href='#L1704'>1704</a>
1770
+ <a name='L1705'></a><a href='#L1705'>1705</a>
1771
+ <a name='L1706'></a><a href='#L1706'>1706</a>
1772
+ <a name='L1707'></a><a href='#L1707'>1707</a>
1773
+ <a name='L1708'></a><a href='#L1708'>1708</a>
1774
+ <a name='L1709'></a><a href='#L1709'>1709</a>
1775
+ <a name='L1710'></a><a href='#L1710'>1710</a>
1776
+ <a name='L1711'></a><a href='#L1711'>1711</a>
1777
+ <a name='L1712'></a><a href='#L1712'>1712</a>
1778
+ <a name='L1713'></a><a href='#L1713'>1713</a>
1779
+ <a name='L1714'></a><a href='#L1714'>1714</a>
1780
+ <a name='L1715'></a><a href='#L1715'>1715</a>
1781
+ <a name='L1716'></a><a href='#L1716'>1716</a>
1782
+ <a name='L1717'></a><a href='#L1717'>1717</a>
1783
+ <a name='L1718'></a><a href='#L1718'>1718</a>
1784
+ <a name='L1719'></a><a href='#L1719'>1719</a>
1785
+ <a name='L1720'></a><a href='#L1720'>1720</a>
1786
+ <a name='L1721'></a><a href='#L1721'>1721</a>
1787
+ <a name='L1722'></a><a href='#L1722'>1722</a>
1788
+ <a name='L1723'></a><a href='#L1723'>1723</a>
1789
+ <a name='L1724'></a><a href='#L1724'>1724</a>
1790
+ <a name='L1725'></a><a href='#L1725'>1725</a>
1791
+ <a name='L1726'></a><a href='#L1726'>1726</a>
1792
+ <a name='L1727'></a><a href='#L1727'>1727</a>
1793
+ <a name='L1728'></a><a href='#L1728'>1728</a>
1794
+ <a name='L1729'></a><a href='#L1729'>1729</a>
1795
+ <a name='L1730'></a><a href='#L1730'>1730</a>
1796
+ <a name='L1731'></a><a href='#L1731'>1731</a>
1797
+ <a name='L1732'></a><a href='#L1732'>1732</a>
1798
+ <a name='L1733'></a><a href='#L1733'>1733</a>
1799
+ <a name='L1734'></a><a href='#L1734'>1734</a>
1800
+ <a name='L1735'></a><a href='#L1735'>1735</a>
1801
+ <a name='L1736'></a><a href='#L1736'>1736</a>
1802
+ <a name='L1737'></a><a href='#L1737'>1737</a>
1803
+ <a name='L1738'></a><a href='#L1738'>1738</a>
1804
+ <a name='L1739'></a><a href='#L1739'>1739</a>
1805
+ <a name='L1740'></a><a href='#L1740'>1740</a>
1806
+ <a name='L1741'></a><a href='#L1741'>1741</a>
1807
+ <a name='L1742'></a><a href='#L1742'>1742</a>
1808
+ <a name='L1743'></a><a href='#L1743'>1743</a>
1809
+ <a name='L1744'></a><a href='#L1744'>1744</a>
1810
+ <a name='L1745'></a><a href='#L1745'>1745</a>
1811
+ <a name='L1746'></a><a href='#L1746'>1746</a>
1812
+ <a name='L1747'></a><a href='#L1747'>1747</a>
1813
+ <a name='L1748'></a><a href='#L1748'>1748</a>
1814
+ <a name='L1749'></a><a href='#L1749'>1749</a>
1815
+ <a name='L1750'></a><a href='#L1750'>1750</a>
1816
+ <a name='L1751'></a><a href='#L1751'>1751</a>
1817
+ <a name='L1752'></a><a href='#L1752'>1752</a>
1818
+ <a name='L1753'></a><a href='#L1753'>1753</a>
1819
+ <a name='L1754'></a><a href='#L1754'>1754</a>
1820
+ <a name='L1755'></a><a href='#L1755'>1755</a>
1821
+ <a name='L1756'></a><a href='#L1756'>1756</a>
1822
+ <a name='L1757'></a><a href='#L1757'>1757</a>
1823
+ <a name='L1758'></a><a href='#L1758'>1758</a>
1824
+ <a name='L1759'></a><a href='#L1759'>1759</a>
1825
+ <a name='L1760'></a><a href='#L1760'>1760</a>
1826
+ <a name='L1761'></a><a href='#L1761'>1761</a>
1827
+ <a name='L1762'></a><a href='#L1762'>1762</a>
1828
+ <a name='L1763'></a><a href='#L1763'>1763</a>
1829
+ <a name='L1764'></a><a href='#L1764'>1764</a>
1830
+ <a name='L1765'></a><a href='#L1765'>1765</a>
1831
+ <a name='L1766'></a><a href='#L1766'>1766</a>
1832
+ <a name='L1767'></a><a href='#L1767'>1767</a>
1833
+ <a name='L1768'></a><a href='#L1768'>1768</a>
1834
+ <a name='L1769'></a><a href='#L1769'>1769</a>
1835
+ <a name='L1770'></a><a href='#L1770'>1770</a>
1836
+ <a name='L1771'></a><a href='#L1771'>1771</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1680
1837
  <span class="cline-any cline-yes">2x</span>
1681
1838
  <span class="cline-any cline-neutral">&nbsp;</span>
1682
1839
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1686,6 +1843,12 @@
1686
1843
  <span class="cline-any cline-neutral">&nbsp;</span>
1687
1844
  <span class="cline-any cline-neutral">&nbsp;</span>
1688
1845
  <span class="cline-any cline-neutral">&nbsp;</span>
1846
+ <span class="cline-any cline-yes">2x</span>
1847
+ <span class="cline-any cline-neutral">&nbsp;</span>
1848
+ <span class="cline-any cline-neutral">&nbsp;</span>
1849
+ <span class="cline-any cline-neutral">&nbsp;</span>
1850
+ <span class="cline-any cline-neutral">&nbsp;</span>
1851
+ <span class="cline-any cline-neutral">&nbsp;</span>
1689
1852
  <span class="cline-any cline-neutral">&nbsp;</span>
1690
1853
  <span class="cline-any cline-neutral">&nbsp;</span>
1691
1854
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1697,7 +1860,7 @@
1697
1860
  <span class="cline-any cline-neutral">&nbsp;</span>
1698
1861
  <span class="cline-any cline-neutral">&nbsp;</span>
1699
1862
  <span class="cline-any cline-neutral">&nbsp;</span>
1700
- <span class="cline-any cline-yes">18x</span>
1863
+ <span class="cline-any cline-yes">12x</span>
1701
1864
  <span class="cline-any cline-neutral">&nbsp;</span>
1702
1865
  <span class="cline-any cline-neutral">&nbsp;</span>
1703
1866
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1706,7 +1869,7 @@
1706
1869
  <span class="cline-any cline-neutral">&nbsp;</span>
1707
1870
  <span class="cline-any cline-neutral">&nbsp;</span>
1708
1871
  <span class="cline-any cline-neutral">&nbsp;</span>
1709
- <span class="cline-any cline-yes">1782x</span>
1872
+ <span class="cline-any cline-yes">2811x</span>
1710
1873
  <span class="cline-any cline-neutral">&nbsp;</span>
1711
1874
  <span class="cline-any cline-neutral">&nbsp;</span>
1712
1875
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1754,10 +1917,10 @@
1754
1917
  <span class="cline-any cline-neutral">&nbsp;</span>
1755
1918
  <span class="cline-any cline-neutral">&nbsp;</span>
1756
1919
  <span class="cline-any cline-neutral">&nbsp;</span>
1757
- <span class="cline-any cline-yes">1638x</span>
1758
- <span class="cline-any cline-yes">387x</span>
1920
+ <span class="cline-any cline-yes">2515x</span>
1921
+ <span class="cline-any cline-yes">503x</span>
1759
1922
  <span class="cline-any cline-neutral">&nbsp;</span>
1760
- <span class="cline-any cline-yes">1251x</span>
1923
+ <span class="cline-any cline-yes">2012x</span>
1761
1924
  <span class="cline-any cline-neutral">&nbsp;</span>
1762
1925
  <span class="cline-any cline-neutral">&nbsp;</span>
1763
1926
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1943,23 +2106,38 @@
1943
2106
  <span class="cline-any cline-neutral">&nbsp;</span>
1944
2107
  <span class="cline-any cline-neutral">&nbsp;</span>
1945
2108
  <span class="cline-any cline-neutral">&nbsp;</span>
1946
- <span class="cline-any cline-yes">295x</span>
1947
2109
  <span class="cline-any cline-neutral">&nbsp;</span>
1948
- <span class="cline-any cline-yes">295x</span>
1949
- <span class="cline-any cline-yes">295x</span>
1950
- <span class="cline-any cline-yes">295x</span>
1951
- <span class="cline-any cline-yes">295x</span>
1952
2110
  <span class="cline-any cline-neutral">&nbsp;</span>
1953
- <span class="cline-any cline-yes">295x</span>
1954
2111
  <span class="cline-any cline-neutral">&nbsp;</span>
1955
2112
  <span class="cline-any cline-neutral">&nbsp;</span>
1956
2113
  <span class="cline-any cline-neutral">&nbsp;</span>
1957
2114
  <span class="cline-any cline-neutral">&nbsp;</span>
1958
2115
  <span class="cline-any cline-neutral">&nbsp;</span>
2116
+ <span class="cline-any cline-yes">615x</span>
1959
2117
  <span class="cline-any cline-neutral">&nbsp;</span>
1960
- <span class="cline-any cline-yes">17x</span>
1961
- <span class="cline-any cline-yes">17x</span>
2118
+ <span class="cline-any cline-neutral">&nbsp;</span>
2119
+ <span class="cline-any cline-yes">615x</span>
2120
+ <span class="cline-any cline-yes">615x</span>
2121
+ <span class="cline-any cline-yes">26x</span>
1962
2122
  <span class="cline-any cline-yes">26x</span>
2123
+ <span class="cline-any cline-yes">26x</span>
2124
+ <span class="cline-any cline-neutral">&nbsp;</span>
2125
+ <span class="cline-any cline-neutral">&nbsp;</span>
2126
+ <span class="cline-any cline-yes">589x</span>
2127
+ <span class="cline-any cline-yes">589x</span>
2128
+ <span class="cline-any cline-yes">589x</span>
2129
+ <span class="cline-any cline-yes">589x</span>
2130
+ <span class="cline-any cline-neutral">&nbsp;</span>
2131
+ <span class="cline-any cline-yes">589x</span>
2132
+ <span class="cline-any cline-neutral">&nbsp;</span>
2133
+ <span class="cline-any cline-neutral">&nbsp;</span>
2134
+ <span class="cline-any cline-neutral">&nbsp;</span>
2135
+ <span class="cline-any cline-neutral">&nbsp;</span>
2136
+ <span class="cline-any cline-neutral">&nbsp;</span>
2137
+ <span class="cline-any cline-neutral">&nbsp;</span>
2138
+ <span class="cline-any cline-yes">73x</span>
2139
+ <span class="cline-any cline-yes">73x</span>
2140
+ <span class="cline-any cline-yes">135x</span>
1963
2141
  <span class="cline-any cline-no">&nbsp;</span>
1964
2142
  <span class="cline-any cline-neutral">&nbsp;</span>
1965
2143
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1969,11 +2147,11 @@
1969
2147
  <span class="cline-any cline-neutral">&nbsp;</span>
1970
2148
  <span class="cline-any cline-neutral">&nbsp;</span>
1971
2149
  <span class="cline-any cline-neutral">&nbsp;</span>
1972
- <span class="cline-any cline-yes">295x</span>
1973
- <span class="cline-any cline-yes">42x</span>
1974
- <span class="cline-any cline-yes">80x</span>
1975
- <span class="cline-any cline-yes">80x</span>
1976
- <span class="cline-any cline-yes">80x</span>
2150
+ <span class="cline-any cline-yes">589x</span>
2151
+ <span class="cline-any cline-yes">129x</span>
2152
+ <span class="cline-any cline-yes">262x</span>
2153
+ <span class="cline-any cline-yes">262x</span>
2154
+ <span class="cline-any cline-yes">262x</span>
1977
2155
  <span class="cline-any cline-neutral">&nbsp;</span>
1978
2156
  <span class="cline-any cline-neutral">&nbsp;</span>
1979
2157
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1982,19 +2160,21 @@
1982
2160
  <span class="cline-any cline-neutral">&nbsp;</span>
1983
2161
  <span class="cline-any cline-neutral">&nbsp;</span>
1984
2162
  <span class="cline-any cline-neutral">&nbsp;</span>
1985
- <span class="cline-any cline-yes">295x</span>
1986
- <span class="cline-any cline-yes">27x</span>
2163
+ <span class="cline-any cline-neutral">&nbsp;</span>
2164
+ <span class="cline-any cline-yes">589x</span>
2165
+ <span class="cline-any cline-yes">42x</span>
1987
2166
  <span class="cline-any cline-neutral">&nbsp;</span>
1988
2167
  <span class="cline-any cline-neutral">&nbsp;</span>
1989
2168
  <span class="cline-any cline-neutral">&nbsp;</span>
1990
2169
  <span class="cline-any cline-neutral">&nbsp;</span>
1991
2170
  <span class="cline-any cline-neutral">&nbsp;</span>
1992
2171
  <span class="cline-any cline-neutral">&nbsp;</span>
1993
- <span class="cline-any cline-yes">295x</span>
1994
- <span class="cline-any cline-yes">295x</span>
1995
- <span class="cline-any cline-yes">6x</span>
1996
- <span class="cline-any cline-yes">12x</span>
2172
+ <span class="cline-any cline-neutral">&nbsp;</span>
2173
+ <span class="cline-any cline-yes">589x</span>
2174
+ <span class="cline-any cline-yes">589x</span>
1997
2175
  <span class="cline-any cline-yes">12x</span>
2176
+ <span class="cline-any cline-yes">24x</span>
2177
+ <span class="cline-any cline-yes">24x</span>
1998
2178
  <span class="cline-any cline-neutral">&nbsp;</span>
1999
2179
  <span class="cline-any cline-neutral">&nbsp;</span>
2000
2180
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2005,11 +2185,11 @@
2005
2185
  <span class="cline-any cline-neutral">&nbsp;</span>
2006
2186
  <span class="cline-any cline-neutral">&nbsp;</span>
2007
2187
  <span class="cline-any cline-neutral">&nbsp;</span>
2008
- <span class="cline-any cline-yes">1298x</span>
2009
- <span class="cline-any cline-yes">1298x</span>
2010
- <span class="cline-any cline-yes">1298x</span>
2011
- <span class="cline-any cline-yes">1141x</span>
2012
2188
  <span class="cline-any cline-neutral">&nbsp;</span>
2189
+ <span class="cline-any cline-yes">2071x</span>
2190
+ <span class="cline-any cline-yes">2071x</span>
2191
+ <span class="cline-any cline-yes">2071x</span>
2192
+ <span class="cline-any cline-yes">1879x</span>
2013
2193
  <span class="cline-any cline-neutral">&nbsp;</span>
2014
2194
  <span class="cline-any cline-neutral">&nbsp;</span>
2015
2195
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2031,25 +2211,26 @@
2031
2211
  <span class="cline-any cline-neutral">&nbsp;</span>
2032
2212
  <span class="cline-any cline-neutral">&nbsp;</span>
2033
2213
  <span class="cline-any cline-neutral">&nbsp;</span>
2034
- <span class="cline-any cline-yes">157x</span>
2035
- <span class="cline-any cline-yes">157x</span>
2036
- <span class="cline-any cline-yes">157x</span>
2037
- <span class="cline-any cline-yes">157x</span>
2038
- <span class="cline-any cline-yes">157x</span>
2214
+ <span class="cline-any cline-neutral">&nbsp;</span>
2215
+ <span class="cline-any cline-yes">192x</span>
2216
+ <span class="cline-any cline-yes">192x</span>
2217
+ <span class="cline-any cline-yes">192x</span>
2218
+ <span class="cline-any cline-yes">192x</span>
2219
+ <span class="cline-any cline-yes">192x</span>
2039
2220
  <span class="cline-any cline-yes">1x</span>
2040
2221
  <span class="cline-any cline-neutral">&nbsp;</span>
2041
2222
  <span class="cline-any cline-neutral">&nbsp;</span>
2042
2223
  <span class="cline-any cline-neutral">&nbsp;</span>
2043
2224
  <span class="cline-any cline-neutral">&nbsp;</span>
2044
2225
  <span class="cline-any cline-neutral">&nbsp;</span>
2045
- <span class="cline-any cline-yes">157x</span>
2226
+ <span class="cline-any cline-yes">192x</span>
2046
2227
  <span class="cline-any cline-yes">1x</span>
2047
2228
  <span class="cline-any cline-neutral">&nbsp;</span>
2048
2229
  <span class="cline-any cline-neutral">&nbsp;</span>
2049
2230
  <span class="cline-any cline-neutral">&nbsp;</span>
2050
2231
  <span class="cline-any cline-neutral">&nbsp;</span>
2051
2232
  <span class="cline-any cline-neutral">&nbsp;</span>
2052
- <span class="cline-any cline-yes">157x</span>
2233
+ <span class="cline-any cline-yes">192x</span>
2053
2234
  <span class="cline-any cline-yes">41x</span>
2054
2235
  <span class="cline-any cline-yes">58x</span>
2055
2236
  <span class="cline-any cline-yes">27x</span>
@@ -2063,11 +2244,11 @@
2063
2244
  <span class="cline-any cline-neutral">&nbsp;</span>
2064
2245
  <span class="cline-any cline-neutral">&nbsp;</span>
2065
2246
  <span class="cline-any cline-neutral">&nbsp;</span>
2066
- <span class="cline-any cline-yes">157x</span>
2247
+ <span class="cline-any cline-yes">192x</span>
2067
2248
  <span class="cline-any cline-neutral">&nbsp;</span>
2068
- <span class="cline-any cline-yes">157x</span>
2069
- <span class="cline-any cline-yes">139x</span>
2070
- <span class="cline-any cline-yes">241x</span>
2249
+ <span class="cline-any cline-yes">192x</span>
2250
+ <span class="cline-any cline-yes">174x</span>
2251
+ <span class="cline-any cline-yes">321x</span>
2071
2252
  <span class="cline-any cline-neutral">&nbsp;</span>
2072
2253
  <span class="cline-any cline-neutral">&nbsp;</span>
2073
2254
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2087,7 +2268,7 @@
2087
2268
  <span class="cline-any cline-neutral">&nbsp;</span>
2088
2269
  <span class="cline-any cline-neutral">&nbsp;</span>
2089
2270
  <span class="cline-any cline-neutral">&nbsp;</span>
2090
- <span class="cline-any cline-yes">157x</span>
2271
+ <span class="cline-any cline-yes">192x</span>
2091
2272
  <span class="cline-any cline-no">&nbsp;</span>
2092
2273
  <span class="cline-any cline-no">&nbsp;</span>
2093
2274
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2116,19 +2297,19 @@
2116
2297
  <span class="cline-any cline-neutral">&nbsp;</span>
2117
2298
  <span class="cline-any cline-neutral">&nbsp;</span>
2118
2299
  <span class="cline-any cline-neutral">&nbsp;</span>
2119
- <span class="cline-any cline-yes">214x</span>
2120
- <span class="cline-any cline-yes">214x</span>
2300
+ <span class="cline-any cline-yes">434x</span>
2301
+ <span class="cline-any cline-yes">434x</span>
2121
2302
  <span class="cline-any cline-neutral">&nbsp;</span>
2122
- <span class="cline-any cline-yes">214x</span>
2303
+ <span class="cline-any cline-yes">434x</span>
2123
2304
  <span class="cline-any cline-neutral">&nbsp;</span>
2124
- <span class="cline-any cline-yes">208x</span>
2305
+ <span class="cline-any cline-yes">430x</span>
2125
2306
  <span class="cline-any cline-neutral">&nbsp;</span>
2126
- <span class="cline-any cline-yes">326x</span>
2307
+ <span class="cline-any cline-yes">431x</span>
2127
2308
  <span class="cline-any cline-neutral">&nbsp;</span>
2128
2309
  <span class="cline-any cline-neutral">&nbsp;</span>
2129
2310
  <span class="cline-any cline-neutral">&nbsp;</span>
2130
- <span class="cline-any cline-yes">208x</span>
2131
- <span class="cline-any cline-yes">412x</span>
2311
+ <span class="cline-any cline-yes">430x</span>
2312
+ <span class="cline-any cline-yes">829x</span>
2132
2313
  <span class="cline-any cline-yes">5x</span>
2133
2314
  <span class="cline-any cline-neutral">&nbsp;</span>
2134
2315
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2137,16 +2318,16 @@
2137
2318
  <span class="cline-any cline-neutral">&nbsp;</span>
2138
2319
  <span class="cline-any cline-neutral">&nbsp;</span>
2139
2320
  <span class="cline-any cline-neutral">&nbsp;</span>
2140
- <span class="cline-any cline-yes">208x</span>
2141
- <span class="cline-any cline-yes">427x</span>
2142
- <span class="cline-any cline-yes">427x</span>
2321
+ <span class="cline-any cline-yes">430x</span>
2322
+ <span class="cline-any cline-yes">877x</span>
2323
+ <span class="cline-any cline-yes">877x</span>
2143
2324
  <span class="cline-any cline-no">&nbsp;</span>
2144
2325
  <span class="cline-any cline-neutral">&nbsp;</span>
2145
2326
  <span class="cline-any cline-neutral">&nbsp;</span>
2146
2327
  <span class="cline-any cline-neutral">&nbsp;</span>
2147
2328
  <span class="cline-any cline-neutral">&nbsp;</span>
2148
2329
  <span class="cline-any cline-neutral">&nbsp;</span>
2149
- <span class="cline-any cline-yes">427x</span>
2330
+ <span class="cline-any cline-yes">877x</span>
2150
2331
  <span class="cline-any cline-neutral">&nbsp;</span>
2151
2332
  <span class="cline-any cline-neutral">&nbsp;</span>
2152
2333
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2158,9 +2339,9 @@
2158
2339
  <span class="cline-any cline-neutral">&nbsp;</span>
2159
2340
  <span class="cline-any cline-neutral">&nbsp;</span>
2160
2341
  <span class="cline-any cline-neutral">&nbsp;</span>
2161
- <span class="cline-any cline-yes">6x</span>
2162
- <span class="cline-any cline-yes">18x</span>
2163
- <span class="cline-any cline-yes">18x</span>
2342
+ <span class="cline-any cline-yes">4x</span>
2343
+ <span class="cline-any cline-yes">12x</span>
2344
+ <span class="cline-any cline-yes">12x</span>
2164
2345
  <span class="cline-any cline-no">&nbsp;</span>
2165
2346
  <span class="cline-any cline-neutral">&nbsp;</span>
2166
2347
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2170,7 +2351,7 @@
2170
2351
  <span class="cline-any cline-neutral">&nbsp;</span>
2171
2352
  <span class="cline-any cline-neutral">&nbsp;</span>
2172
2353
  <span class="cline-any cline-neutral">&nbsp;</span>
2173
- <span class="cline-any cline-yes">214x</span>
2354
+ <span class="cline-any cline-yes">434x</span>
2174
2355
  <span class="cline-any cline-no">&nbsp;</span>
2175
2356
  <span class="cline-any cline-no">&nbsp;</span>
2176
2357
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2191,9 +2372,15 @@
2191
2372
  <span class="cline-any cline-neutral">&nbsp;</span>
2192
2373
  <span class="cline-any cline-neutral">&nbsp;</span>
2193
2374
  <span class="cline-any cline-neutral">&nbsp;</span>
2194
- <span class="cline-any cline-yes">1411x</span>
2195
2375
  <span class="cline-any cline-neutral">&nbsp;</span>
2196
- <span class="cline-any cline-yes">1411x</span>
2376
+ <span class="cline-any cline-neutral">&nbsp;</span>
2377
+ <span class="cline-any cline-neutral">&nbsp;</span>
2378
+ <span class="cline-any cline-neutral">&nbsp;</span>
2379
+ <span class="cline-any cline-neutral">&nbsp;</span>
2380
+ <span class="cline-any cline-neutral">&nbsp;</span>
2381
+ <span class="cline-any cline-yes">2185x</span>
2382
+ <span class="cline-any cline-neutral">&nbsp;</span>
2383
+ <span class="cline-any cline-yes">2185x</span>
2197
2384
  <span class="cline-any cline-neutral">&nbsp;</span>
2198
2385
  <span class="cline-any cline-no">&nbsp;</span>
2199
2386
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2209,22 +2396,22 @@
2209
2396
  <span class="cline-any cline-no">&nbsp;</span>
2210
2397
  <span class="cline-any cline-neutral">&nbsp;</span>
2211
2398
  <span class="cline-any cline-neutral">&nbsp;</span>
2212
- <span class="cline-any cline-yes">1411x</span>
2213
- <span class="cline-any cline-yes">1411x</span>
2214
- <span class="cline-any cline-yes">2x</span>
2399
+ <span class="cline-any cline-yes">2185x</span>
2400
+ <span class="cline-any cline-yes">2185x</span>
2401
+ <span class="cline-any cline-yes">3x</span>
2215
2402
  <span class="cline-any cline-neutral">&nbsp;</span>
2216
2403
  <span class="cline-any cline-neutral">&nbsp;</span>
2217
2404
  <span class="cline-any cline-neutral">&nbsp;</span>
2218
2405
  <span class="cline-any cline-neutral">&nbsp;</span>
2219
- <span class="cline-any cline-yes">2x</span>
2406
+ <span class="cline-any cline-yes">3x</span>
2220
2407
  <span class="cline-any cline-neutral">&nbsp;</span>
2221
2408
  <span class="cline-any cline-neutral">&nbsp;</span>
2222
- <span class="cline-any cline-yes">1409x</span>
2409
+ <span class="cline-any cline-yes">2182x</span>
2223
2410
  <span class="cline-any cline-no">&nbsp;</span>
2224
2411
  <span class="cline-any cline-neutral">&nbsp;</span>
2225
2412
  <span class="cline-any cline-neutral">&nbsp;</span>
2226
- <span class="cline-any cline-yes">1409x</span>
2227
- <span class="cline-any cline-yes">1409x</span>
2413
+ <span class="cline-any cline-yes">2182x</span>
2414
+ <span class="cline-any cline-yes">2182x</span>
2228
2415
  <span class="cline-any cline-yes">48x</span>
2229
2416
  <span class="cline-any cline-yes">96x</span>
2230
2417
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2244,8 +2431,8 @@
2244
2431
  <span class="cline-any cline-yes">48x</span>
2245
2432
  <span class="cline-any cline-neutral">&nbsp;</span>
2246
2433
  <span class="cline-any cline-neutral">&nbsp;</span>
2247
- <span class="cline-any cline-yes">1361x</span>
2248
- <span class="cline-any cline-yes">1361x</span>
2434
+ <span class="cline-any cline-yes">2134x</span>
2435
+ <span class="cline-any cline-yes">2134x</span>
2249
2436
  <span class="cline-any cline-yes">36x</span>
2250
2437
  <span class="cline-any cline-yes">3x</span>
2251
2438
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2256,8 +2443,8 @@
2256
2443
  <span class="cline-any cline-yes">36x</span>
2257
2444
  <span class="cline-any cline-neutral">&nbsp;</span>
2258
2445
  <span class="cline-any cline-neutral">&nbsp;</span>
2259
- <span class="cline-any cline-yes">1325x</span>
2260
- <span class="cline-any cline-yes">1325x</span>
2446
+ <span class="cline-any cline-yes">2098x</span>
2447
+ <span class="cline-any cline-yes">2098x</span>
2261
2448
  <span class="cline-any cline-yes">40x</span>
2262
2449
  <span class="cline-any cline-yes">27x</span>
2263
2450
  <span class="cline-any cline-yes">2x</span>
@@ -2270,7 +2457,7 @@
2270
2457
  <span class="cline-any cline-neutral">&nbsp;</span>
2271
2458
  <span class="cline-any cline-neutral">&nbsp;</span>
2272
2459
  <span class="cline-any cline-neutral">&nbsp;</span>
2273
- <span class="cline-any cline-yes">1298x</span>
2460
+ <span class="cline-any cline-yes">2071x</span>
2274
2461
  <span class="cline-any cline-no">&nbsp;</span>
2275
2462
  <span class="cline-any cline-neutral">&nbsp;</span>
2276
2463
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2279,12 +2466,12 @@
2279
2466
  <span class="cline-any cline-no">&nbsp;</span>
2280
2467
  <span class="cline-any cline-neutral">&nbsp;</span>
2281
2468
  <span class="cline-any cline-neutral">&nbsp;</span>
2282
- <span class="cline-any cline-yes">1298x</span>
2283
- <span class="cline-any cline-yes">1298x</span>
2469
+ <span class="cline-any cline-yes">2071x</span>
2470
+ <span class="cline-any cline-yes">2071x</span>
2284
2471
  <span class="cline-any cline-neutral">&nbsp;</span>
2285
2472
  <span class="cline-any cline-neutral">&nbsp;</span>
2286
- <span class="cline-any cline-yes">1298x</span>
2287
- <span class="cline-any cline-yes">672x</span>
2473
+ <span class="cline-any cline-yes">2071x</span>
2474
+ <span class="cline-any cline-yes">1017x</span>
2288
2475
  <span class="cline-any cline-no">&nbsp;</span>
2289
2476
  <span class="cline-any cline-neutral">&nbsp;</span>
2290
2477
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2293,24 +2480,24 @@
2293
2480
  <span class="cline-any cline-no">&nbsp;</span>
2294
2481
  <span class="cline-any cline-neutral">&nbsp;</span>
2295
2482
  <span class="cline-any cline-neutral">&nbsp;</span>
2296
- <span class="cline-any cline-yes">672x</span>
2297
- <span class="cline-any cline-yes">672x</span>
2298
- <span class="cline-any cline-yes">672x</span>
2299
- <span class="cline-any cline-yes">672x</span>
2483
+ <span class="cline-any cline-yes">1017x</span>
2484
+ <span class="cline-any cline-yes">1017x</span>
2485
+ <span class="cline-any cline-yes">1017x</span>
2486
+ <span class="cline-any cline-yes">1017x</span>
2300
2487
  <span class="cline-any cline-yes">1x</span>
2301
2488
  <span class="cline-any cline-neutral">&nbsp;</span>
2302
2489
  <span class="cline-any cline-neutral">&nbsp;</span>
2303
2490
  <span class="cline-any cline-neutral">&nbsp;</span>
2304
2491
  <span class="cline-any cline-neutral">&nbsp;</span>
2305
2492
  <span class="cline-any cline-neutral">&nbsp;</span>
2306
- <span class="cline-any cline-yes">672x</span>
2493
+ <span class="cline-any cline-yes">1017x</span>
2307
2494
  <span class="cline-any cline-yes">2x</span>
2308
2495
  <span class="cline-any cline-neutral">&nbsp;</span>
2309
2496
  <span class="cline-any cline-neutral">&nbsp;</span>
2310
2497
  <span class="cline-any cline-neutral">&nbsp;</span>
2311
2498
  <span class="cline-any cline-neutral">&nbsp;</span>
2312
2499
  <span class="cline-any cline-neutral">&nbsp;</span>
2313
- <span class="cline-any cline-yes">672x</span>
2500
+ <span class="cline-any cline-yes">1017x</span>
2314
2501
  <span class="cline-any cline-yes">73x</span>
2315
2502
  <span class="cline-any cline-yes">73x</span>
2316
2503
  <span class="cline-any cline-yes">4x</span>
@@ -2324,7 +2511,7 @@
2324
2511
  <span class="cline-any cline-neutral">&nbsp;</span>
2325
2512
  <span class="cline-any cline-neutral">&nbsp;</span>
2326
2513
  <span class="cline-any cline-neutral">&nbsp;</span>
2327
- <span class="cline-any cline-yes">672x</span>
2514
+ <span class="cline-any cline-yes">1017x</span>
2328
2515
  <span class="cline-any cline-neutral">&nbsp;</span>
2329
2516
  <span class="cline-any cline-neutral">&nbsp;</span>
2330
2517
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2335,12 +2522,12 @@
2335
2522
  <span class="cline-any cline-neutral">&nbsp;</span>
2336
2523
  <span class="cline-any cline-neutral">&nbsp;</span>
2337
2524
  <span class="cline-any cline-neutral">&nbsp;</span>
2338
- <span class="cline-any cline-yes">672x</span>
2525
+ <span class="cline-any cline-yes">1017x</span>
2339
2526
  <span class="cline-any cline-neutral">&nbsp;</span>
2340
2527
  <span class="cline-any cline-neutral">&nbsp;</span>
2341
2528
  <span class="cline-any cline-neutral">&nbsp;</span>
2342
- <span class="cline-any cline-yes">626x</span>
2343
- <span class="cline-any cline-yes">99x</span>
2529
+ <span class="cline-any cline-yes">1054x</span>
2530
+ <span class="cline-any cline-yes">179x</span>
2344
2531
  <span class="cline-any cline-no">&nbsp;</span>
2345
2532
  <span class="cline-any cline-neutral">&nbsp;</span>
2346
2533
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2348,7 +2535,7 @@
2348
2535
  <span class="cline-any cline-neutral">&nbsp;</span>
2349
2536
  <span class="cline-any cline-no">&nbsp;</span>
2350
2537
  <span class="cline-any cline-neutral">&nbsp;</span>
2351
- <span class="cline-any cline-yes">99x</span>
2538
+ <span class="cline-any cline-yes">179x</span>
2352
2539
  <span class="cline-any cline-no">&nbsp;</span>
2353
2540
  <span class="cline-any cline-neutral">&nbsp;</span>
2354
2541
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2356,7 +2543,7 @@
2356
2543
  <span class="cline-any cline-neutral">&nbsp;</span>
2357
2544
  <span class="cline-any cline-no">&nbsp;</span>
2358
2545
  <span class="cline-any cline-neutral">&nbsp;</span>
2359
- <span class="cline-any cline-yes">99x</span>
2546
+ <span class="cline-any cline-yes">179x</span>
2360
2547
  <span class="cline-any cline-no">&nbsp;</span>
2361
2548
  <span class="cline-any cline-neutral">&nbsp;</span>
2362
2549
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2364,28 +2551,28 @@
2364
2551
  <span class="cline-any cline-neutral">&nbsp;</span>
2365
2552
  <span class="cline-any cline-no">&nbsp;</span>
2366
2553
  <span class="cline-any cline-neutral">&nbsp;</span>
2367
- <span class="cline-any cline-yes">99x</span>
2368
- <span class="cline-any cline-yes">99x</span>
2369
- <span class="cline-any cline-yes">99x</span>
2554
+ <span class="cline-any cline-yes">179x</span>
2555
+ <span class="cline-any cline-yes">179x</span>
2556
+ <span class="cline-any cline-yes">179x</span>
2370
2557
  <span class="cline-any cline-yes">2x</span>
2371
2558
  <span class="cline-any cline-neutral">&nbsp;</span>
2372
2559
  <span class="cline-any cline-neutral">&nbsp;</span>
2373
2560
  <span class="cline-any cline-neutral">&nbsp;</span>
2374
2561
  <span class="cline-any cline-neutral">&nbsp;</span>
2375
2562
  <span class="cline-any cline-neutral">&nbsp;</span>
2376
- <span class="cline-any cline-yes">99x</span>
2563
+ <span class="cline-any cline-yes">179x</span>
2377
2564
  <span class="cline-any cline-yes">8x</span>
2378
2565
  <span class="cline-any cline-neutral">&nbsp;</span>
2379
2566
  <span class="cline-any cline-neutral">&nbsp;</span>
2380
2567
  <span class="cline-any cline-neutral">&nbsp;</span>
2381
2568
  <span class="cline-any cline-neutral">&nbsp;</span>
2382
2569
  <span class="cline-any cline-neutral">&nbsp;</span>
2383
- <span class="cline-any cline-yes">99x</span>
2570
+ <span class="cline-any cline-yes">179x</span>
2384
2571
  <span class="cline-any cline-neutral">&nbsp;</span>
2385
2572
  <span class="cline-any cline-neutral">&nbsp;</span>
2386
2573
  <span class="cline-any cline-neutral">&nbsp;</span>
2387
- <span class="cline-any cline-yes">527x</span>
2388
- <span class="cline-any cline-yes">74x</span>
2574
+ <span class="cline-any cline-yes">875x</span>
2575
+ <span class="cline-any cline-yes">126x</span>
2389
2576
  <span class="cline-any cline-no">&nbsp;</span>
2390
2577
  <span class="cline-any cline-neutral">&nbsp;</span>
2391
2578
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2393,7 +2580,7 @@
2393
2580
  <span class="cline-any cline-neutral">&nbsp;</span>
2394
2581
  <span class="cline-any cline-no">&nbsp;</span>
2395
2582
  <span class="cline-any cline-neutral">&nbsp;</span>
2396
- <span class="cline-any cline-yes">74x</span>
2583
+ <span class="cline-any cline-yes">126x</span>
2397
2584
  <span class="cline-any cline-no">&nbsp;</span>
2398
2585
  <span class="cline-any cline-neutral">&nbsp;</span>
2399
2586
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2401,40 +2588,40 @@
2401
2588
  <span class="cline-any cline-neutral">&nbsp;</span>
2402
2589
  <span class="cline-any cline-no">&nbsp;</span>
2403
2590
  <span class="cline-any cline-neutral">&nbsp;</span>
2404
- <span class="cline-any cline-yes">74x</span>
2405
- <span class="cline-any cline-yes">74x</span>
2406
- <span class="cline-any cline-yes">74x</span>
2591
+ <span class="cline-any cline-yes">126x</span>
2592
+ <span class="cline-any cline-yes">126x</span>
2593
+ <span class="cline-any cline-yes">126x</span>
2407
2594
  <span class="cline-any cline-no">&nbsp;</span>
2408
2595
  <span class="cline-any cline-neutral">&nbsp;</span>
2409
2596
  <span class="cline-any cline-neutral">&nbsp;</span>
2410
2597
  <span class="cline-any cline-neutral">&nbsp;</span>
2411
2598
  <span class="cline-any cline-neutral">&nbsp;</span>
2412
2599
  <span class="cline-any cline-neutral">&nbsp;</span>
2413
- <span class="cline-any cline-yes">74x</span>
2600
+ <span class="cline-any cline-yes">126x</span>
2414
2601
  <span class="cline-any cline-no">&nbsp;</span>
2415
2602
  <span class="cline-any cline-neutral">&nbsp;</span>
2416
2603
  <span class="cline-any cline-neutral">&nbsp;</span>
2417
2604
  <span class="cline-any cline-neutral">&nbsp;</span>
2418
2605
  <span class="cline-any cline-neutral">&nbsp;</span>
2419
2606
  <span class="cline-any cline-neutral">&nbsp;</span>
2420
- <span class="cline-any cline-yes">74x</span>
2607
+ <span class="cline-any cline-yes">126x</span>
2421
2608
  <span class="cline-any cline-neutral">&nbsp;</span>
2422
2609
  <span class="cline-any cline-neutral">&nbsp;</span>
2423
2610
  <span class="cline-any cline-neutral">&nbsp;</span>
2424
- <span class="cline-any cline-yes">453x</span>
2425
- <span class="cline-any cline-yes">78x</span>
2611
+ <span class="cline-any cline-yes">749x</span>
2612
+ <span class="cline-any cline-yes">119x</span>
2426
2613
  <span class="cline-any cline-no">&nbsp;</span>
2427
2614
  <span class="cline-any cline-neutral">&nbsp;</span>
2428
2615
  <span class="cline-any cline-neutral">&nbsp;</span>
2429
2616
  <span class="cline-any cline-neutral">&nbsp;</span>
2430
2617
  <span class="cline-any cline-neutral">&nbsp;</span>
2431
2618
  <span class="cline-any cline-neutral">&nbsp;</span>
2432
- <span class="cline-any cline-yes">78x</span>
2619
+ <span class="cline-any cline-yes">119x</span>
2433
2620
  <span class="cline-any cline-neutral">&nbsp;</span>
2434
2621
  <span class="cline-any cline-neutral">&nbsp;</span>
2435
2622
  <span class="cline-any cline-neutral">&nbsp;</span>
2436
- <span class="cline-any cline-yes">375x</span>
2437
- <span class="cline-any cline-yes">157x</span>
2623
+ <span class="cline-any cline-yes">630x</span>
2624
+ <span class="cline-any cline-yes">192x</span>
2438
2625
  <span class="cline-any cline-no">&nbsp;</span>
2439
2626
  <span class="cline-any cline-neutral">&nbsp;</span>
2440
2627
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2442,7 +2629,7 @@
2442
2629
  <span class="cline-any cline-neutral">&nbsp;</span>
2443
2630
  <span class="cline-any cline-no">&nbsp;</span>
2444
2631
  <span class="cline-any cline-neutral">&nbsp;</span>
2445
- <span class="cline-any cline-yes">157x</span>
2632
+ <span class="cline-any cline-yes">192x</span>
2446
2633
  <span class="cline-any cline-neutral">&nbsp;</span>
2447
2634
  <span class="cline-any cline-neutral">&nbsp;</span>
2448
2635
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2457,12 +2644,12 @@
2457
2644
  <span class="cline-any cline-neutral">&nbsp;</span>
2458
2645
  <span class="cline-any cline-neutral">&nbsp;</span>
2459
2646
  <span class="cline-any cline-neutral">&nbsp;</span>
2460
- <span class="cline-any cline-yes">157x</span>
2647
+ <span class="cline-any cline-yes">192x</span>
2461
2648
  <span class="cline-any cline-neutral">&nbsp;</span>
2462
2649
  <span class="cline-any cline-neutral">&nbsp;</span>
2463
2650
  <span class="cline-any cline-neutral">&nbsp;</span>
2464
- <span class="cline-any cline-yes">218x</span>
2465
- <span class="cline-any cline-yes">214x</span>
2651
+ <span class="cline-any cline-yes">438x</span>
2652
+ <span class="cline-any cline-yes">434x</span>
2466
2653
  <span class="cline-any cline-neutral">&nbsp;</span>
2467
2654
  <span class="cline-any cline-neutral">&nbsp;</span>
2468
2655
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2474,7 +2661,7 @@
2474
2661
  <span class="cline-any cline-neutral">&nbsp;</span>
2475
2662
  <span class="cline-any cline-no">&nbsp;</span>
2476
2663
  <span class="cline-any cline-neutral">&nbsp;</span>
2477
- <span class="cline-any cline-yes">214x</span>
2664
+ <span class="cline-any cline-yes">434x</span>
2478
2665
  <span class="cline-any cline-neutral">&nbsp;</span>
2479
2666
  <span class="cline-any cline-neutral">&nbsp;</span>
2480
2667
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2487,7 +2674,7 @@
2487
2674
  <span class="cline-any cline-neutral">&nbsp;</span>
2488
2675
  <span class="cline-any cline-neutral">&nbsp;</span>
2489
2676
  <span class="cline-any cline-neutral">&nbsp;</span>
2490
- <span class="cline-any cline-yes">214x</span>
2677
+ <span class="cline-any cline-yes">434x</span>
2491
2678
  <span class="cline-any cline-neutral">&nbsp;</span>
2492
2679
  <span class="cline-any cline-neutral">&nbsp;</span>
2493
2680
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2542,42 +2729,46 @@
2542
2729
  <span class="cline-any cline-neutral">&nbsp;</span>
2543
2730
  <span class="cline-any cline-neutral">&nbsp;</span>
2544
2731
  <span class="cline-any cline-neutral">&nbsp;</span>
2545
- <span class="cline-any cline-yes">14x</span>
2546
2732
  <span class="cline-any cline-neutral">&nbsp;</span>
2547
- <span class="cline-any cline-yes">10x</span>
2548
- <span class="cline-any cline-yes">10x</span>
2549
- <span class="cline-any cline-no">&nbsp;</span>
2550
2733
  <span class="cline-any cline-neutral">&nbsp;</span>
2551
2734
  <span class="cline-any cline-neutral">&nbsp;</span>
2735
+ <span class="cline-any cline-yes">668x</span>
2736
+ <span class="cline-any cline-yes">71x</span>
2552
2737
  <span class="cline-any cline-neutral">&nbsp;</span>
2553
2738
  <span class="cline-any cline-neutral">&nbsp;</span>
2554
2739
  <span class="cline-any cline-neutral">&nbsp;</span>
2555
2740
  <span class="cline-any cline-neutral">&nbsp;</span>
2741
+ <span class="cline-any cline-yes">71x</span>
2742
+ <span class="cline-any cline-yes">4x</span>
2556
2743
  <span class="cline-any cline-neutral">&nbsp;</span>
2557
2744
  <span class="cline-any cline-neutral">&nbsp;</span>
2558
- <span class="cline-any cline-yes">10x</span>
2559
- <span class="cline-any cline-yes">6x</span>
2560
- <span class="cline-any cline-yes">6x</span>
2561
- <span class="cline-any cline-yes">6x</span>
2562
- <span class="cline-any cline-yes">2x</span>
2563
2745
  <span class="cline-any cline-neutral">&nbsp;</span>
2564
2746
  <span class="cline-any cline-neutral">&nbsp;</span>
2747
+ <span class="cline-any cline-yes">4x</span>
2748
+ <span class="cline-any cline-neutral">&nbsp;</span>
2749
+ <span class="cline-any cline-yes">67x</span>
2750
+ <span class="cline-any cline-yes">65x</span>
2565
2751
  <span class="cline-any cline-neutral">&nbsp;</span>
2566
2752
  <span class="cline-any cline-neutral">&nbsp;</span>
2567
2753
  <span class="cline-any cline-neutral">&nbsp;</span>
2568
- <span class="cline-any cline-yes">4x</span>
2569
2754
  <span class="cline-any cline-neutral">&nbsp;</span>
2570
2755
  <span class="cline-any cline-neutral">&nbsp;</span>
2571
2756
  <span class="cline-any cline-neutral">&nbsp;</span>
2572
2757
  <span class="cline-any cline-neutral">&nbsp;</span>
2573
2758
  <span class="cline-any cline-neutral">&nbsp;</span>
2574
2759
  <span class="cline-any cline-neutral">&nbsp;</span>
2760
+ <span class="cline-any cline-yes">67x</span>
2575
2761
  <span class="cline-any cline-neutral">&nbsp;</span>
2762
+ <span class="cline-any cline-yes">597x</span>
2763
+ <span class="cline-any cline-yes">597x</span>
2764
+ <span class="cline-any cline-yes">5x</span>
2576
2765
  <span class="cline-any cline-neutral">&nbsp;</span>
2577
2766
  <span class="cline-any cline-neutral">&nbsp;</span>
2578
2767
  <span class="cline-any cline-neutral">&nbsp;</span>
2579
2768
  <span class="cline-any cline-neutral">&nbsp;</span>
2769
+ <span class="cline-any cline-yes">5x</span>
2580
2770
  <span class="cline-any cline-neutral">&nbsp;</span>
2771
+ <span class="cline-any cline-yes">592x</span>
2581
2772
  <span class="cline-any cline-neutral">&nbsp;</span>
2582
2773
  <span class="cline-any cline-neutral">&nbsp;</span>
2583
2774
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2590,21 +2781,31 @@
2590
2781
  <span class="cline-any cline-neutral">&nbsp;</span>
2591
2782
  <span class="cline-any cline-neutral">&nbsp;</span>
2592
2783
  <span class="cline-any cline-neutral">&nbsp;</span>
2593
- <span class="cline-any cline-yes">166x</span>
2594
2784
  <span class="cline-any cline-neutral">&nbsp;</span>
2595
- <span class="cline-any cline-yes">197x</span>
2596
- <span class="cline-any cline-yes">30x</span>
2597
- <span class="cline-any cline-yes">306x</span>
2598
- <span class="cline-any cline-yes">306x</span>
2599
- <span class="cline-any cline-yes">1x</span>
2600
2785
  <span class="cline-any cline-neutral">&nbsp;</span>
2601
2786
  <span class="cline-any cline-neutral">&nbsp;</span>
2602
2787
  <span class="cline-any cline-neutral">&nbsp;</span>
2603
2788
  <span class="cline-any cline-neutral">&nbsp;</span>
2604
2789
  <span class="cline-any cline-neutral">&nbsp;</span>
2605
- <span class="cline-any cline-yes">305x</span>
2606
2790
  <span class="cline-any cline-neutral">&nbsp;</span>
2607
2791
  <span class="cline-any cline-neutral">&nbsp;</span>
2792
+ <span class="cline-any cline-yes">14x</span>
2793
+ <span class="cline-any cline-neutral">&nbsp;</span>
2794
+ <span class="cline-any cline-yes">10x</span>
2795
+ <span class="cline-any cline-yes">10x</span>
2796
+ <span class="cline-any cline-no">&nbsp;</span>
2797
+ <span class="cline-any cline-neutral">&nbsp;</span>
2798
+ <span class="cline-any cline-neutral">&nbsp;</span>
2799
+ <span class="cline-any cline-neutral">&nbsp;</span>
2800
+ <span class="cline-any cline-neutral">&nbsp;</span>
2801
+ <span class="cline-any cline-neutral">&nbsp;</span>
2802
+ <span class="cline-any cline-neutral">&nbsp;</span>
2803
+ <span class="cline-any cline-neutral">&nbsp;</span>
2804
+ <span class="cline-any cline-neutral">&nbsp;</span>
2805
+ <span class="cline-any cline-yes">10x</span>
2806
+ <span class="cline-any cline-yes">6x</span>
2807
+ <span class="cline-any cline-yes">6x</span>
2808
+ <span class="cline-any cline-neutral">&nbsp;</span>
2608
2809
  <span class="cline-any cline-neutral">&nbsp;</span>
2609
2810
  <span class="cline-any cline-neutral">&nbsp;</span>
2610
2811
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2616,7 +2817,35 @@
2616
2817
  <span class="cline-any cline-neutral">&nbsp;</span>
2617
2818
  <span class="cline-any cline-neutral">&nbsp;</span>
2618
2819
  <span class="cline-any cline-neutral">&nbsp;</span>
2619
- <span class="cline-any cline-yes">197x</span>
2820
+ <span class="cline-any cline-neutral">&nbsp;</span>
2821
+ <span class="cline-any cline-neutral">&nbsp;</span>
2822
+ <span class="cline-any cline-neutral">&nbsp;</span>
2823
+ <span class="cline-any cline-neutral">&nbsp;</span>
2824
+ <span class="cline-any cline-neutral">&nbsp;</span>
2825
+ <span class="cline-any cline-neutral">&nbsp;</span>
2826
+ <span class="cline-any cline-neutral">&nbsp;</span>
2827
+ <span class="cline-any cline-neutral">&nbsp;</span>
2828
+ <span class="cline-any cline-neutral">&nbsp;</span>
2829
+ <span class="cline-any cline-neutral">&nbsp;</span>
2830
+ <span class="cline-any cline-neutral">&nbsp;</span>
2831
+ <span class="cline-any cline-yes">184x</span>
2832
+ <span class="cline-any cline-neutral">&nbsp;</span>
2833
+ <span class="cline-any cline-yes">225x</span>
2834
+ <span class="cline-any cline-yes">46x</span>
2835
+ <span class="cline-any cline-yes">427x</span>
2836
+ <span class="cline-any cline-neutral">&nbsp;</span>
2837
+ <span class="cline-any cline-neutral">&nbsp;</span>
2838
+ <span class="cline-any cline-neutral">&nbsp;</span>
2839
+ <span class="cline-any cline-neutral">&nbsp;</span>
2840
+ <span class="cline-any cline-neutral">&nbsp;</span>
2841
+ <span class="cline-any cline-neutral">&nbsp;</span>
2842
+ <span class="cline-any cline-neutral">&nbsp;</span>
2843
+ <span class="cline-any cline-neutral">&nbsp;</span>
2844
+ <span class="cline-any cline-neutral">&nbsp;</span>
2845
+ <span class="cline-any cline-neutral">&nbsp;</span>
2846
+ <span class="cline-any cline-neutral">&nbsp;</span>
2847
+ <span class="cline-any cline-neutral">&nbsp;</span>
2848
+ <span class="cline-any cline-yes">225x</span>
2620
2849
  <span class="cline-any cline-yes">2x</span>
2621
2850
  <span class="cline-any cline-no">&nbsp;</span>
2622
2851
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2690,27 +2919,28 @@
2690
2919
  <span class="cline-any cline-neutral">&nbsp;</span>
2691
2920
  <span class="cline-any cline-neutral">&nbsp;</span>
2692
2921
  <span class="cline-any cline-neutral">&nbsp;</span>
2693
- <span class="cline-any cline-yes">63x</span>
2694
- <span class="cline-any cline-yes">63x</span>
2922
+ <span class="cline-any cline-yes">70x</span>
2923
+ <span class="cline-any cline-yes">70x</span>
2924
+ <span class="cline-any cline-yes">70x</span>
2695
2925
  <span class="cline-any cline-neutral">&nbsp;</span>
2696
- <span class="cline-any cline-yes">63x</span>
2926
+ <span class="cline-any cline-yes">70x</span>
2697
2927
  <span class="cline-any cline-neutral">&nbsp;</span>
2698
- <span class="cline-any cline-yes">63x</span>
2699
- <span class="cline-any cline-yes">311x</span>
2928
+ <span class="cline-any cline-yes">70x</span>
2929
+ <span class="cline-any cline-yes">363x</span>
2700
2930
  <span class="cline-any cline-no">&nbsp;</span>
2701
2931
  <span class="cline-any cline-neutral">&nbsp;</span>
2702
2932
  <span class="cline-any cline-neutral">&nbsp;</span>
2703
2933
  <span class="cline-any cline-neutral">&nbsp;</span>
2704
2934
  <span class="cline-any cline-neutral">&nbsp;</span>
2705
- <span class="cline-any cline-yes">63x</span>
2935
+ <span class="cline-any cline-yes">70x</span>
2706
2936
  <span class="cline-any cline-neutral">&nbsp;</span>
2707
2937
  <span class="cline-any cline-neutral">&nbsp;</span>
2708
- <span class="cline-any cline-yes">16x</span>
2938
+ <span class="cline-any cline-yes">20x</span>
2709
2939
  <span class="cline-any cline-neutral">&nbsp;</span>
2710
2940
  <span class="cline-any cline-neutral">&nbsp;</span>
2711
2941
  <span class="cline-any cline-neutral">&nbsp;</span>
2712
2942
  <span class="cline-any cline-neutral">&nbsp;</span>
2713
- <span class="cline-any cline-yes">24x</span>
2943
+ <span class="cline-any cline-yes">32x</span>
2714
2944
  <span class="cline-any cline-neutral">&nbsp;</span>
2715
2945
  <span class="cline-any cline-neutral">&nbsp;</span>
2716
2946
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2720,15 +2950,15 @@
2720
2950
  <span class="cline-any cline-neutral">&nbsp;</span>
2721
2951
  <span class="cline-any cline-neutral">&nbsp;</span>
2722
2952
  <span class="cline-any cline-neutral">&nbsp;</span>
2723
- <span class="cline-any cline-yes">63x</span>
2953
+ <span class="cline-any cline-yes">70x</span>
2724
2954
  <span class="cline-any cline-neutral">&nbsp;</span>
2725
- <span class="cline-any cline-yes">63x</span>
2955
+ <span class="cline-any cline-yes">70x</span>
2726
2956
  <span class="cline-any cline-neutral">&nbsp;</span>
2727
- <span class="cline-any cline-yes">63x</span>
2957
+ <span class="cline-any cline-yes">70x</span>
2728
2958
  <span class="cline-any cline-yes">4x</span>
2729
2959
  <span class="cline-any cline-neutral">&nbsp;</span>
2730
2960
  <span class="cline-any cline-neutral">&nbsp;</span>
2731
- <span class="cline-any cline-yes">63x</span>
2961
+ <span class="cline-any cline-yes">70x</span>
2732
2962
  <span class="cline-any cline-neutral">&nbsp;</span>
2733
2963
  <span class="cline-any cline-neutral">&nbsp;</span>
2734
2964
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2747,7 +2977,7 @@
2747
2977
  <span class="cline-any cline-neutral">&nbsp;</span>
2748
2978
  <span class="cline-any cline-neutral">&nbsp;</span>
2749
2979
  <span class="cline-any cline-neutral">&nbsp;</span>
2750
- <span class="cline-any cline-yes">210x</span>
2980
+ <span class="cline-any cline-yes">228x</span>
2751
2981
  <span class="cline-any cline-no">&nbsp;</span>
2752
2982
  <span class="cline-any cline-neutral">&nbsp;</span>
2753
2983
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2756,8 +2986,8 @@
2756
2986
  <span class="cline-any cline-neutral">&nbsp;</span>
2757
2987
  <span class="cline-any cline-neutral">&nbsp;</span>
2758
2988
  <span class="cline-any cline-neutral">&nbsp;</span>
2759
- <span class="cline-any cline-yes">255x</span>
2760
- <span class="cline-any cline-yes">210x</span>
2989
+ <span class="cline-any cline-yes">283x</span>
2990
+ <span class="cline-any cline-yes">228x</span>
2761
2991
  <span class="cline-any cline-neutral">&nbsp;</span>
2762
2992
  <span class="cline-any cline-no">&nbsp;</span>
2763
2993
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2767,8 +2997,8 @@
2767
2997
  <span class="cline-any cline-neutral">&nbsp;</span>
2768
2998
  <span class="cline-any cline-neutral">&nbsp;</span>
2769
2999
  <span class="cline-any cline-neutral">&nbsp;</span>
2770
- <span class="cline-any cline-yes">210x</span>
2771
- <span class="cline-any cline-yes">210x</span>
3000
+ <span class="cline-any cline-yes">228x</span>
3001
+ <span class="cline-any cline-yes">228x</span>
2772
3002
  <span class="cline-any cline-neutral">&nbsp;</span>
2773
3003
  <span class="cline-any cline-neutral">&nbsp;</span>
2774
3004
  <span class="cline-any cline-no">&nbsp;</span>
@@ -2779,7 +3009,7 @@
2779
3009
  <span class="cline-any cline-neutral">&nbsp;</span>
2780
3010
  <span class="cline-any cline-neutral">&nbsp;</span>
2781
3011
  <span class="cline-any cline-neutral">&nbsp;</span>
2782
- <span class="cline-any cline-yes">63x</span>
3012
+ <span class="cline-any cline-yes">70x</span>
2783
3013
  <span class="cline-any cline-neutral">&nbsp;</span>
2784
3014
  <span class="cline-any cline-neutral">&nbsp;</span>
2785
3015
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2802,23 +3032,23 @@
2802
3032
  <span class="cline-any cline-neutral">&nbsp;</span>
2803
3033
  <span class="cline-any cline-neutral">&nbsp;</span>
2804
3034
  <span class="cline-any cline-neutral">&nbsp;</span>
2805
- <span class="cline-any cline-yes">63x</span>
2806
- <span class="cline-any cline-yes">107x</span>
3035
+ <span class="cline-any cline-yes">70x</span>
3036
+ <span class="cline-any cline-yes">116x</span>
2807
3037
  <span class="cline-any cline-no">&nbsp;</span>
2808
3038
  <span class="cline-any cline-neutral">&nbsp;</span>
2809
3039
  <span class="cline-any cline-neutral">&nbsp;</span>
2810
3040
  <span class="cline-any cline-neutral">&nbsp;</span>
2811
3041
  <span class="cline-any cline-neutral">&nbsp;</span>
2812
- <span class="cline-any cline-yes">63x</span>
3042
+ <span class="cline-any cline-yes">70x</span>
2813
3043
  <span class="cline-any cline-yes">2x</span>
2814
3044
  <span class="cline-any cline-no">&nbsp;</span>
2815
3045
  <span class="cline-any cline-neutral">&nbsp;</span>
2816
3046
  <span class="cline-any cline-neutral">&nbsp;</span>
2817
3047
  <span class="cline-any cline-neutral">&nbsp;</span>
2818
3048
  <span class="cline-any cline-neutral">&nbsp;</span>
2819
- <span class="cline-any cline-yes">63x</span>
3049
+ <span class="cline-any cline-yes">70x</span>
2820
3050
  <span class="cline-any cline-neutral">&nbsp;</span>
2821
- <span class="cline-any cline-yes">63x</span>
3051
+ <span class="cline-any cline-yes">70x</span>
2822
3052
  <span class="cline-any cline-neutral">&nbsp;</span>
2823
3053
  <span class="cline-any cline-neutral">&nbsp;</span>
2824
3054
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2827,7 +3057,7 @@
2827
3057
  <span class="cline-any cline-neutral">&nbsp;</span>
2828
3058
  <span class="cline-any cline-neutral">&nbsp;</span>
2829
3059
  <span class="cline-any cline-neutral">&nbsp;</span>
2830
- <span class="cline-any cline-yes">115x</span>
3060
+ <span class="cline-any cline-yes">124x</span>
2831
3061
  <span class="cline-any cline-no">&nbsp;</span>
2832
3062
  <span class="cline-any cline-neutral">&nbsp;</span>
2833
3063
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2835,7 +3065,7 @@
2835
3065
  <span class="cline-any cline-neutral">&nbsp;</span>
2836
3066
  <span class="cline-any cline-neutral">&nbsp;</span>
2837
3067
  <span class="cline-any cline-neutral">&nbsp;</span>
2838
- <span class="cline-any cline-yes">105x</span>
3068
+ <span class="cline-any cline-yes">114x</span>
2839
3069
  <span class="cline-any cline-neutral">&nbsp;</span>
2840
3070
  <span class="cline-any cline-no">&nbsp;</span>
2841
3071
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2876,7 +3106,7 @@
2876
3106
  <span class="cline-any cline-neutral">&nbsp;</span>
2877
3107
  <span class="cline-any cline-neutral">&nbsp;</span>
2878
3108
  <span class="cline-any cline-neutral">&nbsp;</span>
2879
- <span class="cline-any cline-yes">51x</span>
3109
+ <span class="cline-any cline-yes">58x</span>
2880
3110
  <span class="cline-any cline-yes">2x</span>
2881
3111
  <span class="cline-any cline-neutral">&nbsp;</span>
2882
3112
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2907,16 +3137,16 @@
2907
3137
  <span class="cline-any cline-neutral">&nbsp;</span>
2908
3138
  <span class="cline-any cline-neutral">&nbsp;</span>
2909
3139
  <span class="cline-any cline-neutral">&nbsp;</span>
2910
- <span class="cline-any cline-yes">227x</span>
3140
+ <span class="cline-any cline-yes">264x</span>
2911
3141
  <span class="cline-any cline-neutral">&nbsp;</span>
2912
- <span class="cline-any cline-yes">227x</span>
3142
+ <span class="cline-any cline-yes">264x</span>
2913
3143
  <span class="cline-any cline-neutral">&nbsp;</span>
2914
3144
  <span class="cline-any cline-neutral">&nbsp;</span>
2915
3145
  <span class="cline-any cline-neutral">&nbsp;</span>
2916
- <span class="cline-any cline-yes">227x</span>
3146
+ <span class="cline-any cline-yes">264x</span>
2917
3147
  <span class="cline-any cline-neutral">&nbsp;</span>
2918
3148
  <span class="cline-any cline-neutral">&nbsp;</span>
2919
- <span class="cline-any cline-yes">227x</span>
3149
+ <span class="cline-any cline-yes">264x</span>
2920
3150
  <span class="cline-any cline-yes">1x</span>
2921
3151
  <span class="cline-any cline-neutral">&nbsp;</span>
2922
3152
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2925,15 +3155,15 @@
2925
3155
  <span class="cline-any cline-neutral">&nbsp;</span>
2926
3156
  <span class="cline-any cline-yes">1x</span>
2927
3157
  <span class="cline-any cline-neutral">&nbsp;</span>
2928
- <span class="cline-any cline-yes">226x</span>
3158
+ <span class="cline-any cline-yes">263x</span>
2929
3159
  <span class="cline-any cline-neutral">&nbsp;</span>
2930
- <span class="cline-any cline-yes">50x</span>
3160
+ <span class="cline-any cline-yes">57x</span>
2931
3161
  <span class="cline-any cline-neutral">&nbsp;</span>
2932
3162
  <span class="cline-any cline-neutral">&nbsp;</span>
2933
3163
  <span class="cline-any cline-neutral">&nbsp;</span>
2934
3164
  <span class="cline-any cline-neutral">&nbsp;</span>
2935
3165
  <span class="cline-any cline-neutral">&nbsp;</span>
2936
- <span class="cline-any cline-yes">50x</span>
3166
+ <span class="cline-any cline-yes">57x</span>
2937
3167
  <span class="cline-any cline-neutral">&nbsp;</span>
2938
3168
  <span class="cline-any cline-neutral">&nbsp;</span>
2939
3169
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2941,7 +3171,7 @@
2941
3171
  <span class="cline-any cline-neutral">&nbsp;</span>
2942
3172
  <span class="cline-any cline-neutral">&nbsp;</span>
2943
3173
  <span class="cline-any cline-neutral">&nbsp;</span>
2944
- <span class="cline-any cline-yes">50x</span>
3174
+ <span class="cline-any cline-yes">57x</span>
2945
3175
  <span class="cline-any cline-no">&nbsp;</span>
2946
3176
  <span class="cline-any cline-neutral">&nbsp;</span>
2947
3177
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2949,7 +3179,7 @@
2949
3179
  <span class="cline-any cline-neutral">&nbsp;</span>
2950
3180
  <span class="cline-any cline-neutral">&nbsp;</span>
2951
3181
  <span class="cline-any cline-neutral">&nbsp;</span>
2952
- <span class="cline-any cline-yes">50x</span>
3182
+ <span class="cline-any cline-yes">57x</span>
2953
3183
  <span class="cline-any cline-no">&nbsp;</span>
2954
3184
  <span class="cline-any cline-neutral">&nbsp;</span>
2955
3185
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2957,9 +3187,9 @@
2957
3187
  <span class="cline-any cline-neutral">&nbsp;</span>
2958
3188
  <span class="cline-any cline-neutral">&nbsp;</span>
2959
3189
  <span class="cline-any cline-neutral">&nbsp;</span>
2960
- <span class="cline-any cline-yes">50x</span>
3190
+ <span class="cline-any cline-yes">57x</span>
2961
3191
  <span class="cline-any cline-neutral">&nbsp;</span>
2962
- <span class="cline-any cline-yes">176x</span>
3192
+ <span class="cline-any cline-yes">206x</span>
2963
3193
  <span class="cline-any cline-no">&nbsp;</span>
2964
3194
  <span class="cline-any cline-neutral">&nbsp;</span>
2965
3195
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2968,7 +3198,7 @@
2968
3198
  <span class="cline-any cline-neutral">&nbsp;</span>
2969
3199
  <span class="cline-any cline-no">&nbsp;</span>
2970
3200
  <span class="cline-any cline-neutral">&nbsp;</span>
2971
- <span class="cline-any cline-yes">176x</span>
3201
+ <span class="cline-any cline-yes">206x</span>
2972
3202
  <span class="cline-any cline-no">&nbsp;</span>
2973
3203
  <span class="cline-any cline-neutral">&nbsp;</span>
2974
3204
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2978,7 +3208,7 @@
2978
3208
  <span class="cline-any cline-no">&nbsp;</span>
2979
3209
  <span class="cline-any cline-neutral">&nbsp;</span>
2980
3210
  <span class="cline-any cline-neutral">&nbsp;</span>
2981
- <span class="cline-any cline-yes">176x</span>
3211
+ <span class="cline-any cline-yes">206x</span>
2982
3212
  <span class="cline-any cline-neutral">&nbsp;</span>
2983
3213
  <span class="cline-any cline-neutral">&nbsp;</span>
2984
3214
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3022,8 +3252,9 @@
3022
3252
  <span class="cline-any cline-neutral">&nbsp;</span>
3023
3253
  <span class="cline-any cline-neutral">&nbsp;</span>
3024
3254
  <span class="cline-any cline-neutral">&nbsp;</span>
3025
- <span class="cline-any cline-yes">70x</span>
3026
- <span class="cline-any cline-yes">33x</span>
3255
+ <span class="cline-any cline-neutral">&nbsp;</span>
3256
+ <span class="cline-any cline-yes">74x</span>
3257
+ <span class="cline-any cline-yes">35x</span>
3027
3258
  <span class="cline-any cline-neutral">&nbsp;</span>
3028
3259
  <span class="cline-any cline-no">&nbsp;</span>
3029
3260
  <span class="cline-any cline-no">&nbsp;</span>
@@ -3049,7 +3280,7 @@
3049
3280
  <span class="cline-any cline-neutral">&nbsp;</span>
3050
3281
  <span class="cline-any cline-neutral">&nbsp;</span>
3051
3282
  <span class="cline-any cline-neutral">&nbsp;</span>
3052
- <span class="cline-any cline-yes">105x</span>
3283
+ <span class="cline-any cline-yes">114x</span>
3053
3284
  <span class="cline-any cline-yes">2x</span>
3054
3285
  <span class="cline-any cline-no">&nbsp;</span>
3055
3286
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3069,7 +3300,7 @@
3069
3300
  <span class="cline-any cline-neutral">&nbsp;</span>
3070
3301
  <span class="cline-any cline-neutral">&nbsp;</span>
3071
3302
  <span class="cline-any cline-neutral">&nbsp;</span>
3072
- <span class="cline-any cline-yes">105x</span>
3303
+ <span class="cline-any cline-yes">114x</span>
3073
3304
  <span class="cline-any cline-yes">22x</span>
3074
3305
  <span class="cline-any cline-neutral">&nbsp;</span>
3075
3306
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3077,23 +3308,45 @@
3077
3308
  <span class="cline-any cline-neutral">&nbsp;</span>
3078
3309
  <span class="cline-any cline-neutral">&nbsp;</span>
3079
3310
  <span class="cline-any cline-neutral">&nbsp;</span>
3080
- <span class="cline-any cline-yes">83x</span>
3081
- <span class="cline-any cline-yes">83x</span>
3311
+ <span class="cline-any cline-yes">92x</span>
3312
+ <span class="cline-any cline-yes">92x</span>
3082
3313
  <span class="cline-any cline-neutral">&nbsp;</span>
3083
- <span class="cline-any cline-yes">83x</span>
3084
- <span class="cline-any cline-yes">31x</span>
3085
- <span class="cline-any cline-yes">66x</span>
3314
+ <span class="cline-any cline-yes">92x</span>
3315
+ <span class="cline-any cline-yes">33x</span>
3316
+ <span class="cline-any cline-yes">70x</span>
3317
+ <span class="cline-any cline-neutral">&nbsp;</span>
3318
+ <span class="cline-any cline-neutral">&nbsp;</span>
3319
+ <span class="cline-any cline-neutral">&nbsp;</span>
3320
+ <span class="cline-any cline-neutral">&nbsp;</span>
3321
+ <span class="cline-any cline-yes">92x</span>
3322
+ <span class="cline-any cline-yes">92x</span>
3323
+ <span class="cline-any cline-yes">264x</span>
3324
+ <span class="cline-any cline-neutral">&nbsp;</span>
3325
+ <span class="cline-any cline-neutral">&nbsp;</span>
3326
+ <span class="cline-any cline-yes">264x</span>
3327
+ <span class="cline-any cline-yes">58x</span>
3328
+ <span class="cline-any cline-neutral">&nbsp;</span>
3329
+ <span class="cline-any cline-neutral">&nbsp;</span>
3330
+ <span class="cline-any cline-neutral">&nbsp;</span>
3331
+ <span class="cline-any cline-yes">58x</span>
3332
+ <span class="cline-any cline-yes">3x</span>
3333
+ <span class="cline-any cline-neutral">&nbsp;</span>
3334
+ <span class="cline-any cline-neutral">&nbsp;</span>
3335
+ <span class="cline-any cline-neutral">&nbsp;</span>
3336
+ <span class="cline-any cline-neutral">&nbsp;</span>
3337
+ <span class="cline-any cline-neutral">&nbsp;</span>
3338
+ <span class="cline-any cline-yes">55x</span>
3086
3339
  <span class="cline-any cline-neutral">&nbsp;</span>
3087
3340
  <span class="cline-any cline-neutral">&nbsp;</span>
3088
3341
  <span class="cline-any cline-neutral">&nbsp;</span>
3089
3342
  <span class="cline-any cline-neutral">&nbsp;</span>
3090
- <span class="cline-any cline-yes">83x</span>
3091
- <span class="cline-any cline-yes">83x</span>
3092
- <span class="cline-any cline-yes">227x</span>
3093
3343
  <span class="cline-any cline-neutral">&nbsp;</span>
3094
3344
  <span class="cline-any cline-neutral">&nbsp;</span>
3095
- <span class="cline-any cline-yes">227x</span>
3096
- <span class="cline-any cline-yes">227x</span>
3345
+ <span class="cline-any cline-neutral">&nbsp;</span>
3346
+ <span class="cline-any cline-neutral">&nbsp;</span>
3347
+ <span class="cline-any cline-neutral">&nbsp;</span>
3348
+ <span class="cline-any cline-yes">264x</span>
3349
+ <span class="cline-any cline-yes">264x</span>
3097
3350
  <span class="cline-any cline-neutral">&nbsp;</span>
3098
3351
  <span class="cline-any cline-neutral">&nbsp;</span>
3099
3352
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3107,26 +3360,26 @@
3107
3360
  <span class="cline-any cline-neutral">&nbsp;</span>
3108
3361
  <span class="cline-any cline-neutral">&nbsp;</span>
3109
3362
  <span class="cline-any cline-neutral">&nbsp;</span>
3110
- <span class="cline-any cline-yes">227x</span>
3111
- <span class="cline-any cline-yes">176x</span>
3112
- <span class="cline-any cline-yes">176x</span>
3363
+ <span class="cline-any cline-yes">264x</span>
3364
+ <span class="cline-any cline-yes">206x</span>
3365
+ <span class="cline-any cline-yes">206x</span>
3113
3366
  <span class="cline-any cline-neutral">&nbsp;</span>
3114
3367
  <span class="cline-any cline-neutral">&nbsp;</span>
3115
3368
  <span class="cline-any cline-neutral">&nbsp;</span>
3116
3369
  <span class="cline-any cline-neutral">&nbsp;</span>
3117
- <span class="cline-any cline-yes">176x</span>
3370
+ <span class="cline-any cline-yes">206x</span>
3118
3371
  <span class="cline-any cline-neutral">&nbsp;</span>
3119
3372
  <span class="cline-any cline-neutral">&nbsp;</span>
3120
3373
  <span class="cline-any cline-neutral">&nbsp;</span>
3121
3374
  <span class="cline-any cline-neutral">&nbsp;</span>
3122
- <span class="cline-any cline-yes">176x</span>
3375
+ <span class="cline-any cline-yes">206x</span>
3123
3376
  <span class="cline-any cline-neutral">&nbsp;</span>
3124
3377
  <span class="cline-any cline-neutral">&nbsp;</span>
3125
3378
  <span class="cline-any cline-neutral">&nbsp;</span>
3126
3379
  <span class="cline-any cline-neutral">&nbsp;</span>
3127
3380
  <span class="cline-any cline-neutral">&nbsp;</span>
3128
3381
  <span class="cline-any cline-neutral">&nbsp;</span>
3129
- <span class="cline-any cline-yes">227x</span>
3382
+ <span class="cline-any cline-yes">264x</span>
3130
3383
  <span class="cline-any cline-yes">2x</span>
3131
3384
  <span class="cline-any cline-neutral">&nbsp;</span>
3132
3385
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3135,7 +3388,7 @@
3135
3388
  <span class="cline-any cline-neutral">&nbsp;</span>
3136
3389
  <span class="cline-any cline-neutral">&nbsp;</span>
3137
3390
  <span class="cline-any cline-neutral">&nbsp;</span>
3138
- <span class="cline-any cline-yes">227x</span>
3391
+ <span class="cline-any cline-yes">264x</span>
3139
3392
  <span class="cline-any cline-neutral">&nbsp;</span>
3140
3393
  <span class="cline-any cline-neutral">&nbsp;</span>
3141
3394
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3146,7 +3399,7 @@
3146
3399
  <span class="cline-any cline-neutral">&nbsp;</span>
3147
3400
  <span class="cline-any cline-neutral">&nbsp;</span>
3148
3401
  <span class="cline-any cline-neutral">&nbsp;</span>
3149
- <span class="cline-any cline-yes">227x</span>
3402
+ <span class="cline-any cline-yes">264x</span>
3150
3403
  <span class="cline-any cline-yes">5x</span>
3151
3404
  <span class="cline-any cline-neutral">&nbsp;</span>
3152
3405
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3160,25 +3413,56 @@
3160
3413
  <span class="cline-any cline-neutral">&nbsp;</span>
3161
3414
  <span class="cline-any cline-neutral">&nbsp;</span>
3162
3415
  <span class="cline-any cline-neutral">&nbsp;</span>
3163
- <span class="cline-any cline-yes">83x</span>
3164
- <span class="cline-any cline-yes">31x</span>
3416
+ <span class="cline-any cline-yes">92x</span>
3417
+ <span class="cline-any cline-yes">33x</span>
3418
+ <span class="cline-any cline-neutral">&nbsp;</span>
3419
+ <span class="cline-any cline-yes">70x</span>
3420
+ <span class="cline-any cline-yes">29x</span>
3421
+ <span class="cline-any cline-yes">235x</span>
3422
+ <span class="cline-any cline-neutral">&nbsp;</span>
3423
+ <span class="cline-any cline-neutral">&nbsp;</span>
3424
+ <span class="cline-any cline-neutral">&nbsp;</span>
3425
+ <span class="cline-any cline-neutral">&nbsp;</span>
3426
+ <span class="cline-any cline-neutral">&nbsp;</span>
3427
+ <span class="cline-any cline-neutral">&nbsp;</span>
3428
+ <span class="cline-any cline-neutral">&nbsp;</span>
3429
+ <span class="cline-any cline-neutral">&nbsp;</span>
3430
+ <span class="cline-any cline-neutral">&nbsp;</span>
3431
+ <span class="cline-any cline-neutral">&nbsp;</span>
3432
+ <span class="cline-any cline-neutral">&nbsp;</span>
3433
+ <span class="cline-any cline-neutral">&nbsp;</span>
3434
+ <span class="cline-any cline-yes">70x</span>
3435
+ <span class="cline-any cline-yes">17x</span>
3436
+ <span class="cline-any cline-yes">35x</span>
3437
+ <span class="cline-any cline-yes">35x</span>
3438
+ <span class="cline-any cline-yes">1x</span>
3165
3439
  <span class="cline-any cline-neutral">&nbsp;</span>
3166
- <span class="cline-any cline-yes">66x</span>
3167
- <span class="cline-any cline-yes">25x</span>
3168
- <span class="cline-any cline-yes">175x</span>
3169
- <span class="cline-any cline-yes">175x</span>
3170
- <span class="cline-any cline-yes">175x</span>
3440
+ <span class="cline-any cline-neutral">&nbsp;</span>
3441
+ <span class="cline-any cline-neutral">&nbsp;</span>
3442
+ <span class="cline-any cline-neutral">&nbsp;</span>
3443
+ <span class="cline-any cline-yes">1x</span>
3444
+ <span class="cline-any cline-neutral">&nbsp;</span>
3445
+ <span class="cline-any cline-neutral">&nbsp;</span>
3446
+ <span class="cline-any cline-yes">34x</span>
3447
+ <span class="cline-any cline-yes">34x</span>
3171
3448
  <span class="cline-any cline-yes">2x</span>
3172
3449
  <span class="cline-any cline-neutral">&nbsp;</span>
3173
3450
  <span class="cline-any cline-neutral">&nbsp;</span>
3174
3451
  <span class="cline-any cline-neutral">&nbsp;</span>
3452
+ <span class="cline-any cline-yes">2x</span>
3453
+ <span class="cline-any cline-no">&nbsp;</span>
3175
3454
  <span class="cline-any cline-neutral">&nbsp;</span>
3176
3455
  <span class="cline-any cline-neutral">&nbsp;</span>
3177
- <span class="cline-any cline-yes">173x</span>
3178
3456
  <span class="cline-any cline-neutral">&nbsp;</span>
3179
3457
  <span class="cline-any cline-neutral">&nbsp;</span>
3458
+ <span class="cline-any cline-no">&nbsp;</span>
3180
3459
  <span class="cline-any cline-neutral">&nbsp;</span>
3181
3460
  <span class="cline-any cline-neutral">&nbsp;</span>
3461
+ <span class="cline-any cline-yes">34x</span>
3462
+ <span class="cline-any cline-yes">34x</span>
3463
+ <span class="cline-any cline-yes">34x</span>
3464
+ <span class="cline-any cline-yes">47x</span>
3465
+ <span class="cline-any cline-yes">47x</span>
3182
3466
  <span class="cline-any cline-neutral">&nbsp;</span>
3183
3467
  <span class="cline-any cline-neutral">&nbsp;</span>
3184
3468
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3186,35 +3470,58 @@
3186
3470
  <span class="cline-any cline-neutral">&nbsp;</span>
3187
3471
  <span class="cline-any cline-neutral">&nbsp;</span>
3188
3472
  <span class="cline-any cline-neutral">&nbsp;</span>
3473
+ <span class="cline-any cline-yes">47x</span>
3189
3474
  <span class="cline-any cline-neutral">&nbsp;</span>
3190
3475
  <span class="cline-any cline-neutral">&nbsp;</span>
3191
- <span class="cline-any cline-yes">66x</span>
3192
- <span class="cline-any cline-yes">15x</span>
3193
- <span class="cline-any cline-yes">23x</span>
3194
- <span class="cline-any cline-yes">23x</span>
3195
- <span class="cline-any cline-yes">23x</span>
3196
- <span class="cline-any cline-yes">1x</span>
3197
3476
  <span class="cline-any cline-neutral">&nbsp;</span>
3198
3477
  <span class="cline-any cline-neutral">&nbsp;</span>
3478
+ <span class="cline-any cline-yes">16x</span>
3479
+ <span class="cline-any cline-yes">16x</span>
3480
+ <span class="cline-any cline-yes">36x</span>
3481
+ <span class="cline-any cline-yes">36x</span>
3482
+ <span class="cline-any cline-no">&nbsp;</span>
3199
3483
  <span class="cline-any cline-neutral">&nbsp;</span>
3200
3484
  <span class="cline-any cline-neutral">&nbsp;</span>
3201
- <span class="cline-any cline-yes">22x</span>
3202
- <span class="cline-any cline-yes">22x</span>
3203
- <span class="cline-any cline-yes">29x</span>
3204
3485
  <span class="cline-any cline-neutral">&nbsp;</span>
3205
3486
  <span class="cline-any cline-neutral">&nbsp;</span>
3487
+ <span class="cline-any cline-no">&nbsp;</span>
3206
3488
  <span class="cline-any cline-neutral">&nbsp;</span>
3489
+ <span class="cline-any cline-yes">36x</span>
3207
3490
  <span class="cline-any cline-neutral">&nbsp;</span>
3208
3491
  <span class="cline-any cline-neutral">&nbsp;</span>
3209
3492
  <span class="cline-any cline-neutral">&nbsp;</span>
3210
3493
  <span class="cline-any cline-neutral">&nbsp;</span>
3494
+ <span class="cline-any cline-yes">36x</span>
3495
+ <span class="cline-any cline-yes">6x</span>
3496
+ <span class="cline-any cline-neutral">&nbsp;</span>
3497
+ <span class="cline-any cline-neutral">&nbsp;</span>
3498
+ <span class="cline-any cline-neutral">&nbsp;</span>
3499
+ <span class="cline-any cline-neutral">&nbsp;</span>
3500
+ <span class="cline-any cline-yes">6x</span>
3211
3501
  <span class="cline-any cline-neutral">&nbsp;</span>
3212
3502
  <span class="cline-any cline-neutral">&nbsp;</span>
3503
+ <span class="cline-any cline-yes">6x</span>
3504
+ <span class="cline-any cline-yes">6x</span>
3505
+ <span class="cline-any cline-neutral">&nbsp;</span>
3506
+ <span class="cline-any cline-no">&nbsp;</span>
3213
3507
  <span class="cline-any cline-neutral">&nbsp;</span>
3214
3508
  <span class="cline-any cline-neutral">&nbsp;</span>
3215
3509
  <span class="cline-any cline-neutral">&nbsp;</span>
3216
3510
  <span class="cline-any cline-neutral">&nbsp;</span>
3511
+ <span class="cline-any cline-no">&nbsp;</span>
3217
3512
  <span class="cline-any cline-neutral">&nbsp;</span>
3513
+ <span class="cline-any cline-yes">30x</span>
3514
+ <span class="cline-any cline-neutral">&nbsp;</span>
3515
+ <span class="cline-any cline-neutral">&nbsp;</span>
3516
+ <span class="cline-any cline-neutral">&nbsp;</span>
3517
+ <span class="cline-any cline-neutral">&nbsp;</span>
3518
+ <span class="cline-any cline-neutral">&nbsp;</span>
3519
+ <span class="cline-any cline-neutral">&nbsp;</span>
3520
+ <span class="cline-any cline-neutral">&nbsp;</span>
3521
+ <span class="cline-any cline-neutral">&nbsp;</span>
3522
+ <span class="cline-any cline-neutral">&nbsp;</span>
3523
+ <span class="cline-any cline-neutral">&nbsp;</span>
3524
+ <span class="cline-any cline-yes">31x</span>
3218
3525
  <span class="cline-any cline-neutral">&nbsp;</span>
3219
3526
  <span class="cline-any cline-neutral">&nbsp;</span>
3220
3527
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3223,25 +3530,32 @@
3223
3530
  <span class="cline-any cline-neutral">&nbsp;</span>
3224
3531
  <span class="cline-any cline-neutral">&nbsp;</span>
3225
3532
  <span class="cline-any cline-neutral">&nbsp;</span>
3226
- <span class="cline-any cline-yes">83x</span>
3227
3533
  <span class="cline-any cline-neutral">&nbsp;</span>
3228
- <span class="cline-any cline-yes">83x</span>
3229
3534
  <span class="cline-any cline-neutral">&nbsp;</span>
3230
- <span class="cline-any cline-yes">166x</span>
3231
- <span class="cline-any cline-yes">166x</span>
3232
3535
  <span class="cline-any cline-neutral">&nbsp;</span>
3233
3536
  <span class="cline-any cline-neutral">&nbsp;</span>
3234
3537
  <span class="cline-any cline-neutral">&nbsp;</span>
3235
3538
  <span class="cline-any cline-neutral">&nbsp;</span>
3236
3539
  <span class="cline-any cline-neutral">&nbsp;</span>
3540
+ <span class="cline-any cline-yes">92x</span>
3237
3541
  <span class="cline-any cline-neutral">&nbsp;</span>
3542
+ <span class="cline-any cline-yes">92x</span>
3238
3543
  <span class="cline-any cline-neutral">&nbsp;</span>
3544
+ <span class="cline-any cline-yes">184x</span>
3545
+ <span class="cline-any cline-yes">184x</span>
3239
3546
  <span class="cline-any cline-neutral">&nbsp;</span>
3240
3547
  <span class="cline-any cline-neutral">&nbsp;</span>
3241
3548
  <span class="cline-any cline-neutral">&nbsp;</span>
3242
3549
  <span class="cline-any cline-neutral">&nbsp;</span>
3243
3550
  <span class="cline-any cline-neutral">&nbsp;</span>
3244
- <span class="cline-any cline-yes">166x</span>
3551
+ <span class="cline-any cline-neutral">&nbsp;</span>
3552
+ <span class="cline-any cline-neutral">&nbsp;</span>
3553
+ <span class="cline-any cline-neutral">&nbsp;</span>
3554
+ <span class="cline-any cline-neutral">&nbsp;</span>
3555
+ <span class="cline-any cline-neutral">&nbsp;</span>
3556
+ <span class="cline-any cline-neutral">&nbsp;</span>
3557
+ <span class="cline-any cline-neutral">&nbsp;</span>
3558
+ <span class="cline-any cline-yes">184x</span>
3245
3559
  <span class="cline-any cline-yes">14x</span>
3246
3560
  <span class="cline-any cline-neutral">&nbsp;</span>
3247
3561
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -3287,12 +3601,18 @@
3287
3601
  <span class="cline-any cline-neutral">&nbsp;</span>
3288
3602
  <span class="cline-any cline-neutral">&nbsp;</span>
3289
3603
  <span class="cline-any cline-neutral">&nbsp;</span>
3290
- <span class="cline-any cline-yes">63x</span>
3604
+ <span class="cline-any cline-yes">70x</span>
3291
3605
  <span class="cline-any cline-neutral">&nbsp;</span>
3292
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { Schema } from "@featurevisor/types";
3606
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { Schema, SchemaType } from "@featurevisor/types";
3293
3607
  import { z } from "zod";
3294
3608
  &nbsp;
3295
3609
  import { ProjectConfig } from "../config";
3610
+ import {
3611
+ isMutationKey,
3612
+ validateMutationKey,
3613
+ parsePathMapKey,
3614
+ resolveSchemaAtPath,
3615
+ } from "./mutationNotation";
3296
3616
  import {
3297
3617
  valueZodSchema,
3298
3618
  propertyTypeEnum,
@@ -3541,27 +3861,42 @@ function valueDeepEqual(a: unknown, b: unknown): boolean {
3541
3861
  return false;
3542
3862
  }
3543
3863
  &nbsp;
3864
+ type SchemaLikeForRequired = {
3865
+ type?: string;
3866
+ properties?: Record&lt;string, unknown&gt;;
3867
+ required?: string[];
3868
+ items?: unknown;
3869
+ schema?: string;
3870
+ oneOf?: unknown[];
3871
+ };
3872
+ &nbsp;
3544
3873
  /**
3545
3874
  * Recursively validates that every `required` array (at this level and in nested
3546
3875
  * object/array schemas) only contains keys that exist in the same level's `properties`.
3547
3876
  * Adds Zod issues with the correct path for invalid required field names.
3877
+ * When schemasByKey is provided, resolves schema references (schema: key) so that
3878
+ * referenced and nested schemas are validated too.
3548
3879
  */
3549
3880
  function refineRequiredKeysInSchema(
3550
- schema: {
3551
- type?: string;
3552
- properties?: Record&lt;string, unknown&gt;;
3553
- required?: string[];
3554
- items?: unknown;
3555
- },
3881
+ schema: SchemaLikeForRequired,
3556
3882
  pathPrefix: (string | number)[],
3557
3883
  ctx: z.RefinementCtx,
3884
+ schemasByKey?: Record&lt;string, Schema&gt;,
3558
3885
  ): void {
3559
3886
  <span class="missing-if-branch" title="if path not taken" >I</span>if (!schema || typeof schema !== "object") <span class="cstat-no" title="statement not covered" >return;</span>
3560
3887
  &nbsp;
3561
- const effectiveType = schema.type;
3562
- const properties = schema.properties;
3563
- const required = schema.required;
3564
- const items = schema.items;
3888
+ // Resolve schema reference so we validate the referenced schema (and can recurse into it)
3889
+ let current: SchemaLikeForRequired = schema;
3890
+ if (schema.schema &amp;&amp; schemasByKey?.[schema.schema]) {
3891
+ current = schemasByKey[schema.schema] as SchemaLikeForRequired;
3892
+ refineRequiredKeysInSchema(current, pathPrefix, ctx, schemasByKey);
3893
+ return;
3894
+ }
3895
+ &nbsp;
3896
+ const effectiveType = current.type;
3897
+ const properties = current.properties;
3898
+ const required = current.required;
3899
+ const items = current.items;
3565
3900
  &nbsp;
3566
3901
  if (
3567
3902
  effectiveType === "object" &amp;&amp;
@@ -3587,9 +3922,10 @@ function refineRequiredKeysInSchema(
3587
3922
  const nested = properties[key];
3588
3923
  if (nested &amp;&amp; typeof nested === "object") {
3589
3924
  refineRequiredKeysInSchema(
3590
- nested as Parameters&lt;typeof refineRequiredKeysInSchema&gt;[0],
3925
+ nested as SchemaLikeForRequired,
3591
3926
  [...pathPrefix, "properties", key],
3592
3927
  ctx,
3928
+ schemasByKey,
3593
3929
  );
3594
3930
  }
3595
3931
  }
@@ -3597,20 +3933,22 @@ function refineRequiredKeysInSchema(
3597
3933
  &nbsp;
3598
3934
  if (items &amp;&amp; typeof items === "object" &amp;&amp; !Array.isArray(items)) {
3599
3935
  refineRequiredKeysInSchema(
3600
- items as Parameters&lt;typeof refineRequiredKeysInSchema&gt;[0],
3936
+ items as SchemaLikeForRequired,
3601
3937
  [...pathPrefix, "items"],
3602
3938
  ctx,
3939
+ schemasByKey,
3603
3940
  );
3604
3941
  }
3605
3942
  &nbsp;
3606
- const oneOf = (schema as { oneOf?: unknown[] }).oneOf;
3943
+ const oneOf = (current as { oneOf?: unknown[] }).oneOf;
3607
3944
  if (oneOf &amp;&amp; Array.isArray(oneOf)) {
3608
3945
  oneOf.forEach((branch, i) =&gt; {
3609
3946
  if (branch &amp;&amp; typeof branch === "object") {
3610
3947
  refineRequiredKeysInSchema(
3611
- branch as Parameters&lt;typeof refineRequiredKeysInSchema&gt;[0],
3948
+ branch as SchemaLikeForRequired,
3612
3949
  [...pathPrefix, "oneOf", i],
3613
3950
  ctx,
3951
+ schemasByKey,
3614
3952
  );
3615
3953
  }
3616
3954
  });
@@ -3795,15 +4133,21 @@ function refineVariableValueObject(
3795
4133
  }
3796
4134
  }
3797
4135
  &nbsp;
4136
+ /** Schema or variable schema (e.g. type "json", defaultValue); used for value validation. */
4137
+ type VariableSchemaLike =
4138
+ | (Omit&lt;Schema, "type"&gt; &amp; { type?: SchemaType | "json" })
4139
+ | null
4140
+ | undefined;
4141
+ &nbsp;
3798
4142
  function superRefineVariableValue(
3799
4143
  projectConfig: ProjectConfig,
3800
- variableSchema,
3801
- variableValue,
3802
- path,
3803
- ctx,
4144
+ variableSchema: VariableSchemaLike,
4145
+ variableValue: unknown,
4146
+ path: (string | number)[],
4147
+ ctx: z.RefinementCtx,
3804
4148
  variableKey?: string,
3805
4149
  schemasByKey?: Record&lt;string, Schema&gt;,
3806
- ) {
4150
+ ): void {
3807
4151
  const label = getVariableLabel(variableSchema, variableKey, path);
3808
4152
  &nbsp;
3809
4153
  <span class="missing-if-branch" title="if path not taken" >I</span>if (!variableSchema) {
@@ -4145,6 +4489,66 @@ function superRefineVariableValue(
4145
4489
  });
4146
4490
  }
4147
4491
  &nbsp;
4492
+ /**
4493
+ * Validate a single variable entry (key + value) in variables map.
4494
+ * Key may be a root variable name or mutation notation (e.g. "config.width", "items[0].name").
4495
+ */
4496
+ function refineVariableEntry(
4497
+ projectConfig: ProjectConfig,
4498
+ variableSchemaByKey: Record&lt;string, unknown&gt;,
4499
+ variableKey: string,
4500
+ variableValue: unknown,
4501
+ path: (string | number)[],
4502
+ ctx: z.RefinementCtx,
4503
+ schemasByKey?: Record&lt;string, Schema&gt;,
4504
+ ): void {
4505
+ if (isMutationKey(variableKey)) {
4506
+ const validation = validateMutationKey(
4507
+ variableKey,
4508
+ variableSchemaByKey as Record&lt;string, Schema&gt;,
4509
+ schemasByKey,
4510
+ );
4511
+ if (!validation.valid &amp;&amp; validation.error) {
4512
+ ctx.addIssue({
4513
+ code: z.ZodIssueCode.custom,
4514
+ message: validation.error,
4515
+ path,
4516
+ });
4517
+ return;
4518
+ }
4519
+ if (validation.valueSchema) {
4520
+ superRefineVariableValue(
4521
+ projectConfig,
4522
+ validation.valueSchema,
4523
+ variableValue,
4524
+ path,
4525
+ ctx,
4526
+ variableKey,
4527
+ schemasByKey,
4528
+ );
4529
+ }
4530
+ return;
4531
+ }
4532
+ const variableSchema = variableSchemaByKey[variableKey];
4533
+ if (!variableSchema) {
4534
+ ctx.addIssue({
4535
+ code: z.ZodIssueCode.custom,
4536
+ message: `Variable "${variableKey}" is not defined in \`variablesSchema\`.`,
4537
+ path,
4538
+ });
4539
+ return;
4540
+ }
4541
+ superRefineVariableValue(
4542
+ projectConfig,
4543
+ variableSchema as Parameters&lt;typeof superRefineVariableValue&gt;[1],
4544
+ variableValue,
4545
+ path,
4546
+ ctx,
4547
+ variableKey,
4548
+ schemasByKey,
4549
+ );
4550
+ }
4551
+ &nbsp;
4148
4552
  function refineForce({
4149
4553
  ctx,
4150
4554
  parsedFeature, // eslint-disable-line
@@ -4170,24 +4574,15 @@ function refineForce({
4170
4574
  // force[n].variables[key]
4171
4575
  if (f.variables) {
4172
4576
  Object.keys(f.variables).forEach((variableKey) =&gt; {
4173
- const variableSchema = variableSchemaByKey[variableKey];
4174
- if (!variableSchema) {
4175
- ctx.addIssue({
4176
- code: z.ZodIssueCode.custom,
4177
- message: `Variable "${variableKey}" is not defined in \`variablesSchema\`.`,
4178
- path: pathPrefix.concat([fN, "variables", variableKey]),
4179
- });
4180
- } else {
4181
- superRefineVariableValue(
4182
- projectConfig,
4183
- variableSchema,
4184
- f.variables[variableKey],
4185
- pathPrefix.concat([fN, "variables", variableKey]),
4186
- ctx,
4187
- variableKey,
4188
- schemasByKey,
4189
- );
4190
- }
4577
+ refineVariableEntry(
4578
+ projectConfig,
4579
+ variableSchemaByKey,
4580
+ variableKey,
4581
+ f.variables[variableKey],
4582
+ pathPrefix.concat([fN, "variables", variableKey]),
4583
+ ctx,
4584
+ schemasByKey,
4585
+ );
4191
4586
  });
4192
4587
  }
4193
4588
  });
@@ -4207,24 +4602,15 @@ function refineRules({
4207
4602
  // rules[n].variables[key]
4208
4603
  if (rule.variables) {
4209
4604
  Object.keys(rule.variables).forEach((variableKey) =&gt; {
4210
- const variableSchema = variableSchemaByKey[variableKey];
4211
- if (!variableSchema) {
4212
- ctx.addIssue({
4213
- code: z.ZodIssueCode.custom,
4214
- message: `Variable "${variableKey}" is not defined in \`variablesSchema\`.`,
4215
- path: pathPrefix.concat([ruleN, "variables", variableKey]),
4216
- });
4217
- } else {
4218
- superRefineVariableValue(
4219
- projectConfig,
4220
- variableSchema,
4221
- rule.variables[variableKey],
4222
- pathPrefix.concat([ruleN, "variables", variableKey]),
4223
- ctx,
4224
- variableKey,
4225
- schemasByKey,
4226
- );
4227
- }
4605
+ refineVariableEntry(
4606
+ projectConfig,
4607
+ variableSchemaByKey,
4608
+ variableKey,
4609
+ rule.variables[variableKey],
4610
+ pathPrefix.concat([ruleN, "variables", variableKey]),
4611
+ ctx,
4612
+ schemasByKey,
4613
+ );
4228
4614
  });
4229
4615
  }
4230
4616
  &nbsp;
@@ -4305,6 +4691,7 @@ export function getFeatureZodSchema(
4305
4691
  ) {
4306
4692
  const schemaZodSchema = getSchemaZodSchema(availableSchemaKeys);
4307
4693
  const variableValueZodSchema = valueZodSchema;
4694
+ const variableValueOrNullZodSchema = z.union([valueZodSchema, z.null()]);
4308
4695
  &nbsp;
4309
4696
  const variationValueZodSchema = z.string().min(1);
4310
4697
  &nbsp;
@@ -4352,7 +4739,7 @@ export function getFeatureZodSchema(
4352
4739
  &nbsp;
4353
4740
  enabled: z.boolean().optional(),
4354
4741
  variation: variationValueZodSchema.optional(),
4355
- variables: z.record(variableValueZodSchema).optional(),
4742
+ variables: z.record(variableValueOrNullZodSchema).optional(),
4356
4743
  variationWeights: z.record(z.number().min(0).max(100)).optional(),
4357
4744
  })
4358
4745
  .strict(),
@@ -4400,7 +4787,7 @@ export function getFeatureZodSchema(
4400
4787
  segments: groupSegmentsZodSchema,
4401
4788
  enabled: z.boolean().optional(),
4402
4789
  variation: variationValueZodSchema.optional(),
4403
- variables: z.record(variableValueZodSchema).optional(),
4790
+ variables: z.record(variableValueOrNullZodSchema).optional(),
4404
4791
  })
4405
4792
  .strict(),
4406
4793
  z
@@ -4408,7 +4795,7 @@ export function getFeatureZodSchema(
4408
4795
  conditions: conditionsZodSchema,
4409
4796
  enabled: z.boolean().optional(),
4410
4797
  variation: variationValueZodSchema.optional(),
4411
- variables: z.record(variableValueZodSchema).optional(),
4798
+ variables: z.record(variableValueOrNullZodSchema).optional(),
4412
4799
  })
4413
4800
  .strict(),
4414
4801
  ]),
@@ -4590,11 +4977,12 @@ export function getFeatureZodSchema(
4590
4977
  });
4591
4978
  <span class="cstat-no" title="statement not covered" > return;</span>
4592
4979
  }
4593
- // Validate required ⊆ properties at this level and in all nested object schemas
4980
+ // Validate required ⊆ properties at this level and in all nested object schemas (resolve refs when schemasByKey provided)
4594
4981
  refineRequiredKeysInSchema(
4595
- variableSchema as Parameters&lt;typeof refineRequiredKeysInSchema&gt;[0],
4982
+ variableSchema as SchemaLikeForRequired,
4596
4983
  [],
4597
4984
  ctx,
4985
+ schemasByKey,
4598
4986
  );
4599
4987
  }),
4600
4988
  )
@@ -4609,7 +4997,7 @@ export function getFeatureZodSchema(
4609
4997
  description: z.string().optional(),
4610
4998
  value: variationValueZodSchema,
4611
4999
  weight: z.number().min(0).max(100),
4612
- variables: z.record(variableValueZodSchema).optional(),
5000
+ variables: z.record(variableValueOrNullZodSchema).optional(),
4613
5001
  variableOverrides: z
4614
5002
  .record(
4615
5003
  z.array(
@@ -4703,6 +5091,28 @@ export function getFeatureZodSchema(
4703
5091
  const variableKeys = Object.keys(variableSchemaByKey);
4704
5092
  variableKeys.forEach((variableKey) =&gt; {
4705
5093
  const variableSchema = variableSchemaByKey[variableKey];
5094
+ &nbsp;
5095
+ // When variable references a schema by name, ensure it resolves and validate the referenced schema
5096
+ if ("schema" in variableSchema &amp;&amp; variableSchema.schema) {
5097
+ const resolvedSchema = resolveVariableSchema(
5098
+ variableSchema as Parameters&lt;typeof resolveVariableSchema&gt;[0],
5099
+ schemasByKey,
5100
+ );
5101
+ if (!resolvedSchema) {
5102
+ ctx.addIssue({
5103
+ code: z.ZodIssueCode.custom,
5104
+ message: `Schema "${variableSchema.schema}" could not be loaded for variable "${variableKey}".`,
5105
+ path: ["variablesSchema", variableKey],
5106
+ });
5107
+ } else {
5108
+ refineRequiredKeysInSchema(
5109
+ resolvedSchema as SchemaLikeForRequired,
5110
+ ["variablesSchema", variableKey],
5111
+ ctx,
5112
+ schemasByKey,
5113
+ );
5114
+ }
5115
+ }
4706
5116
  &nbsp;
4707
5117
  // When type and enum are both present, all enum values must match the type
4708
5118
  const effectiveSchema = resolveVariableSchema(variableSchema, schemasByKey);
@@ -4778,32 +5188,21 @@ export function getFeatureZodSchema(
4778
5188
  // variations[n].variables[key]
4779
5189
  if (variation.variables) {
4780
5190
  for (const variableKey of Object.keys(variation.variables)) {
4781
- const variableValue = variation.variables[variableKey];
4782
- const variableSchema = variableSchemaByKey[variableKey];
4783
- if (!variableSchema) {
4784
- ctx.addIssue({
4785
- code: z.ZodIssueCode.custom,
4786
- message: `Variable "${variableKey}" is not defined in \`variablesSchema\`.`,
4787
- path: ["variations", variationN, "variables", variableKey],
4788
- });
4789
- } else {
4790
- superRefineVariableValue(
4791
- projectConfig,
4792
- variableSchema,
4793
- variableValue,
4794
- ["variations", variationN, "variables", variableKey],
4795
- ctx,
4796
- variableKey,
4797
- schemasByKey,
4798
- );
4799
- }
5191
+ refineVariableEntry(
5192
+ projectConfig,
5193
+ variableSchemaByKey,
5194
+ variableKey,
5195
+ variation.variables[variableKey],
5196
+ ["variations", variationN, "variables", variableKey],
5197
+ ctx,
5198
+ schemasByKey,
5199
+ );
4800
5200
  }
4801
5201
  }
4802
5202
  &nbsp;
4803
- // variations[n].variableOverrides[key][].value (validated even when variation.variables is absent)
5203
+ // variations[n].variableOverrides[key][].value (path-map or full value)
4804
5204
  if (variation.variableOverrides) {
4805
5205
  for (const variableKey of Object.keys(variation.variableOverrides)) {
4806
- const overrides = variation.variableOverrides[variableKey];
4807
5206
  const variableSchema = variableSchemaByKey[variableKey];
4808
5207
  if (!variableSchema) {
4809
5208
  ctx.addIssue({
@@ -4811,26 +5210,98 @@ export function getFeatureZodSchema(
4811
5210
  message: `Variable "${variableKey}" is not defined in \`variablesSchema\`.`,
4812
5211
  path: ["variations", variationN, "variableOverrides", variableKey],
4813
5212
  });
4814
- } else if (Array.isArray(overrides)) {
4815
- overrides.forEach((override, overrideN) =&gt; {
5213
+ continue;
5214
+ }
5215
+ // When variable references a schema by name, ensure it can be resolved
5216
+ const variableSchemaWithRef = variableSchema as { schema?: string };
5217
+ if (variableSchemaWithRef.schema) {
5218
+ const resolvedVarSchema = resolveVariableSchema(
5219
+ variableSchema as Parameters&lt;typeof resolveVariableSchema&gt;[0],
5220
+ schemasByKey,
5221
+ );
5222
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!resolvedVarSchema) {
5223
+ <span class="cstat-no" title="statement not covered" > ctx.addIssue({</span>
5224
+ code: z.ZodIssueCode.custom,
5225
+ message: `Schema "${variableSchemaWithRef.schema}" could not be loaded for variable "${variableKey}".`,
5226
+ path: ["variations", variationN, "variableOverrides", variableKey],
5227
+ });
5228
+ <span class="cstat-no" title="statement not covered" > continue;</span>
5229
+ }
5230
+ }
5231
+ const overrides = variation.variableOverrides[variableKey];
5232
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(overrides)) <span class="cstat-no" title="statement not covered" >continue;</span>
5233
+ overrides.forEach((override, overrideN) =&gt; {
5234
+ const overrideValue = override.value;
5235
+ const valuePath = [
5236
+ "variations",
5237
+ variationN,
5238
+ "variableOverrides",
5239
+ variableKey,
5240
+ overrideN,
5241
+ "value",
5242
+ ];
5243
+ if (
5244
+ typeof overrideValue === "object" &amp;&amp;
5245
+ overrideValue !== null &amp;&amp;
5246
+ !Array.isArray(overrideValue)
5247
+ ) {
5248
+ const pathMap = overrideValue as Record&lt;string, unknown&gt;;
5249
+ for (const pathKey of Object.keys(pathMap)) {
5250
+ const pathSegments = parsePathMapKey(pathKey);
5251
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!pathSegments || pathSegments.length === 0) {
5252
+ <span class="cstat-no" title="statement not covered" > ctx.addIssue({</span>
5253
+ code: z.ZodIssueCode.custom,
5254
+ message: `Invalid mutation path "${pathKey}" in variableOverride for "${variableKey}".`,
5255
+ path: [...valuePath, pathKey],
5256
+ });
5257
+ <span class="cstat-no" title="statement not covered" > continue;</span>
5258
+ }
5259
+ const atPathSchema = resolveSchemaAtPath(
5260
+ variableSchema as Schema,
5261
+ pathSegments,
5262
+ schemasByKey,
5263
+ );
5264
+ if (!atPathSchema) {
5265
+ const effectiveSchema = resolveVariableSchema(
5266
+ variableSchema as Parameters&lt;typeof resolveVariableSchema&gt;[0],
5267
+ schemasByKey,
5268
+ );
5269
+ const isFlatObject =
5270
+ effectiveSchema?.type === "object" &amp;&amp;
5271
+ (!effectiveSchema.properties ||
5272
+ <span class="branch-2 cbranch-no" title="branch not covered" > Object.keys(effectiveSchema.properties).length === 0)</span>;
5273
+ if (isFlatObject) {
5274
+ continue;
5275
+ }
5276
+ <span class="cstat-no" title="statement not covered" > ctx.addIssue({</span>
5277
+ code: z.ZodIssueCode.custom,
5278
+ message: `Path "${pathKey}" is invalid for variable "${variableKey}" (not in schema).`,
5279
+ path: [...valuePath, pathKey],
5280
+ });
5281
+ <span class="cstat-no" title="statement not covered" > continue;</span>
5282
+ }
5283
+ superRefineVariableValue(
5284
+ projectConfig,
5285
+ atPathSchema,
5286
+ pathMap[pathKey],
5287
+ [...valuePath, pathKey],
5288
+ ctx,
5289
+ pathKey,
5290
+ schemasByKey,
5291
+ );
5292
+ }
5293
+ } else {
4816
5294
  superRefineVariableValue(
4817
5295
  projectConfig,
4818
- variableSchema,
4819
- override.value,
4820
- [
4821
- "variations",
4822
- variationN,
4823
- "variableOverrides",
4824
- variableKey,
4825
- overrideN,
4826
- "value",
4827
- ],
5296
+ variableSchema as Parameters&lt;typeof superRefineVariableValue&gt;[1],
5297
+ overrideValue,
5298
+ valuePath,
4828
5299
  ctx,
4829
5300
  variableKey,
4830
5301
  schemasByKey,
4831
5302
  );
4832
- });
4833
- }
5303
+ }
5304
+ });
4834
5305
  }
4835
5306
  }
4836
5307
  });
@@ -4909,7 +5380,7 @@ export function getFeatureZodSchema(
4909
5380
  <div class='footer quiet pad2 space-top1 center small'>
4910
5381
  Code coverage generated by
4911
5382
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
4912
- at 2026-02-23T20:40:14.947Z
5383
+ at 2026-02-24T19:50:30.107Z
4913
5384
  </div>
4914
5385
  <script src="../prettify.js"></script>
4915
5386
  <script>