<?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>222490499</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1890640</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1842389</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>48251</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>AGILYSYS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>00847J105</ns1:cusip>
    <ns1:figi>BBG001S5V6V3</ns1:figi>
    <ns1:value>46920239</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>356239</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>348774</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>7465</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>269812</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1294</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1294</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>2040272</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>244344</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>244344</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>554649</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2930</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2930</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>420872</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2210</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2210</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>121390112</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1112548</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1052748</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>59800</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>922935</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2736</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2736</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>345580</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1380</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1380</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>42938431</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>72248</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>68548</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>3700</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>78894050</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1577881</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1543871</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>34010</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>191500139</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1174884</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1140808</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>34076</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>391579</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>8385</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>8385</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>528071</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1165</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1165</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>1687841</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>65017</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>65017</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>22986358</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>319122</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>305372</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>13750</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>128439470</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2113882</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2069247</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>44635</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>BOWMAN CONSULTING GROUP LTD</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>103002101</ns1:cusip>
    <ns1:figi>BBG003BPV1R9</ns1:figi>
    <ns1:value>1169406</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>46870</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>46870</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</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>32682460</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>294835</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>281530</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>13305</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>342308788</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3235127</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3142932</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>92195</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>143821941</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>12261035</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>11941370</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>319665</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>185775879</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>6750577</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>6557497</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>193080</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>310891078</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3514482</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3414274</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>100208</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>1084154</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>18891</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>18891</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>1087094</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>15185</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>15185</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>975828</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>CRANE NXT CO</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>224441105</ns1:cusip>
    <ns1:figi>BBG017BXPZ94</ns1:figi>
    <ns1:value>31516815</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>541340</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>529750</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>11590</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>551734</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>70917</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>70917</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>202504395</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>573992</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>559575</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>14417</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>236436</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1030</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1030</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</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>357895891</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3150492</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3063932</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>86560</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>108348582</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3584141</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3511751</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>72390</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>ENERGY RECOVERY INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>29270J100</ns1:cusip>
    <ns1:figi>BBG001T28M86</ns1:figi>
    <ns1:value>1316017</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>89525</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>89525</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</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>139051481</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1043852</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1020116</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>23736</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>12893872</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>788616</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>746321</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>42295</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>249714261</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2802629</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2724159</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>78470</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>263439</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2449</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2449</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>690162</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1437</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1437</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>21314897</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>10706</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>10211</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>495</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>638920</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>8885</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>8885</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>127464237</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1379632</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1345775</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>33857</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>262289344</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1448952</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1405973</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>42979</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>969270</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>10259</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>10259</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</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>251637</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1220</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1220</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>15321848</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>31626</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>30261</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>1365</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>24509064</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>158072</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>150967</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>7105</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>36347871</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>431224</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>411809</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>19415</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>40255218</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>238790</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>227905</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>10885</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>41394985</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>222458</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>212633</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>9825</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>88678610</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1986528</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1942908</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>43620</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>32804765</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>187135</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>178525</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>8610</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>72298354</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>7422829</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>7268204</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>154625</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>219779</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>565</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>565</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>1607547</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>69772</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>69772</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>671427</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1624</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1624</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>230740</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>910</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>910</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>480802</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>765</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>765</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>1510025</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>27455</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>27455</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>120070234</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>944691</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>920721</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>23970</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>290686</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2010</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2010</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>KADANT INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>48282T104</ns1:cusip>
    <ns1:figi>BBG001S8PRM8</ns1:figi>
    <ns1:value>38559532</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>111770</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>108840</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>2930</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>17133377</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>165716</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>157681</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>8035</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>155977679</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1692834</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1649662</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>43172</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>429137</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1025</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1025</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>MAMAS CREATIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>56146T103</ns1:cusip>
    <ns1:figi>BBG001V1FNH5</ns1:figi>
    <ns1:value>1540658</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>193550</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>193550</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>250303</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>145</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>145</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>555531</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1055</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1055</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>87058314</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2072817</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2016487</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>56330</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>221479418</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2289903</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2224131</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>65772</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>75566417</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>573037</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>561434</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>11603</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>419722</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>343</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>343</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>1122033</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2662</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2662</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</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>974895</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>52555</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>52555</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>97923245</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>590718</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>571660</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>19058</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>N-ABLE INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COMMON STOCK</ns1:titleOfClass>
    <ns1:cusip>62878D100</ns1:cusip>
    <ns1:figi>BBG00YJKWXF6</ns1:figi>
    <ns1:value>1005544</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>107660</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>107660</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NCINO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>63947X101</ns1:cusip>
    <ns1:figi>BBG014GJ8XJ0</ns1:figi>
    <ns1:value>70255908</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2092195</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2039050</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>53145</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>103233559</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>8503588</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>8293811</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>209777</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>205938849</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1348032</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1309897</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>38135</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>1182248</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>62752</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>62752</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>NVIDIA CORPORATION</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>67066G104</ns1:cusip>
    <ns1:figi>BBG001S5TZJ6</ns1:figi>
    <ns1:value>201435</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1500</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1500</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>2375194</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>309270</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>309270</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</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>1246922</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>53793</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>53793</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>2187825</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>20720</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>20720</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>128772328</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>6934428</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>6759933</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>174495</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>1951032</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>77545</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>77545</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>1996164</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>494100</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>494100</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>42514536</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>124698</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>119038</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>5660</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>15544378</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>207452</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>198132</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>9320</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>193994118</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1927413</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1876013</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>51400</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>221326806</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>739877</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>718747</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>21130</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>136394953</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>947582</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>922007</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>25575</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>47384764</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1022325</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>977178</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>45147</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>911817</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1754</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1754</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>735085</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1476</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1476</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>212691572</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1282588</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1246208</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>36380</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>62090434</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2226262</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2180297</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>45965</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>153835414</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1167454</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1133284</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>34170</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>203171</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1845</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1845</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>980937</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>75110</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>75110</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>229728442</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1248592</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1213977</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>34615</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>SPX TECHNOLOGIES INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>78473E103</ns1:cusip>
    <ns1:figi>BBG001S5W9N5</ns1:figi>
    <ns1:value>114639928</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>787795</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>767180</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>20615</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>519861</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2529</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2529</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>176128479</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>8082996</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>7853188</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>229808</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>2031402</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>63720</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>63720</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</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>1083225</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>842105</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>842105</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>694821</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>13095</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>13095</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>95686875</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>904926</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>887181</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>17745</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>135833644</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1967748</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1907233</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>60515</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>51416682</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>89166</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>85231</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>3935</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>1327545</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>14965</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>14965</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>UL SOLUTIONS INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>CLASS A COM SHS</ns1:titleOfClass>
    <ns1:cusip>903731107</ns1:cusip>
    <ns1:figi>BBG007N72MB0</ns1:figi>
    <ns1:value>35212031</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>705935</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>691370</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>14565</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>UNIVERSAL TECHNICAL INST INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>913915104</ns1:cusip>
    <ns1:figi>BBG001SC4X67</ns1:figi>
    <ns1:value>2185607</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>85010</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>85010</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</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>646308</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>3074</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>3074</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>113632401</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2069430</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2027360</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>42070</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>1480436</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>5375</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>5375</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>120656093</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>2261595</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>2214510</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>47085</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:nameOfIssuer>VITA COCO CO INC</ns1:nameOfIssuer>
    <ns1:titleOfClass>COM</ns1:titleOfClass>
    <ns1:cusip>92846Q107</ns1:cusip>
    <ns1:figi>BBG012QFVTF8</ns1:figi>
    <ns1:value>1312520</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>35560</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>35560</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</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>1081640</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>6304</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>6304</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>46361606</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>97832</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>93442</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>4390</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>77505000</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>319371</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>313098</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>6273</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>22007774</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>67187</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>64217</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>2970</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>1679502</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>44093</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>44093</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>127569580</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>1165019</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>1134739</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>30280</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>554460</ns1:value>
    <ns1:shrsOrPrnAmt>
      <ns1:sshPrnamt>4779</ns1:sshPrnamt>
      <ns1:sshPrnamtType>SH</ns1:sshPrnamtType>
    </ns1:shrsOrPrnAmt>
    <ns1:investmentDiscretion>SOLE</ns1:investmentDiscretion>
    <ns1:votingAuthority>
      <ns1:Sole>4779</ns1:Sole>
      <ns1:Shared>0</ns1:Shared>
      <ns1:None>0</ns1:None>
    </ns1:votingAuthority>
  </ns1:infoTable>
</ns1:informationTable>
