<?xml version="1.0" encoding="utf-8"?>
<ns1:informationTable xmlns:ns1="http://www.sec.gov/edgar/document/thirteenf/informationtable">
  <ns1:infoTable>
    <ns1:nameOfIssuer>AAON INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM PAR $0.004</ns1:titleOfClass>
    <ns1:cusip>000360206</ns1:cusip>
    <ns1:figi>BBG001S6CZK0</ns1:figi>
    <ns1:value>247777835</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3354242</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3338911</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>15331</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ADOBE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>00724F101</ns1:cusip>
    <ns1:figi>BBG001S5NCQ5</ns1:figi>
    <ns1:value>405688</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>680</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>680</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ALIGN TECHNOLOGY INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>016255101</ns1:cusip>
    <ns1:figi>BBG001SCF1B9</ns1:figi>
    <ns1:value>443606</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1619</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1619</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ALPHA TEKNOVA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>02080L102</ns1:cusip>
    <ns1:figi>BBG00201BVP4</ns1:figi>
    <ns1:value>923283</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>247529</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>247529</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ALPHABET INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CAP STK CL A</ns1:titleOfClass>
    <ns1:cusip>02079K305</ns1:cusip>
    <ns1:figi>BBG009S39JY5</ns1:figi>
    <ns1:value>803916</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>5755</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>5755</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ALPHABET INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CAP STK CL C</ns1:titleOfClass>
    <ns1:cusip>02079K107</ns1:cusip>
    <ns1:figi>BBG009S3NB21</ns1:figi>
    <ns1:value>430541</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3055</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3055</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ALTAIR ENGR INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>021369103</ns1:cusip>
    <ns1:figi>BBG001SR65P2</ns1:figi>
    <ns1:value>204039431</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2424711</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2400086</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>24625</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>AMGEN INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>031162100</ns1:cusip>
    <ns1:figi>BBG001S5NNL6</ns1:figi>
    <ns1:value>325463</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1130</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1130</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ANSYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>03662Q105</ns1:cusip>
    <ns1:figi>BBG001S926L8</ns1:figi>
    <ns1:value>1847059</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>5090</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>5090</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>APPLE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>037833100</ns1:cusip>
    <ns1:figi>BBG001S5N8V8</ns1:figi>
    <ns1:value>1099346</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>5710</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>5710</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>AXON ENTERPRISE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>05464C101</ns1:cusip>
    <ns1:figi>BBG001SB2HG5</ns1:figi>
    <ns1:value>136781860</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>529485</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>522985</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>6500</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>AZENTA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>114340102</ns1:cusip>
    <ns1:figi>BBG001S8F1B8</ns1:figi>
    <ns1:value>84114240</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1291284</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1288659</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>2625</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BALCHEM CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>057665200</ns1:cusip>
    <ns1:figi>BBG001S5P2R4</ns1:figi>
    <ns1:value>161127842</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1083212</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1070473</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>12739</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BENTLEY SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL B</ns1:titleOfClass>
    <ns1:cusip>08265T208</ns1:cusip>
    <ns1:figi>BBG001SBWGV7</ns1:figi>
    <ns1:value>330038</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>6325</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>6325</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BERKSHIRE HATHAWAY INC DEL</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL B NEW</ns1:titleOfClass>
    <ns1:cusip>084670702</ns1:cusip>
    <ns1:figi>BBG001S90346</ns1:figi>
    <ns1:value>388759</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1090</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1090</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BIOLIFE SOLUTIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM NEW</ns1:titleOfClass>
    <ns1:cusip>09062W204</ns1:cusip>
    <ns1:figi>BBG001SFGWZ7</ns1:figi>
    <ns1:value>1053764</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>64847</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>64847</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BIO-TECHNE CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>09073M104</ns1:cusip>
    <ns1:figi>BBG001S66C28</ns1:figi>
    <ns1:value>19378888</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>251152</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>237272</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>13880</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BLACKLINE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>09239B109</ns1:cusip>
    <ns1:figi>BBG0029KJVD8</ns1:figi>
    <ns1:value>88342297</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1414835</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1412035</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>2800</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BRIGHT HORIZONS FAM SOL IN D</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>109194100</ns1:cusip>
    <ns1:figi>BBG003LFWPT4</ns1:figi>
    <ns1:value>17666702</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>187465</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>176655</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>10810</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CASELLA WASTE SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>147448104</ns1:cusip>
    <ns1:figi>BBG001SB5S05</ns1:figi>
    <ns1:value>260628644</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3049715</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3009725</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>39990</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CCC INTELLIGENT SOLUTIONS HL</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>12510Q100</ns1:cusip>
    <ns1:figi>BBG00WNSJM58</ns1:figi>
    <ns1:value>11468762</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1006915</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>947710</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>59205</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CLEARWATER ANALYTICS HLDGS I</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>185123106</ns1:cusip>
    <ns1:figi>BBG012C765M3</ns1:figi>
    <ns1:value>128720131</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>6426367</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>6342672</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>83695</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>COGNEX CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>192422103</ns1:cusip>
    <ns1:figi>BBG001S5TC16</ns1:figi>
    <ns1:value>11045614</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>264629</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>248854</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>15775</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CONSTRUCTION PARTNERS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>21044C107</ns1:cusip>
    <ns1:figi>BBG00KK0CFZ7</ns1:figi>
    <ns1:value>197601777</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>4540482</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>4478319</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>62163</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>COPART INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>217204106</ns1:cusip>
    <ns1:figi>BBG001S7MTB1</ns1:figi>
    <ns1:value>1310897</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>26753</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>26753</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>COSTAR GROUP INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>22160N109</ns1:cusip>
    <ns1:figi>BBG001SD3DY9</ns1:figi>
    <ns1:value>1364158</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>15610</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>15610</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>COSTCO WHSL CORP NEW</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>22160K105</ns1:cusip>
    <ns1:figi>BBG001S9KRQ7</ns1:figi>
    <ns1:value>1415872</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2145</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2145</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CRYOPORT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM PAR $0.001</ns1:titleOfClass>
    <ns1:cusip>229050307</ns1:cusip>
    <ns1:figi>BBG001SLKBJ3</ns1:figi>
    <ns1:value>1095561</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>70727</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>70727</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>CSW INDUSTRIALS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>126402106</ns1:cusip>
    <ns1:figi>BBG007NLG4M2</ns1:figi>
    <ns1:value>82690310</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>398680</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>394160</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>4520</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>DANAHER CORPORATION</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>235851102</ns1:cusip>
    <ns1:figi>BBG001S5QGT0</ns1:figi>
    <ns1:value>246377</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1065</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1065</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>DEFINITIVE HEALTHCARE CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>CLASS A COM</ns1:titleOfClass>
    <ns1:cusip>24477E103</ns1:cusip>
    <ns1:figi>BBG01282ZKG1</ns1:figi>
    <ns1:value>54880102</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>5521137</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>5450822</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>70315</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>DESCARTES SYS GROUP INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>249906108</ns1:cusip>
    <ns1:figi>BBG001SBJY34</ns1:figi>
    <ns1:value>254380607</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3026179</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2991209</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>34970</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>DIGI INTL INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>253798102</ns1:cusip>
    <ns1:figi>BBG001S5Z4V4</ns1:figi>
    <ns1:value>93435160</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3593660</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3589530</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>4130</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>DOLBY LABORATORIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>25659T107</ns1:cusip>
    <ns1:figi>BBG001SDXGH8</ns1:figi>
    <ns1:value>234410</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2720</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2720</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>DOUGLAS DYNAMICS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>25960R105</ns1:cusip>
    <ns1:figi>BBG001T6QFV6</ns1:figi>
    <ns1:value>65055979</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2191913</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2189272</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>2641</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ESCO TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>296315104</ns1:cusip>
    <ns1:figi>BBG001S6MFD1</ns1:figi>
    <ns1:value>119715053</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1022943</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1018751</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>4192</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ESSENTIAL UTILS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>29670G102</ns1:cusip>
    <ns1:figi>BBG001S5VFD3</ns1:figi>
    <ns1:value>488799</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>13087</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>13087</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>EVI INDS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>26929N102</ns1:cusip>
    <ns1:figi>BBG001SDGWV6</ns1:figi>
    <ns1:value>14405083</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>607041</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>564236</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>42805</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>EXPONENT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>30214U102</ns1:cusip>
    <ns1:figi>BBG001S9CG99</ns1:figi>
    <ns1:value>215812566</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2451301</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2420747</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>30554</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>EXXON MOBIL CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>30231G102</ns1:cusip>
    <ns1:figi>BBG001S69V32</ns1:figi>
    <ns1:value>677764</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>6779</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>6779</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FACTSET RESH SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>303075105</ns1:cusip>
    <ns1:figi>BBG001S5XRL6</ns1:figi>
    <ns1:value>706988</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1482</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1482</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FAIR ISAAC CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>303250104</ns1:cusip>
    <ns1:figi>BBG001S8ZT61</ns1:figi>
    <ns1:value>35576802</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>30564</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>28769</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>1795</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FASTENAL CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>311900104</ns1:cusip>
    <ns1:figi>BBG001S5R1F7</ns1:figi>
    <ns1:value>1107243</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>17095</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>17095</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FEDERAL SIGNAL CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>313855108</ns1:cusip>
    <ns1:figi>BBG001S5RD98</ns1:figi>
    <ns1:value>103615419</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1350214</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1347855</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>2359</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FIRSTSERVICE CORP NEW</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>33767E202</ns1:cusip>
    <ns1:figi>BBG0093LLBP5</ns1:figi>
    <ns1:value>221598662</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1367133</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1346695</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>20438</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FIVE9 INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>338307101</ns1:cusip>
    <ns1:figi>BBG001V0P7K7</ns1:figi>
    <ns1:value>10828767</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>137613</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>128498</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>9115</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FORTINET INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>34959E109</ns1:cusip>
    <ns1:figi>BBG001S77BL6</ns1:figi>
    <ns1:value>920033</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>15719</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>15719</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>FOX FACTORY HLDG CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>35138V102</ns1:cusip>
    <ns1:figi>BBG004T7VS71</ns1:figi>
    <ns1:value>76551944</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1134439</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1132344</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>2095</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GARMIN LTD</ns1:nameOfIssuer>
    <ns1:titleOfClass>SHS</ns1:titleOfClass>
    <ns1:cusip>H2906T109</ns1:cusip>
    <ns1:figi>BBG001SG0H12</ns1:figi>
    <ns1:value>375337</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2920</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2920</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GARTNER INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>366651107</ns1:cusip>
    <ns1:figi>BBG001S5SD60</ns1:figi>
    <ns1:value>21720495</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>48149</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>45534</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>2615</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GENERAC HLDGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>368736104</ns1:cusip>
    <ns1:figi>BBG001T5VGH6</ns1:figi>
    <ns1:value>10617324</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>82152</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>76877</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>5275</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GRACO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>384109104</ns1:cusip>
    <ns1:figi>BBG001S5RK56</ns1:figi>
    <ns1:value>29713044</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>342474</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>322709</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>19765</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>GUIDEWIRE SOFTWARE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>40171V100</ns1:cusip>
    <ns1:figi>BBG001TWHGX5</ns1:figi>
    <ns1:value>20646724</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>189350</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>178345</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>11005</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HEICO CORP NEW</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>422806208</ns1:cusip>
    <ns1:figi>BBG001S96YM2</ns1:figi>
    <ns1:value>24851934</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>174473</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>164438</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>10035</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HELIOS TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>42328H109</ns1:cusip>
    <ns1:figi>BBG001S99DF3</ns1:figi>
    <ns1:value>91051838</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2007758</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2003905</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>3853</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HENRY JACK &amp; ASSOC INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>426281101</ns1:cusip>
    <ns1:figi>BBG001S5SHB5</ns1:figi>
    <ns1:value>24529475</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>150110</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>141410</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>8700</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HILLMAN SOLUTIONS CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>431636109</ns1:cusip>
    <ns1:figi>BBG00YC6W7C4</ns1:figi>
    <ns1:value>84555104</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>9180793</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>9066863</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>113930</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>HOME DEPOT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>437076102</ns1:cusip>
    <ns1:figi>BBG001S5RTW7</ns1:figi>
    <ns1:value>417593</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1205</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1205</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>I3 VERTICALS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>46571Y107</ns1:cusip>
    <ns1:figi>BBG00L32N3P6</ns1:figi>
    <ns1:value>1473051</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>69582</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>69582</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>IDEXX LABS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>45168D104</ns1:cusip>
    <ns1:figi>BBG001S5S4Y9</ns1:figi>
    <ns1:value>956906</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1724</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1724</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ILLINOIS TOOL WKS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>452308109</ns1:cusip>
    <ns1:figi>BBG001S5SDX0</ns1:figi>
    <ns1:value>309089</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1180</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1180</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>INTUIT</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>461202103</ns1:cusip>
    <ns1:figi>BBG001S6TWR2</ns1:figi>
    <ns1:value>850041</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1360</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1360</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>IRADIMED CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>46266A109</ns1:cusip>
    <ns1:figi>BBG006NM92Y1</ns1:figi>
    <ns1:value>749077</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>15780</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>15780</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>JOHN BEAN TECHNOLOGIES CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>477839104</ns1:cusip>
    <ns1:figi>BBG001SQLKR2</ns1:figi>
    <ns1:value>91521989</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>920281</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>911506</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>8775</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>JOHNSON &amp; JOHNSON</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>478160104</ns1:cusip>
    <ns1:figi>BBG001S5SHQ9</ns1:figi>
    <ns1:value>500001</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3190</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3190</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>JPMORGAN CHASE &amp; CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>46625H100</ns1:cusip>
    <ns1:figi>BBG001S8CRC3</ns1:figi>
    <ns1:value>351427</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2066</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2066</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>LCI INDS</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>50189K103</ns1:cusip>
    <ns1:figi>BBG001S8G4D9</ns1:figi>
    <ns1:value>13214132</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>105116</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>98396</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>6720</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>LEMAITRE VASCULAR INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>525558201</ns1:cusip>
    <ns1:figi>BBG001SK6CX3</ns1:figi>
    <ns1:value>109431662</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1927971</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1924132</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>3839</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>LINDE PLC</ns1:nameOfIssuer>
    <ns1:titleOfClass>SHS</ns1:titleOfClass>
    <ns1:cusip>G54950103</ns1:cusip>
    <ns1:figi>BBG01FND0CH6</ns1:figi>
    <ns1:value>979543</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2385</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2385</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MARKEL GROUP INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>570535104</ns1:cusip>
    <ns1:figi>BBG001S9ZK95</ns1:figi>
    <ns1:value>717049</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>505</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>505</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MASTERCARD INCORPORATED</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>57636Q104</ns1:cusip>
    <ns1:figi>BBG001SKNNS6</ns1:figi>
    <ns1:value>471294</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1105</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1105</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MERCK &amp; CO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>58933Y105</ns1:cusip>
    <ns1:figi>BBG001S5TC52</ns1:figi>
    <ns1:value>272550</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2500</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2500</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MERCURY SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>589378108</ns1:cusip>
    <ns1:figi>BBG001SBFLT8</ns1:figi>
    <ns1:value>89613286</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2450459</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2424964</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>25495</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MERIT MED SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>589889104</ns1:cusip>
    <ns1:figi>BBG001S6KLT3</ns1:figi>
    <ns1:value>163461210</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2151938</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2122501</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>29437</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MESA LABS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>59064R109</ns1:cusip>
    <ns1:figi>BBG001S5T762</ns1:figi>
    <ns1:value>60605605</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>578463</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>577789</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>674</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>METTLER TOLEDO INTERNATIONAL</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>592688105</ns1:cusip>
    <ns1:figi>BBG001SB87G1</ns1:figi>
    <ns1:value>380869</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>314</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>314</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MICROSOFT CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>594918104</ns1:cusip>
    <ns1:figi>BBG001S5TD05</ns1:figi>
    <ns1:value>1165348</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3099</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3099</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MODEL N INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>607525102</ns1:cusip>
    <ns1:figi>BBG001SQGHS4</ns1:figi>
    <ns1:value>103004395</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3824894</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3820514</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>4380</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MONTROSE ENVIRONMENTAL GROUP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>615111101</ns1:cusip>
    <ns1:figi>BBG005Q29V07</ns1:figi>
    <ns1:value>1326969</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>41300</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>41300</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MSA SAFETY INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>553498106</ns1:cusip>
    <ns1:figi>BBG001S5TCN2</ns1:figi>
    <ns1:value>9944087</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>58900</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>55435</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>3465</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NATIONAL RESH CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM NEW</ns1:titleOfClass>
    <ns1:cusip>637372202</ns1:cusip>
    <ns1:figi>BBG004K1F9R1</ns1:figi>
    <ns1:value>30888675</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>780806</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>779314</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>1492</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NEOGEN CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>640491106</ns1:cusip>
    <ns1:figi>BBG001S67B47</ns1:figi>
    <ns1:value>137101937</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>6817600</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>6743528</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>74072</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NIKE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL B</ns1:titleOfClass>
    <ns1:cusip>654106103</ns1:cusip>
    <ns1:figi>BBG001S6NTK2</ns1:figi>
    <ns1:value>300196</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2765</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2765</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NOVANTA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>67000B104</ns1:cusip>
    <ns1:figi>BBG001S6MRJ9</ns1:figi>
    <ns1:value>216658791</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1286496</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1270321</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>16175</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NV5 GLOBAL INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>62945V109</ns1:cusip>
    <ns1:figi>BBG005BT61P6</ns1:figi>
    <ns1:value>1738250</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>15643</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>15643</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>OLO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>68134L109</ns1:cusip>
    <ns1:figi>BBG00ZCX7044</ns1:figi>
    <ns1:value>1246989</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>218005</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>218005</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>OMEGA FLEX INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>682095104</ns1:cusip>
    <ns1:figi>BBG001SNLHY8</ns1:figi>
    <ns1:value>21015980</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>298057</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>297855</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>202</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ORTHOPEDIATRICS CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>68752L100</ns1:cusip>
    <ns1:figi>BBG00HFFRW48</ns1:figi>
    <ns1:value>1474426</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>45353</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>45353</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PALOMAR HLDGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>69753M105</ns1:cusip>
    <ns1:figi>BBG00NLMRYV9</ns1:figi>
    <ns1:value>1506103</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>27137</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>27137</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PAYCOR HCM INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>70435P102</ns1:cusip>
    <ns1:figi>BBG010FNXN77</ns1:figi>
    <ns1:value>103483482</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>4793121</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>4741711</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>51410</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PEPSICO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>713448108</ns1:cusip>
    <ns1:figi>BBG001S695T1</ns1:figi>
    <ns1:value>246268</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1450</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1450</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PHREESIA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>71944F106</ns1:cusip>
    <ns1:figi>BBG001TG2W25</ns1:figi>
    <ns1:value>1790305</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>77335</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>77335</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PLANET LABS PBC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>72703X106</ns1:cusip>
    <ns1:figi>BBG00ZCV3Q27</ns1:figi>
    <ns1:value>855855</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>346500</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>346500</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>POOL CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>73278L105</ns1:cusip>
    <ns1:figi>BBG001S5VBK4</ns1:figi>
    <ns1:value>30596208</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>76738</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>72313</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>4425</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PROCORE TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>74275K108</ns1:cusip>
    <ns1:figi>BBG0026ZJ313</ns1:figi>
    <ns1:value>216312</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3125</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3125</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>PROS HOLDINGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>74346Y103</ns1:cusip>
    <ns1:figi>BBG001ST38G5</ns1:figi>
    <ns1:value>126069207</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3250044</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3236994</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>13050</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>Q2 HLDGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>74736L109</ns1:cusip>
    <ns1:figi>BBG005ZVK9Q1</ns1:figi>
    <ns1:value>95650202</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2203414</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2178664</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>24750</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>RBC BEARINGS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>75524B104</ns1:cusip>
    <ns1:figi>BBG001SNYTV1</ns1:figi>
    <ns1:value>198154385</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>695547</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>685932</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>9615</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>REPLIGEN CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>759916109</ns1:cusip>
    <ns1:figi>BBG001S5VNT9</ns1:figi>
    <ns1:value>127610892</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>709738</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>699853</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>9885</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ROLLINS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>775711104</ns1:cusip>
    <ns1:figi>BBG001S5VRG4</ns1:figi>
    <ns1:value>35420300</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>811090</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>765263</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>45827</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ROPER TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>776696106</ns1:cusip>
    <ns1:figi>BBG001S9B362</ns1:figi>
    <ns1:value>1196103</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2194</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2194</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>S&amp;P GLOBAL INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>78409V104</ns1:cusip>
    <ns1:figi>BBG001S5T5M8</ns1:figi>
    <ns1:value>1190274</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2702</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2702</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SEMLER SCIENTIFIC INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>81684M104</ns1:cusip>
    <ns1:figi>BBG005LBVC90</ns1:figi>
    <ns1:value>1350801</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>30499</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>30499</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SIMPSON MFG INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>829073105</ns1:cusip>
    <ns1:figi>BBG001SB9QN0</ns1:figi>
    <ns1:value>271840023</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1373068</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1359252</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>13816</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SIMULATIONS PLUS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>829214105</ns1:cusip>
    <ns1:figi>BBG001S9TQV4</ns1:figi>
    <ns1:value>101098134</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2259176</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2256556</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>2620</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SITEONE LANDSCAPE SUPPLY INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>82982L103</ns1:cusip>
    <ns1:figi>BBG009T22D67</ns1:figi>
    <ns1:value>179480275</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1104494</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1091594</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>12900</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SMUCKER J M CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM NEW</ns1:titleOfClass>
    <ns1:cusip>832696405</ns1:cusip>
    <ns1:figi>BBG001S5W3H5</ns1:figi>
    <ns1:value>447385</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3540</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3540</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SOUNDTHINKING INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>82536T107</ns1:cusip>
    <ns1:figi>BBG001SM2GR1</ns1:figi>
    <ns1:value>1748979</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>68480</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>68480</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SPS COMM INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>78463M107</ns1:cusip>
    <ns1:figi>BBG001T65R07</ns1:figi>
    <ns1:value>260554107</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1344171</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1328296</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>15875</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>STERIS PLC</ns1:nameOfIssuer>
    <ns1:titleOfClass>SHS USD</ns1:titleOfClass>
    <ns1:cusip>G8473T100</ns1:cusip>
    <ns1:figi>BBG00MRHG532</ns1:figi>
    <ns1:value>580184</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2639</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2639</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>STEVANATO GROUP S P A</ns1:nameOfIssuer>
    <ns1:titleOfClass>ORD SHS</ns1:titleOfClass>
    <ns1:cusip>T9224W109</ns1:cusip>
    <ns1:figi>BBG001V2NPF1</ns1:figi>
    <ns1:value>124368112</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>4557278</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>4501904</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>55374</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TECSYS INC COM</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>878950104</ns1:cusip>
    <ns1:value>1581280</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>63550</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>63550</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TELEFLEX INCORPORATED</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>879369106</ns1:cusip>
    <ns1:figi>BBG001S5WNP2</ns1:figi>
    <ns1:value>14719039</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>59032</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>55662</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>3370</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>THUNDERBIRD ENTERTAINMENT GROU</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>88605U107</ns1:cusip>
    <ns1:value>1078723</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>613105</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>613105</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TRACTOR SUPPLY CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>892356106</ns1:cusip>
    <ns1:figi>BBG001S7K017</ns1:figi>
    <ns1:value>969570</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>4509</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>4509</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TRANSCAT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>893529107</ns1:cusip>
    <ns1:figi>BBG001S5WVW6</ns1:figi>
    <ns1:value>83403593</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>762861</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>762046</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>815</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TREX CO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>89531P105</ns1:cusip>
    <ns1:figi>BBG001SB6TV8</ns1:figi>
    <ns1:value>156152537</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1886128</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1856013</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>30115</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>TYLER TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>902252105</ns1:cusip>
    <ns1:figi>BBG001S5WZB0</ns1:figi>
    <ns1:value>29438157</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>70406</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>66401</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>4005</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>U S PHYSICAL THERAPY</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>90337L108</ns1:cusip>
    <ns1:figi>BBG001S71ZL9</ns1:figi>
    <ns1:value>1390580</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>14930</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>14930</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VAIL RESORTS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>91879Q109</ns1:cusip>
    <ns1:figi>BBG001S5TFD6</ns1:figi>
    <ns1:value>16256594</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>76154</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>71614</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>4540</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VEEVA SYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A COM</ns1:titleOfClass>
    <ns1:cusip>922475108</ns1:cusip>
    <ns1:figi>BBG001TX0CB4</ns1:figi>
    <ns1:value>618759</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3214</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3214</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VERICEL CORP</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>92346J108</ns1:cusip>
    <ns1:figi>BBG001S6X9M3</ns1:figi>
    <ns1:value>83325976</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2339960</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2335405</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>4555</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VERISK ANALYTICS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>92345Y106</ns1:cusip>
    <ns1:figi>BBG001SBRX64</ns1:figi>
    <ns1:value>1378222</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>5770</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>5770</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VERTEX INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CL A</ns1:titleOfClass>
    <ns1:cusip>92538J106</ns1:cusip>
    <ns1:figi>BBG00VVT2FV3</ns1:figi>
    <ns1:value>76310783</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2832620</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2826625</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>5995</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WASTE CONNECTIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>94106B101</ns1:cusip>
    <ns1:figi>BBG001SKJ4K1</ns1:figi>
    <ns1:value>987272</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>6614</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>6614</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WATSCO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>942622200</ns1:cusip>
    <ns1:figi>BBG001S82CQ2</ns1:figi>
    <ns1:value>32995189</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>77007</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>72567</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>4440</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WD 40 CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>929236107</ns1:cusip>
    <ns1:figi>BBG001S5XD46</ns1:figi>
    <ns1:value>75154537</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>314362</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>313734</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>628</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WEST PHARMACEUTICAL SVSC INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>955306105</ns1:cusip>
    <ns1:figi>BBG001S5XK22</ns1:figi>
    <ns1:value>19490898</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>55353</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>52283</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>3070</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WILLDAN GROUP INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>96924N100</ns1:cusip>
    <ns1:figi>BBG001SNM0H3</ns1:figi>
    <ns1:value>1188584</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>55283</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>55283</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>WORKIVA INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM CL A</ns1:titleOfClass>
    <ns1:cusip>98139A105</ns1:cusip>
    <ns1:figi>BBG007BVZ8J7</ns1:figi>
    <ns1:value>96730677</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>952730</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>942985</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>9745</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>XYLEM INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>98419M100</ns1:cusip>
    <ns1:figi>BBG001V05C73</ns1:figi>
    <ns1:value>517936</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>4529</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>4529</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
</ns1:informationTable>
