<SEC-DOCUMENT>0001092699-23-000035.txt : 20230426
<SEC-HEADER>0001092699-23-000035.hdr.sgml : 20230426
<ACCEPTANCE-DATETIME>20230426161716
ACCESSION NUMBER:		0001092699-23-000035
CONFORMED SUBMISSION TYPE:	10-Q
PUBLIC DOCUMENT COUNT:		83
CONFORMED PERIOD OF REPORT:	20230331
FILED AS OF DATE:		20230426
DATE AS OF CHANGE:		20230426

FILER:

	COMPANY DATA:	
		COMPANY CONFORMED NAME:			SPS COMMERCE INC
		CENTRAL INDEX KEY:			0001092699
		STANDARD INDUSTRIAL CLASSIFICATION:	SERVICES-PREPACKAGED SOFTWARE [7372]
		IRS NUMBER:				411593154
		STATE OF INCORPORATION:			DE
		FISCAL YEAR END:			1231

	FILING VALUES:
		FORM TYPE:		10-Q
		SEC ACT:		1934 Act
		SEC FILE NUMBER:	001-34702
		FILM NUMBER:		23849968

	BUSINESS ADDRESS:	
		STREET 1:		333 SOUTH SEVENTH STREET
		STREET 2:		SUITE 1000
		CITY:			MINNEAPOLIS
		STATE:			MN
		ZIP:			55402
		BUSINESS PHONE:		612-435-9400

	MAIL ADDRESS:	
		STREET 1:		333 SOUTH SEVENTH STREET
		STREET 2:		SUITE 1000
		CITY:			MINNEAPOLIS
		STATE:			MN
		ZIP:			55402
</SEC-HEADER>
<DOCUMENT>
<TYPE>10-Q
<SEQUENCE>1
<FILENAME>spsc-20230331.htm
<DESCRIPTION>10-Q
<TEXT>
<XBRL>
<?xml version="1.0" ?><!--XBRL Document Created with Wdesk from Workiva--><!--Copyright 2023 Workiva--><!--r:e8457af8-7448-488b-94ad-becdc804ffea,g:b7f35897-e981-4828-95af-9cb9c0061258,d:6d9a8d1ab1f5454885a98aaf9e608722--><html xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dei="http://xbrl.sec.gov/dei/2022" xmlns:srt="http://fasb.org/srt/2022" xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:us-gaap="http://fasb.org/us-gaap/2022" xmlns:ixt-sec="http://www.sec.gov/inlineXBRL/transformation/2015-08-31" xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:ixt="http://www.xbrl.org/inlineXBRL/transformation/2020-02-12" xmlns:ix="http://www.xbrl.org/2013/inlineXBRL" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:spsc="http://www.spscommerce.com/20230331" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-US"><head><meta http-equiv="Content-Type" content="text/html"/>


<title>spsc-20230331</title></head><body><div style="display:none"><ix:header><ix:hidden><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityCentralIndexKey" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80L2ZyYWc6YzU0YWQ1NmJhZTJkNGJiMTg1ODA3NDZjN2E0NDcwY2MvdGFibGU6NmMyYTI2MDk2ZmU0NDFlN2FlOWQzMjA3OGYyNzQ3OTcvdGFibGVyYW5nZTo2YzJhMjYwOTZmZTQ0MWU3YWU5ZDMyMDc4ZjI3NDc5N183LTEtMS0xLTEwMDAzNg_de020644-9348-46e1-8d20-e441c208eadc">0001092699</ix:nonNumeric><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:CurrentFiscalYearEndDate" format="ixt:date-month-day" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80L2ZyYWc6YzU0YWQ1NmJhZTJkNGJiMTg1ODA3NDZjN2E0NDcwY2MvdGFibGU6NmMyYTI2MDk2ZmU0NDFlN2FlOWQzMjA3OGYyNzQ3OTcvdGFibGVyYW5nZTo2YzJhMjYwOTZmZTQ0MWU3YWU5ZDMyMDc4ZjI3NDc5N184LTEtMS0xLTEwMDAzNg_2573ecd9-d40a-44fe-bc38-feba25abae7f">12-31</ix:nonNumeric><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:DocumentFiscalYearFocus" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80L2ZyYWc6YzU0YWQ1NmJhZTJkNGJiMTg1ODA3NDZjN2E0NDcwY2MvdGFibGU6NmMyYTI2MDk2ZmU0NDFlN2FlOWQzMjA3OGYyNzQ3OTcvdGFibGVyYW5nZTo2YzJhMjYwOTZmZTQ0MWU3YWU5ZDMyMDc4ZjI3NDc5N185LTEtMS0xLTEwMDAzNg_12a96c87-0b98-4e18-807a-edfa28b5e1c5">2023</ix:nonNumeric><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:DocumentFiscalPeriodFocus" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80L2ZyYWc6YzU0YWQ1NmJhZTJkNGJiMTg1ODA3NDZjN2E0NDcwY2MvdGFibGU6NmMyYTI2MDk2ZmU0NDFlN2FlOWQzMjA3OGYyNzQ3OTcvdGFibGVyYW5nZTo2YzJhMjYwOTZmZTQ0MWU3YWU5ZDMyMDc4ZjI3NDc5N18xMC0xLTEtMS0xMDAwMzY_17d8f5ee-d09e-4fea-9c2d-d2adb544a6cb">Q1</ix:nonNumeric><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:AmendmentFlag" format="ixt:fixed-false" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80L2ZyYWc6YzU0YWQ1NmJhZTJkNGJiMTg1ODA3NDZjN2E0NDcwY2MvdGFibGU6NmMyYTI2MDk2ZmU0NDFlN2FlOWQzMjA3OGYyNzQ3OTcvdGFibGVyYW5nZTo2YzJhMjYwOTZmZTQ0MWU3YWU5ZDMyMDc4ZjI3NDc5N18xMS0xLTEtMS0xMDAwMzY_4a2ad337-b025-4485-911b-5e5ea29eca51">false</ix:nonNumeric></ix:hidden><ix:references xml:lang="en-US"><link:schemaRef xlink:type="simple" xlink:href="spsc-20230331.xsd"></link:schemaRef></ix:references><ix:resources><xbrli:context id="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i37551c7b2ead4393b6dfecd64cebfbe2_I20230419"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier></xbrli:entity><xbrli:period><xbrli:instant>2023-04-19</xbrli:instant></xbrli:period></xbrli:context><xbrli:unit id="shares"><xbrli:measure>xbrli:shares</xbrli:measure></xbrli:unit><xbrli:context id="i3c3314e4b6ab4b059373b9922fd89803_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:unit id="usd"><xbrli:measure>iso4217:USD</xbrli:measure></xbrli:unit><xbrli:context id="i074918b0d14149a8b0f12b21ce312a7c_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:unit id="usdPerShare"><xbrli:divide><xbrli:unitNumerator><xbrli:measure>iso4217:USD</xbrli:measure></xbrli:unitNumerator><xbrli:unitDenominator><xbrli:measure>xbrli:shares</xbrli:measure></xbrli:unitDenominator></xbrli:divide></xbrli:unit><xbrli:context id="i0fb6c4ac52bb4e62922d66b045aa21d1_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i6c4d0a1e68ca4de9a8b11e4ce719a889_I20211231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2021-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i711912af9a734238a854043c07d37223_I20211231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2021-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="id39e6985d7b2436da2d47a1c0785aa39_I20211231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2021-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="ia7960d706d64455a9dcc2a1cb1cc072b_I20211231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2021-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i6f9600d5b58b4add81e29b168a498238_I20211231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2021-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="id23181cd6ae24a028a249a4d25818065_I20211231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier></xbrli:entity><xbrli:period><xbrli:instant>2021-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i1fc9801726514305b4f9b2bdf7d77387_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="idd114f039c2f4f8abd444d113432aef1_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ie7c55ab2807f4502a58026a33c40c206_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i7b9811e5d915467c97be523960c15694_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i75d8049bb9b74cb18a2bc589da52a8fa_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i8124e569001b4e4b82731473fb5747be_I20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="ibfcbe17b3dac42f7abe430e868e4f22b_I20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="if778689a912e42d6b2037b7a25101d96_I20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="iea4c199918fe4c558f469af3807faa16_I20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i55d085d612994f239183415316aadc58_I20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="iea65401e964c4d079f6a7764673f9d3e_I20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier></xbrli:entity><xbrli:period><xbrli:instant>2022-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i8af1540ceff142b6a0d5b42e48a50184_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i6414f87f71f94519989c31299a6bdc50_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i816385f2c35a409ab40061bbedc4ce46_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i4efe2f28c7954c8a8aba61558e2a21d5_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="idd022eaf6b814505b1ba92ba75ab3173_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i1eab60dc7b84487ca4d1c577cde5b045_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:SubsidiarySaleOfStockAxis">us-gaap:EmployeeStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ia18cb472d37847b4ae4f0e7c9fcc2093_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ibfb2f662a68c47be9ba841e369ff84b6_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i12ac53a6dd6f4f92b7a17ef4b5ebd28a_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i4911634e78ad4b7eb05c009b2036124f_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i7a0dda8262a5406492187cabbd51d4c6_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i15c6e19508144394b19c34d4451703e8_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i494bbf45b93640b8b137b284e56fea8c_D20220719-20220719"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-07-19</xbrli:startDate><xbrli:endDate>2022-07-19</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i0548f3e001a74dfe9ff742bd06bf5d1d_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ibeb5587d4f8d49878baf94f9edca4f5c_D20221004-20221004"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:InterTradeSystemsIncMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-10-04</xbrli:startDate><xbrli:endDate>2022-10-04</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i5e5f3e01a4554a07ace384858fe9fe50_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:FulfillmentMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ic23344cee2e746358b8076d9aa27eb34_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:FulfillmentMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ie322d516768a46d3840f582881367ef1_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:AnalyticsMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i66eb5ae5d9f648d1be790070d3eb42fb_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:AnalyticsMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i430fe804c8354c35acdbac54c1a8103f_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:OtherMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i483819e474e64d97b8cae765a6e4a1fc_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:OtherMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ic7f5ba10540447178ab71b4bb94aec7a_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i466b3e33d52b4738bb24fb4712caadf1_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="if42252827934498bbe58d7c7792a6ce5_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:OneTimeRevenuesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i1bd93224c1834afcaecf43afdfecbc56_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:OneTimeRevenuesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i492ea2be0bc2406a877c7ea5f708a619_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="srt:RangeAxis">srt:MinimumMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i62d7c092a8b141fc9e9a77bf6fd97969_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="srt:RangeAxis">srt:MaximumMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i33903016b04043ff8f3b903207f93675_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i0727a052638340d28c42291a37278daf_I20211231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2021-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i7c34593b80204d5f877eca45dd51d401_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i88aef2c21a2d44408cff8c9801e859c8_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i8f43e591125d49a89354fae41f4ec9e1_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="iee085911fef74ba4bab1072985c39349_I20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="ib95cb9989143445f9a7e651950c32288_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:MoneyMarketFundsMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:BalanceSheetLocationAxis">us-gaap:CashEquivalentsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i1b7e5436e1104d35b4b017c4042ef741_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:MoneyMarketFundsMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:BalanceSheetLocationAxis">us-gaap:CashEquivalentsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i06db95e3caa74fd69f6bf699dc8553ac_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:CertificatesOfDepositMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i9978aeb34edf49fdb2b635d1da947f0f_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:CertificatesOfDepositMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i3d24870a54cb4537b1c2ea12039f0869_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:BalanceSheetLocationAxis">spsc:MarketableSecuritiesMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:CommercialPaperMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i3938b8743ba341c6b9496d0431a386f7_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:BalanceSheetLocationAxis">spsc:MarketableSecuritiesMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:CommercialPaperMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i27fdedb4de714a9fbe01d6729cbbec8e_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:BalanceSheetLocationAxis">spsc:MarketableSecuritiesMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:USTreasurySecuritiesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i0fbb80009f17498db74b94eaf27cb4fe_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:BalanceSheetLocationAxis">spsc:MarketableSecuritiesMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:USTreasurySecuritiesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i5a75bb88debd45d6977bc1802be484e8_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:InternallyDevelopedSoftwareMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="if36c1fbf7d614e4c996719209cbd2203_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:InternallyDevelopedSoftwareMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i386c273d4ce1474b8fe0376f049c4026_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:ComputerEquipmentMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i044036208ec345ceb8743ee4003b4012_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:ComputerEquipmentMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i7fdb034bc95a4b0392b1bc5c4e517c57_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:LeaseholdImprovementsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i3f4882303fd44f25b34a7e397c10779f_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:LeaseholdImprovementsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="if15e5b2451054b38881f736fe9625cc2_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:OfficeEquipmentAndFurnitureMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i534eee2a26b2444ebe09cb50ac751aff_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:OfficeEquipmentAndFurnitureMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="idfbc23a59140439a8615288bcb3f78ef_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="ic91aaccdeb714bfc8f0dce202e196a66_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i42612c0ae9fd49b38cbc84eb2d0083e6_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i4e6aa02ec2b74ba69310d3ad612c9cda_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="iaf6b0a0eb5b3448ebe65047605d7d317_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="ic65167d9de1f4e50805056a53d766244_D20220101-20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-12-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ibef612a6a2494f51809d078779233bed_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i2139ddbdb599478c96f7dbd3221493e7_D20220101-20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-12-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ie8eb7dd105294462b8565005c929635e_D20220101-20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-12-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:unit id="number"><xbrli:measure>xbrli:pure</xbrli:measure></xbrli:unit><xbrli:context id="ic66b2fe6cc7a4bf9b038a88eb9c4f953_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:ShareRepurchaseProgramAxis">spsc:A2021StockRepurchaseProgramMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i3cf98a1bfcce425bb63813ffc2c3e964_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:ShareRepurchaseProgramAxis">spsc:A2021StockRepurchaseProgramMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i0b6acb14977e4bbebf8dc1ae4945d040_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:ShareRepurchaseProgramAxis">spsc:A2022StockRepurchaseProgramMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i93dad56146ff44d98768cfefa65393e7_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:CostOfSalesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ic6e6e85d532b4870801fe3245685e79a_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:CostOfSalesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="icf5aa811f4814632b2861846f77139b8_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:SellingAndMarketingExpenseMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i3a215ac4955d48c8bdf4ef5efe7b2501_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:SellingAndMarketingExpenseMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ia33d3193bbcb46b69d9ea868360410f0_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:ResearchAndDevelopmentExpenseMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i48945f26aa664703a3348e4cba198e2d_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:ResearchAndDevelopmentExpenseMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i327830e256a546128e87027704b0e090_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:GeneralAndAdministrativeExpenseMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="id2486bd8e47b45c383a6d5f3f183cd42_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:GeneralAndAdministrativeExpenseMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:EmployeeStockOptionMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i7c8e86e8da8b413e95c1e1f7ad578007_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:EmployeeStockOptionMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ie078c18202d541869aac6a5c656ff133_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i81fe3639cdd0409783650946d9f206c1_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="if541830b99f34fada5f80dbf22b9a42b_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:RestrictedStockUnitsRSUMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ic919f20ea9e34d7d8a49f792f2850731_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:RestrictedStockUnitsRSUMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i139966462e7d44a6a65729d6e89d9a2b_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:RestrictedStockUnitsAndDeferredStockUnitsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i9efb8a2ef80941b3b94082525317fe20_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:RestrictedStockUnitsAndDeferredStockUnitsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i7004f48977d74e228c6e84df8cbc78b7_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:EmployeeStockPurchasePlanMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="if398ccb0bdb94ada908408abec6ccc79_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:EmployeeStockPurchasePlanMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ice4475e67a4a4f4e8c671ae4a60c0e9e_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:FourZeroOneKStockMatchMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="iace8208134024531b6ba59e56e7e46a1_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:FourZeroOneKStockMatchMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ibfc64785d5dc41fb8fbce3eb2022373c_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:EmployeeStockOptionMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i8bf3eacc627448edb90205fb30ece2b5_D20200101-20200331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2020-01-01</xbrli:startDate><xbrli:endDate>2020-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ia94b7f289d9c466e924f9972711567b8_D20210101-20210331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2021-01-01</xbrli:startDate><xbrli:endDate>2021-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i648dacc2484645a191cd2b52aedd0022_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="srt:RangeAxis">srt:MaximumMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i8eae6a60d667472db9b3b0b29fa91b99_I20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2022-12-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i8243d525cc6644e3a8b086461514844d_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i75224f37ba834f5087c46bd2805cd5e7_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="srt:RangeAxis">srt:MaximumMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="idc151901553f4a18a424d23b910d4ad3_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:SubsidiarySaleOfStockAxis">us-gaap:EmployeeStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i8e28272e86eb4ea5b8c9d7b9f8471840_I20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:SubsidiarySaleOfStockAxis">us-gaap:EmployeeStockMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:instant>2023-03-31</xbrli:instant></xbrli:period></xbrli:context><xbrli:context id="i09c91f829fc14da1b95accd9d3986fac_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionDomesticMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="ibdb411029c074e9ea4c1c3c2e805eced_D20220101-20220331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionDomesticMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i62f046dcd2034c77b0a5beb5ec3cff59_D20230101-20230331"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionForeignMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2023-01-01</xbrli:startDate><xbrli:endDate>2023-03-31</xbrli:endDate></xbrli:period></xbrli:context><xbrli:context id="i6f4fecba0c8a4e1786a0301a0c8ea540_D20220101-20221231"><xbrli:entity><xbrli:identifier scheme="http://www.sec.gov/CIK">0001092699</xbrli:identifier><xbrli:segment><xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionForeignMember</xbrldi:explicitMember><xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember></xbrli:segment></xbrli:entity><xbrli:period><xbrli:startDate>2022-01-01</xbrli:startDate><xbrli:endDate>2022-12-31</xbrli:endDate></xbrli:period></xbrli:context></ix:resources></ix:header></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_1"></div><div style="min-height:31.5pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:18pt;font-weight:700;line-height:120%">UNITED STATES</span></div><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:18pt;font-weight:700;line-height:120%">SECURITIES AND EXCHANGE COMMISSION</span></div><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:12pt;font-weight:700;line-height:120%">WASHINGTON, D.C. 20549</span></div><div style="margin-top:8pt;text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:18pt;font-weight:700;line-height:120%">FORM <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:DocumentType" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDI5_382712f4-8db7-4468-9c66-170624c90af0">10-Q</ix:nonNumeric></span></div><div style="margin-top:8pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">(Mark One)</span></div><div style="margin-top:3pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:2.990%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:94.810%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt 2px 25.5pt;text-align:left;text-indent:-24.5pt;vertical-align:top"><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:12pt;font-weight:700;line-height:114%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:DocumentQuarterlyReport" format="ixt:fixed-true" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6NjRiNWQyMDU4NDhmNDYxNzgwYzA0YjhhM2U2MDcwNzEvdGFibGVyYW5nZTo2NGI1ZDIwNTg0OGY0NjE3ODBjMDRiOGEzZTYwNzA3MV8wLTAtMS0xLTEwMDAzNg_6120b7fc-693d-41b5-9a91-53e594979381">x</ix:nonNumeric></span></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:12pt;font-weight:700;line-height:114%">QUARTERLY REPORT PURSUANT TO SECTION 13 OR 15(d) OF THE SECURITIES EXCHANGE ACT OF 1934</span></td></tr></table></div><div style="margin-top:3pt;text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">For the Quarterly Period Ended: <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:DocumentPeriodEndDate" format="ixt:date-monthname-day-year-en" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8xMzI_434f8740-696b-448e-b40a-885674e4d243">March&#160;31, 2023</ix:nonNumeric></span></div><div style="margin-top:3pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:2.990%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:94.810%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:12pt;font-weight:700;line-height:114%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:DocumentTransitionReport" format="ixt:fixed-false" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6MDZlMjk5ZDQzZGMwNDgwOWE0ODc0M2YxOTY5YzlkMWEvdGFibGVyYW5nZTowNmUyOTlkNDNkYzA0ODA5YTQ4NzQzZjE5NjljOWQxYV8wLTAtMS0xLTEwMDAzNg_d0d1fc58-ae36-4670-99a5-c46705919261">o</ix:nonNumeric></span></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:12pt;font-weight:700;line-height:114%">TRANSITION REPORT PURSUANT TO SECTION 13 OR 15(d) OF THE SECURITIES EXCHANGE ACT OF 1934</span></td></tr></table></div><div style="margin-top:3pt;text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">For the Transition Period from ________ to ________</span></div><div style="margin-top:6pt;text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:12pt;font-weight:700;line-height:120%">Commission file number <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityFileNumber" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDMw_90218b81-4ff1-4dca-a2a9-0b7ec149bed2">001-34702</ix:nonNumeric></span></div><div style="margin-top:6pt;text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:24pt;font-weight:700;line-height:120%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityRegistrantName" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDMx_32d73002-509a-4bca-8837-bcb471311af6">SPS COMMERCE, INC.</ix:nonNumeric></span></div><div style="text-align:center"><img src="spsc-20230331_g1.jpg" alt="1.jpg" style="height:95px;margin-bottom:5pt;vertical-align:text-bottom;width:95px"/></div><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">(Exact Name of Registrant as Specified in its Charter)</span></div><div style="margin-top:3pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:87.878%"><tr><td style="width:1.0%"></td><td style="width:51.313%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:46.487%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityIncorporationStateCountryCode" format="ixt-sec:stateprovnameen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6Y2Y4NjZiYmY0MzYwNGQzMGIzYzdiODUxODk4YjA5YzgvdGFibGVyYW5nZTpjZjg2NmJiZjQzNjA0ZDMwYjNjN2I4NTE4OThiMDljOF8wLTAtMS0xLTEwMDAzNg_024cafb6-fe27-4935-8a02-b74e6f70da36">Delaware</ix:nonNumeric></span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityTaxIdentificationNumber" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6Y2Y4NjZiYmY0MzYwNGQzMGIzYzdiODUxODk4YjA5YzgvdGFibGVyYW5nZTpjZjg2NmJiZjQzNjA0ZDMwYjNjN2I4NTE4OThiMDljOF8wLTEtMS0xLTEwMDAzNg_a621bfc1-0e06-4fb7-be61-0265eeeaedbf">41-2015127</ix:nonNumeric></span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-style:italic;font-weight:700;line-height:120%">(State or other jurisdiction of</span></div><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-style:italic;font-weight:700;line-height:115%">incorporation or organization)</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-style:italic;font-weight:700;line-height:120%">(I.R.S. Employer</span></div><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-style:italic;font-weight:700;line-height:115%">Identification No.)</span></div></td></tr></table></div><div style="margin-top:3pt;text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityAddressAddressLine1" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8zMDA_734ba8a6-df78-4270-8983-60441cfde90e">333 South Seventh Street</ix:nonNumeric>, <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityAddressAddressLine2" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8zMDQ_702b21d0-ec53-4be7-addf-32dc73f4ab7b">Suite 1000</ix:nonNumeric>, <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityAddressCityOrTown" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8zMDg_ed66c3eb-ad1f-41b7-abb0-97daa4379129">Minneapolis</ix:nonNumeric>, <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityAddressStateOrProvince" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8zMTI_4f549818-c450-4fcd-90ff-02e3dcd79802">MN</ix:nonNumeric> <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityAddressPostalZipCode" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8zMTU_c89ad1b3-5021-4a42-87fc-3541ecc3c17d">55402</ix:nonNumeric></span></div><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-style:italic;font-weight:700;line-height:120%">(Address of principal executive offices, including Zip Code)</span></div><div style="margin-top:8pt;text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">(<ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:CityAreaCode" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDMz_79242a03-1a94-4c1e-a1dd-8dceaadce7b3">612</ix:nonNumeric>) <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:LocalPhoneNumber" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDM4_57abcde3-6a4e-4e6c-9bd8-01ca1b7d708b">435-9400</ix:nonNumeric></span></div><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-style:italic;font-weight:700;line-height:120%">(Registrant&#8217;s telephone number, including area code)</span></div><div style="margin-top:3pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%">Securities registered pursuant to Section 12(b) of the Act:</span></div><div style="margin-top:3pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:39.203%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:17.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:39.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:120%">Title of each class</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:120%">Trading Symbol</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:120%">Name of exchange on which registered</span></td></tr><tr><td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:Security12bTitle" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6OGZkNzg0N2U4MjMxNDM0Y2E3YmViZGNkNGI1MGM1ZTIvdGFibGVyYW5nZTo4ZmQ3ODQ3ZTgyMzE0MzRjYTdiZWJkY2Q0YjUwYzVlMl8xLTAtMS0xLTEwMDAzNg_e6e8f960-c93c-47ae-8834-b7cc2da1ed63">Common Stock, par value $0.001 per share</ix:nonNumeric></span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:TradingSymbol" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6OGZkNzg0N2U4MjMxNDM0Y2E3YmViZGNkNGI1MGM1ZTIvdGFibGVyYW5nZTo4ZmQ3ODQ3ZTgyMzE0MzRjYTdiZWJkY2Q0YjUwYzVlMl8xLTItMS0xLTEwMDAzNg_f2c760b1-b0e3-43d6-87e0-7deeb2bc6fcf">SPSC</ix:nonNumeric></span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:left;vertical-align:top"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%">The Nasdaq Stock Market LLC (<ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:SecurityExchangeName" format="ixt-sec:exchnameen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6OGZkNzg0N2U4MjMxNDM0Y2E3YmViZGNkNGI1MGM1ZTIvdGFibGVyYW5nZTo4ZmQ3ODQ3ZTgyMzE0MzRjYTdiZWJkY2Q0YjUwYzVlMl8xLTQtMS0xLTEwMDAzNi90ZXh0cmVnaW9uOjE0MGQ5OTI1MjFhOTQwODI4NTA3ZmI2NmU3NGI3MmZiXzMz_66c2d526-f8cc-4528-9f2c-1d5abaf9969d">Nasdaq Global Market</ix:nonNumeric>)</span></div></td></tr></table></div><div style="margin-top:3pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:120%">Indicate by check mark whether the registrant (1) has filed all reports required to be filed by Section 13 or 15(d) of the Securities Exchange Act of 1934 during the preceding 12 months (or for such shorter period that the registrant was required to file such reports), and (2) has been subject to such filing requirements for the past 90 days. <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityCurrentReportingStatus" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDI2_625cb61f-c046-434e-9108-c520ef3493d9">Yes</ix:nonNumeric> </span><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:9pt;font-weight:400;line-height:120%">x</span><span style="color:#000000;font-family:'Arial',sans-serif;font-size:9pt;font-weight:400;line-height:120%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:120%">No </span><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:9pt;font-weight:400;line-height:120%">o</span></div><div style="margin-top:6pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:120%">Indicate by check mark whether the registrant has submitted electronically every Interactive Data File required to be submitted pursuant to Rule 405 of Regulation S-T (&#167;232.405 of this chapter) during the preceding 12 months (or for such shorter period that the registrant was required to submit such files). <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityInteractiveDataCurrent" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDQ1_70c35d76-5e9b-4a70-a4fc-b50f1c9305d9">Yes</ix:nonNumeric> </span><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:9pt;font-weight:400;line-height:120%">x</span><span style="color:#000000;font-family:'Arial',sans-serif;font-size:9pt;font-weight:400;line-height:120%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:120%">No </span><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:9pt;font-weight:400;line-height:120%">o</span></div><div style="margin-top:6pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:120%">Indicate by check mark whether the registrant is a large accelerated filer, an accelerated filer, a non-accelerated filer, a smaller reporting company, or an emerging growth company. See the definitions of &#8220;large accelerated filer,&#8221; &#8220;accelerated filer,&#8221; &#8220;smaller reporting company,&#8221; and &#8220;emerging growth company&#8221; in Rule 12b-2 of the Exchange Act.</span></div><div style="margin-top:3pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:38.748%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.051%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:38.748%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.053%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityFilerCategory" format="ixt-sec:entityfilercategoryen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6OTI4YTI5NmQ0YTJjNGM4ZWJiZjdlNzQ5NjNhOTQ5MzgvdGFibGVyYW5nZTo5MjhhMjk2ZDRhMmM0YzhlYmJmN2U3NDk2M2E5NDkzOF8wLTAtMS0xLTEwMDAzNg_96167cd5-a37b-40a4-ab99-54cce024aeeb">Large accelerated filer</ix:nonNumeric></span></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:9pt;font-weight:400;line-height:100%">x</span></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:100%">Accelerated filer</span></td><td colspan="3" style="padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:9pt;font-weight:400;line-height:100%">o</span></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:100%">Non-accelerated filer</span></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:9pt;font-weight:400;line-height:100%">o</span></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:100%">Smaller reporting company</span></td><td colspan="3" style="padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:9pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntitySmallBusiness" format="ixt:fixed-false" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6OTI4YTI5NmQ0YTJjNGM4ZWJiZjdlNzQ5NjNhOTQ5MzgvdGFibGVyYW5nZTo5MjhhMjk2ZDRhMmM0YzhlYmJmN2U3NDk2M2E5NDkzOF8yLTMtMS0xLTEwMDAzNg_1029f2fd-af2d-4830-8076-598ee29e3e68">o</ix:nonNumeric></span></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:100%">Emerging growth company</span></td><td colspan="3" style="padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:9pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityEmergingGrowthCompany" format="ixt:fixed-false" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6OTI4YTI5NmQ0YTJjNGM4ZWJiZjdlNzQ5NjNhOTQ5MzgvdGFibGVyYW5nZTo5MjhhMjk2ZDRhMmM0YzhlYmJmN2U3NDk2M2E5NDkzOF80LTMtMS0xLTEwMDAzNg_6a501a26-7c17-4eed-91ea-49acd2ea3860">o</ix:nonNumeric></span></td></tr></table></div><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:120%">If an emerging growth company, indicate by check mark if the registrant has elected not to use the extended transition period for complying with any new or revised financial accounting standards provided pursuant to Section 13(a) of the Exchange Act. </span><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:9pt;font-weight:400;line-height:120%">o</span></div><div style="margin-top:3pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:120%">Indicate by check mark whether the registrant is a shell company (as defined in Rule 12b-2 of the Exchange Act). Yes </span><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:9pt;font-weight:400;line-height:120%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="dei:EntityShellCompany" format="ixt:fixed-false" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDQ2_5a79d85a-f315-4c36-82b4-6634fca164cb">o</ix:nonNumeric></span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:120%"> No </span><span style="color:#000000;font-family:'Wingdings',sans-serif;font-size:9pt;font-weight:400;line-height:120%">x</span></div><div style="margin-top:3pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:9pt;font-weight:400;line-height:120%">The number of shares of the registrant&#8217;s common stock, par value $0.001 per share, outstanding at April&#160;19, 2023 was <ix:nonFraction unitRef="shares" contextRef="i37551c7b2ead4393b6dfecd64cebfbe2_I20230419" decimals="INF" name="dei:EntityCommonStockSharesOutstanding" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDE3_5edf20f9-a9cf-4c95-acf4-71f483a41a94">36,532,756</ix:nonFraction> shares.</span></div><div style="height:31.5pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><span><br/></span></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_7"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:12pt;text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">SPS COMMERCE, INC.</span></div><div style="text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">QUARTERLY REPORT ON FORM 10-Q</span></div><div style="text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">TABLE OF CONTENTS</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:9.960%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:78.748%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:7.992%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%">Page</span></td></tr><tr><td colspan="6" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_10">PART I. FINANCIAL INFORMATION</a></span></div></td><td colspan="3" style="padding:0 1pt"></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Item 1.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_10">Financial Statements (unaudited)</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_10">3</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_16">Condensed Consolidated Balance Sheets </a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_16">3</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_19">Condensed Consolidated Statements of Comprehensive Income </a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_19">4</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_22">Condensed Consolidated Statements of Stockholders&#8217; Equity </a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_22">5</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_25">Condensed Consolidated Statements of Cash Flows </a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_25">6</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_31">Notes to Condensed Consolidated Financial Statements</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_31">7</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_79">Item 2.</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_79">Management&#8217;s Discussion and Analysis of Financial Condition and Results of Operations</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_79">17</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_109">Item 3.</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_109">Quantitative and Qualitative Disclosures About Market Risk</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_109">22</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_118">Item 4.</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_118">Controls and Procedures</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_118">23</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="6" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_121">PART II. OTHER INFORMATION</a></span></div></td><td colspan="3" style="padding:0 1pt"></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_124">Item 1.</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_124">Legal Proceedings</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_124">24</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_127">Item 1A.</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_127">Risk Factors</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_127">24</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_130">Item 2.</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_130">Unregistered Sales of Equity Securities and Use of Proceeds</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_130">24</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_133">Item 3.</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_133">Defaults Upon Senior Securities</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_133">24</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_136">Item 4.</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_136">Mine Safety Disclosures</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_136">24</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_139">Item 5.</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_139">Other Information</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_139">24</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_142">Item 6.</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_142">Exhibits</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_142">25</a></span></div></td></tr><tr style="height:3pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="6" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_145">SIGNATURES</a></span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><a style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%;text-decoration:none" href="#i6d9a8d1ab1f5454885a98aaf9e608722_145">26</a></span></div></td></tr></table></div><div style="margin-top:12pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">Unless the context otherwise requires, for purposes of the Quarterly Report on Form 10-Q, the words &#8220;we,&#8221; &#8220;us,&#8221; &#8220;our,&#8221; the &#8220;Company,&#8221; &#8220;SPS,&#8221; and &#8220;SPS Commerce&#8221; refer to SPS Commerce, Inc.</span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">2</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended March 31, 2023</span></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_10"></div><hr style="page-break-after:always"/><div style="min-height:13.5pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt;text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">PART I. &#8211; FINANCIAL INFORMATION</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_13"></div><div style="margin-top:12pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Item 1. Financial Statements</span></div><div style="margin-top:12pt;text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">SPS COMMERCE, INC. AND SUBSIDIARIES</span></div><div style="text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">CONDENSED CONSOLIDATED BALANCE SHEETS</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_16"></div><div style="margin-top:18pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:96.491%"><tr><td style="width:1.0%"></td><td style="width:69.051%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:14.051%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.992%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except shares)</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31,<br/>2023</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31,<br/>2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">ASSETS</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:100%">(unaudited) </span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Current assets</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Cash and cash equivalents</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:CashAndCashEquivalentsAtCarryingValue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMy0xLTEtMS0xMDAwMzY_ef015f0c-30ba-4ca5-a20d-9d8d1b629083">182,304</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:CashAndCashEquivalentsAtCarryingValue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMy0zLTEtMS0xMDAwMzY_b59211d8-ddbe-41ef-b022-5c9e35181920">162,893</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Short-term investments</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:ShortTermInvestments" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNC0xLTEtMS0xMDAwMzY_632e14c2-1ec8-4fc9-bd99-7e962b534220">51,146</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:ShortTermInvestments" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNC0zLTEtMS0xMDAwMzY_fb4ca49b-c8d2-485c-aba2-a87da782e82f">51,412</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Accounts receivable</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:AccountsReceivableGrossCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNS0xLTEtMS0xMDAwMzY_2423941d-56a8-4927-92c2-fb79272512b2">46,654</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:AccountsReceivableGrossCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNS0zLTEtMS0xMDAwMzY_cce5f12c-6ba4-44f0-b935-a780be65765d">42,501</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Allowance for credit losses</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNi0xLTEtMS0xMDAwMzY_daf772d1-f904-4a89-971a-b7693306adac">3,217</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNi0zLTEtMS0xMDAwMzY_ae33570b-101b-4265-8879-5d8a49772cfd">3,066</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Accounts receivable, net</span></td><td colspan="2" style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:AccountsReceivableNetCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNy0xLTEtMS0xMDAwMzY_ebf84fae-ba01-445e-ae9d-7a5d9f296c10">43,437</ix:nonFraction>&#160;</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"></td><td colspan="2" style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:AccountsReceivableNetCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNy0zLTEtMS0xMDAwMzY_c0bae18e-a863-46a3-94c0-486ed034b722">39,435</ix:nonFraction>&#160;</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Deferred costs</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:DeferredCostsCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfOC0xLTEtMS0xMDAwMzY_ce6ecc96-38cf-43ad-a6dc-195fc5725f6b">53,844</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:DeferredCostsCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfOC0zLTEtMS0xMDAwMzY_3b8c94c5-ae17-4799-851e-0b8ed36f4a73">52,755</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Other assets</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:OtherAssetsCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfOS0xLTEtMS0xMDAwMzY_b2a905b8-3d3a-4b5e-8955-bd37cef21839">15,651</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:OtherAssetsCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfOS0zLTEtMS0xMDAwMzY_29c5d37b-27aa-4461-a923-4f97d6374273">16,319</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Total current assets</span></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:AssetsCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTAtMS0xLTEtMTAwMDM2_18c08b6f-f633-4ca4-b8d2-9dad3f6310e1">346,382</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:AssetsCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTAtMy0xLTEtMTAwMDM2_5b8e4212-93c5-45ad-aef0-fb88b3f115f3">322,814</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Property and equipment, net</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTEtMS0xLTEtMTAwMDM2_6de16038-1992-45d8-9dd4-7393c8d72aeb">35,078</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTEtMy0xLTEtMTAwMDM2_c0ab1cba-c5a4-46f6-bf0f-09e178201a19">35,458</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Operating lease right-of-use assets</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:OperatingLeaseRightOfUseAsset" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTItMS0xLTEtMTAwMDM2_467d9a25-b19b-4f86-917f-0f3ed1f74957">8,451</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:OperatingLeaseRightOfUseAsset" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTItMy0xLTEtMTAwMDM2_de09dc61-5413-4de9-8221-fdcd6b77188a">9,170</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Goodwill</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:Goodwill" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTMtMS0xLTEtMTAwMDM2_c4d3fe72-c2a2-4211-a940-0b546272e6f2">199,001</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:Goodwill" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTMtMy0xLTEtMTAwMDM2_e8537fc2-14d3-4ba8-a1be-11e0fcc2717e">197,284</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Intangible assets, net</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTQtMS0xLTEtMTAwMDM2_d80c5f47-4451-45c6-9f0b-9da5e69e9dc5">84,536</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTQtMy0xLTEtMTAwMDM2_f67b16fb-917b-4039-ad19-110e540ecd2f">88,352</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Other assets</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">&#160;</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Deferred costs, non-current</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:DeferredCosts" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTYtMS0xLTEtMTAwMDM2_e8918210-a1ca-4b05-b5a0-4db0043eaa92">17,965</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:DeferredCosts" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTYtMy0xLTEtMTAwMDM2_1d106c91-676c-4bad-b8c1-805086897382">17,424</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Deferred income tax assets</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:DeferredIncomeTaxAssetsNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTctMS0xLTEtMTAwMDM2_6f7e1f6f-644d-4b88-aeef-8383a7364dde">3,365</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:DeferredIncomeTaxAssetsNet" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTctMy0xLTEtMTAwMDM2_d3a54e63-eb80-4f06-9593-9caac51bf637">227</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Other assets, non-current</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:OtherAssetsNoncurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTgtMS0xLTEtMTAwMDM2_63e11651-9ef1-4045-a3cb-4e1596daf07c">2,149</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:OtherAssetsNoncurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTgtMy0xLTEtMTAwMDM2_a478afa8-92b3-4621-89d6-73f8927469a9">2,185</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Total assets</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:Assets" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTktMS0xLTEtMTAwMDM2_5b37d556-e4c5-47df-9d22-cebbc426093f">696,927</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:Assets" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTktMy0xLTEtMTAwMDM2_f15502d6-56a1-4ef7-8558-2d65ecc9050a">672,914</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:700;line-height:100%">LIABILITIES AND STOCKHOLDERS&#8217; EQUITY</span></td><td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">&#160;</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Current liabilities</span></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">&#160;</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Accounts payable</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:AccountsPayableCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjItMS0xLTEtMTAwMDM2_1a1c6518-08eb-45bf-b680-af47953e0f39">5,339</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:AccountsPayableCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjItMy0xLTEtMTAwMDM2_38175d67-c547-4ca1-ba29-abf47b14437b">11,256</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Accrued compensation</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:EmployeeRelatedLiabilitiesCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjMtMS0xLTEtMTAwMDM2_67ef688e-51bb-41a2-81d9-28ac73336400">26,431</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:EmployeeRelatedLiabilitiesCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjMtMy0xLTEtMTAwMDM2_cb857773-6740-43bb-95e4-d4557c10a45c">30,235</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Accrued expenses</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:AccruedLiabilitiesCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjQtMS0xLTEtMTAwMDM2_76f9a0b3-2526-4ffb-bc5f-ca2f6b7c8251">8,163</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:AccruedLiabilitiesCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjQtMy0xLTEtMTAwMDM2_367214bf-4bdd-419e-b995-da77d52068b6">7,451</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Deferred revenue</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:ContractWithCustomerLiabilityCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjUtMS0xLTEtMTAwMDM2_04baad38-9842-475d-bab4-2addd4425893">62,907</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:ContractWithCustomerLiabilityCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjUtMy0xLTEtMTAwMDM2_8fabd8ff-bdc0-43db-a255-53cffd96bdb0">57,423</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Operating lease liabilities</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:OperatingLeaseLiabilityCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjYtMS0xLTEtMTAwMDM2_df14d4ba-b262-4fb5-b7f8-01595b7146b9">4,121</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:OperatingLeaseLiabilityCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjYtMy0xLTEtMTAwMDM2_6eb353ef-2283-46c9-b7ae-b8a4ff7a87bd">4,277</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Total current liabilities</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:LiabilitiesCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjctMS0xLTEtMTAwMDM2_6df311f6-9f7c-4604-a9ae-0ef5c0cc3dbe">106,961</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:LiabilitiesCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjctMy0xLTEtMTAwMDM2_19fea991-821d-4042-8f4b-b57a82ac5f6c">110,642</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Other liabilities</span></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">&#160;</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Deferred revenue, non-current</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:ContractWithCustomerLiabilityNoncurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjktMS0xLTEtMTAwMDM2_4f5ee5cf-aeb4-45f0-bddd-d46c9282835f">5,105</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:ContractWithCustomerLiabilityNoncurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjktMy0xLTEtMTAwMDM2_6589f287-cb68-4197-9b4d-2d980e809893">4,771</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Operating lease liabilities, non-current</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:OperatingLeaseLiabilityNoncurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzAtMS0xLTEtMTAwMDM2_1b418907-8ce9-4ad1-89c4-cb700e96b630">11,994</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:OperatingLeaseLiabilityNoncurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzAtMy0xLTEtMTAwMDM2_676bb1a9-f965-4724-82b9-ce86c47409ef">13,009</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Deferred income tax liabilities</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:DeferredIncomeTaxLiabilitiesNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzEtMS0xLTEtMTAwMDM2_b24d28c3-8d12-4c4f-ae31-1274aa584674">6,977</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:DeferredIncomeTaxLiabilitiesNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzEtMy0xLTEtMTAwMDM2_252519a3-2d51-4f2d-9eed-c06653cc429a">7,419</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Total liabilities</span></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:Liabilities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzItMS0xLTEtMTAwMDM2_eb9ea4b1-7b20-4816-b0fa-0b563e6723b3">131,037</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:Liabilities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzItMy0xLTEtMTAwMDM2_f1df73e9-577c-42ac-903f-40144cee6288">135,841</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Commitments and contingencies</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" xsi:nil="true" name="us-gaap:CommitmentsAndContingencies" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzMtMS0xLTEtMTAwMDM2_370596b9-8cda-4591-903b-2af8bcc01fcf"></ix:nonFraction></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" xsi:nil="true" name="us-gaap:CommitmentsAndContingencies" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzMtMy0xLTEtMTAwMDM2_34d9dfcd-fe0a-476d-b57d-d8cd69738e72"></ix:nonFraction></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Stockholders' equity</span></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">&#160;</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="padding-left:9pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Preferred stock, $<ix:nonFraction unitRef="usdPerShare" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="INF" name="us-gaap:PreferredStockParOrStatedValuePerShare" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfMjE_33231be9-c09c-4f23-b5a7-0fa955c4e8ce"><ix:nonFraction unitRef="usdPerShare" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="INF" name="us-gaap:PreferredStockParOrStatedValuePerShare" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfMjE_c2eff8a1-4631-447b-8bd3-cc3072028119">0.001</ix:nonFraction></ix:nonFraction> par value; <ix:nonFraction unitRef="shares" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="INF" name="us-gaap:PreferredStockSharesAuthorized" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfMzU_1db8a2ed-be2a-439d-ae71-29a5f8868cc0"><ix:nonFraction unitRef="shares" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="INF" name="us-gaap:PreferredStockSharesAuthorized" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfMzU_332674f8-d9de-4ccb-a1c5-c379ec728dda">5,000,000</ix:nonFraction></ix:nonFraction> shares authorized; <ix:nonFraction unitRef="shares" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="INF" name="us-gaap:PreferredStockSharesOutstanding" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfNTc_0a102899-20bf-443f-b1d0-fa8328ba15e6"><ix:nonFraction unitRef="shares" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="INF" name="us-gaap:PreferredStockSharesOutstanding" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfNTc_d056115b-eeb2-41a0-9765-17d48c1e05c4"><ix:nonFraction unitRef="shares" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="INF" name="us-gaap:PreferredStockSharesIssued" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfNTc_f9a50258-e6dd-4d98-83c6-fedcb864fe1a"><ix:nonFraction unitRef="shares" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="INF" name="us-gaap:PreferredStockSharesIssued" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfNTc_fc7fcd62-649b-491e-9b08-36ce502f8826">0</ix:nonFraction></ix:nonFraction></ix:nonFraction></ix:nonFraction> shares issued and outstanding</span></div></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:PreferredStockValue" format="ixt:fixed-zero" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMS0xLTEtMTAwMDM2_ff551cf0-0e34-4b3c-bdf0-6d900e25dc3e">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:PreferredStockValue" format="ixt:fixed-zero" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMy0xLTEtMTAwMDM2_6f219390-e789-4d25-a564-d49a38a73176">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="padding-left:9pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Common stock, $<ix:nonFraction unitRef="usdPerShare" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="INF" name="us-gaap:CommonStockParOrStatedValuePerShare" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfMTg_0aee8db9-5777-4a91-be86-5472fdfb436e"><ix:nonFraction unitRef="usdPerShare" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="INF" name="us-gaap:CommonStockParOrStatedValuePerShare" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfMTg_c1a8da2a-4baa-4fc9-bcf3-d815bfc1f000">0.001</ix:nonFraction></ix:nonFraction> par value; <ix:nonFraction unitRef="shares" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="INF" name="us-gaap:CommonStockSharesAuthorized" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfMzI_86ac56a0-3825-4b80-b1a0-0dfdb3e37491"><ix:nonFraction unitRef="shares" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="INF" name="us-gaap:CommonStockSharesAuthorized" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfMzI_8a47c26a-b343-4f62-9e06-5e39d4ded78e">110,000,000</ix:nonFraction></ix:nonFraction> shares authorized; <ix:nonFraction unitRef="shares" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="INF" name="us-gaap:CommonStockSharesIssued" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfNTQ_27f673cb-6f20-4810-b2e5-9d26f5e23bd5">38,683,854</ix:nonFraction> and <ix:nonFraction unitRef="shares" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="INF" name="us-gaap:CommonStockSharesIssued" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfNjE_aa3fe2f0-2629-4562-9f8a-1d25e5db62b7">38,309,144</ix:nonFraction> shares issued; and <ix:nonFraction unitRef="shares" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="INF" name="us-gaap:CommonStockSharesOutstanding" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfODM_e947462b-5839-4116-8f4d-c60b3392e739">36,532,756</ix:nonFraction> and <ix:nonFraction unitRef="shares" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="INF" name="us-gaap:CommonStockSharesOutstanding" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfNDk0NzgwMjMyNTEzOA_28042723-fd59-40dc-a97e-7fe4be89d2ee"><ix:nonFraction unitRef="shares" contextRef="i0fb6c4ac52bb4e62922d66b045aa21d1_I20221231" decimals="INF" name="us-gaap:CommonStockSharesOutstanding" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfNDk0NzgwMjMyNTEzOA_dea9fb7c-df27-4ccd-b718-b9d2848a4cac">36,158,046</ix:nonFraction></ix:nonFraction> shares outstanding, respectively</span></div></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:CommonStockValue" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMS0xLTEtMTAwMDM2_aa3d7373-e8fe-4542-8b2d-e9c7a1f8ca44">39</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:CommonStockValue" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMy0xLTEtMTAwMDM2_975b3155-2f4f-4e7b-941a-a2cbebaaf884">38</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="padding-left:9pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Treasury Stock, at cost; <ix:nonFraction unitRef="shares" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="INF" name="us-gaap:TreasuryStockCommonShares" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzctMC0xLTEtMTAwMDM2L3RleHRyZWdpb246YmNmMGQzOTYyZjFhNDhhNGJjOWFmNTMzOWExMDkzNDNfMjk_022b55b2-7152-4ee4-9399-6bfa1bdaa8b9"><ix:nonFraction unitRef="shares" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="INF" name="us-gaap:TreasuryStockCommonShares" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzctMC0xLTEtMTAwMDM2L3RleHRyZWdpb246YmNmMGQzOTYyZjFhNDhhNGJjOWFmNTMzOWExMDkzNDNfMjk_7627e715-678f-4ebd-bdca-94c3af30e8f7">2,151,098</ix:nonFraction></ix:nonFraction> shares</span></div></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:TreasuryStockCommonValue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzctMS0xLTEtMTAwMDM2_fac5e11e-083b-4a74-8e3a-22a4169154b6">128,892</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:TreasuryStockCommonValue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzctMy0xLTEtMTAwMDM2_b7c655e2-3227-4190-9b10-23b3fce5cd4b">128,892</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Additional paid-in capital</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:AdditionalPaidInCapitalCommonStock" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzgtMS0xLTEtMTAwMDM2_d22d4fb9-7dea-4ca5-9143-9529339be67b">489,716</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:AdditionalPaidInCapitalCommonStock" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzgtMy0xLTEtMTAwMDM2_68699fcc-705d-49cf-83d7-be98ef589c91">476,117</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Retained earnings</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:RetainedEarningsAccumulatedDeficit" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzktMS0xLTEtMTAwMDM2_fe59099e-4116-47eb-94dd-111f24fc02eb">208,510</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:RetainedEarningsAccumulatedDeficit" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzktMy0xLTEtMTAwMDM2_3ccf9a91-be40-4a68-a846-391cff4d8b00">193,221</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Accumulated other comprehensive loss</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" sign="-" name="us-gaap:AccumulatedOtherComprehensiveIncomeLossNetOfTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNDAtMS0xLTEtMTAwMDM2_9797d73f-66d7-4f76-a276-ad8224258c29">3,483</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" sign="-" name="us-gaap:AccumulatedOtherComprehensiveIncomeLossNetOfTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNDAtMy0xLTEtMTAwMDM2_17d45d79-3b0a-4c8a-a982-6fc94d866c55">3,411</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Total stockholders&#8217; equity</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNDEtMS0xLTEtMTAwMDM2_bb360056-660a-438b-a195-a9be4c14c43c">565,890</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNDEtMy0xLTEtMTAwMDM2_d1f5a038-25ea-48c1-b186-dde188219ddf">537,073</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 37pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">Total liabilities and stockholders&#8217; equity</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:LiabilitiesAndStockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNDItMS0xLTEtMTAwMDM2_33aa1061-3ffe-4dbe-9c44-990e96cab30e">696,927</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8.5pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:LiabilitiesAndStockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNDItMy0xLTEtMTAwMDM2_8154736f-e34b-4b7c-a85f-e992b9df6517">672,914</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr></table></div><div style="margin-top:6pt;text-align:center"><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%">See accompanying notes to these condensed consolidated financial statements.</span></div><div style="height:13.5pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:96.491%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">3</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended March 31, 2023</span></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_19"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:12pt;text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">SPS COMMERCE, INC. AND SUBSIDIARIES</span></div><div style="text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">CONDENSED CONSOLIDATED STATEMENTS OF COMPREHENSIVE INCOME</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.848%"><tr><td style="width:1.0%"></td><td style="width:70.371%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.860%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.863%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except per share amounts) (unaudited)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Revenues</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMi0xLTEtMS0xMDAwMzY_d15a6dbb-d433-40fc-9938-fbb402690b30">125,868</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMi0zLTEtMS0xMDAwMzY_ef94d7c3-f049-4b7a-a839-7d76c919c643">105,193</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cost of revenues</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:CostOfRevenue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMy0xLTEtMS0xMDAwMzY_d6a23aa0-392c-47c0-8a84-10c3cd3ec0fe">42,964</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:CostOfRevenue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMy0zLTEtMS0xMDAwMzY_02c7aa39-15f2-433d-8951-8a2f181e8582">35,389</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Gross profit</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:GrossProfit" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfNC0xLTEtMS0xMDAwMzY_346515c0-5812-4da6-99b7-e5927c5f55c9">82,904</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:GrossProfit" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfNC0zLTEtMS0xMDAwMzY_deb1f50d-f976-4cdb-b69d-a5f8632ef6b7">69,804</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating expenses</span></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Sales and marketing</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:SellingAndMarketingExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfNi0xLTEtMS0xMDAwMzY_9dbde171-951e-436a-a30b-2cd285d54b5a">29,083</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:SellingAndMarketingExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfNi0zLTEtMS0xMDAwMzY_8194e91d-178c-4873-b556-8612138937a6">24,655</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Research and development</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:ResearchAndDevelopmentExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfNy0xLTEtMS0xMDAwMzY_1c386dc8-ab52-4105-b159-5af7ba042c0c">12,563</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:ResearchAndDevelopmentExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfNy0zLTEtMS0xMDAwMzY_601a90c7-fb28-4e43-8969-d0cdf39970c5">10,701</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">General and administrative</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:GeneralAndAdministrativeExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfOC0xLTEtMS0xMDAwMzY_b7e5f79d-2263-49e2-a372-cf45ed478360">20,677</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:GeneralAndAdministrativeExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfOC0zLTEtMS0xMDAwMzY_05ab181f-5bed-41a0-a69f-f24f6f53ff8c">15,468</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Amortization of intangible assets</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:AmortizationOfIntangibleAssets" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfOS0xLTEtMS0xMDAwMzY_89399400-99d2-46f7-b5dd-0b2beb2adaaf">3,851</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:AmortizationOfIntangibleAssets" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfOS0zLTEtMS0xMDAwMzY_1e985be4-5ecf-47d4-96ff-8bdc9fc8f1dd">2,470</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total operating expenses</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:OperatingExpenses" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTAtMS0xLTEtMTAwMDM2_71ba1d37-8a47-4443-bc9f-5de2938987d5">66,174</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:OperatingExpenses" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTAtMy0xLTEtMTAwMDM2_314aa4b2-51d6-46dd-a4ca-a1eeab7c905d">53,294</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Income from operations</span></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:OperatingIncomeLoss" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTEtMS0xLTEtMTAwMDM2_843cc7d4-9fcb-436e-9778-a7be43da5329">16,730</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:OperatingIncomeLoss" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTEtMy0xLTEtMTAwMDM2_4f84be58-8c0b-40fc-ad24-5b4bdd217255">16,510</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Other income, net</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:NonoperatingIncomeExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTItMS0xLTEtMTAwMDM2_0e0cf0bc-d21a-428b-84d1-d3ac3cb7ba8d">1,276</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:NonoperatingIncomeExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTItMy0xLTEtMTAwMDM2_a31c6b17-7830-409d-9487-f08410795ce7">423</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Income before income taxes</span></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTMtMS0xLTEtMTAwMDM2_a6f80b6c-ba0c-453e-a3ef-f7c5455f1b7b">18,006</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTMtMy0xLTEtMTAwMDM2_1a37247e-c2f4-4c27-be70-d670c49bfc22">16,933</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Income tax expense</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:IncomeTaxExpenseBenefit" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTQtMS0xLTEtMTAwMDM2_782003cf-580b-413b-a5f5-76827962c361">2,717</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:IncomeTaxExpenseBenefit" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTQtMy0xLTEtMTAwMDM2_64bd424f-95b9-4523-9feb-4888818a2628">4,330</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net income</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:NetIncomeLoss" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTUtMS0xLTEtMTAwMDM2_e097781f-9a33-462c-af43-8492e52070b0">15,289</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:NetIncomeLoss" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTUtMy0xLTEtMTAwMDM2_0d496217-35f7-48e4-a178-8b2addd5c76a">12,603</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Other comprehensive income (expense)</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Foreign currency translation adjustments</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331" decimals="-3" sign="-" name="us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTctMS0xLTEtMTAwMDM2_77dbfcac-f808-492f-896e-0e8c2bffda67">95</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTctMy0xLTEtMTAwMDM2_47802594-7968-47a6-a853-beb8f66e2998">730</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="padding-left:15pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Unrealized gain (loss) on investments, net of tax of $<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTgtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246M2Q1ODAyYTJiNzM1NDQ0YmI1MjhlMzg5Y2YxZWIwY2JfNTc_f4f5fce5-9819-4819-b9c4-eb2e0d67fdf0">133</ix:nonFraction> and ($<ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" sign="-" name="us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTgtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246M2Q1ODAyYTJiNzM1NDQ0YmI1MjhlMzg5Y2YxZWIwY2JfNjE_5869c64b-e170-4def-b606-132395dcea82">1</ix:nonFraction>), respectively</span></div></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331" decimals="-3" name="us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTgtMS0xLTEtMTAwMDM2_978b7d93-7748-4bc8-8a69-5fb26caf65f4">399</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" sign="-" name="us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTgtMy0xLTEtMTAwMDM2_37e698ca-bc39-4ac5-b397-f993f4e21b91">3</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="padding-left:15pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Reclassification of (gain) loss on investments into earnings, net of tax of ($<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTktMC0xLTEtMTAwMDM2L3RleHRyZWdpb246YTk2NTQ1YmFiOGMzNGM5ZmI1NzA2MzIzZmJjZWNlMTdfODA_a8ceb232-50a3-4bb0-931d-a3323d87c0d5">125</ix:nonFraction>) and $<ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" sign="-" name="us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTktMC0xLTEtMTAwMDM2L3RleHRyZWdpb246YTk2NTQ1YmFiOGMzNGM5ZmI1NzA2MzIzZmJjZWNlMTdfODQ_7e257d48-dc3b-47f5-a7dc-36c02f8c8ea0">4</ix:nonFraction>, respectively</span></div></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331" decimals="-3" name="us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTktMS0xLTEtMTAwMDM2_c011e146-4cfc-4b4b-9b2e-638c375c7652">376</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" sign="-" name="us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTktMy0xLTEtMTAwMDM2_01f75933-78a8-47ad-97e7-40088ddb427d">11</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total other comprehensive income (expense)</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" sign="-" name="us-gaap:OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjAtMS0xLTEtMTAwMDM2_4fb5fa7f-54e6-4b7c-94a1-e173ac023c68">72</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjAtMy0xLTEtMTAwMDM2_c8541d8e-e783-408f-869b-37cc41b248b8">738</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Comprehensive income</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:ComprehensiveIncomeNetOfTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjEtMS0xLTEtMTAwMDM2_536500f1-7a87-4a46-aa8b-877fb3542975">15,217</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:ComprehensiveIncomeNetOfTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjEtMy0xLTEtMTAwMDM2_d79e4098-7b47-47a7-a849-ca863c63332b">13,341</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr style="height:15pt"><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net income per share</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Basic</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="2" name="us-gaap:EarningsPerShareBasic" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjQtMS0xLTEtMTAwMDM2_73c4c13d-ab2d-477d-b371-b60678ae2aa2">0.42</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="2" name="us-gaap:EarningsPerShareBasic" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjQtMy0xLTEtMTAwMDM2_895bd389-593b-444f-a448-256204da3856">0.35</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Diluted</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="2" name="us-gaap:EarningsPerShareDiluted" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjUtMS0xLTEtMTAwMDM2_4f7ca6bc-340e-4e3c-b26e-57550a562872">0.41</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="2" name="us-gaap:EarningsPerShareDiluted" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjUtMy0xLTEtMTAwMDM2_e8e121f6-5207-409e-be87-cc8512ef26dc">0.34</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr style="height:15pt"><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted average common shares used to compute net income per share</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Basic</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:WeightedAverageNumberOfSharesOutstandingBasic" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjgtMS0xLTEtMTAwMDM2_4a25c50d-ffb0-46d4-a736-81b2324d36d0"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:WeightedAverageNumberOfSharesOutstandingBasic" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjgtMS0xLTEtMTAwMDM2_c84e6d40-cbac-4c7b-a790-1c8c1c25b87d">36,427</ix:nonFraction></ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:WeightedAverageNumberOfSharesOutstandingBasic" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjgtMy0xLTEtMTAwMDM2_a42a3d2f-b6bf-40fb-95bd-cdf54bf0b1d4">36,136</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Diluted</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjktMS0xLTEtMTAwMDM2_c9cacfb3-142b-417d-9c4d-2f606cff22e5"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjktMS0xLTEtMTAwMDM2_fa9d9ba7-2aca-4232-8d9b-84c0a1c1b37a">37,155</ix:nonFraction></ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjktMy0xLTEtMTAwMDM2_95d3c5bd-3ab5-49f3-9099-9c39ed85c867">36,989</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div><div style="margin-top:6pt;text-align:center"><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%">See accompanying notes to these condensed consolidated financial statements.</span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">4</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended March 31, 2023</span></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_22"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt;text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">SPS COMMERCE, INC. AND SUBSIDIARIES</span></div><div style="text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">CONDENSED CONSOLIDATED STATEMENTS OF STOCKHOLDERS&#8217; EQUITY</span><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:23.353%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:7.643%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.346%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:7.643%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.346%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:7.643%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.346%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:7.643%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.346%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:7.643%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.346%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:7.643%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.346%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.419%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.346%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:7.648%"></td><td style="width:0.1%"></td></tr><tr style="height:21pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:700;line-height:100%">Common Stock</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:700;line-height:100%">Treasury Stock </span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" rowspan="2" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:700;line-height:100%">Additional<br/>Paid-in<br/>Capital</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" rowspan="2" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:700;line-height:100%">Retained<br/>Earnings </span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" rowspan="2" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:700;line-height:100%">Accumulated Other Comprehensive Loss</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" rowspan="2" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:700;line-height:100%">Total<br/>Stockholders'<br/>Equity</span></td></tr><tr style="height:12pt"><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:700;line-height:100%">(in thousands, except shares) (unaudited)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:700;line-height:100%">Shares </span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:700;line-height:100%">Amount</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:700;line-height:100%">Shares</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:700;line-height:100%">Amount </span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Balances, December 31, 2021</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i6c4d0a1e68ca4de9a8b11e4ce719a889_I20211231" decimals="INF" name="us-gaap:CommonStockSharesOutstanding" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi0xLTEtMS0xMDAwMzY_efe62904-f84a-4189-a00c-17276db99d8e">36,009,257</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i6c4d0a1e68ca4de9a8b11e4ce719a889_I20211231" decimals="-3" name="us-gaap:StockholdersEquity" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi0zLTEtMS0xMDAwMzY_778c2226-8921-449c-bf31-e61c587db140">38</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i711912af9a734238a854043c07d37223_I20211231" decimals="INF" name="us-gaap:TreasuryStockCommonShares" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi01LTEtMS0xMDAwMzY_5bb74ead-dacb-4e1c-83c4-76b0a8db6de9">1,789,353</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i711912af9a734238a854043c07d37223_I20211231" decimals="-3" sign="-" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi03LTEtMS0xMDAwMzY_50834772-fa1f-460d-abb6-70e3fc6fe5dc">85,677</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="id39e6985d7b2436da2d47a1c0785aa39_I20211231" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi05LTEtMS0xMDAwMzY_b0eb82e0-9707-4a20-8787-66eb8a911ded">433,258</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ia7960d706d64455a9dcc2a1cb1cc072b_I20211231" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi0xMS0xLTEtMTAwMDM2_a5a24773-93ca-41a2-8966-04dab170f89f">138,087</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i6f9600d5b58b4add81e29b168a498238_I20211231" decimals="-3" sign="-" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi0xMy0xLTEtMTAwMDM2_23e1dfbd-c2d0-4ddc-a12e-f3a3c21148ff">1,447</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="id23181cd6ae24a028a249a4d25818065_I20211231" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi0xNS0xLTEtMTAwMDM2_1181772b-d793-459c-8826-a3c17b3c5cb3">484,259</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Stock-based compensation</span></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i1fc9801726514305b4f9b2bdf7d77387_D20220101-20220331" decimals="-3" name="us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMy05LTEtMS0xMDAwMzY_c62a5dfb-775f-4104-a0b1-d3744e8e11e3">8,496</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMy0xNS0xLTEtMTAwMDM2_b66faef8-ebb7-4b9a-9817-567499a302c4">8,496</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Shares issued pursuant to stock awards</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="idd114f039c2f4f8abd444d113432aef1_D20220101-20220331" decimals="INF" name="us-gaap:StockIssuedDuringPeriodSharesShareBasedCompensation" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNC0xLTEtMS0xMDAwMzY_d2c6b2aa-8697-4718-b541-95e3b3f9cf44">231,107</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i1fc9801726514305b4f9b2bdf7d77387_D20220101-20220331" decimals="-3" name="us-gaap:StockIssuedDuringPeriodValueShareBasedCompensation" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNC05LTEtMS0xMDAwMzY_83b85764-beeb-4f3d-a78c-f5a82959aa34">504</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:StockIssuedDuringPeriodValueShareBasedCompensation" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNC0xNS0xLTEtMTAwMDM2_f54ebe67-c831-4d3b-8bcc-23c7fac46d7c">504</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Employee stock purchase plan activity</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="idd114f039c2f4f8abd444d113432aef1_D20220101-20220331" decimals="INF" name="us-gaap:StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNS0xLTEtMS0xMDAwMzY_ea5bf63b-3400-442c-8734-6298f218866b">1,698</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i1fc9801726514305b4f9b2bdf7d77387_D20220101-20220331" decimals="-3" name="us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNS05LTEtMS0xMDAwMzY_42c3c61a-bc22-4b82-a0a6-88f42976caea">147</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNS0xNS0xLTEtMTAwMDM2_c4af56ea-0162-4571-a908-e10e47aca001">147</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Repurchases of common stock</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="shares" contextRef="idd114f039c2f4f8abd444d113432aef1_D20220101-20220331" decimals="INF" name="us-gaap:TreasuryStockSharesAcquired" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNi0xLTEtMS0xMDAwMzY_ded3f678-8504-418c-a6cd-7a8fd035fbe3">121,544</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ie7c55ab2807f4502a58026a33c40c206_D20220101-20220331" decimals="INF" name="us-gaap:TreasuryStockSharesAcquired" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNi01LTEtMS0xMDAwMzY_97bf0b14-740f-48ef-bd73-a38572229859">121,544</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="ie7c55ab2807f4502a58026a33c40c206_D20220101-20220331" decimals="-3" name="us-gaap:TreasuryStockValueAcquiredCostMethod" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNi03LTEtMS0xMDAwMzY_68606d02-b59e-4b13-bc18-2f71eed4eb58">15,226</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:TreasuryStockValueAcquiredCostMethod" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNi0xNS0xLTEtMTAwMDM2_c1317cef-0940-40e1-9275-1f100421a40d">15,226</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Net income</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i7b9811e5d915467c97be523960c15694_D20220101-20220331" decimals="-3" name="us-gaap:NetIncomeLoss" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNy0xMS0xLTEtMTAwMDM2_54373a64-206d-453e-9eba-d4ffdee169e6">12,603</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:NetIncomeLoss" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNy0xNS0xLTEtMTAwMDM2_d021294c-b5b7-4ac2-b53c-237ccceb9ded">12,603</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Foreign currency translation adjustments</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i75d8049bb9b74cb18a2bc589da52a8fa_D20220101-20220331" decimals="-3" name="us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfOC0xMy0xLTEtMTAwMDM2_162325f3-8858-417b-b8e7-ea46ae342d77">730</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfOC0xNS0xLTEtMTAwMDM2_b1f8ecf8-ef13-4e1c-b555-8856e1d382f4">730</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Unrealized loss on investments, net of tax</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i75d8049bb9b74cb18a2bc589da52a8fa_D20220101-20220331" decimals="-3" sign="-" name="us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfOS0xMy0xLTEtMTAwMDM2_04f402e1-49bd-4f93-8304-f5093e8295b5">3</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" sign="-" name="us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfOS0xNS0xLTEtMTAwMDM2_fa5ab366-2afe-403d-aa79-09a503d7ba6d">3</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Reclassification of loss on investments into earnings, net of tax</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i75d8049bb9b74cb18a2bc589da52a8fa_D20220101-20220331" decimals="-3" sign="-" name="us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTAtMTMtMS0xLTEwMDAzNg_7d7def61-91b4-4e2b-91d1-458f09aa3119">11</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" sign="-" name="us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTAtMTUtMS0xLTEwMDAzNg_1450cf76-3342-467a-8ea6-324ffe67cca0">11</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Balances, March 31, 2022</span></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i8124e569001b4e4b82731473fb5747be_I20220331" decimals="INF" name="us-gaap:CommonStockSharesOutstanding" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtMS0xLTEtMTAwMDM2_28375fcd-3929-4a00-8c13-bbe4928b03ec">36,120,518</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i8124e569001b4e4b82731473fb5747be_I20220331" decimals="-3" name="us-gaap:StockholdersEquity" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtMy0xLTEtMTAwMDM2_d2a1b884-331a-4538-95a7-72fdfaa84cfd">38</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ibfcbe17b3dac42f7abe430e868e4f22b_I20220331" decimals="INF" name="us-gaap:TreasuryStockCommonShares" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtNS0xLTEtMTAwMDM2_98d904a1-0a83-4973-a88e-1284f040f758">1,910,897</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="ibfcbe17b3dac42f7abe430e868e4f22b_I20220331" decimals="-3" sign="-" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtNy0xLTEtMTAwMDM2_211d6401-6572-41b9-ba26-d99006bc75ba">100,903</ix:nonFraction>)</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="if778689a912e42d6b2037b7a25101d96_I20220331" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtOS0xLTEtMTAwMDM2_2103f195-9a18-491a-b09b-a7619893e264">442,405</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="iea4c199918fe4c558f469af3807faa16_I20220331" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtMTEtMS0xLTEwMDAzNg_d859bdd2-136d-4ad6-8462-51f8226180fa">150,690</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i55d085d612994f239183415316aadc58_I20220331" decimals="-3" sign="-" name="us-gaap:StockholdersEquity" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtMTMtMS0xLTEwMDAzNg_e5421751-f7f7-4b62-99d9-438be9982d9b">709</ix:nonFraction>)</span></td><td style="background-color:#ffffff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="iea65401e964c4d079f6a7764673f9d3e_I20220331" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtMTUtMS0xLTEwMDAzNg_4c8e5ffe-dfdb-46ab-b7c1-cac1cce7bce0">491,521</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr style="height:14pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:3pt double #000;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Balances, December 31, 2022</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i0fb6c4ac52bb4e62922d66b045aa21d1_I20221231" decimals="INF" name="us-gaap:CommonStockSharesOutstanding" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtMS0xLTEtMTAwMDM2_124b09d3-e32b-4553-9451-bdcfff00c575">36,158,046</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i0fb6c4ac52bb4e62922d66b045aa21d1_I20221231" decimals="-3" name="us-gaap:StockholdersEquity" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtMy0xLTEtMTAwMDM2_572a8990-52ea-4014-ada9-e3e96b52d22c">38</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i8af1540ceff142b6a0d5b42e48a50184_I20221231" decimals="INF" name="us-gaap:TreasuryStockCommonShares" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtNS0xLTEtMTAwMDM2_4706e8d2-bb42-4ad7-ab3c-cc0d2c7a95a3">2,151,098</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i8af1540ceff142b6a0d5b42e48a50184_I20221231" decimals="-3" sign="-" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtNy0xLTEtMTAwMDM2_36dedc39-95be-4c61-aa05-3e0c60b861af">128,892</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i6414f87f71f94519989c31299a6bdc50_I20221231" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtOS0xLTEtMTAwMDM2_2aa835f7-d739-469a-b6f8-9522be875dd8">476,117</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i816385f2c35a409ab40061bbedc4ce46_I20221231" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtMTEtMS0xLTEwMDAzNg_55678cc7-6410-42fc-9e24-b131fd0fe117">193,221</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i4efe2f28c7954c8a8aba61558e2a21d5_I20221231" decimals="-3" sign="-" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtMTMtMS0xLTEwMDAzNg_c6527d21-64e9-478c-bce6-8e51bea85eac">3,411</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtMTUtMS0xLTEwMDAzNg_996a33a0-4f35-4f84-bf98-a823bf793b71">537,073</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Stock-based compensation</span></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="idd022eaf6b814505b1ba92ba75ab3173_D20230101-20230331" decimals="-3" name="us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTQtOS0xLTEtMTAwMDM2_866d1b1c-1d72-4ae9-a822-ed424f741500">11,175</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTQtMTUtMS0xLTEwMDAzNg_fa6614a1-ce47-4af2-b1f7-762ce8c9f4b0">11,175</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Shares issued pursuant to stock awards</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i1eab60dc7b84487ca4d1c577cde5b045_D20230101-20230331" decimals="INF" name="us-gaap:StockIssuedDuringPeriodSharesShareBasedCompensation" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTUtMS0xLTEtMTAwMDM2_e66fb0df-86ec-4322-a264-234594ff6abb">372,161</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">1&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="idd022eaf6b814505b1ba92ba75ab3173_D20230101-20230331" decimals="-3" name="us-gaap:StockIssuedDuringPeriodValueShareBasedCompensation" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTUtOS0xLTEtMTAwMDM2_1f594f05-7748-496d-b675-6ad85100576c">2,183</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:StockIssuedDuringPeriodValueShareBasedCompensation" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTUtMTUtMS0xLTEwMDAzNg_3ee47344-7fba-4bc1-ac18-93c2adebc468">2,184</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Employee stock purchase plan activity</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTYtMS0xLTEtMTAwMDM2_b9084df6-ad98-44f5-9619-2aa652af1e89">2,549</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="idd022eaf6b814505b1ba92ba75ab3173_D20230101-20230331" decimals="-3" name="us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTYtOS0xLTEtMTAwMDM2_39700f28-d4eb-46dd-8a6c-8e5bd7cb9dd0">241</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTYtMTUtMS0xLTEwMDAzNg_d2bb90d5-3111-4010-85f9-c5666f7c0c2d">241</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Net income</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ia18cb472d37847b4ae4f0e7c9fcc2093_D20230101-20230331" decimals="-3" name="us-gaap:NetIncomeLoss" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTgtMTEtMS0xLTEwMDAzNg_82620c20-cf40-4702-84f0-a471c995fc78">15,289</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:NetIncomeLoss" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTgtMTUtMS0xLTEwMDAzNg_f491704d-3f13-4ea0-8fc6-526bccafa998">15,289</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Foreign currency translation adjustments</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331" decimals="-3" sign="-" name="us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTktMTMtMS0xLTEwMDAzNg_77dbfcac-f808-492f-896e-0e8c2bffda67">95</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" sign="-" name="us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTktMTUtMS0xLTEwMDAzNg_88549927-5ba0-44e2-a8a7-ec68a53c2cb7">95</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Unrealized gain on investments, net of tax</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331" decimals="-3" name="us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjAtMTMtMS0xLTEwMDAzNg_978b7d93-7748-4bc8-8a69-5fb26caf65f4">399</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjAtMTUtMS0xLTEwMDAzNg_62c74cfc-7c42-4a32-b4c4-5d4373d1e7f1">399</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Reclassification of gain on investments into earnings, net of tax</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331" decimals="-3" name="us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjEtMTMtMS0xLTEwMDAzNg_c011e146-4cfc-4b4b-9b2e-638c375c7652">376</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjEtMTUtMS0xLTEwMDAzNg_bb2af7f1-5736-40bc-b6c6-dc6712ac058c">376</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">Balances, March 31, 2023</span></td><td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ibfb2f662a68c47be9ba841e369ff84b6_I20230331" decimals="INF" name="us-gaap:CommonStockSharesOutstanding" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItMS0xLTEtMTAwMDM2_33d0dc8d-d625-43cd-89aa-67f59325ba58">36,532,756</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibfb2f662a68c47be9ba841e369ff84b6_I20230331" decimals="-3" name="us-gaap:StockholdersEquity" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItMy0xLTEtMTAwMDM2_066d7f82-3a94-44fa-96d4-83081ba67342">39</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i12ac53a6dd6f4f92b7a17ef4b5ebd28a_I20230331" decimals="INF" name="us-gaap:TreasuryStockCommonShares" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItNS0xLTEtMTAwMDM2_75f60d1e-2378-433d-9213-5f6c8fd708c7">2,151,098</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i12ac53a6dd6f4f92b7a17ef4b5ebd28a_I20230331" decimals="-3" sign="-" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItNy0xLTEtMTAwMDM2_b7fbebc2-c524-419f-a29c-c0caa8e3b0b5">128,892</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i4911634e78ad4b7eb05c009b2036124f_I20230331" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItOS0xLTEtMTAwMDM2_65867986-5637-4fef-91bb-961e5cd10d62">489,716</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i7a0dda8262a5406492187cabbd51d4c6_I20230331" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItMTEtMS0xLTEwMDAzNg_be800e96-d859-4ef4-aa44-c988e3ec378d">208,510</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i15c6e19508144394b19c34d4451703e8_I20230331" decimals="-3" sign="-" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItMTMtMS0xLTEwMDAzNg_864b12ad-09df-4863-b153-44a945aea96b">3,483</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:7pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:StockholdersEquity" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItMTUtMS0xLTEwMDAzNg_bdcfc3c9-a501-430c-9ebd-8880d3c6075f">565,890</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr></table></div><div style="margin-top:12pt;text-align:center"><span><br/></span></div><div style="margin-top:6pt;text-align:center"><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%">See accompanying notes to these condensed consolidated financial statements.</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%">.</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> </span></div><div style="height:54pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">5</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_25"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt;text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">SPS COMMERCE, INC. AND SUBSIDIARIES</span></div><div style="text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">CONDENSED CONSOLIDATED STATEMENTS OF CASH FLOWS</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:70.112%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.990%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.992%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands) (unaudited)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cash flows from operating activities</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 14.5pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net income</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:NetIncomeLoss" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMy0xLTEtMS0xMDAwMzY_cbb60761-b356-4688-83dc-637639420d02">15,289</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,603&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 14.5pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Reconciliation of net income to net cash provided by operating activities</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Deferred income taxes</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" sign="-" name="us-gaap:DeferredIncomeTaxExpenseBenefit" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfNS0xLTEtMS0xMDAwMzY_8ae2141f-4d3b-44ca-b452-05b123908df1">5,147</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(269)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Depreciation and amortization of property and equipment</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:DepreciationDepletionAndAmortization" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfNi0xLTEtMS0xMDAwMzY_905f1610-d10c-4697-b5b2-925dcc065b0f">4,626</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,864&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Amortization of intangible assets</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:AmortizationOfIntangibleAssets" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfNy0xLTEtMS0xMDAwMzY_c5f387e8-c596-4a5a-ae72-fa29c9f24a42">3,851</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,470&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Provision for credit losses</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:ProvisionForDoubtfulAccounts" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfOC0xLTEtMS0xMDAwMzY_055d7ff9-9d1e-4f6b-a349-7f015a123132">1,206</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,144&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Stock-based compensation</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:ShareBasedCompensation" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfOS0xLTEtMS0xMDAwMzY_1392499d-98e5-408a-a540-2c359689e47b">11,780</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">9,015&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Other, net</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" sign="-" name="us-gaap:OtherNoncashIncomeExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTAtMS0xLTEtMTAwMDM2_35383620-4312-4f04-ab61-cd12c3e3db31">502</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(7)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Changes in assets and liabilities</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Accounts receivable</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:IncreaseDecreaseInAccountsReceivable" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTItMS0xLTEtMTAwMDM2_137299f3-b419-4d83-8c24-392801bfc96a">6,220</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(5,563)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Deferred costs</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:IncreaseDecreaseInDeferredCharges" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTMtMS0xLTEtMTAwMDM2_33fc6acc-fa2b-4761-bf0a-94a202908f68">1,679</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(2,797)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Other current and non-current assets</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" sign="-" name="us-gaap:IncreaseDecreaseInOtherOperatingAssets" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTQtMS0xLTEtMTAwMDM2_75f4b31e-7905-4506-8395-c1d3d2c50e7b">602</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(6,736)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Accounts payable</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" sign="-" name="us-gaap:IncreaseDecreaseInAccountsPayable" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTUtMS0xLTEtMTAwMDM2_daf1bc7c-ca49-4ae3-b475-0b2b0251f33a">4,849</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(3,229)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Accrued compensation</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" sign="-" name="us-gaap:IncreaseDecreaseInEmployeeRelatedLiabilities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTYtMS0xLTEtMTAwMDM2_90d9bb58-fe27-45e2-a9ad-c1000c744733">4,417</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(10,495)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Accrued expenses</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:IncreaseDecreaseInAccruedLiabilities" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTctMS0xLTEtMTAwMDM2_6bb89a34-05f5-4b0f-a1e1-77ef3e19cec6">721</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(1,746)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Deferred revenue</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:IncreaseDecreaseInContractWithCustomerLiability" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTgtMS0xLTEtMTAwMDM2_732fc0d5-5e80-4f5f-9072-3e4795cf2e39">5,818</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6,349&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating leases</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" sign="-" name="spsc:IncreaseDecreaseInOperatingLeases" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTktMS0xLTEtMTAwMDM2_dce296a0-f4ea-41ca-9eed-1a70118f96cb">452</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(256)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net cash provided by operating activities</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:NetCashProvidedByUsedInOperatingActivities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjAtMS0xLTEtMTAwMDM2_119d7b0e-5c81-4be5-b0d3-8f0135c69c0b">21,631</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,347&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cash flows from investing activities</span></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Purchases of property and equipment</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:PaymentsToAcquirePropertyPlantAndEquipment" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjItMS0xLTEtMTAwMDM2_0ed43baa-4400-4787-9091-5e5c6036b819">5,261</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(4,355)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Purchases of investments</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:PaymentsToAcquireOtherInvestments" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjMtMS0xLTEtMTAwMDM2_904a9de6-2a2f-45f0-a01d-3c6c271f8a92">34,329</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(54,977)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Maturities of investments</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjQtMS0xLTEtMTAwMDM2_a2c58df1-a4ba-41e8-a700-fe59ab88b643">35,000</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">65,000&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net cash provided by (used in) investing activities</span></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" sign="-" name="us-gaap:NetCashProvidedByUsedInInvestingActivities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjYtMS0xLTEtMTAwMDM2_c6d7fc24-81f6-4028-ac6f-06d25d215b3e">4,590</ix:nonFraction>)</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">5,668&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cash flows from financing activities</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Repurchases of common stock</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:PaymentsForRepurchaseOfCommonStock" format="ixt:fixed-zero" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjgtMS0xLTEtMTAwMDM2_01cc1927-5b59-44ef-89af-aa913c690dda">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(15,226)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net proceeds from exercise of options to purchase common stock</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:ProceedsFromStockOptionsExercised" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjktMS0xLTEtMTAwMDM2_d8146b94-fd73-4dde-aef5-705deb6b4e1a">2,184</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">504&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net proceeds from employee stock purchase plan activity</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:ProceedsFromStockPlans" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMzAtMS0xLTEtMTAwMDM2_1f20da9c-be4a-4d9d-8261-a8545ce14c86">241</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">147&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net cash provided by (used in) financing activities</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:NetCashProvidedByUsedInFinancingActivities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMzItMS0xLTEtMTAwMDM2_99d215f0-f704-49fe-b636-d853d36b7686">2,425</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(14,575)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Effect of foreign currency exchange rate changes</span></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" sign="-" name="us-gaap:EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMzMtMS0xLTEtMTAwMDM2_a16c1271-6bdc-4ad8-bec7-d44676940f69">55</ix:nonFraction>)</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">96&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net increase (decrease) in cash and cash equivalents</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMzQtMS0xLTEtMTAwMDM2_150f25e4-9cc0-4dfa-9522-18a3e1cbad66">19,411</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(4,464)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cash and cash equivalents at beginning of period</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMzUtMS0xLTEtMTAwMDM2_864b85f3-5d4d-4818-8c7f-800f407255fb">162,893</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">207,552&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cash and cash equivalents at end of period</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMzYtMS0xLTEtMTAwMDM2_0876a895-55d1-4de9-815a-130475487ec1">182,304</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">203,088&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr></table></div><div style="margin-top:6pt;text-align:center"><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%">See accompanying notes to these condensed consolidated financial statements.</span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">6</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_31"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt;text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">SPS COMMERCE, INC. AND SUBSIDIARIES</span></div><div style="text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTES TO CONDENSED CONSOLIDATED FINANCIAL STATEMENTS </span></div><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">(UNAUDITED)</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_34"></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE A &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNC9mcmFnOjM5OTZhMjc2Y2QwZTRjN2ZhYmE1MTRlZmU5OWNkMWMwL3RleHRyZWdpb246Mzk5NmEyNzZjZDBlNGM3ZmFiYTUxNGVmZTk5Y2QxYzBfMTcyNg_9e702fe3-4104-412f-be2e-736d928036cc" continuedAt="i0fb54013863c4bf2a3d2833b9fbea466" escape="true">General</ix:nonNumeric></span></div><ix:continuation id="i0fb54013863c4bf2a3d2833b9fbea466"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:BusinessDescriptionPolicyPolicyTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNC9mcmFnOjM5OTZhMjc2Y2QwZTRjN2ZhYmE1MTRlZmU5OWNkMWMwL3RleHRyZWdpb246Mzk5NmEyNzZjZDBlNGM3ZmFiYTUxNGVmZTk5Y2QxYzBfMTcyNw_8f375777-d8a2-4fb1-af78-cf216044094a" escape="true"><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Business Description</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">SPS Commerce is a leading provider of cloud-based supply chain management services across our global retail network. Our products make it easier for retailers, grocers, distributors, suppliers, and logistics firms to communicate and collaborate by simplifying how they manage and share item, inventory, order and sales data across omnichannel retail channels. We deliver our products using a full-service model, which includes industry-leading technology and a team of experts that optimize, update, and operate the technology on customers' behalf.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our products enable customers to increase supply chain performance, optimize inventory levels and sell-through, reduce operational costs, improve order visibility, and satisfy consumer demands for a seamless omnichannel experience.</span></div></ix:nonNumeric><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:BasisOfAccountingPolicyPolicyTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNC9mcmFnOjM5OTZhMjc2Y2QwZTRjN2ZhYmE1MTRlZmU5OWNkMWMwL3RleHRyZWdpb246Mzk5NmEyNzZjZDBlNGM3ZmFiYTUxNGVmZTk5Y2QxYzBfMTcyOA_d0f95d91-2f43-4d54-a5f4-db74c5358498" escape="true"><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Basis of Presentation</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The accompanying unaudited condensed consolidated financial statements have been prepared in conformity with accounting principles generally accepted in the United States of America (&#8220;GAAP&#8221;) and include the accounts of SPS Commerce, Inc. and its subsidiaries. All intercompany accounts and transactions have been eliminated in the condensed consolidated financial statements. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">This interim financial information has been prepared under the instructions to Form 10-Q and Rule 10-01 of Regulation S-X. Accordingly, these condensed consolidated financial statements do not include all of the information and notes required by GAAP. Therefore, these condensed consolidated financial statements should be read in conjunction with the consolidated financial statements and notes included in our Annual Report on Form 10-K for the year ended December&#160;31, 2022, as filed with the Securities and Exchange Commission (&#8220;SEC&#8221;). We have included all normal recurring adjustments considered necessary to provide a fair presentation of our financial position, results of operations, stockholders&#8217; equity, and cash flows for the interim periods presented. Operating results for these interim periods are not necessarily indicative of the results to be expected for the full year.</span></div></ix:nonNumeric><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:UseOfEstimates" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNC9mcmFnOjM5OTZhMjc2Y2QwZTRjN2ZhYmE1MTRlZmU5OWNkMWMwL3RleHRyZWdpb246Mzk5NmEyNzZjZDBlNGM3ZmFiYTUxNGVmZTk5Y2QxYzBfMTczNA_98675b3a-dc90-4afe-8f7c-3264741a6bc1" escape="true"><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Use of Estimates</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Preparing financial statements in conformity with GAAP requires management to make estimates, judgments, and assumptions that affect the reported amounts of assets and liabilities, disclosure of contingent assets and liabilities at the date of the financial statements, and the reported amounts of revenues and expenses during the reporting periods. Actual results could differ from those estimates.</span></div></ix:nonNumeric><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:SignificantAccountingPoliciesPolicyPolicyTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNC9mcmFnOjM5OTZhMjc2Y2QwZTRjN2ZhYmE1MTRlZmU5OWNkMWMwL3RleHRyZWdpb246Mzk5NmEyNzZjZDBlNGM3ZmFiYTUxNGVmZTk5Y2QxYzBfMTczNw_2f564de4-48ec-490b-ba94-2e59b124f872" escape="true"><div style="margin-top:12pt"><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Significant Accounting Policies</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">There were no material changes in our significant accounting policies during the three months ended March&#160;31, 2023. See Note A to the consolidated financial statements included in our Annual Report on Form 10-K for the year ended </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">December&#160;31, 2022</span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">, as filed with the SEC, for additional information regarding our significant accounting policies.</span></div></ix:nonNumeric><div style="margin-top:12pt"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNC9mcmFnOjM5OTZhMjc2Y2QwZTRjN2ZhYmE1MTRlZmU5OWNkMWMwL3RleHRyZWdpb246Mzk5NmEyNzZjZDBlNGM3ZmFiYTUxNGVmZTk5Y2QxYzBfMTczOA_b439a438-36ad-4d70-8076-8e2769bc69c6" escape="true"><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Accounting Pronouncements Recently Adopted</span><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:20.566%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:11.172%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:29.960%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.384%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:20.418%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Standard</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Date of Issuance</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Description</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Date of Adoption</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Effect on the Financial Statements</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:top"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:115%">ASU 2021-08, </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%">Business Combinations (Topic 805) - Accounting for Contract Assets and Contract Liabilities from Contracts with Customers</span></div></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">October 2021</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">This amendment requires that an acquirer recognize and measure contract assets and contract liabilities acquired in a business combination in accordance with Topic 606, effective for all business combinations in the year of adoption and thereafter.<br/></span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">January 2023</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">The adoption of this standard may have a material impact on the purchase accounting for future business combinations depending on the specific amount of contract assets and liabilities being acquired.</span></td></tr></table></ix:nonNumeric></div></ix:continuation><div style="height:45pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">7</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_37"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE B &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:BusinessCombinationDisclosureTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfNTQ5NzU1ODE0OTI1MA_a0264d8a-c764-48ba-8b7a-448327d60bf8" continuedAt="icc4d4ca17918465aa8122b88f6ccefe5" escape="true">Business Acquisitions</ix:nonNumeric></span></div><ix:continuation id="icc4d4ca17918465aa8122b88f6ccefe5"><div style="margin-top:12pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%;text-decoration:underline">GCommerce</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Effective July 19, 2022, we acquired all of the outstanding equity ownership interests of GCommerce, Inc. ("GCommerce"), a leading EDI provider within the automotive aftermarket industry. Pursuant to the definitive agreement, the purchase price was $<ix:nonFraction unitRef="usd" contextRef="i494bbf45b93640b8b137b284e56fea8c_D20220719-20220719" decimals="-5" name="us-gaap:BusinessCombinationConsiderationTransferred1" format="ixt:num-dot-decimal" scale="6" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfMzI5ODUzNDg5MTEwNQ_ffccccad-9968-47f0-b697-b55639a1cb5e">45.1</ix:nonFraction>&#160;million, including post-closing adjustments. The purchase accounting for the acquisition has not been finalized as of March 31, 2023 due primarily to provisional tax components and corresponding impacts to other items, including intangible assets. We expect to finalize the allocation of the purchase price within the <ix:nonNumeric contextRef="i494bbf45b93640b8b137b284e56fea8c_D20220719-20220719" name="spsc:BusinessCombinationMeasurementPeriod" format="ixt-sec:durwordsen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfMzI5ODUzNDg5MTEyOQ_fa4ce734-f5d1-4cd9-88e5-587615511aa4">one-year</ix:nonNumeric> measurement period following the acquisition. During the quarter ended March 31, 2023, provisional amounts were adjusted by $<ix:nonFraction unitRef="usd" contextRef="i0548f3e001a74dfe9ff742bd06bf5d1d_D20230101-20230331" decimals="-5" sign="-" name="us-gaap:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred" format="ixt:num-dot-decimal" scale="6" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfNTQ5NzU1ODE0OTIyMw_5626d4c3-273b-4953-91e1-0ae64df585c9">1.6</ix:nonFraction>&#160;million, primarily relating to a $<ix:nonFraction unitRef="usd" contextRef="i0548f3e001a74dfe9ff742bd06bf5d1d_D20230101-20230331" decimals="-5" sign="-" name="spsc:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets" format="ixt:num-dot-decimal" scale="6" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfNTQ5NzU1ODE0OTIzNw_5985d9cf-0ac4-411a-8ea0-b6168a35b20d">1.5</ix:nonFraction>&#160;million decrease in the estimated value of deferred income tax assets, with the corresponding offset to goodwill. </span></div><div style="margin-top:12pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%;text-decoration:underline">InterTrade</span></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Effective October 4, 2022, we acquired all of the outstanding equity ownership interests of Canadian based InterTrade Systems Inc. ("InterTrade"), a leading EDI provider within the apparel and general merchandising markets. Pursuant to the definitive agreement, the purchase price was $<ix:nonFraction unitRef="usd" contextRef="ibeb5587d4f8d49878baf94f9edca4f5c_D20221004-20221004" decimals="-5" name="us-gaap:BusinessCombinationConsiderationTransferred1" format="ixt:num-dot-decimal" scale="6" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfMTY0OTI2NzQ0NTMzNA_0c970860-de5d-4659-a7a5-5f13350c1729">49.1</ix:nonFraction>&#160;million, including estimated post-closing adjustments. The purchase accounting for the acquisition has not been finalized as of March 31, 2023 due to various items including valuation modeling completion; provisional amounts are primarily related to intangible assets. We expect to finalize the allocation of the purchase price within the <ix:nonNumeric contextRef="ibeb5587d4f8d49878baf94f9edca4f5c_D20221004-20221004" name="spsc:BusinessCombinationMeasurementPeriod" format="ixt-sec:durwordsen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfMzI5ODUzNDg5MTE0MA_28d85d8c-ff1a-4ca9-96a9-fe17d3846fe3">one-year</ix:nonNumeric> measurement period following the acquisition. During the quarter ended March 31, 2023, there were no material changes to the provisional amounts.</span></div></ix:continuation><div id="i6d9a8d1ab1f5454885a98aaf9e608722_40"></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE C &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:RevenueFromContractWithCustomerTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfMTExOQ_cf2c38a3-ff45-4845-8774-ca90e54e4a03" continuedAt="i18c8133a03dc4011b89dca26714272a2" escape="true">Revenue</ix:nonNumeric></span><span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-weight:400;line-height:120%"><ix:continuation id="i18c8133a03dc4011b89dca26714272a2" continuedAt="i858d75097c8348579f9eeb6d20c13559"> </ix:continuation></span></div><ix:continuation id="i858d75097c8348579f9eeb6d20c13559" continuedAt="iaf458982577f4271aecd4c4fd603e070"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:DisaggregationOfRevenueTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfMTEyMA_9db2c99f-3004-4428-b4c3-e10d7fffadcb" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We derive our revenues from the following revenue streams:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.545%"><tr><td style="width:1.0%"></td><td style="width:71.807%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.142%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.408%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.143%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Recurring revenues:</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Fulfillment</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i5e5f3e01a4554a07ace384858fe9fe50_D20230101-20230331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfMy0xLTEtMS0xMDAwMzY_d6b7dbbe-d55b-4f5e-8503-45a097078acf">101,668</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ic23344cee2e746358b8076d9aa27eb34_D20220101-20220331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfMy0zLTEtMS0xMDAwMzY_26f8574b-1869-4a97-82d1-7b9604644174">84,731</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Analytics</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ie322d516768a46d3840f582881367ef1_D20230101-20230331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNC0xLTEtMS0xMDAwMzY_12e51868-92c6-4e26-b2f8-97c873196b09">12,370</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i66eb5ae5d9f648d1be790070d3eb42fb_D20220101-20220331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNC0zLTEtMS0xMDAwMzY_183341ae-50a9-4f17-bc1f-8f9af90c54e0">11,296</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Other</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i430fe804c8354c35acdbac54c1a8103f_D20230101-20230331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNS0xLTEtMS0xMDAwMzY_c9313772-5e21-4efc-a6e7-102a63218fad">3,263</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i483819e474e64d97b8cae765a6e4a1fc_D20220101-20220331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNS0zLTEtMS0xMDAwMzY_2daf1468-0039-4647-bab1-2677f980ef8b">1,540</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Recurring revenues</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ic7f5ba10540447178ab71b4bb94aec7a_D20230101-20230331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNi0xLTEtMS0xMDAwMzY_a51fa14c-a5c0-4a4c-ac48-405bce682f50">117,301</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i466b3e33d52b4738bb24fb4712caadf1_D20220101-20220331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNi0zLTEtMS0xMDAwMzY_45940921-5184-4bda-adb9-bbbcef80deb8">97,567</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">One-time revenues</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="if42252827934498bbe58d7c7792a6ce5_D20230101-20230331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNy0xLTEtMS0xMDAwMzY_988eead5-1648-4ff5-939e-c2464d64b763">8,567</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i1bd93224c1834afcaecf43afdfecbc56_D20220101-20220331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNy0zLTEtMS0xMDAwMzY_c4fb19df-dd6a-4a2e-a054-5c867a308f8d">7,626</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total revenue</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfOC0xLTEtMS0xMDAwMzY_3e245610-c044-4b6d-a25b-01192a57c712">125,868</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfOC0zLTEtMS0xMDAwMzY_cde8a01c-5edd-4a37-b567-387c45a6b9f5">105,193</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Revenues are the amount that reflects the consideration we are contractually and legally entitled to, as well as the amount we expect to collect, in exchange for those services.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Recurring Revenues</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Recurring revenues consist of recurring subscriptions from customers that utilize our Fulfillment, Analytics, and Other supply chain management products. Revenue for these products is generally recognized on a ratable basis over the contract term beginning on the date that our service is made available to the customer. Our contracts with our recurring revenue customers are recurring in nature, generally ranging from monthly to annual, and generally allow the customer to cancel the contract for any reason with <ix:nonNumeric contextRef="i492ea2be0bc2406a877c7ea5f708a619_D20230101-20230331" name="spsc:CustomerContractCancellationPeriod" format="ixt-sec:durday" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfNTM_249f2fd3-3812-4543-93e7-a8ba7932d922">30</ix:nonNumeric> to <ix:nonNumeric contextRef="i62d7c092a8b141fc9e9a77bf6fd97969_D20230101-20230331" name="spsc:CustomerContractCancellationPeriod" format="ixt-sec:durday" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfNTk_05f6a67c-aa49-467e-82fd-ec2fc7539241">90</ix:nonNumeric> days&#8217; notice. Timing of billings varies by customer and by contract type and generally are either in advance or within <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:RecurringRevenuesTimingOfBillingsLatestPeriod" format="ixt-sec:durday" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfMTc2_f9b9b3ec-fa36-4824-ba24-f4d234920760">30</ix:nonNumeric> days of the service being performed.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Given that the recurring revenue contracts are for <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:ContractTermMaximum" format="ixt-sec:durwordsen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfMjYy_a28afaa8-2b7f-4046-8a80-613a887b9f5e">one year</ix:nonNumeric> or less, we have applied the optional exemption to not disclose information about the remaining performance obligations for recurring revenue contracts.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">One-time Revenues</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">One-time revenues consist of set-up fees and miscellaneous fees from customers.</span></div></ix:continuation><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">8</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><ix:continuation id="iaf458982577f4271aecd4c4fd603e070"><div style="margin-top:9pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">Set-up revenues</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Set-up fees are specific for each connection a customer has with a trading partner. These nonrefundable fees are necessary for our customers to utilize our services and do not provide any standalone value. Many of our customers have connections with numerous trading partners.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Set-up fees constitute a material renewal option right that provide customers a significant future incentive that would not be otherwise available to that customer unless they entered into the contract, as the set-up fees will not be incurred again upon contract renewal. As such, set-up fees and related costs are deferred and recognized ratably over <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:SetUpFeesRecognizedPeriod" format="ixt-sec:durwordsen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfNDYx_8bc16dff-dada-405c-906d-13b7579c903b">two years</ix:nonNumeric> which is the estimated period for which a material right is present for our customers.</span></div><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ContractWithCustomerAssetAndLiabilityTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfMTExOA_b9edb3db-4591-4fba-8467-0cf41b27669a" escape="true"><div style="margin-top:6pt;padding-left:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The table below presents the activity of the portion of the deferred revenue liability relating to set-up fees: </span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.090%"><tr><td style="width:1.0%"></td><td style="width:71.682%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.202%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.411%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.205%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, beginning of period</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i33903016b04043ff8f3b903207f93675_I20221231" decimals="-3" name="us-gaap:ContractWithCustomerLiability" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfMi0xLTEtMS0xMDAwMzY_6988b606-3da3-4e0d-9565-34fcd34f002c">14,999</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i0727a052638340d28c42291a37278daf_I20211231" decimals="-3" name="us-gaap:ContractWithCustomerLiability" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfMi0zLTEtMS0xMDAwMzY_bcfa9865-24e2-4a67-a079-246d85c12dcf">14,459</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Invoiced set-up fees</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i7c34593b80204d5f877eca45dd51d401_D20230101-20230331" decimals="-3" name="spsc:DeferredRevenueInvoicedSetUpFees" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfMy0xLTEtMS0xMDAwMzY_7dd5b24d-ca5f-49c3-9efa-837f098a816f">4,251</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i88aef2c21a2d44408cff8c9801e859c8_D20220101-20220331" decimals="-3" name="spsc:DeferredRevenueInvoicedSetUpFees" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfMy0zLTEtMS0xMDAwMzY_263415d5-9259-48c4-ae3a-441951108b60">4,003</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Recognized set-up fees</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i7c34593b80204d5f877eca45dd51d401_D20230101-20230331" decimals="-3" name="spsc:DeferredRevenueAmortizedSetUpFees" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfNC0xLTEtMS0xMDAwMzY_02df2aaf-c4eb-44d8-9ec3-67e0b708a009">3,963</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i88aef2c21a2d44408cff8c9801e859c8_D20220101-20220331" decimals="-3" name="spsc:DeferredRevenueAmortizedSetUpFees" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfNC0zLTEtMS0xMDAwMzY_cfaffda3-6a78-45a4-926c-24022c691983">3,524</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, end of period</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i8f43e591125d49a89354fae41f4ec9e1_I20230331" decimals="-3" name="us-gaap:ContractWithCustomerLiability" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfNS0xLTEtMS0xMDAwMzY_fc36dd9e-c049-4145-ab80-baa28d8c9336">15,287</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="iee085911fef74ba4bab1072985c39349_I20220331" decimals="-3" name="us-gaap:ContractWithCustomerLiability" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfNS0zLTEtMS0xMDAwMzY_9e89188b-36e1-4345-9b2a-a943d3bb1644">14,938</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The entire balance of deferred set-up fees will be recognized within <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:SetUpFeesRecognizedPeriod" format="ixt-sec:durwordsen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfNTQx_d209666b-70c5-4a1b-bb20-a443ba14d450">two years</ix:nonNumeric>. Those that will be recognized within the next year are classified as current, whereas the remainder are classified as non-current.</span></div><div style="margin-top:9pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">Miscellaneous one-time revenues</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Miscellaneous one-time fees consist of professional services and testing and certification. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The contract period for these one-time fees is for <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:MaximumRecognitionPeriodForMiscellaneousOneTimeFee" format="ixt-sec:durwordsen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfODUy_1b71ba08-ebd7-4807-bd97-c14f9393d4b8">one year</ix:nonNumeric> or less and recognized at the time service is provided. We have applied the optional exemption to not disclose information about the remaining performance obligations for miscellaneous one-time fee contracts since they have original durations of one year or less.</span></div></ix:continuation><div id="i6d9a8d1ab1f5454885a98aaf9e608722_43"></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE D &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:DeferredCostsDisclosureTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RleHRyZWdpb246MmY1ZDdjMWQxMGRhNDkxY2IwZWJkNTAyM2QyMzFkZTlfMzI_95920f3d-8b40-4b34-8533-b6fb068b6002" continuedAt="i4168b577b7f84685bb692b86c45c7cd6" escape="true">Deferred Costs</ix:nonNumeric></span></div><ix:continuation id="i4168b577b7f84685bb692b86c45c7cd6"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:DeferredCostsAndAmortizationTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RleHRyZWdpb246MmY1ZDdjMWQxMGRhNDkxY2IwZWJkNTAyM2QyMzFkZTlfMzM_430c411b-2e26-4445-9877-233c4690a478" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The deferred costs activity was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.696%"><tr><td style="width:1.0%"></td><td style="width:71.848%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.121%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.407%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.124%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, beginning of period</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:DeferredCostsCurrentAndNoncurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfMi0xLTEtMS0xMDAwMzY_6b75e569-89eb-4d63-bbe4-2afea2833c85">70,179</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="id23181cd6ae24a028a249a4d25818065_I20211231" decimals="-3" name="us-gaap:DeferredCostsCurrentAndNoncurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfMi0zLTEtMS0xMDAwMzY_ea0b8ec6-cd3e-4f54-984a-1787ff20654b">59,720</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Incurred deferred costs</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="spsc:DeferredCostsIncurred" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfMy0xLTEtMS0xMDAwMzY_586d9fe0-fc09-4dc0-9005-98d976ff9bec">18,234</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="spsc:DeferredCostsIncurred" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfMy0zLTEtMS0xMDAwMzY_603adff0-3f86-4529-8cbc-3c63652b5403">17,781</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Amortized deferred costs</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" sign="-" name="spsc:DeferredCostsAmortized" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfNC0xLTEtMS0xMDAwMzY_c7da3cc0-4972-414d-8c76-3338c4cd9854">16,604</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" sign="-" name="spsc:DeferredCostsAmortized" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfNC0zLTEtMS0xMDAwMzY_0ef3998f-95c6-4566-acb6-0823db1382d6">14,891</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, end of period</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:DeferredCostsCurrentAndNoncurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfNS0xLTEtMS0xMDAwMzY_6cf4f89d-fca2-4629-9fbf-9d677a07a953">71,809</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="iea65401e964c4d079f6a7764673f9d3e_I20220331" decimals="-3" name="us-gaap:DeferredCostsCurrentAndNoncurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfNS0zLTEtMS0xMDAwMzY_322dcfeb-4404-44fa-8f35-e5025af6a767">62,610</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric></ix:continuation><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">9</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_46"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE E &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:FinancialInstrumentsDisclosureTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RleHRyZWdpb246NDExNGI5ZTkxZjE5NDhkODkzNmY5MzhkY2YzODEyM2JfMzU2_f7d10a43-99e8-4d51-b75c-048345ac5cfb" continuedAt="i214b0120c3bf4cbc85dafd415e47a33e" escape="true">Fair Value Measurements</ix:nonNumeric></span></div><ix:continuation id="i214b0120c3bf4cbc85dafd415e47a33e"><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Cash Equivalents and Investments</span></div><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RleHRyZWdpb246NDExNGI5ZTkxZjE5NDhkODkzNmY5MzhkY2YzODEyM2JfMzI5ODUzNDg4NDExNQ_37ee6cc4-b065-4bba-bcd9-066b1817e44c" escape="true"><div style="margin-top:6pt;text-indent:27pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Cash equivalents and investments, as measured at fair value on a recurring basis, consisted of the following:</span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:25.869%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:6.778%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.051%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.051%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.051%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.051%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.051%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.056%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31, 2023</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="padding:0 1pt 0 13pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Fair Value Level</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Amortized Cost</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Unrealized Gains (Losses), net</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Fair Value</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Amortized Cost</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Unrealized Gains (Losses), net</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Fair Value</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">(in thousands)</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%">Cash equivalents:</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Money market funds</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Level 1</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="ib95cb9989143445f9a7e651950c32288_I20230331" decimals="-3" name="us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNC00LTEtMS0xMTA2OTM_392bd178-9318-4f98-b8d6-2846ea104a6e">94,284</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="ib95cb9989143445f9a7e651950c32288_I20230331" decimals="-3" name="us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" format="ixt:fixed-zero" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNC02LTEtMS0xMTA2OTM_ed595a74-b956-4243-8da2-74e9616dc6fa">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="ib95cb9989143445f9a7e651950c32288_I20230331" decimals="-3" name="us-gaap:AvailableForSaleSecuritiesDebtSecurities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNC04LTEtMS0xMTA2OTM_020cac6d-02a1-42e0-989b-82a5c9d80a59">94,284</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i1b7e5436e1104d35b4b017c4042ef741_I20221231" decimals="-3" name="us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNC0xMC0xLTEtMTEwNjkz_17ac1eb5-1eb3-44ea-ae88-5d7c69d0e6df">73,368</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i1b7e5436e1104d35b4b017c4042ef741_I20221231" decimals="-3" name="us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" format="ixt:fixed-zero" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNC0xMi0xLTEtMTEwNjkz_b3a269f9-022d-4c67-8764-a6add7f636e2">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i1b7e5436e1104d35b4b017c4042ef741_I20221231" decimals="-3" name="us-gaap:AvailableForSaleSecuritiesDebtSecurities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNC0xNC0xLTEtMTEwNjkz_0233185d-e63c-4ae6-87d4-28941a3ed62f">73,368</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%">Investments:</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Certificates of deposit</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Level 1</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i06db95e3caa74fd69f6bf699dc8553ac_I20230331" decimals="-3" name="us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNi00LTEtMS0xMTA2OTM_a75b75e2-1db6-4139-bccf-988802a0afa7">6,687</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i06db95e3caa74fd69f6bf699dc8553ac_I20230331" decimals="-3" name="us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" format="ixt:fixed-zero" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNi02LTEtMS0xMTA2OTM_497a30b4-3599-46c6-8936-49812da8db70">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i06db95e3caa74fd69f6bf699dc8553ac_I20230331" decimals="-3" name="us-gaap:AvailableForSaleSecuritiesDebtSecurities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNi04LTEtMS0xMTA2OTM_9f0052a6-e6dd-40e4-b305-a23c5e62209a">6,687</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i9978aeb34edf49fdb2b635d1da947f0f_I20221231" decimals="-3" name="us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNi0xMC0xLTEtMTEwNjkz_be38e3bb-3fa3-418f-bcf8-2ae2b75a134b">6,813</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i9978aeb34edf49fdb2b635d1da947f0f_I20221231" decimals="-3" name="us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" format="ixt:fixed-zero" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNi0xMi0xLTEtMTEwNjkz_35ab97fa-ffbb-4727-aa02-b41f8c2a0017">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i9978aeb34edf49fdb2b635d1da947f0f_I20221231" decimals="-3" name="us-gaap:AvailableForSaleSecuritiesDebtSecurities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNi0xNC0xLTEtMTEwNjkz_b33ef3bb-ca2b-4132-acc0-1ebe3809b755">6,813</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Marketable securities:</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Commercial paper</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Level 2</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i3d24870a54cb4537b1c2ea12039f0869_I20230331" decimals="-3" name="us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOC00LTEtMS0xMTA2OTM_90eab4a0-349c-40fe-a3ce-48f6e3bfe8e6">34,228</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i3d24870a54cb4537b1c2ea12039f0869_I20230331" decimals="-3" name="us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOC02LTEtMS0xMTA2OTM_3f645256-bfa5-4549-a430-96e5a1a12759">353</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i3d24870a54cb4537b1c2ea12039f0869_I20230331" decimals="-3" name="us-gaap:AvailableForSaleSecuritiesDebtSecurities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOC04LTEtMS0xMTA2OTM_589c2f70-6e02-43e3-aaf8-e016495e6896">34,581</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i3938b8743ba341c6b9496d0431a386f7_I20221231" decimals="-3" name="us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOC0xMC0xLTEtMTEwNjkz_1216abe2-3960-4809-9f44-d5395b4af597">44,224</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i3938b8743ba341c6b9496d0431a386f7_I20221231" decimals="-3" name="us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOC0xMi0xLTEtMTEwNjkz_0f5264a7-19f2-4faa-8718-8d9173e1cb50">375</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3938b8743ba341c6b9496d0431a386f7_I20221231" decimals="-3" name="us-gaap:AvailableForSaleSecuritiesDebtSecurities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOC0xNC0xLTEtMTEwNjkz_4fcded39-7076-4b50-8923-48d044a5abc6">44,599</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">U.S. treasury securities</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Level 2</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i27fdedb4de714a9fbe01d6729cbbec8e_I20230331" decimals="-3" name="us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOS00LTEtMS0xMTA2OTM_4aa680e3-0378-431b-85d2-93632fa71ada">9,827</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i27fdedb4de714a9fbe01d6729cbbec8e_I20230331" decimals="-3" name="us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOS02LTEtMS0xMTA2OTM_a986f535-d0cf-4218-af27-ff1903c9a688">51</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i27fdedb4de714a9fbe01d6729cbbec8e_I20230331" decimals="-3" name="us-gaap:AvailableForSaleSecuritiesDebtSecurities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOS04LTEtMS0xMTA2OTM_75e6c2d1-3a35-46c9-bbf7-dcc670fbbcb3">9,878</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i0fbb80009f17498db74b94eaf27cb4fe_I20221231" decimals="-3" name="us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis" format="ixt:fixed-zero" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOS0xMC0xLTEtMTEwNjkz_0a0ea0ee-c4e4-463e-bdfd-68f7d8a8cc48">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i0fbb80009f17498db74b94eaf27cb4fe_I20221231" decimals="-3" name="us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" format="ixt:fixed-zero" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOS0xMi0xLTEtMTEwNjkz_7ecc9d1e-6dee-4464-84fb-696613c1b5b4">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i0fbb80009f17498db74b94eaf27cb4fe_I20221231" decimals="-3" name="us-gaap:AvailableForSaleSecuritiesDebtSecurities" format="ixt:fixed-zero" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOS0xNC0xLTEtMTEwNjkz_374b5cba-ce7e-49fc-80d8-42958d4bea0d">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:0 1pt 0 13pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfMTAtNC0xLTEtMTEwNzcx_e08b5567-84fb-4c74-80d1-6e08dacd2da5">145,026</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfMTAtNi0xLTEtMTEwNzcx_17628419-5734-4876-ac5b-5f28d2d3e189">404</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:AvailableForSaleSecuritiesDebtSecurities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfMTAtOC0xLTEtMTEwNzcx_145e5a28-b325-4174-bffd-5d575accbc4f">145,430</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfMTAtMTAtMS0xLTExMDc3MQ_ca7b0427-3a0a-42b0-896c-4885245dd12a">124,405</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfMTAtMTItMS0xLTExMDc3MQ_2953a14d-e17b-4013-8f7d-d21e8c333aad">375</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:AvailableForSaleSecuritiesDebtSecurities" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfMTAtMTQtMS0xLTExMDc3MQ_db31d306-4d2b-44c9-a7c3-4eb62d14076e">124,780</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr></table></div></ix:nonNumeric></ix:continuation><div style="margin-top:6pt;padding-left:36pt"><span><br/></span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_49"></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE F &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:AllowanceForCreditLossesTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RleHRyZWdpb246ZWUzMjc1OGU2NzRkNGFmYjhiM2QyN2YzNDZiNmM0ODBfNDY_3a9fc56b-853c-499c-8d9f-bc1cd558f3b1" continuedAt="i927ee816903144319b2638f341b570a2" escape="true">Allowance for Credit Losses</ix:nonNumeric></span></div><ix:continuation id="i927ee816903144319b2638f341b570a2"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RleHRyZWdpb246ZWUzMjc1OGU2NzRkNGFmYjhiM2QyN2YzNDZiNmM0ODBfNDU_e5ea6dee-96ed-4bbf-bf10-fd770f54c8ae" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The allowance for credit losses activity, included in accounts receivable, net, was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, beginning of period</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfMi0xLTEtMS0xMDAwMzY_9dfa01ae-8452-4209-9d84-501a9c33d3b2">3,066</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="id23181cd6ae24a028a249a4d25818065_I20211231" decimals="-3" name="us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfMi0zLTEtMS0xMDAwMzY_b8e83013-4c8a-4953-98ee-c2579c21b8d6">4,249</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Provision for credit losses</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:ProvisionForDoubtfulAccounts" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfMy0xLTEtMS0xMDAwMzY_b39a0645-610b-446c-aa71-9cacbe5c3826">1,206</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:ProvisionForDoubtfulAccounts" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfMy0zLTEtMS0xMDAwMzY_7a8f5c67-dbe1-45c6-a8e3-3e34113fb41c">1,144</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Write-offs, net of recoveries</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:AllowanceForDoubtfulAccountsReceivableWriteOffs" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfNC0xLTEtMS0xMDAwMzY_04f760cc-51d9-40f0-81e6-c0fdc00832f3">1,055</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:AllowanceForDoubtfulAccountsReceivableWriteOffs" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfNC0zLTEtMS0xMDAwMzY_ea76c9b9-af34-416c-b15c-5ab4a079631d">1,106</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, end of period</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfNS0xLTEtMS0xMDAwMzY_301342dc-65e5-4c36-97e6-199ef3c71df4">3,217</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="iea65401e964c4d079f6a7764673f9d3e_I20220331" decimals="-3" name="us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfNS0zLTEtMS0xMDAwMzY_126f34a8-44ee-4bcf-8aa9-bed8c3b02097">4,287</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr></table></div></ix:nonNumeric></ix:continuation><div id="i6d9a8d1ab1f5454885a98aaf9e608722_52"></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE G &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:PropertyPlantAndEquipmentDisclosureTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RleHRyZWdpb246NzJkYTQzMmY5MzdlNGY0YmFiM2NlY2I2YjAzMjhlYWZfNDQ_b0901c30-2558-43f5-9b51-f7dfb169c853" continuedAt="i56b943e82e9f4f1f8b7566cc0ddf2365" escape="true">Property and Equipment, Net</ix:nonNumeric></span></div><div style="margin-top:6pt;text-indent:36pt"><ix:continuation id="i56b943e82e9f4f1f8b7566cc0ddf2365"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:PropertyPlantAndEquipmentTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RleHRyZWdpb246NzJkYTQzMmY5MzdlNGY0YmFiM2NlY2I2YjAzMjhlYWZfNDU_724edceb-5837-4a79-bd11-c40dd11e4a9a" escape="true"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Property and equipment, net consisted of the following:</span><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:72.384%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.557%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:11.475%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:11.478%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31,<br/>2023</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Internally developed software</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i5a75bb88debd45d6977bc1802be484e8_I20230331" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfMS0yLTEtMS0xMDAwMzY_4a7d4cd5-ff53-4de8-b808-92f3cd2ab7ed">53,530</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="if36c1fbf7d614e4c996719209cbd2203_I20221231" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfMS00LTEtMS0xMDAwMzY_6c6b6fa3-3d5f-4cbb-b9b6-9e33d82b18e9">49,994</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Computer equipment</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i386c273d4ce1474b8fe0376f049c4026_I20230331" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfMi0yLTEtMS0xMDAwMzY_01752d8b-07a3-4cae-a585-fb272f375693">30,601</ix:nonFraction>&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i044036208ec345ceb8743ee4003b4012_I20221231" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfMi00LTEtMS0xMDAwMzY_c406db0e-6005-4a61-8e85-31a1658922c4">30,310</ix:nonFraction>&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Leasehold improvements</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i7fdb034bc95a4b0392b1bc5c4e517c57_I20230331" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfMy0yLTEtMS0xMDAwMzY_a29bf7de-8e18-47a8-8129-086c137a2cfc">16,603</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3f4882303fd44f25b34a7e397c10779f_I20221231" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfMy00LTEtMS0xMDAwMzY_0ff3022a-b76a-413a-9f5b-c4195f5d5358">16,531</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Office equipment and furniture</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="if15e5b2451054b38881f736fe9625cc2_I20230331" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNC0yLTEtMS0xMDAwMzY_70ef1aa0-801e-47e9-8740-3bf302b75ac3">11,113</ix:nonFraction>&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i534eee2a26b2444ebe09cb50ac751aff_I20221231" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNC00LTEtMS0xMDAwMzY_977a631d-62e3-4992-954a-063037ed9400">10,981</ix:nonFraction>&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Property and equipment, cost</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNS0yLTEtMS0xMDAwMzY_7a233f02-6b0a-47da-b9ef-16aa4dbe3e7f">111,847</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNS00LTEtMS0xMDAwMzY_25aae3ec-ff48-47b8-82bc-684578280dbc">107,816</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Less: accumulated depreciation and amortization</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNi0yLTEtMS0xMDAwMzY_d000e983-4ced-4b08-abbd-7c19d91c11c8">76,769</ix:nonFraction>)</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNi00LTEtMS0xMDAwMzY_6adc7c3e-0edc-4e56-971a-fd95f2d48190">72,358</ix:nonFraction>)</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total property and equipment, net</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNy0yLTEtMS0xMDAwMzY_6a4a97a8-c5bd-4963-afaa-15940ef61f24">35,078</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:PropertyPlantAndEquipmentNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNy00LTEtMS0xMDAwMzY_81c116f7-141c-4e65-8315-e6d2d00f9147">35,458</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr></table></ix:nonNumeric></ix:continuation></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">10</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_55"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE H &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:GoodwillAndIntangibleAssetsDisclosureTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RleHRyZWdpb246MDdiYThiOGNiMzUyNDRhMmI1MDdlOGI5NDUwYTllNjBfOTM_3cfe281c-2ab1-47c3-9b6d-fd4ab0ab2a83" continuedAt="i384c837f1cd4415bacd23fbe98ee53ad" escape="true">Goodwill and Intangible Assets, Net</ix:nonNumeric></span></div><ix:continuation id="i384c837f1cd4415bacd23fbe98ee53ad"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfGoodwillTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RleHRyZWdpb246MDdiYThiOGNiMzUyNDRhMmI1MDdlOGI5NDUwYTllNjBfOTU_2ec5f1c0-4e71-4bd8-91e3-99d56fce34f0" escape="true"><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Goodwill</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The activity in goodwill was as follows:</span><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:85.718%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.082%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, beginning of period</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:Goodwill" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjI0ODYzZDgzODI2YjQxNTM5MmY0YmYwMjg3YmE1OWJlL3RhYmxlcmFuZ2U6MjQ4NjNkODM4MjZiNDE1MzkyZjRiZjAyODdiYTU5YmVfMi0xLTEtMS0xMDAwMzY_9cc2c360-6549-4c41-b1ae-b773f65badcb">197,284</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Foreign currency translation</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" sign="-" name="us-gaap:GoodwillForeignCurrencyTranslationGainLoss" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjI0ODYzZDgzODI2YjQxNTM5MmY0YmYwMjg3YmE1OWJlL3RhYmxlcmFuZ2U6MjQ4NjNkODM4MjZiNDE1MzkyZjRiZjAyODdiYTU5YmVfMy0xLTEtMS0xMjQ2OTg_d116175d-3147-4e3a-bea9-15d2b0dd38d6">71</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Remeasurement from provisional purchase accounting amount</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:GoodwillPurchaseAccountingAdjustments" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjI0ODYzZDgzODI2YjQxNTM5MmY0YmYwMjg3YmE1OWJlL3RhYmxlcmFuZ2U6MjQ4NjNkODM4MjZiNDE1MzkyZjRiZjAyODdiYTU5YmVfNC0xLTEtMS0xMjQ2ODk_3d327d8c-72be-4128-ad21-90f048612c79">1,788</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, end of period</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:Goodwill" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjI0ODYzZDgzODI2YjQxNTM5MmY0YmYwMjg3YmE1OWJlL3RhYmxlcmFuZ2U6MjQ4NjNkODM4MjZiNDE1MzkyZjRiZjAyODdiYTU5YmVfNi0xLTEtMS0xMDAwMzY_1f72a20f-c565-4669-ba3d-9141e2a3b168">199,001</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RleHRyZWdpb246MDdiYThiOGNiMzUyNDRhMmI1MDdlOGI5NDUwYTllNjBfOTc_c55ed6b4-62d9-4a0c-89c0-bdeb5618bc0c" escape="true"><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Intangible Assets</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Intangible assets, net consisted of the following:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:30.566%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.086%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31, 2023</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">($ in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Gross<br/>Carrying<br/>Amount</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Accumulated <br/>Amortization </span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Foreign<br/>Currency <br/>Translation</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Net</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Weighted Average Remaining Amortization Period</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Subscriber relationships</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="idfbc23a59140439a8615288bcb3f78ef_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMi0xLTEtMS0xMDAwMzY_dae7a429-1876-4c0a-bf9d-61f603d77656">79,385</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="idfbc23a59140439a8615288bcb3f78ef_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMi0zLTEtMS0xMDAwMzY_db9b7389-36fb-48bd-98d6-cf753f01aa9e">24,205</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="idfbc23a59140439a8615288bcb3f78ef_I20230331" decimals="-3" name="spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMi01LTEtMS0xMDAwMzY_9be55115-a54a-48d2-8135-96156a6dc5c1">29</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="idfbc23a59140439a8615288bcb3f78ef_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMi03LTEtMS0xMDAwMzY_00979246-b73e-4fa7-a57d-064651b76513">55,209</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="ic91aaccdeb714bfc8f0dce202e196a66_D20230101-20230331" name="us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1" format="ixt-sec:duryear" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMi05LTEtMS0xMDAwMzY_3c7b3413-4db9-4c2c-86cb-ec5b12db229d">6.6</ix:nonNumeric> years</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Acquired technology</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i42612c0ae9fd49b38cbc84eb2d0083e6_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMy0xLTEtMS0xMDAwMzY_542c1590-cb81-43aa-aa8e-970b1d3fe615">40,612</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i42612c0ae9fd49b38cbc84eb2d0083e6_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMy0zLTEtMS0xMDAwMzY_349025e5-858d-46b8-ae84-689e5d2f3dce">11,292</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i42612c0ae9fd49b38cbc84eb2d0083e6_I20230331" decimals="-3" name="spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMy01LTEtMS0xMDAwMzY_285d46a3-6aa5-4b63-a8a0-0bbed676981b">7</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i42612c0ae9fd49b38cbc84eb2d0083e6_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMy03LTEtMS0xMDAwMzY_37eb3f48-5018-4967-a714-509deee21d4d">29,327</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="i4e6aa02ec2b74ba69310d3ad612c9cda_D20230101-20230331" name="us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1" format="ixt-sec:duryear" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMy05LTEtMS0xMDAwMzY_03b20d55-148e-4051-9712-37701ec0c082">5.5</ix:nonNumeric> years</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfNC0xLTEtMS0xMDAwMzY_1bfa3fe7-78b5-470e-9bb6-3cfc28376972">119,997</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfNC0zLTEtMS0xMDAwMzY_95bf3e0d-d01e-4ec9-a1b9-e2071d9dbb45">35,497</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfNC01LTEtMS0xMDAwMzY_d5b569d8-db89-4ee8-8e68-c8940b75f3c2">36</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfNC03LTEtMS0xMDAwMzY_cdfa6fb1-7902-479d-8aa3-168da9267ef4">84,536</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1" format="ixt-sec:duryear" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfNC05LTEtMS0xMDAwMzY_f7359236-141b-4644-88e7-28118c157fc2">6.2</ix:nonNumeric> years</span></td></tr></table></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:30.566%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.086%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">($ in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Gross<br/>Carrying<br/>Amount</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Accumulated <br/>Amortization </span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Foreign<br/>Currency <br/>Translation</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Net</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Weighted Average Remaining Amortization Period</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Subscriber relationships</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="iaf6b0a0eb5b3448ebe65047605d7d317_I20221231" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMi0xLTEtMS0xMDAwMzY_97866b96-5d8f-472b-b98e-4e91dbf53cb3">80,101</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="iaf6b0a0eb5b3448ebe65047605d7d317_I20221231" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMi0zLTEtMS0xMDAwMzY_197df13c-054f-467c-89ca-05be63c68669">22,255</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="iaf6b0a0eb5b3448ebe65047605d7d317_I20221231" decimals="-3" sign="-" name="spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMi01LTEtMS0xMDAwMzY_e7897c9f-dbcd-49ea-8168-c8e7a2c9b9f4">171</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="iaf6b0a0eb5b3448ebe65047605d7d317_I20221231" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMi03LTEtMS0xMDAwMzY_7aeae2a4-821e-432c-9e03-7b4e48cb52f6">57,675</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="ic65167d9de1f4e50805056a53d766244_D20220101-20221231" name="us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1" format="ixt-sec:duryear" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMi05LTEtMS0xMDAwMzY_93eef809-95d0-45db-92ef-ebd47e80b1cc">6.8</ix:nonNumeric> years</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Acquired technology</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibef612a6a2494f51809d078779233bed_I20221231" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMy0xLTEtMS0xMDAwMzY_68185e2c-addf-4127-b3e5-70b8e788a704">40,610</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="ibef612a6a2494f51809d078779233bed_I20221231" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMy0zLTEtMS0xMDAwMzY_f07f919c-5f88-429e-9c2a-466f7d22cd3f">9,934</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibef612a6a2494f51809d078779233bed_I20221231" decimals="-3" name="spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMy01LTEtMS0xMDAwMzY_e5aba69f-475c-4efe-8f69-61147c90ed6b">1</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibef612a6a2494f51809d078779233bed_I20221231" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMy03LTEtMS0xMDAwMzY_f4cc197c-b8a7-43c0-b97b-502dfe22e495">30,677</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="i2139ddbdb599478c96f7dbd3221493e7_D20220101-20221231" name="us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1" format="ixt-sec:duryear" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMy05LTEtMS0xMDAwMzY_c8f65ecb-7f0a-4bfa-b8cb-146c111aac98">5.7</ix:nonNumeric> years</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsGross" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfNC0xLTEtMS0xMDAwMzY_8fd22181-bee8-41b6-983b-426a0fd8ae35">120,711</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfNC0zLTEtMS0xMDAwMzY_fd48e38e-f6b8-4b7e-b464-196cebf97e2c">32,189</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" sign="-" name="spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfNC01LTEtMS0xMDAwMzY_ab42541b-fe10-4ebd-9a98-6ba56c3ac514">170</ix:nonFraction>)</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfNC03LTEtMS0xMDAwMzY_4850f782-b201-40d8-8ebb-c0eb1ca58c03">88,352</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="ie8eb7dd105294462b8565005c929635e_D20220101-20221231" name="us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1" format="ixt-sec:duryear" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfNC05LTEtMS0xMDAwMzY_eb5b27ae-bff1-4a9d-b157-3ac943516e36">6.4</ix:nonNumeric> years</span></td></tr></table></div></ix:nonNumeric><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:3pt;font-weight:700;line-height:120%"> </span></div><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RleHRyZWdpb246MDdiYThiOGNiMzUyNDRhMmI1MDdlOGI5NDUwYTllNjBfOTk_bd744743-e41a-4221-9160-d7807d4a3a53" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The estimated future annual amortization expense related to intangible assets is as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:85.718%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.082%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Remainder of 2023</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfMS0xLTEtMS0xMDAwMzY_47153add-d1fa-44aa-a0be-e310595d7b88">11,450</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2024</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfMi0xLTEtMS0xMDAwMzY_1bc57c40-a0bd-4866-8e4c-9cde88658429">14,102</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2025</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfMy0xLTEtMS0xMDAwMzY_181983fc-f174-4bd5-a4fb-6e2f5b26f21a">13,964</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2026</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearThree" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfNC0xLTEtMS0xMDAwMzY_b3e947ca-4a1a-499c-90c0-663a38d45156">12,960</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2027</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearFour" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfNS0xLTEtMS0xMDAwMzY_1cdcc9ea-32a9-40fc-8108-14c6666b31c7">12,497</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Thereafter</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="spsc:FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfNi0xLTEtMS0xMDAwMzY_38a73506-fbde-4181-87e8-7adefebc2e56">19,563</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total future amortization</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:FiniteLivedIntangibleAssetsNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfNy0xLTEtMS0xMDAwMzY_9591e97a-ad15-4b63-b7e5-d27b5ce7dc29">84,536</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr></table></div></ix:nonNumeric></ix:continuation><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">11</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_58"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE I &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:CommitmentsAndContingenciesDisclosureTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RleHRyZWdpb246ZmUyNjE3YzA3NjllNDYzM2EyMWE5ZDQ4ZjUwMzg2ZjFfMzYw_7c133cc8-1163-482d-b290-e273b0a8346c" continuedAt="i9b0fbfcf67f74c98a2a174e0e3d90f21" escape="true">Commitments and Contingencies</ix:nonNumeric></span></div><ix:continuation id="i9b0fbfcf67f74c98a2a174e0e3d90f21" continuedAt="iae44f9e0a5c74c27838944365b404e79"><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Leases</span></div><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:LeaseCostTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RleHRyZWdpb246ZmUyNjE3YzA3NjllNDYzM2EyMWE5ZDQ4ZjUwMzg2ZjFfMzYx_5bb3e00c-145e-4fc8-8b41-7f3dce9de7ac" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The components of lease expense were as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:98.181%"><tr><td style="width:1.0%"></td><td style="width:71.430%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.325%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.417%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.328%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating lease cost</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:OperatingLeaseCost" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmM3Yzc5NjFiNWNlODQwMDA5ZGI5OWZjNjI4Mjk2NTM1L3RhYmxlcmFuZ2U6YzdjNzk2MWI1Y2U4NDAwMDlkYjk5ZmM2MjgyOTY1MzVfMi0xLTEtMS0xMDAwMzY_2ae07e55-fdf8-4924-8aa6-d62563b52033">798</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:OperatingLeaseCost" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmM3Yzc5NjFiNWNlODQwMDA5ZGI5OWZjNjI4Mjk2NTM1L3RhYmxlcmFuZ2U6YzdjNzk2MWI1Y2U4NDAwMDlkYjk5ZmM2MjgyOTY1MzVfMi0zLTEtMS0xMDAwMzY_5792d574-1ab6-4dd1-a683-e56de4f69cf8">759</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Variable lease cost</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:VariableLeaseCost" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmM3Yzc5NjFiNWNlODQwMDA5ZGI5OWZjNjI4Mjk2NTM1L3RhYmxlcmFuZ2U6YzdjNzk2MWI1Y2U4NDAwMDlkYjk5ZmM2MjgyOTY1MzVfMy0xLTEtMS0xMDAwMzY_3ad2a0c0-24b2-4d8c-a897-ddf633f52162">928</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:VariableLeaseCost" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmM3Yzc5NjFiNWNlODQwMDA5ZGI5OWZjNjI4Mjk2NTM1L3RhYmxlcmFuZ2U6YzdjNzk2MWI1Y2U4NDAwMDlkYjk5ZmM2MjgyOTY1MzVfMy0zLTEtMS0xMDAwMzY_36924edb-edfc-4ec4-ba2f-850dc3235f97">793</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:LeaseCost" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmM3Yzc5NjFiNWNlODQwMDA5ZGI5OWZjNjI4Mjk2NTM1L3RhYmxlcmFuZ2U6YzdjNzk2MWI1Y2U4NDAwMDlkYjk5ZmM2MjgyOTY1MzVfNC0xLTEtMS0xMDAwMzY_a42fa1e6-00d6-49be-92c1-49439af0c6b3">1,726</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:LeaseCost" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmM3Yzc5NjFiNWNlODQwMDA5ZGI5OWZjNjI4Mjk2NTM1L3RhYmxlcmFuZ2U6YzdjNzk2MWI1Y2U4NDAwMDlkYjk5ZmM2MjgyOTY1MzVfNC0zLTEtMS0xMDAwMzY_59bc3214-ebb6-47b0-b121-7146a70ea491">1,552</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RleHRyZWdpb246ZmUyNjE3YzA3NjllNDYzM2EyMWE5ZDQ4ZjUwMzg2ZjFfMzU2_e9a88dde-6a9e-462c-a9a4-8d71ee07c5f5" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Supplemental cash flow information related to leases was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cash paid for amounts included in the measurement of lease liabilities</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating cash flows from operating leases</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:OperatingLeasePayments" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjRkMDZiNWI3NDlkMzQ3MzZiMDk3YzUzZTlhNzM2OTQxL3RhYmxlcmFuZ2U6NGQwNmI1Yjc0OWQzNDczNmIwOTdjNTNlOWE3MzY5NDFfMy0xLTEtMS0xMDAwMzY_210b8291-bd41-44ff-9504-046508a43553">1,247</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:OperatingLeasePayments" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjRkMDZiNWI3NDlkMzQ3MzZiMDk3YzUzZTlhNzM2OTQxL3RhYmxlcmFuZ2U6NGQwNmI1Yjc0OWQzNDczNmIwOTdjNTNlOWE3MzY5NDFfMy0zLTEtMS0xMDAwMzY_43ba54f7-a456-4f9b-bf43-c7079c0ff4f6">1,095</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RleHRyZWdpb246ZmUyNjE3YzA3NjllNDYzM2EyMWE5ZDQ4ZjUwMzg2ZjFfMzYz_f4f54a94-b8da-4479-9e05-889318875865" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Supplemental balance sheet information related to operating leases was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31,<br/>2023</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted-average remaining lease term</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" name="us-gaap:OperatingLeaseWeightedAverageRemainingLeaseTerm1" format="ixt-sec:duryear" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmZlNjI4NGYwNjViYzQ3NWFhNTg4ZjEyZGJkNTNmYmEwL3RhYmxlcmFuZ2U6ZmU2Mjg0ZjA2NWJjNDc1YWE1ODhmMTJkYmQ1M2ZiYTBfMS0xLTEtMS0xMDAwMzY_8bd407c5-629f-4e05-9f2e-f8a0998bd5d3">3.8</ix:nonNumeric> years</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" name="us-gaap:OperatingLeaseWeightedAverageRemainingLeaseTerm1" format="ixt-sec:duryear" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmZlNjI4NGYwNjViYzQ3NWFhNTg4ZjEyZGJkNTNmYmEwL3RhYmxlcmFuZ2U6ZmU2Mjg0ZjA2NWJjNDc1YWE1ODhmMTJkYmQ1M2ZiYTBfMS0zLTEtMS0xMDAwMzY_f7953570-ef1c-46a2-9781-0c18170c6426">3.9</ix:nonNumeric> years</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted-average discount rate</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="number" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="3" name="us-gaap:OperatingLeaseWeightedAverageDiscountRatePercent" scale="-2" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmZlNjI4NGYwNjViYzQ3NWFhNTg4ZjEyZGJkNTNmYmEwL3RhYmxlcmFuZ2U6ZmU2Mjg0ZjA2NWJjNDc1YWE1ODhmMTJkYmQ1M2ZiYTBfMi0xLTEtMS0xMDAwMzY_e09f059a-f5d1-4524-bf27-90423095e3b0">4.0</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="number" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="3" name="us-gaap:OperatingLeaseWeightedAverageDiscountRatePercent" scale="-2" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmZlNjI4NGYwNjViYzQ3NWFhNTg4ZjEyZGJkNTNmYmEwL3RhYmxlcmFuZ2U6ZmU2Mjg0ZjA2NWJjNDc1YWE1ODhmMTJkYmQ1M2ZiYTBfMi0zLTEtMS0xMDAwMzY_ee7d3249-6422-4bec-aa98-3624298b5976">4.0</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr></table></div></ix:nonNumeric><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:LesseeOperatingLeaseLiabilityMaturityTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RleHRyZWdpb246ZmUyNjE3YzA3NjllNDYzM2EyMWE5ZDQ4ZjUwMzg2ZjFfMzY0_448a9080-d224-4057-bba6-79fd7931e7e7" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">At March&#160;31, 2023, our future minimum payments under operating leases were as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:85.718%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.082%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Remainder of 2023</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfMS0xLTEtMS0xMDAwMzY_529b0b47-11cf-4cfa-8870-7291baff8245">3,847</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2024</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfMi0xLTEtMS0xMDAwMzY_75977952-da9a-49f9-9a07-6170557b741f">4,471</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2025</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearTwo" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfMy0xLTEtMS0xMDAwMzY_6fb92a05-04d6-452c-8528-6620fd0e0a9f">4,081</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2026</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearThree" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfNC0xLTEtMS0xMDAwMzY_9879c51e-3b4f-48de-87ac-817085ec7b5b">3,763</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2027</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearFour" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfNS0xLTEtMS0xMDAwMzY_4f7c2d2c-51bf-47be-ba2d-e9551176cda2">1,266</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total future gross payments</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:LesseeOperatingLeaseLiabilityPaymentsDue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfNy0xLTEtMS0xMDAwMzY_91a4c43c-e90d-481e-8e08-f504e53f0bac">17,428</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Less: imputed interest</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:LesseeOperatingLeaseLiabilityUndiscountedExcessAmount" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfOC0xLTEtMS0xMDAwMzY_ae6693c5-fd10-4c27-a1b5-71a29c29f82b">1,313</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total operating lease liabilities</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-3" name="us-gaap:OperatingLeaseLiability" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfOS0xLTEtMS0xMDAwMzY_36f59018-2f93-4cdf-9e6a-5731b73c8b05">16,115</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr></table></div></ix:nonNumeric><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Purchase Commitments</span></div></ix:continuation><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:112%"><ix:continuation id="iae44f9e0a5c74c27838944365b404e79">We have entered into separate noncancelable agreements with computing infrastructure, customer relationship management, and performance and security data analytics vendors for services through 2025. At March&#160;31, 2023, the total remaining purchase commitments were $<ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-5" name="us-gaap:PurchaseCommitmentRemainingMinimumAmountCommitted" format="ixt:num-dot-decimal" scale="6" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RleHRyZWdpb246ZmUyNjE3YzA3NjllNDYzM2EyMWE5ZDQ4ZjUwMzg2ZjFfMzUx_f3c7ea4c-a8be-413e-a360-902c06fe9af0">4.3</ix:nonFraction> million</ix:continuation>.</span></div><div style="text-indent:36pt"><span><br/></span></div><div style="text-indent:36pt"><span><br/></span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_61"></div><div style="margin-top:18pt"><span><br/></span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">12</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE J &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:StockholdersEquityNoteDisclosureTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RleHRyZWdpb246YzBmOTZkNWEwZjM4NDA0N2I0NGVmMWJmMjY2YTA5MTRfOTQ_4ce7b193-a612-44d2-bd86-af5f7a46f326" continuedAt="i32ff19090de840909d68921da49517ab" escape="true">Stockholders&#8217; Equity</ix:nonNumeric></span></div><ix:continuation id="i32ff19090de840909d68921da49517ab"><div style="margin-top:12pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Share</span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"> Repurchase Programs</span></div><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfTreasuryStockByClassTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RleHRyZWdpb246YzBmOTZkNWEwZjM4NDA0N2I0NGVmMWJmMjY2YTA5MTRfOTY_30712b25-a540-4a53-a4b8-6a05ff21fa23" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our board of directors has authorized multiple non-concurrent programs to repurchase our common stock. Details of the programs and activity thereunder through </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023 were as follows:</span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:13.293%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:13.142%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.839%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.839%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.839%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.843%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Effective Date</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Expiration Date</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Share Value Authorized for Repurchase</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Share Value Repurchased</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Unused &amp; Expired Share Repurchase Value</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Share Value Available for Future Repurchase</span></td></tr><tr><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2021 Program</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">November 2021</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">August 2022</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ic66b2fe6cc7a4bf9b038a88eb9c4f953_I20230331" decimals="-7" name="us-gaap:StockRepurchaseProgramAuthorizedAmount1" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjJhMzUwYjVhM2JlMTQ0YzBiOTVhMjQzZGY1NTYzMDkwL3RhYmxlcmFuZ2U6MmEzNTBiNWEzYmUxNDRjMGI5NWEyNDNkZjU1NjMwOTBfMi00LTEtMS0xMDAwMzY_2d65ce82-bfba-49d9-9b9d-490a493b2b42">50,000</ix:nonFraction></span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ic66b2fe6cc7a4bf9b038a88eb9c4f953_I20230331" decimals="-3" name="us-gaap:TreasuryStockCommonValue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjJhMzUwYjVhM2JlMTQ0YzBiOTVhMjQzZGY1NTYzMDkwL3RhYmxlcmFuZ2U6MmEzNTBiNWEzYmUxNDRjMGI5NWEyNDNkZjU1NjMwOTBfMi02LTEtMS0xMDAwMzY_e00611f6-e028-4cfd-801c-0d7803b4e415">49,992</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3cf98a1bfcce425bb63813ffc2c3e964_D20230101-20230331" decimals="-3" name="spsc:TreasuryStockUnusedAndExpiredRepurchaseValue" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjJhMzUwYjVhM2JlMTQ0YzBiOTVhMjQzZGY1NTYzMDkwL3RhYmxlcmFuZ2U6MmEzNTBiNWEzYmUxNDRjMGI5NWEyNDNkZjU1NjMwOTBfMi04LTEtMS0xMDAwMzY_6fea4c65-5240-4f48-991a-59a5f3d02093">8</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">N/A</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2022 Program</span></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">August 2022</span></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">July 2024</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i0b6acb14977e4bbebf8dc1ae4945d040_I20230331" decimals="-7" name="us-gaap:StockRepurchaseProgramAuthorizedAmount1" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjJhMzUwYjVhM2JlMTQ0YzBiOTVhMjQzZGY1NTYzMDkwL3RhYmxlcmFuZ2U6MmEzNTBiNWEzYmUxNDRjMGI5NWEyNDNkZjU1NjMwOTBfMy00LTEtMS0xMDAwMzY_1020067b-a566-42a7-84e3-c931906933f8">50,000</ix:nonFraction></span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i0b6acb14977e4bbebf8dc1ae4945d040_I20230331" decimals="-3" name="us-gaap:TreasuryStockCommonValue" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjJhMzUwYjVhM2JlMTQ0YzBiOTVhMjQzZGY1NTYzMDkwL3RhYmxlcmFuZ2U6MmEzNTBiNWEzYmUxNDRjMGI5NWEyNDNkZjU1NjMwOTBfMy02LTEtMS0xMDAwMzY_cb49419f-2be0-4522-b2a5-57b719fa8342">2,992</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">N/A</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i0b6acb14977e4bbebf8dc1ae4945d040_I20230331" decimals="-3" name="us-gaap:StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjJhMzUwYjVhM2JlMTQ0YzBiOTVhMjQzZGY1NTYzMDkwL3RhYmxlcmFuZ2U6MmEzNTBiNWEzYmUxNDRjMGI5NWEyNDNkZjU1NjMwOTBfMy0xMC0xLTEtMTAwMDM2_ce50e154-885e-4301-93b9-73a29e25219b">47,008</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="background-color:#ffffff;color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">share</span><span style="background-color:#ffffff;color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">repurchase activity by period was as follows:</span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:69.354%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:13.900%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.840%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except shares and per share amounts)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Number of shares repurchased</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="INF" name="us-gaap:TreasuryStockSharesAcquired" format="ixt:fixed-zero" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjA3ZjM2MjA4MGM2ZTRjNGM4ODllMDA2NzRiMDAxNWIwL3RhYmxlcmFuZ2U6MDdmMzYyMDgwYzZlNGM0Yzg4OWUwMDY3NGIwMDE1YjBfMi0xLTEtMS0xMDAwMzY_df5c08e1-cb7a-46e5-b426-47f5cba7067b">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="INF" name="us-gaap:TreasuryStockSharesAcquired" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjA3ZjM2MjA4MGM2ZTRjNGM4ODllMDA2NzRiMDAxNWIwL3RhYmxlcmFuZ2U6MDdmMzYyMDgwYzZlNGM0Yzg4OWUwMDY3NGIwMDE1YjBfMi0zLTEtMS0xMDAwMzY_3afe94e6-2253-49bc-aa26-d37b42f5add2">121,544</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Shares repurchased cost</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:TreasuryStockValueAcquiredCostMethod" format="ixt:fixed-zero" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjA3ZjM2MjA4MGM2ZTRjNGM4ODllMDA2NzRiMDAxNWIwL3RhYmxlcmFuZ2U6MDdmMzYyMDgwYzZlNGM0Yzg4OWUwMDY3NGIwMDE1YjBfMy0xLTEtMS0xMDAwMzY_c9d6995f-9e42-4b70-9da3-8a9a4baa64c2">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:TreasuryStockValueAcquiredCostMethod" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjA3ZjM2MjA4MGM2ZTRjNGM4ODllMDA2NzRiMDAxNWIwL3RhYmxlcmFuZ2U6MDdmMzYyMDgwYzZlNGM0Yzg4OWUwMDY3NGIwMDE1YjBfMy0zLTEtMS0xMDAwMzY_a44c91aa-eb61-491c-abe9-4600256d6747">15,226</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Average price per repurchased share</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="2" name="us-gaap:TreasuryStockAcquiredAverageCostPerShare" format="ixt:fixed-zero" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjA3ZjM2MjA4MGM2ZTRjNGM4ODllMDA2NzRiMDAxNWIwL3RhYmxlcmFuZ2U6MDdmMzYyMDgwYzZlNGM0Yzg4OWUwMDY3NGIwMDE1YjBfNC0xLTEtMS0xMDAwMzY_f9b6e112-1403-4803-918f-618aa4ce7a74">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="2" name="us-gaap:TreasuryStockAcquiredAverageCostPerShare" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjA3ZjM2MjA4MGM2ZTRjNGM4ODllMDA2NzRiMDAxNWIwL3RhYmxlcmFuZ2U6MDdmMzYyMDgwYzZlNGM0Yzg4OWUwMDY3NGIwMDE1YjBfNC0zLTEtMS0xMDAwMzY_4eed7e9f-cd27-43a6-8596-b6b35e91dc16">125.27</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric></ix:continuation><div id="i6d9a8d1ab1f5454885a98aaf9e608722_64"></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE K &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg2MQ_d8a9f8eb-f019-4560-b862-c010cf0ae29a" continuedAt="i9167346b84a843bb9433d645c425046a" escape="true">Stock-Based Compensation</ix:nonNumeric></span></div><ix:continuation id="i9167346b84a843bb9433d645c425046a" continuedAt="ie5f9cb7329b34c34951643afceb6099f"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our equity compensation plans provide for the grant of incentive and nonqualified stock options, as well as other stock-based awards including performance share units (&#8220;PSUs&#8221;), restricted stock awards (&#8220;RSAs&#8221;), restricted stock units (&#8220;RSUs&#8221;), and deferred stock units (&#8220;DSUs&#8221;), to employees, non-employee directors and other consultants who provide services to us. We also provide an employee stock purchase plan (&#8220;ESPP&#8221;) and 401(k) match to eligible participants. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We recognize stock-based compensation expense based on grant date award fair value. This cost is recognized over the period for which the employee is required to provide service in exchange for the award or the award performance period, except for expenses relating to retirement-eligible employees that have not given their required notice, which is recognized on a pro-rata basis over the notice period prior to retirement. At </span><span style="color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">, there were <ix:nonFraction unitRef="shares" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-5" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant" format="ixt:num-dot-decimal" scale="6" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfOTUw_3d2868cb-43a9-4109-8ea9-a62e26ebac7a">12.8</ix:nonFraction> million shares available for grant under approved equity compensation plans.</span></div><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg2OQ_36af72b6-a0c8-461d-89b5-2eacc04de3f6" continuedAt="i79d3b8371f2242a79ff604bceb3574dd" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Stock-based compensation expense was allocated in the condensed consolidated statements of comprehensive income as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.090%"><tr><td style="width:1.0%"></td><td style="width:71.682%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.202%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.411%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.205%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cost of revenues</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i93dad56146ff44d98768cfefa65393e7_D20230101-20230331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfMi0xLTEtMS0xMDAwMzY_115c64b5-b6d7-4a12-b8cd-e24b58f33e32">2,503</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ic6e6e85d532b4870801fe3245685e79a_D20220101-20220331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfMi0zLTEtMS0xMDAwMzY_439b50bb-7690-4f46-ba67-e60bef2f7dcb">2,179</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating expenses</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Sales and marketing</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="icf5aa811f4814632b2861846f77139b8_D20230101-20230331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNC0xLTEtMS0xMDAwMzY_e1afd064-e06e-4d40-ae1c-382235e018a7">2,423</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i3a215ac4955d48c8bdf4ef5efe7b2501_D20220101-20220331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNC0zLTEtMS0xMDAwMzY_a93b2765-37a0-43b2-9c88-a07a30640780">2,032</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Research and development</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ia33d3193bbcb46b69d9ea868360410f0_D20230101-20230331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNS0xLTEtMS0xMDAwMzY_a5260c0c-aae3-4d01-ba5a-38e0bf87437f">1,777</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i48945f26aa664703a3348e4cba198e2d_D20220101-20220331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNS0zLTEtMS0xMDAwMzY_04191289-935b-42e5-8a15-260984ea022d">1,474</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">General and administrative</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i327830e256a546128e87027704b0e090_D20230101-20230331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNi0xLTEtMS0xMDAwMzY_55c0af12-cf97-426d-84f8-97d7a1607ac0">5,077</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="id2486bd8e47b45c383a6d5f3f183cd42_D20220101-20220331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNi0zLTEtMS0xMDAwMzY_a87d3407-d835-4978-affd-606c4b1f9962">3,330</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNy0xLTEtMS0xMDAwMzY_e4e5c2b0-84ef-473d-88d8-d23fe2c02b12">11,780</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNy0zLTEtMS0xMDAwMzY_1cfe5d53-e688-40b0-aed9-7deacfe99f7e">9,015</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric></ix:continuation><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">13</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><ix:continuation id="ie5f9cb7329b34c34951643afceb6099f" continuedAt="ie9b5e33116984f4197d8af402553bbed"><ix:continuation id="i79d3b8371f2242a79ff604bceb3574dd"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Stock-based compensation expense by grant type or plan was as follows:</span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Stock options</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfMi0xLTEtMS0xMDAwMzY_607b83af-d97c-402b-9d63-c1c6b4b42ff3">490</ix:nonFraction>&#160;</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i7c8e86e8da8b413e95c1e1f7ad578007_D20220101-20220331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfMi0zLTEtMS0xMDAwMzY_2b8353a4-7a78-48ef-a687-7cf299d938b7">477</ix:nonFraction>&#160;</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">PSUs</span></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ie078c18202d541869aac6a5c656ff133_D20230101-20230331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfMy0xLTEtMS0xMDAwMzY_f276f006-0448-46fe-ab87-968317d90680">3,926</ix:nonFraction>&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i81fe3639cdd0409783650946d9f206c1_D20220101-20220331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfMy0zLTEtMS0xMDAwMzY_161e7ff2-f344-4ff6-bf34-eced814b5041">2,699</ix:nonFraction>&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">RSUs</span></td><td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="if541830b99f34fada5f80dbf22b9a42b_D20230101-20230331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNC0xLTEtMS0xMDAwMzY_d107d4ff-d6be-4a4d-b30f-d7fd03f44656">6,062</ix:nonFraction>&#160;</span></td><td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"></td><td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ic919f20ea9e34d7d8a49f792f2850731_D20220101-20220331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNC0zLTEtMS0xMDAwMzY_8e700380-80a6-47dc-8e7a-228bb12e754a">4,638</ix:nonFraction>&#160;</span></td><td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">RSAs &amp; DSUs</span></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i139966462e7d44a6a65729d6e89d9a2b_D20230101-20230331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNS0xLTEtMS0xMDAwMzY_cc570036-b3fa-4fc5-8031-3de6df7d911d">108</ix:nonFraction>&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i9efb8a2ef80941b3b94082525317fe20_D20220101-20220331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNS0zLTEtMS0xMDAwMzY_ce5a47a4-77fe-4fe0-a814-1413631c339b">108</ix:nonFraction>&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">ESPP</span></td><td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i7004f48977d74e228c6e84df8cbc78b7_D20230101-20230331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNi0xLTEtMS0xMDAwMzY_6066d94f-ddee-4a23-a604-f707eafc5541">589</ix:nonFraction>&#160;</span></td><td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"></td><td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="if398ccb0bdb94ada908408abec6ccc79_D20220101-20220331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNi0zLTEtMS0xMDAwMzY_731830fc-5d50-4090-aea7-2a875cd2996d">574</ix:nonFraction>&#160;</span></td><td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">401(k) stock match</span></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ice4475e67a4a4f4e8c671ae4a60c0e9e_D20230101-20230331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNy0xLTEtMS0xMDAwMzY_8ae12274-0097-4db2-ae0c-a3df125b6788">605</ix:nonFraction>&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="iace8208134024531b6ba59e56e7e46a1_D20220101-20220331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNy0zLTEtMS0xMDAwMzY_6dbd03f5-5849-4c77-81b4-eeb1d63a1c33">519</ix:nonFraction>&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfOC0xLTEtMS0xMDAwMzY_fb2e9d76-d191-4563-88e1-12f29c38ced5">11,780</ix:nonFraction>&#160;</span></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:AllocatedShareBasedCompensationExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfOC0zLTEtMS0xMDAwMzY_86ee5a9e-48de-4b12-bf03-bdf119bb5c5a">9,015</ix:nonFraction>&#160;</span></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:continuation><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">As of March&#160;31, 2023, there was $<ix:nonFraction unitRef="usd" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="-5" name="us-gaap:EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized" format="ixt:num-dot-decimal" scale="6" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMTE3Mw_401cf6c1-6b45-49b0-8a12-d8df535d76cf">63.8</ix:nonFraction> million of unrecognized stock-based compensation expense under our equity compensation plans, which is expected to be recognized on a primarily straight-line basis over a weighted average period of <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1" format="ixt-sec:duryear" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMTM2Ng_d03a0775-75a3-44a3-bcc8-b89c43bf85d3">2.6</ix:nonNumeric> years.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Stock Options</span></div><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg2NQ_1692b114-c69d-4621-84a0-18489171461c" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our stock option activity was as follows:</span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31, 2023</span></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Options (#) </span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Weighted Average<br/>Exercise Price <br/>($/share)</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Outstanding, beginning of period</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfMi0xLTEtMS0xMDAwMzY_32f76612-0292-4163-a444-4d2392486b94">562,697</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231" decimals="2" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfMi0zLTEtMS0xMDAwMzY_78573ab4-be6e-4158-9240-90781c97a01f">56.24</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Granted</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfMy0xLTEtMS0xMDAwMzY_dfeb61e8-1ed3-46cd-b69c-1a80a76a4d3a">30,148</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="2" name="us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfMy0zLTEtMS0xMDAwMzY_8329d832-e652-4963-a869-7c4edca503b7">150.76</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Exercised</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="INF" name="us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfNC0xLTEtMS0xMDAwMzY_dc872dec-88da-4759-aaba-6439737b66e7">68,088</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="2" name="us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfNC0zLTEtMS0xMDAwMzY_56c967c2-42c5-470a-83e4-a9d16a610a43">32.06</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Forfeited</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfNS0xLTEtMS0xMDAwMzY_b9968f54-83d2-42c2-a3b6-2b34cdbe7ede">1,916</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="2" name="us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfNS0zLTEtMS0xMDAwMzY_230957f8-9da3-4557-963e-4c76925ab022">123.49</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Outstanding, end of period</span></td><td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfNi0xLTEtMS0xMDAwMzY_41b037db-76bf-44ca-afc7-e6ee4903f48a">522,841</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331" decimals="2" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfNi0zLTEtMS0xMDAwMzY_93601d88-b262-4fcf-844b-4f0e3c658d42">64.60</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr></table></div></ix:nonNumeric><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Of the total outstanding options at March&#160;31, 2023, <ix:nonFraction unitRef="shares" contextRef="ibfc64785d5dc41fb8fbce3eb2022373c_I20230331" decimals="-5" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber" format="ixt:num-dot-decimal" scale="6" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMTQyOQ_5fac3e63-6b82-4444-ba79-1e5e9432c805">0.4</ix:nonFraction> million were exercisable. The outstanding and exercisable options had a weighted average exercise price of $<ix:nonFraction unitRef="usdPerShare" contextRef="ibfc64785d5dc41fb8fbce3eb2022373c_I20230331" decimals="2" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMTUzMQ_e45c958d-b975-4fbb-92c8-edcca925a3ad">53.22</ix:nonFraction> per share and a weighted average remaining contractual life of <ix:nonNumeric contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331" name="us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2" format="ixt-sec:duryear" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMTU5Nw_cfa9e9ad-adc1-4245-a868-61395512f1d4">3.0</ix:nonNumeric> years.</span></div><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg1Nw_bea73802-795c-4f06-90f1-1eb8c3799314" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The weighted average grant date fair value of options granted during the three months ended March&#160;31, 2023 was $<ix:nonFraction unitRef="usdPerShare" contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331" decimals="2" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMTY5Nw_6765361c-25ca-4deb-8d46-f2f7496f4f66">54.53</ix:nonFraction> per share. This was estimated on the date of grant using the Black-Scholes option pricing model with the following weighted-average assumptions:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:85.718%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.082%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Life (in years)</span></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331" name="us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1" format="ixt-sec:duryear" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjM4YTQzMmNlZTBhYTQ0ZGRiYjhkM2IyNmM2MWZkZTQ4L3RhYmxlcmFuZ2U6MzhhNDMyY2VlMGFhNDRkZGJiOGQzYjI2YzYxZmRlNDhfMC0xLTEtMS0xMDAwMzY_896130b6-930f-4d3a-9e0f-b7a4609401f0">3.9</ix:nonNumeric></span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Volatility</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="number" contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331" decimals="3" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate" scale="-2" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjM4YTQzMmNlZTBhYTQ0ZGRiYjhkM2IyNmM2MWZkZTQ4L3RhYmxlcmFuZ2U6MzhhNDMyY2VlMGFhNDRkZGJiOGQzYjI2YzYxZmRlNDhfMS0xLTEtMS0xMDAwMzY_5d6813e5-b771-4823-8738-0ff2a23978cf">39.7</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">%</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Dividend yield</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="number" contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331" decimals="3" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate" format="ixt:fixed-zero" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjM4YTQzMmNlZTBhYTQ0ZGRiYjhkM2IyNmM2MWZkZTQ4L3RhYmxlcmFuZ2U6MzhhNDMyY2VlMGFhNDRkZGJiOGQzYjI2YzYxZmRlNDhfMi0xLTEtMS0xMDAwMzY_7ac421a3-d9ca-496e-b0f1-1c72abb5ada1">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Risk-free interest rate</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"><ix:nonFraction unitRef="number" contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331" decimals="3" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate" scale="-2" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjM4YTQzMmNlZTBhYTQ0ZGRiYjhkM2IyNmM2MWZkZTQ4L3RhYmxlcmFuZ2U6MzhhNDMyY2VlMGFhNDRkZGJiOGQzYjI2YzYxZmRlNDhfMy0xLTEtMS0xMDAwMzY_fee25bdf-c858-4c71-8269-8e69f5dfa23a">4.2</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">%</span></td></tr></table></div></ix:nonNumeric><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Performance Share Units, Restricted Stock Units and Awards, and Deferred Stock Units</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">In each of the quarters ended March 31, 2023, 2022, 2021, and 2020 we granted PSU awards with a target performance level. </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">These awards are earned based upon our Company&#8217;s total shareholder return as compared to an indexed total shareholder return over the course of a fiscal based <ix:nonNumeric contextRef="i8bf3eacc627448edb90205fb30ece2b5_D20200101-20200331" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1" format="ixt-sec:durwordsen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg3MA_40500f9c-b2c5-44c7-8c9f-df2e6c327aea"><ix:nonNumeric contextRef="ia94b7f289d9c466e924f9972711567b8_D20210101-20210331" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1" format="ixt-sec:durwordsen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg3MA_63c549d0-97d7-4037-b130-7d49f0856385"><ix:nonNumeric contextRef="i81fe3639cdd0409783650946d9f206c1_D20220101-20220331" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1" format="ixt-sec:durwordsen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg3MA_eb936149-838a-4450-a6df-7dc2ae31354f"><ix:nonNumeric contextRef="ie078c18202d541869aac6a5c656ff133_D20230101-20230331" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1" format="ixt-sec:durwordsen" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg3MA_eee8f020-6475-41ef-ad79-5d4ab4c2885e">three-year</ix:nonNumeric></ix:nonNumeric></ix:nonNumeric></ix:nonNumeric> performance period, starting in the year of grant. Earned awards vest in the quarter following the conclusion of the performance period. In the three months ended March 31, </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">, PSU awards granted in 2019 vested at the maximum performance level and <ix:nonFraction unitRef="shares" contextRef="i648dacc2484645a191cd2b52aedd0022_D20220101-20220331" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod" format="ixt:num-dot-decimal" scale="6" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjQ3MQ_108b67d3-d52e-476d-bc65-69d76a31a07b">0.1</ix:nonFraction>&#160;million shares of common stock were issued.</span></div></ix:continuation><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">14</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><ix:continuation id="ie9b5e33116984f4197d8af402553bbed"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg2NA_f2728dbe-20ca-4594-baaa-5acb0f2c13b3" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Activity for our PSUs, RSUs, RSAs, and DSUs in aggregate was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31, 2023</span></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">#</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Weighted Average Grant<br/>Date Fair Value <br/>($/share)</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Outstanding, beginning of period</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i8eae6a60d667472db9b3b0b29fa91b99_I20221231" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfMi0xLTEtMS0xMDAwMzY_b3f3993f-d62c-4009-806c-d977244663c1">712,158</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="i8eae6a60d667472db9b3b0b29fa91b99_I20221231" decimals="2" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfMi0zLTEtMS0xMDAwMzY_b1b0c305-8078-4293-85ce-601ad1f19e20">103.93</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Granted</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfMy0xLTEtMS0xMDAwMzY_fc689529-232b-4e60-8019-bf1beddca469">304,635</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331" decimals="2" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfMy0zLTEtMS0xMDAwMzY_078bdfbd-04e9-4acd-9cf6-076459743c4f">163.06</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Vested and common stock issued</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="shares" contextRef="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfNC0xLTEtMS0xMDAwMzY_32111958-0f1e-4075-aacf-0d3d426a9c8f">305,123</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331" decimals="2" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfNC0zLTEtMS0xMDAwMzY_252ed2ad-d8e8-4183-b6d2-ef658c1eb1da">74.70</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Forfeited</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="shares" contextRef="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfNS0xLTEtMS0xMDAwMzY_e80f70d1-cdbb-44ac-99b9-717e651c5836">3,798</ix:nonFraction>)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331" decimals="2" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfNS0zLTEtMS0xMDAwMzY_4ebdcbf0-46e9-499c-94e3-87aa905a38bf">112.93</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Outstanding, end of period</span></td><td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i8243d525cc6644e3a8b086461514844d_I20230331" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfNi0xLTEtMS0xMDAwMzY_b64ad37d-9c19-47bc-9390-222833d4022c">707,872</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="i8243d525cc6644e3a8b086461514844d_I20230331" decimals="2" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfNi0zLTEtMS0xMDAwMzY_dec150a4-15c0-4301-940d-a5cb88988ac8">141.92</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr></table></div></ix:nonNumeric><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The number of PSUs, RSUs, RSAs, and DSUs outstanding at March&#160;31, 2023 included less than <ix:nonFraction unitRef="shares" contextRef="i75224f37ba834f5087c46bd2805cd5e7_I20230331" decimals="-5" name="spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd" format="ixt:num-dot-decimal" scale="6" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjU5Mw_e031db4a-bee9-4052-b1c2-befd94726f53">0.1</ix:nonFraction>&#160;million units that have vested, but the shares of common stock have not yet been issued, pursuant to the terms of the underlying agreements.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Employee Stock Purchase Plan</span></div><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg1OA_f7dd3b52-3f69-4149-b596-4f7e0bb37388" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our ESPP activity was as follows:</span></div><div style="margin-top:6pt;text-indent:36pt"><span><br/></span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except shares)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Amounts for shares purchased</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331" decimals="-3" name="spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmM0M2RjYzI3N2IxZjQyMmU4NDcwM2M5MzY4YjVlMGNlL3RhYmxlcmFuZ2U6YzQzZGNjMjc3YjFmNDIyZTg0NzAzYzkzNjhiNWUwY2VfMi0xLTEtMS0xMDAwMzY_4bca0fca-2802-4942-839e-352b56abb30d">241</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="idc151901553f4a18a424d23b910d4ad3_D20220101-20220331" decimals="-3" name="spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmM0M2RjYzI3N2IxZjQyMmU4NDcwM2M5MzY4YjVlMGNlL3RhYmxlcmFuZ2U6YzQzZGNjMjc3YjFmNDIyZTg0NzAzYzkzNjhiNWUwY2VfMi0zLTEtMS0xMDAwMzY_a17b0a03-41ed-4148-89f1-b1cfa800e2f9">147</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Shares purchased</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmM0M2RjYzI3N2IxZjQyMmU4NDcwM2M5MzY4YjVlMGNlL3RhYmxlcmFuZ2U6YzQzZGNjMjc3YjFmNDIyZTg0NzAzYzkzNjhiNWUwY2VfMy0xLTEtMS0xMDAwMzY_b9084df6-ad98-44f5-9619-2aa652af1e89">2,549</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="idc151901553f4a18a424d23b910d4ad3_D20220101-20220331" decimals="INF" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward" format="ixt:num-dot-decimal" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmM0M2RjYzI3N2IxZjQyMmU4NDcwM2M5MzY4YjVlMGNlL3RhYmxlcmFuZ2U6YzQzZGNjMjc3YjFmNDIyZTg0NzAzYzkzNjhiNWUwY2VfMy0zLTEtMS0xMDAwMzY_3b7afc93-ca72-4487-b380-d868f05fdaef">1,698</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">A total of <ix:nonFraction unitRef="shares" contextRef="i8e28272e86eb4ea5b8c9d7b9f8471840_I20230331" decimals="-5" name="us-gaap:DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance" format="ixt:num-dot-decimal" scale="6" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjc3NQ_cc2fb4e2-434f-492a-a106-9a919155d6ca">1.7</ix:nonFraction>&#160;million shares of common stock are reserved for issuance under the ESPP as of March&#160;31, 2023.</span></div><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg2MA_15a11d7b-a405-47da-90ae-4ff04f3f9f7d" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The fair value was estimated based on the market price of our common stock at the beginning of the offering period using the following assumptions:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:85.718%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.082%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Life (in years)</span></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonNumeric contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331" name="us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1" format="ixt-sec:duryear" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjgzYTVmNDQwNDVjNjQ5MDc4YmQyODkwMDdhN2ZhMjVkL3RhYmxlcmFuZ2U6ODNhNWY0NDA0NWM2NDkwNzhiZDI4OTAwN2E3ZmEyNWRfMC0xLTEtMS0xMDAwMzY_7b17ec7e-4086-4060-abd4-f0d50228d12f">0.5</ix:nonNumeric></span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Volatility</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="number" contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331" decimals="3" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate" scale="-2" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjgzYTVmNDQwNDVjNjQ5MDc4YmQyODkwMDdhN2ZhMjVkL3RhYmxlcmFuZ2U6ODNhNWY0NDA0NWM2NDkwNzhiZDI4OTAwN2E3ZmEyNWRfMS0xLTEtMS0xMDAwMzY_df53249a-fcab-4ad8-b438-6400842df981">46.4</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Dividend yield</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="number" contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331" decimals="2" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate" format="ixt:fixed-zero" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjgzYTVmNDQwNDVjNjQ5MDc4YmQyODkwMDdhN2ZhMjVkL3RhYmxlcmFuZ2U6ODNhNWY0NDA0NWM2NDkwNzhiZDI4OTAwN2E3ZmEyNWRfMi0xLTEtMS0xMDAwMzY_6f134d7f-ae44-43e8-8376-2fc6d5f0b958">&#8212;</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Risk-free interest rate</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="number" contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331" decimals="3" name="us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate" scale="-2" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjgzYTVmNDQwNDVjNjQ5MDc4YmQyODkwMDdhN2ZhMjVkL3RhYmxlcmFuZ2U6ODNhNWY0NDA0NWM2NDkwNzhiZDI4OTAwN2E3ZmEyNWRfMy0xLTEtMS0xMDAwMzY_e01b60c9-1453-49ef-aa71-9526714bfba2">2.5</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr></table></div></ix:nonNumeric></ix:continuation><div id="i6d9a8d1ab1f5454885a98aaf9e608722_67"></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE L &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:IncomeTaxDisclosureTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82Ny9mcmFnOjFlZWZkZjZjZTUwNTRmMWQ4M2FiMWEyYmQ4MDMzZDVmL3RleHRyZWdpb246MWVlZmRmNmNlNTA1NGYxZDgzYWIxYTJiZDgwMzNkNWZfOTE5_e6450187-3869-44aa-a879-552620b45bc0" continuedAt="ied884b7071e04d45b9b29996f9cf2155" escape="true">Income Taxes</ix:nonNumeric></span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"><ix:continuation id="ied884b7071e04d45b9b29996f9cf2155" continuedAt="ic8c38a3fbf6741febb21158abd9ac93e">We record our interim provision for income taxes by applying our estimated annual effective tax rate to our year-to-date pre-tax income and adjust the provision for discrete tax items recorded in the period. Our provisions for income taxes includes current federal, state, and foreign income tax expense, as well as deferred tax expense.</ix:continuation></span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"><ix:continuation id="ic8c38a3fbf6741febb21158abd9ac93e">Differences between our effective tax rate and statutory tax rates are primarily due to the impact of permanently non-deductible expenses partially offset by the federal research and development credits and tax benefits associated with foreign-derived intangible income. Additionally, excess tax benefits generated upon settlement or exercise of stock awards are recognized as a reduction to income tax expense as a discrete tax item in the quarter that the event occurs, creating potentially significant fluctuation in tax expense by quarter and by year.</ix:continuation> </span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">15</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_70"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:3pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE M &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:OtherNonoperatingIncomeAndExpenseTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RleHRyZWdpb246MjYwZTkzNDU3MjI4NDYzOWJlY2I2MzRiNDJmZmE4NmVfODM_408049df-63b3-4816-ade8-6aa23ba709da" continuedAt="ifb66fe17a34a4bba8e23baba8ee8e9d2" escape="true">Other Income and Expense</ix:nonNumeric></span></div><ix:continuation id="ifb66fe17a34a4bba8e23baba8ee8e9d2"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RleHRyZWdpb246MjYwZTkzNDU3MjI4NDYzOWJlY2I2MzRiNDJmZmE4NmVfODQ_4b9802e5-c54e-4612-9a20-3e6ae2ce793a" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Other income, net included the following: </span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.696%"><tr><td style="width:1.0%"></td><td style="width:72.152%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:11.969%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.407%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:11.972%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Investment income</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:InvestmentIncomeNet" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfMi0xLTEtMS0xMDAwMzY_4b03d3f5-69fb-414a-aac5-bb44e65d48cd">1,127</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:InvestmentIncomeNet" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfMi0zLTEtMS0xMDAwMzY_57dfbbac-5c47-4239-a510-21039ea7a04e">48</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Realized gain from foreign currency on cash and investments held</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:ForeignCurrencyTransactionGainLossBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfMy0xLTEtMS0xMDAwMzY_2e306d7c-6c20-43cf-81c7-c19b8bbeff59">137</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:ForeignCurrencyTransactionGainLossBeforeTax" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfMy0zLTEtMS0xMDAwMzY_dd8781fd-77d2-409a-b457-dd07572f88b2">468</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Other income (expense), net</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:OtherNonoperatingIncomeExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfNC0xLTEtMS0xMDAwMzY_4abb7e97-e369-40d2-99a6-b6b5e1b4cc2c">12</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(<ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" sign="-" name="us-gaap:OtherNonoperatingIncomeExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfNC0zLTEtMS0xMDAwMzY_4f424e7a-c046-4fbb-bee6-500f1c9c5622">93</ix:nonFraction>)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total other income, net</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:NonoperatingIncomeExpense" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfNS0xLTEtMS0xMDAwMzY_6d9bdf81-1256-4e99-add7-1d6dc4182026">1,276</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:NonoperatingIncomeExpense" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfNS0zLTEtMS0xMDAwMzY_f6474604-0926-4279-8e25-bf5c56f24525">423</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric></ix:continuation><div id="i6d9a8d1ab1f5454885a98aaf9e608722_73"></div><div style="margin-top:3pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE N &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:EarningsPerShareTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RleHRyZWdpb246YjQ1YTg0Yjg4YjRlNGZiMzk4Y2M2NWVlYTExOTMyMDVfNDQ_af48b7a0-4ca4-486b-bc54-194e57d7cc13" continuedAt="i4cc14d1cabb24a13a9a8db3398d1f70d" escape="true">Net Income Per Share</ix:nonNumeric></span></div><ix:continuation id="i4cc14d1cabb24a13a9a8db3398d1f70d"><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RleHRyZWdpb246YjQ1YTg0Yjg4YjRlNGZiMzk4Y2M2NWVlYTExOTMyMDVfNDY_68ae5732-e9e6-4c62-92a1-7eaeae2fcfd0" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The components and computation of basic and diluted net income per share were as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.848%"><tr><td style="width:1.0%"></td><td style="width:71.889%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.101%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.104%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except per share amounts)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%">Numerator</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net income</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ia18cb472d37847b4ae4f0e7c9fcc2093_D20230101-20230331" decimals="-3" name="us-gaap:NetIncomeLoss" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfMy0xLTEtMS0xMDAwMzY_82620c20-cf40-4702-84f0-a471c995fc78">15,289</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usd" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:NetIncomeLoss" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfMy0zLTEtMS0xMDAwMzY_0d496217-35f7-48e4-a178-8b2addd5c76a">12,603</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%">Denominator</span></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted average common shares outstanding, basic</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:WeightedAverageNumberOfSharesOutstandingBasic" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNS0xLTEtMS0xMDAwMzY_4a25c50d-ffb0-46d4-a736-81b2324d36d0"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:WeightedAverageNumberOfSharesOutstandingBasic" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNS0xLTEtMS0xMDAwMzY_c84e6d40-cbac-4c7b-a790-1c8c1c25b87d">36,427</ix:nonFraction></ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:WeightedAverageNumberOfSharesOutstandingBasic" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNS0zLTEtMS0xMDAwMzY_58753cf6-f053-4043-94fb-899997695560">36,136</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Options to purchase common stock</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNi0xLTEtMS0xMDAwMzY_906c31f7-9c39-4089-aa34-842eefbd423a">307</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNi0zLTEtMS0xMDAwMzY_0b84a1af-dcda-4d45-98d0-c564b11fe8be">419</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">PSUs, RSUs, RSAs, and DSUs</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:IncrementalCommonSharesAttributableToContingentlyIssuableShares" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNy0xLTEtMS0xMDAwMzY_b428caa0-d002-40d2-bc47-8d7ae31bc3b6">421</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:IncrementalCommonSharesAttributableToContingentlyIssuableShares" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNy0zLTEtMS0xMDAwMzY_3ffbfa5e-57e2-424c-9370-495c75519610">434</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted average common shares outstanding, diluted</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfOC0xLTEtMS0xMDAwMzY_c9cacfb3-142b-417d-9c4d-2f606cff22e5"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfOC0xLTEtMS0xMDAwMzY_fa9d9ba7-2aca-4232-8d9b-84c0a1c1b37a">37,155</ix:nonFraction></ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding" format="ixt:num-dot-decimal" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfOC0zLTEtMS0xMDAwMzY_c5751d11-6758-48cb-b078-ed9b28e1254d">36,989</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%">Net income per share</span></td><td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Basic</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="2" name="us-gaap:EarningsPerShareBasic" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfMTAtMS0xLTEtMTAwMDM2_0719e344-6476-4784-9d91-a0f030deaf68">0.42</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="2" name="us-gaap:EarningsPerShareBasic" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfMTAtMy0xLTEtMTAwMDM2_f23d5e78-2d7e-45d9-8c58-c97ae58aa4a1">0.35</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Diluted</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="2" name="us-gaap:EarningsPerShareDiluted" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfMTEtMS0xLTEtMTAwMDM2_a15b4e1a-3b5f-460b-a419-56495619e1a8">0.41</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="usdPerShare" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="2" name="us-gaap:EarningsPerShareDiluted" scale="0" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfMTEtMy0xLTEtMTAwMDM2_f644bfca-8be0-43b0-8275-26c3de0a498e">0.34</ix:nonFraction>&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RleHRyZWdpb246YjQ1YTg0Yjg4YjRlNGZiMzk4Y2M2NWVlYTExOTMyMDVfNDM_a7859407-250b-429b-9bc2-6b8ad322acda" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The number of outstanding potential common shares that were excluded from the calculation of diluted net income per share as they were anti-dilutive was as follows:</span></div><div style="margin-top:6pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.545%"><tr><td style="width:1.0%"></td><td style="width:71.807%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.142%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.408%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.143%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Anti-dilutive shares</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" decimals="-3" name="us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmQ1YjU0NGMyNGFhZDQ3OTZhYjAxN2YxMGE1MGMzZDQzL3RhYmxlcmFuZ2U6ZDViNTQ0YzI0YWFkNDc5NmFiMDE3ZjEwYTUwYzNkNDNfMi0xLTEtMS0xMDAwMzY_4b73c8cb-40c9-4eab-992c-72accae54898">108</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="shares" contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331" decimals="-3" name="us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount" scale="3" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmQ1YjU0NGMyNGFhZDQ3OTZhYjAxN2YxMGE1MGMzZDQzL3RhYmxlcmFuZ2U6ZDViNTQ0YzI0YWFkNDc5NmFiMDE3ZjEwYTUwYzNkNDNfMi0zLTEtMS0xMDAwMzY_776de757-422b-446d-a746-9bcaa2435d38">151</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric></ix:continuation><div id="i6d9a8d1ab1f5454885a98aaf9e608722_76"></div><div style="margin-top:3pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">NOTE O &#8211; <ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:GeographicInformationTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RleHRyZWdpb246NzQzNDA2NTlmYmJmNDllZWFhNTBiOGVmODdhODNlYThfMTUx_d6b1e3a3-3831-42d2-aa18-781b00929b39" continuedAt="i665dd921c7f94577adb6de9896b492f3" escape="true">Geographic Information</ix:nonNumeric></span></div><ix:continuation id="i665dd921c7f94577adb6de9896b492f3"><div style="margin-top:6pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Revenue</span></div><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="us-gaap:ScheduleOfProductInformationTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RleHRyZWdpb246NzQzNDA2NTlmYmJmNDllZWFhNTBiOGVmODdhODNlYThfMTUy_9423f552-1ac0-4a94-adb5-c44fdbe3b6af" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Domestic revenue, which we define as revenue that was attributable to customers based within the U.S., was as follows:</span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Domestic revenue</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="number" contextRef="i09c91f829fc14da1b95accd9d3986fac_D20230101-20230331" decimals="2" name="us-gaap:ConcentrationRiskPercentage1" scale="-2" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RhYmxlOjNiZjI0NTUyZTJlMjQ0OGE5NDMzNTc5MzljN2Q1ZmY2L3RhYmxlcmFuZ2U6M2JmMjQ1NTJlMmUyNDQ4YTk0MzM1NzkzOWM3ZDVmZjZfMi0xLTEtMS0xMDAwMzY_af5b410a-daf4-411c-836b-a97372634fbe">84</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="number" contextRef="ibdb411029c074e9ea4c1c3c2e805eced_D20220101-20220331" decimals="2" name="us-gaap:ConcentrationRiskPercentage1" scale="-2" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RhYmxlOjNiZjI0NTUyZTJlMjQ0OGE5NDMzNTc5MzljN2Q1ZmY2L3RhYmxlcmFuZ2U6M2JmMjQ1NTJlMmUyNDQ4YTk0MzM1NzkzOWM3ZDVmZjZfMi0zLTEtMS0xMDAwMzY_3ad12008-b2fa-48d2-9824-7f6a8ee2bf5b">84</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td></tr></table></div></ix:nonNumeric><div style="margin-top:3pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">No single jurisdiction outside of the U.S. had revenues in excess of 10%. </span></div><div style="margin-top:6pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Property and Equipment</span></div><ix:nonNumeric contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331" name="spsc:ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RleHRyZWdpb246NzQzNDA2NTlmYmJmNDllZWFhNTBiOGVmODdhODNlYThfMTU0_f3720269-c463-4c57-8fb6-5893284d1920" escape="true"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Property and equipment, net located at subsidiary and office locations outside of the U.S. was as follows:</span></div><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31,<br/>2023</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">International property and equipment</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="number" contextRef="i62f046dcd2034c77b0a5beb5ec3cff59_D20230101-20230331" decimals="3" name="us-gaap:ConcentrationRiskPercentage1" scale="-2" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RhYmxlOjJkOGUyOWYwMzM4YzQxNGNiMmYyZmEzNDU5M2NjOTFjL3RhYmxlcmFuZ2U6MmQ4ZTI5ZjAzMzhjNDE0Y2IyZjJmYTM0NTkzY2M5MWNfMS0xLTEtMS0xMDAwMzY_5092ec4b-70e1-462b-8593-366b1746a3ca">14</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"><ix:nonFraction unitRef="number" contextRef="i6f4fecba0c8a4e1786a0301a0c8ea540_D20220101-20221231" decimals="3" name="us-gaap:ConcentrationRiskPercentage1" scale="-2" id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RhYmxlOjJkOGUyOWYwMzM4YzQxNGNiMmYyZmEzNDU5M2NjOTFjL3RhYmxlcmFuZ2U6MmQ4ZTI5ZjAzMzhjNDE0Y2IyZjJmYTM0NTkzY2M5MWNfMS0zLTEtMS0xMDAwMzY_8a472481-2793-4a8f-a9ca-13ed5b3377d9">13</ix:nonFraction>&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr></table></div></ix:nonNumeric></ix:continuation><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">16</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_79"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:9pt;padding-left:72pt;text-indent:-72pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Item 2.&#160;&#160;&#160;&#160;Management&#8217;s Discussion and Analysis of Financial Condition and Results of Operations</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_82"></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">This Quarterly Report on Form 10-Q contains forward-looking statements</span><span style="color:#000000;font-family:'Calibri',sans-serif;font-size:11pt;font-style:italic;font-weight:400;line-height:120%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">within the meaning of the U.S. Private Securities Litigation Reform Act of 1995. Forward looking statements regarding us, our business prospects and our results of operations are subject to certain risks and uncertainties posed by many factors and events that could cause our actual business, prospects and results of operations to differ materially from those that may be anticipated by such forward-looking statements. Readers are cautioned not to place undue reliance on these forward-looking statements, which speak only as of the date of this report. In some cases, you can identify forward-looking statements by the following words: &#8220;anticipate,&#8221; &#8220;assume,&#8221; &#8220;believe,&#8221; &#8220;continue,&#8221; &#8220;could,&#8221; &#8220;estimate,&#8221; &#8220;expect,&#8221; &#8220;intend,&#8221; &#8220;may,&#8221; &#8220;ongoing,&#8221; &#8220;plan,&#8221; &#8220;potential,&#8221; &#8220;predict,&#8221; &#8220;project,&#8221; &#8220;should,&#8221; &#8220;will,&#8221; &#8220;would,&#8221; or the negative of these terms or other comparable terminology, although not all forward-looking statements contain these words. Similarly, statements that describe our future plans, objectives or goals are also forward-looking. Forward-looking statements may also be made from time to time in oral presentations, including telephone conferences and/or webcasts open to the public. Shareholders, potential investors, and others are cautioned that all forward-looking statements involve risks and uncertainties that could cause results in future periods to differ materially from those anticipated by some of the statements made in this report, including the risks and uncertainties described under the heading &#8220;Risk Factors&#8221; appearing in our Annual Report on Form 10-K for the year ended December&#160;31, 2022, as may be updated in our subsequent Quarterly Reports on Form 10-Q from time to time. We expressly disclaim any intent or obligation to update or revise any forward-looking statements, whether as a result of new information, future events or otherwise. Readers are urged to carefully review and consider the various disclosures made by us in this report and in our other reports filed with the SEC that advise interested parties of the risks and factors that may affect our business.</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_85"></div><div style="margin-top:6pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Overview</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">SPS Commerce is a leading provider of cloud-based supply chain management services across our global retail network. Our products make it easier for retailers, grocers, distributors, suppliers, and logistics firms to communicate and collaborate by simplifying how they manage and share item, inventory, order and sales data across omnichannel retail channels. We deliver our products using a full-service model, which includes industry-leading technology and a team of experts that optimize, update, and operate the technology on customers' behalf.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our products enable customers to increase supply chain performance, optimize inventory levels and sell-through, reduce operational costs, improve order visibility, and satisfy consumer demands for a seamless omnichannel experience.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We plan to continue to grow our business by further penetrating the supply chain management market, increasing revenues from our customers as their businesses grow, expanding our distribution channels, expanding our international presence and, from time to time, developing new products and applications. We also intend to selectively pursue acquisitions that will add customers, allow us to expand into new regions, or allow us to offer new functionalities.</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_88"></div><div style="margin-top:6pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Key Financial Terms, Metrics and Non-GAAP Measures</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We have several key financial terms, metrics, and non-GAAP measures as discussed in our Annual Report on Form 10-K for the year ended December&#160;31, 2022, as filed with the SEC, under the heading &#8220;</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">Management&#8217;s Discussion and Analysis of Financial Condition and Results of Operations.</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">&#8221;</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">To supplement our consolidated financial statements, we provide investors with Adjusted EBITDA, Adjusted EBITDA Margin, and non-GAAP income per share, all of which are non-GAAP financial measures. We believe that these non-GAAP financial measures provide useful information to our management, Board of Directors, and investors regarding certain financial and business trends relating to our financial condition and results of operations.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our management uses these non-GAAP financial measures to compare our performance to that of prior periods for trend analyses and planning purposes. Adjusted EBITDA is also used for purposes of determining executive and senior management incentive compensation. We believe these non-GAAP financial measures are useful to an investor as they are widely used in evaluating operating performance. Adjusted EBITDA and Adjusted EBITDA Margin are used to measure operating performance without regard to items such as depreciation and amortization, which can vary depending upon accounting methods and the book value of assets, and to present a meaningful measure of corporate performance exclusive of capital structure and the method by which assets were acquired.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">These non-GAAP financial measures should not be considered a substitute for, or superior to, financial measures calculated in accordance with GAAP. These non-GAAP financial measures exclude significant expenses and income that are required by GAAP to be recorded in our consolidated financial statements and are subject to inherent limitations. Investors should review the reconciliations of non-GAAP financial measures to the comparable GAAP financial measures that are included in this &#8220;</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">Management&#8217;s Discussion and Analysis of Financial Condition and Results of Operations.</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">&#8221;</span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">17</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_91"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Results of Operations</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_94"></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Three Months Ended March&#160;31, 2023 Compared to Three Months Ended March&#160;31, 2022</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The following table presents our results of operations for the periods indicated:</span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:29.506%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.960%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.960%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.960%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.960%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.960%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.964%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="21" style="border-bottom:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended March 31,</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="9" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Change</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">($ in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">$</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">% of revenue</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:5.2pt;font-weight:700;line-height:100%;position:relative;top:-2.8pt;vertical-align:baseline">(1)</span></div></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">$</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">% of revenue</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:5.2pt;font-weight:700;line-height:100%;position:relative;top:-2.8pt;vertical-align:baseline">(1)</span></div></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">$</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">%</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Revenues</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">125,868&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">100.0&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">105,193&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">100.0&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">20,675&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">19.7&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cost of revenues</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">42,964&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">34.1&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">35,389&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">33.6&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">7,575&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">21.4&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Gross profit</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">82,904&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">65.9&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">69,804&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">66.4&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">13,100&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">18.8&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating expenses</span></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Sales and marketing</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">29,083&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">23.1&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">24,655&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">23.4&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,428&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">18.0&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Research and development</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,563&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">10.0&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">10,701&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">10.2&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,862&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">17.4&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">General and administrative</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">20,677&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">16.4&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">15,468&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">14.7&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">5,209&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">33.7&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Amortization of intangible assets</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,851&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3.1&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,470&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2.3&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,381&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">55.9&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 19pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total operating expenses</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">66,174&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">52.6&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">53,294&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">50.7&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,880&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">24.2&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Income from operations</span></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">16,730&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">13.3&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">16,510&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">15.7&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">220&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1.3&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Other income, net</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,276&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1.0&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">423&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.4&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">853&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">201.7&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Income before income taxes</span></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">18,006&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">14.3&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">16,933&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">16.1&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,073&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6.3&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Income tax expense</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,717&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2.2&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,330&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4.1&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(1,613)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(37.3)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net income</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">15,289&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12.1&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,603&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12.0&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,686&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">21.3&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr><tr style="height:15pt"><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td></tr><tr><td colspan="36" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:100%">(1) Amounts in column may not foot due to rounding</span></td></tr></table></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Revenues</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"> -</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> Revenues increased for the 89th consecutive quarter. The increase in revenue resulted from two primary factors: the increase in recurring revenue customers, which is driven primarily by continued business growth and by business acquisitions, and the increase in average recurring revenues per recurring revenue customer, which we also refer to as wallet share.</span></div><div style="margin-top:6pt;padding-left:54pt;text-indent:-18pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">&#8226;</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:14.5pt">The number of recurring revenue customers increased 13% to 42,750 at </span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> from 37,900 at </span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2022 primarily due to sales and marketing efforts to acquire new customers and due to recent acquisitions.</span></div><div style="margin-top:6pt;padding-left:54pt;text-indent:-18pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">&#8226;</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:14.5pt">Wallet share increased 7% to $11,050 for the three months ended </span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> from $10,350 for the same period in 2022. This was primarily attributable to increased usage of our products by our recurring revenue customers.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Recurring revenues increased 20% to $117.3 million for the three months ended </span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023 compared to the three months ended March&#160;31, 2022. Recurring revenues </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">accounted for 93% of our total revenues for the three months ended </span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023 </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">and 2022. We anticipate that the number of recurring revenue customers and wallet share will continue to increase as we execute our growth strategy focused on further penetration of our market.</span></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Cost of Revenues -</span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The increase in cost of revenues was primarily due to increased headcount, which resulted in an increase of $5.8 million in personnel-related costs, and an increase of $0.7 million in software subscriptions.</span></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Sales and Marketing Expenses -</span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The increase in sales and marketing expense was primarily due to increased headcount, which resulted in an increase of $3.4 million in personnel-related costs.</span></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Research and Development Expenses -</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> No significant changes.</span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">18</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">General and Administrative Expenses </span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">- </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The increase in general and administrative expense was primarily due to increased headcount, which resulted in an increase of $1.5 million in personnel-related costs. Additionally, there were also increases in stock-based compensation of $1.7 million and $1.0 million in charitable contributions. </span></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Amortization of Intangible Assets -</span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The increase in amortization of intangible assets was driven by acquired intangible assets related to recent business combinations.</span></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Other Expense, Net -</span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">No significant changes.</span></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Income Tax Expense -</span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The decrease in income tax expense was primarily driven by the increase in the excess tax deductions from current period equity award settlements, partially offset by an increase in pre-tax income. Excess tax benefits generated upon the settlement or exercise of stock awards are recognized as a reduction to income tax expense and, as a result, we expect that our annual effective income tax rate will fluctuate.</span></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Adjusted EBITDA - </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Adjusted EBITDA consists of net income adjusted for income tax expense, depreciation and amortization expense, stock-based compensation expense, realized gain or loss from foreign currency on cash and investments held, investment income or loss, and other adjustments as necessary for a fair presentation.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The following table provides a reconciliation of net income to Adjusted EBITDA:</span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net income</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">15,289&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,603&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Income tax expense</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,717&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,330&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Depreciation and amortization of property and equipment</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,626&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,864&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Amortization of intangible assets</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,851&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,470&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Stock-based compensation expense</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">11,780&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">9,015&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Realized gain from foreign currency on cash and investments held</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(137)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(468)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Investment income</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(1,127)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(48)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Adjusted EBITDA</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36,999&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">31,766&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr style="height:15pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:3pt double #000;padding:0 1pt"></td></tr></table></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Adjusted EBITDA Margin -</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> Adjusted EBITDA Margin</span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">consists of Adjusted EBITDA divided by revenue. Margin, the comparable GAAP measure of financial performance, consists of net income divided by revenue. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The following table provides a comparison of Margin to Adjusted EBITDA Margin:</span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except Margin and Adjusted EBITDA Margin)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Revenue</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 7pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">125,868</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 7pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">105,193</span></td></tr><tr style="height:15pt"><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net income</span></td><td colspan="3" style="background-color:#cceeff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">15,289</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,603</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Margin</span></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr><tr style="height:15pt"><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:3pt double #000;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Adjusted EBITDA</span></td><td colspan="3" style="background-color:#ffffff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36,999</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">31,766</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Adjusted EBITDA Margin</span></td><td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">29&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">30&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr></table></div><div style="margin-top:12pt;text-indent:36pt"><span><br/></span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">19</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Non-GAAP Income per Share - </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Non-GAAP income per share consists of net income adjusted for stock-based compensation expense, amortization expense related to intangible assets, realized gain or loss from foreign currency on cash and investments held, other adjustments as necessary for a fair presentation, and the corresponding tax impacts of the adjustments to net income, divided by the weighted average number of shares of common and diluted stock outstanding during each period. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">To quantify the tax effects, we recalculated income tax expense excluding the direct book and tax effects of the specific items constituting the non-GAAP adjustments. The difference between this recalculated income tax expense and GAAP income tax expense is presented as the income tax effect of the non-GAAP adjustments.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The following table provides a reconciliation of net income to non-GAAP income per share:</span><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except per share amounts)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net income</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">15,289&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,603&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Stock-based compensation expense</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">11,780&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">9,015&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Amortization of intangible assets</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,851&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,470&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Realized gain from foreign currency on cash and investments held</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(137)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(468)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Income tax effects of adjustments</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(5,909)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(3,219)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Non-GAAP income</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">24,874&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">20,401&#160;</span></td><td style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Shares used to compute non-GAAP income per share</span></td><td colspan="3" style="background-color:#cceeff;border-top:3pt double #000;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="background-color:#cceeff;border-top:3pt double #000;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Basic</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36,427&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36,136&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Diluted</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">37,155&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36,989&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Non-GAAP income per share</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Basic</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.68&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.56&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 16pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Diluted</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.67&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.55&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr style="height:15pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr></table></div><div style="margin-top:12pt"><span><br/></span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">20</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_100"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Critical Accounting Policies and Estimates </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">This discussion of our financial condition and results of operations is based upon our condensed consolidated financial statements, which are prepared in accordance with GAAP and with the instructions to Form 10-Q and Rule 10-01 of Regulation S-X. The preparation of these consolidated financial statements requires us to make estimates, judgments, and assumptions that affect the reported amounts of assets, liabilities, revenues, expenses, and related disclosures. On an ongoing basis, we evaluate our estimates, judgments, and assumptions. We base our estimates of the carrying value of certain assets and liabilities on historical experience and on various other assumptions that we believe to be reasonable. Our actual results may differ from these estimates under different assumptions or conditions.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">A critical accounting policy or estimate is one that is both material to the presentation of our financial statements and requires us to make difficult, subjective, or complex judgments relating to uncertain matters that could have a material effect on our financial condition and results of operations. Accordingly, we believe that our policies for revenue recognition, internally developed software, and business combinations are the most critical to fully understand and evaluate our financial condition and results of operations.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">During the three months ended March&#160;31, 2023, there were no changes in our critical accounting policies or estimates. For additional information regarding our critical accounting policies and estimates, see the discussion under "Critical Accounting Policies and Estimates" in "Management's Discussion and Analysis of Financial Condition and Results of Operations" included in our Annual Report on Form 10-K for the year ended December&#160;31, 2022, as filed with the SEC.</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_103"></div><div style="margin-top:18pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Liquidity and Capital Resources </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">As of </span><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">, our principal sources of liquidity were cash and cash equivalents and short-term investments totaling $233.5 million and net accounts receivable of $43.4 million. Our investments are selected in accordance with our investment policy, with a goal of maintaining liquidity and capital preservation. Our cash equivalents and short-term investments are held in highly liquid money market funds, certificates of deposits, and commercial paper.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The summary of activity within the condensed consolidated statements of cash flows was as follows:</span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:71.930%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.081%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:12.083%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net cash provided by operating activities</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">21,631&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,347&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net cash provided by (used in) investing activities</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(4,590)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">5,668&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net cash provided by (used in) financing activities</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,425&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(14,575)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr></table></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Net Cash Flows from Operating Activities</span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%"> </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The increase in cash provided by operating activities was primarily driven by changes in the amount and timing of settlement of operating assets and liabilities, in addition to increased net income.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Net Cash Flows from Investing Activities</span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%"> </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The change in cash provided by (used in) investing activities was primarily due to the net investment activity.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Net Cash Flows from Financing Activities</span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%"> </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The change in cash provided by (used in) financing activities was primarily due to the decrease in cash used for share repurchases. </span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">21</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Contractual and Commercial Commitment Summary</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our contractual obligations and commercial commitments as o</span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">f </span><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023 </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">are summarized below:</span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:56.475%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.051%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.051%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:9.051%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.406%"></td><td style="width:0.1%"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td style="width:1.0%"></td><td style="width:9.054%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="21" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Payments Due by Period</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Less Than<br/>1 Year</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">1-3 Years</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">3-5 Years</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Total</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating lease obligations, including imputed interest</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,689&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">8,634&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,105&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">17,428&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Purchase commitments</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,553&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,790&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,343&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">7,242&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">10,424&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,105&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"></td><td colspan="3" style="display:none"></td><td colspan="3" style="display:none"></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">21,771&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"></td></tr></table></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Future Capital Requirements</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our future capital requirements may vary significantly from those now planned and will depend on many factors, including:</span></div><div style="margin-top:6pt;padding-left:72pt;text-indent:-18pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">&#8226;</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:14.5pt">costs to develop and implement new products and applications, if any;</span></div><div style="margin-top:6pt;padding-left:72pt;text-indent:-18pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">&#8226;</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:14.5pt">sales and marketing resources needed to further penetrate our market and gain acceptance of new products and applications that we may develop;</span></div><div style="margin-top:6pt;padding-left:72pt;text-indent:-18pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">&#8226;</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:14.5pt">expansion of our operations in the U.S. and internationally;</span></div><div style="margin-top:6pt;padding-left:72pt;text-indent:-18pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">&#8226;</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:14.5pt">response of competitors to our products and applications; and</span></div><div style="margin-top:6pt;padding-left:72pt;text-indent:-18pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">&#8226;</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:14.5pt">use of capital for acquisitions.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Historically, we have experienced increases in our expenditures consistent with the growth in our operations and personnel, and we anticipate that our expenditures will continue to increase as we expand our business.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We believe our cash, cash equivalents, investments, and cash flows from our operations will be sufficient to meet our working capital and capital expenditure requirements for at least the next twelve months.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Off-Balance Sheet Arrangements</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We do not have any off-balance sheet arrangements, investments in special purpose entities or undisclosed borrowings or debt. Additionally, we are not a party to any derivative contracts or synthetic leases.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Foreign Currency Exchange and Inflation Rate Changes</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">For information regarding the effect of foreign currency exchange rate changes, refer to the section entitled &#8220;Foreign Currency Exchange Risk,&#8221; included in Part I, Item 3, &#8220;Quantitative and Qualitative Disclosures About Market Risk&#8221; of this Quarterly Report on Form 10-Q.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Inflation and changing prices did not have a material effect on our business during the three months ended </span><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023 </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">and we do not expect that inflation or changing prices will materially affect our business in the foreseeable future.</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_109"></div><div style="margin-top:18pt;padding-left:72pt;text-indent:-72pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Item 3.&#160;&#160;&#160;&#160;Quantitative and Qualitative Disclosures About Market Risk</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_112"></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Interest Rate Sensitivity Risk</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The principal objectives of our investment activities are to preserve principal, provide liquidity, and maximize income consistent with minimizing risk of material loss. We are exposed to market risk related to changes in interest rates. However, based on the nature and current level of our cash, cash equivalents, and investments, we believe there is no material risk exposure. We do not enter into investments for trading or speculative purposes.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We did not have any variable interest rate outstanding debt as of </span><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">. Therefore, we do not have any material risk to interest rate fluctuations.</span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">22</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_115"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Foreign Currency Exchange Risk</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Due to international operations, we have revenue, expenses, assets, and liabilities that are denominated in currencies other than the U.S. dollar, primarily the Australian and Canadian dollars. Our consolidated balance sheet, results of operations, and cash flows are, therefore, subject to fluctuations due to changes in foreign currency exchange rates and may be adversely affected in the future due to changes in foreign exchange rates. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our sales are primarily denominated in U.S. dollars. Our expenses are generally denominated in the local currencies in which our operations are located. As of </span><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">, we maintained 10% of our total cash and cash equivalents and investments in foreign currencies. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We believe that a hypothetical 10% change in foreign currency exchange rates or an inability to access foreign funds would not materially affect our ability to meet our operational needs, result in a material foreign currency loss or have a material impact on our consolidated financials. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We have not used any forward contracts or currency borrowings to hedge our exposure to foreign currency exchange risk, although we may do so in the future.</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_118"></div><div style="margin-top:18pt;padding-left:72pt;text-indent:-72pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Item 4.&#160;&#160;&#160;&#160;Controls and Procedures</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Evaluation of Disclosure Controls and Procedures</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">As of the end of the period covered by this Quarterly Report on Form 10-Q, our management has evaluated, under the supervision and with the participation of our Chief Executive Officer and Chief Financial Officer, the effectiveness of our disclosure controls and procedures (as defined in Rules 13a-15(e) and 15d-15(e) under the Securities Exchange Act of 1934). Disclosure controls and procedures are designed to ensure that information required to be disclosed in our reports filed under the Securities Exchange Act of 1934 is recorded, processed, summarized and reported within the time periods specified in the SEC&#8217;s rules and forms and that such information is accumulated and communicated to our management, including our Chief Executive Officer and Chief Financial Officer, to allow timely decisions regarding required disclosure. Based on this evaluation, our Chief Executive Officer and Chief Financial Officer concluded that our disclosure controls and procedures were effective as of </span><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Changes in Internal Control over Financial Reporting</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">There were no changes in our internal control over financial reporting during the quarter ended </span><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> that have materially affected, or are reasonably likely to materially affect, our internal control over financial reporting.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">In July 2022, we acquired the GCommerce business and in October 2022, we acquired the InterTrade business. Pursuant to the SEC&#8217;s general guidance that the assessment of a recently acquired business' internal control over financial reporting may be omitted in the year of acquisition, the scope of our most recent assessment did not include GCommerce or InterTrade. We are currently in the process of incorporating internal controls specific to GCommerce and InterTrade that we believe are appropriate and necessary to consolidate and report upon our financial results. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">As of </span><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">, excluding net intangible assets and goodwill, GCommerce and InterTrade combined represented 3.4% of our consolidated assets. For the </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">three</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> months ended </span><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">, GCommerce and InterTrade combined represented 3.6% of our consolidated revenues.</span></div><div style="margin-top:6pt;text-indent:36pt"><span><br/></span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">23</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_121"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt;text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">PART II. &#8211; OTHER INFORMATION</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_124"></div><div style="margin-top:18pt;padding-left:72pt;text-indent:-72pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Item 1.&#160;&#160;&#160;&#160;Legal Proceedings</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We are not currently subject to any material legal proceedings. From time to time, we may be named as a defendant in legal actions or otherwise be subject to claims arising from our normal business activities. Any such actions, even those that lack merit, could result in the expenditure of significant financial and managerial resources. We believe that we have obtained adequate insurance coverage or rights to indemnification in connection with potential legal proceedings that may arise.</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_127"></div><div style="margin-top:18pt;padding-left:72pt;text-indent:-72pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Item 1A.&#160;&#160;&#160;&#160;Risk Factors</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">There have been no material changes in our risk factors from those disclosed under the heading </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">&#8220;Risk Factors&#8221;</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> in our Annual Report on Form 10-K for the year ended December 31, 2022, as filed with the SEC.</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_130"></div><div style="margin-top:18pt;padding-left:72pt;text-indent:-72pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Item 2.&#160;&#160;&#160;&#160;Unregistered Sales of Equity Securities and Use of Proceeds</span></div><div style="margin-top:6pt;text-indent:27.78pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">(c) </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Share</span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%"> Repurchases</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">On July 26, 2022 (announced July 27, 2022), our board of directors authorized a program </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">to repurchase up to $50.0 million of our common stock. Under the program, purchases may be made from time to time in the open market or in privately negotiated purchases, or both. The new share repurchase program became effective August 26, 2022 and expires on July 26, 2024. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We did not make any repurchases under the program during the quarter ended March 31, 2023. </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">For more information regarding our </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">share</span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> repurchase programs, refer to Note </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">J</span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> to our condensed consolidated financial statements, included in Part I of this Quarterly Report on Form 10-Q.</span></div><div style="margin-top:6pt"><span><br/></span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_133"></div><div style="margin-top:18pt;padding-left:72pt;text-indent:-72pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Item 3.&#160;&#160;&#160;&#160;Defaults Upon Senior Securities</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Not Applicable.</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_136"></div><div style="margin-top:18pt;padding-left:72pt;text-indent:-72pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Item 4.&#160;&#160;&#160;&#160;Mine Safety Disclosures</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Not Applicable.</span></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_139"></div><div style="margin-top:18pt;padding-left:72pt;text-indent:-72pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Item 5.&#160;&#160;&#160;&#160;Other Information</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Not Applicable.</span></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">24</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_142"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="-sec-extract:summary;margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="-sec-extract:exhibit;color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="-sec-extract:summary;margin-top:18pt;padding-left:72pt;text-indent:-72pt"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">Item 6.&#160;&#160;&#160;&#160;Exhibits </span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:9.051%"></td><td style="width:0.1%"></td><td style="width:0.1%"></td><td style="width:0.557%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:87.992%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Number</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Description</span></td></tr><tr><td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">3.1</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:left;vertical-align:top"><div><span style="color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline"><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="http://www.sec.gov/Archives/edgar/data/1092699/000119312520148645/d833455dex32.htm">Ninth Amended and Restated Certificate of Incorporation (incorporated by reference to Exhibit 3.2 to our Current Report on Form 8-K filed with the SEC on May 21, 2020).</a></span></div></td></tr><tr style="height:5pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">3.2</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div><span style="color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline"><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000006/a2022_10kxex32-bylawsclean.htm">Amended and Restated Bylaws (incorporated by reference to Exhibit 3.</a><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000006/a2022_10kxex32-bylawsclean.htm">2</a><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000006/a2022_10kxex32-bylawsclean.htm"> to our </a><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000006/a2022_10kxex32-bylawsclean.htm">Form </a><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000006/a2022_10kxex32-bylawsclean.htm">10</a><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000006/a2022_10kxex32-bylawsclean.htm">-K filed with the SEC on </a><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000006/a2022_10kxex32-bylawsclean.htm">Feb</a><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000006/a2022_10kxex32-bylawsclean.htm">ruary </a><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000006/a2022_10kxex32-bylawsclean.htm">21</a><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000006/a2022_10kxex32-bylawsclean.htm">, 20</a><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000006/a2022_10kxex32-bylawsclean.htm">23</a><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000006/a2022_10kxex32-bylawsclean.htm">).</a></span></div></td></tr><tr style="height:5pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">10.1</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline"><a style="-sec-extract:exhibit;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000011/a101-ablackamendmenttoseve.htm">Amendment to Amended and Restated Executive Severance and Change in Control Agreement, dated as of March 1, 2023, by and between Archie C. Black and SPS Commerce, Inc. (incorporated by reference to Exhibit 10.1 to our Current Report on Form 8-K filed with the SEC on March 2, 2023).</a></span></div></td></tr><tr style="height:5pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">10.2</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline"><a style="-sec-extract:exhibit;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="https://www.sec.gov/Archives/edgar/data/1092699/000109269923000011/a103-formexecutiveamendmen.htm">Form of Amendment to Amended and Restated Executive Severance and Change in Control Agreement (incorporated by reference to Exhibit 10.3 to our Current Report on Form 8-K filed with the SEC on March 2, 2023).</a></span></div></td></tr><tr style="height:5pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">31.1</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div><span style="color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline"><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="q1_2023exhibitex311ceo.htm">Certification of Principal Executive Officer pursuant to Rules 13a-14(a) under the Securities Exchange Act of 1934, as amended (filed herewith).</a></span></div></td></tr><tr style="height:5pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">31.2</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div><span style="color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline"><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="q1_2023exhibitex312cfo.htm">Certification of Principal Financial Officer pursuant to Rules 13a-14(a) under the Securities Exchange Act of 1934, as amended (filed herewith).</a></span></div></td></tr><tr style="height:5pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">32.1</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div><span style="color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline"><a style="-sec-extract:exhibit;color:#0000ee;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%;text-decoration:underline" href="q1_2023exhibitex321ceocfo.htm">Certification of Chief Executive Officer and Chief Financial Officer pursuant to 18 U.S.C. Sec. 1350, as adopted pursuant to Section 906 of the Sarbanes-Oxley Act of 2002 (filed herewith).</a></span></div></td></tr><tr style="height:5pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">101</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%">Interactive Data Files Pursuant to Rule 405 of Regulation S-T (filed herewith).</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:11pt;font-weight:400;line-height:115%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%">The XBRL instance document does not appear in the Interactive Data File because its tags are embedded within the Inline XBRL document.</span></div></td></tr><tr style="height:5pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">104</span></td><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">The cover page from the Quarterly Report on Form 10-Q for the quarter ended March&#160;31, 2023, formatted in Inline XBRL. </span></div></td></tr></table></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div style="-sec-extract:summary"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">25</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div><div id="i6d9a8d1ab1f5454885a98aaf9e608722_145"></div><hr style="page-break-after:always"/><div style="min-height:45pt;width:100%"><div style="margin-top:12pt;text-align:right"><span style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline"><a style="color:#0000ff;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:120%;text-decoration:underline" href="#i6d9a8d1ab1f5454885a98aaf9e608722_7">Table of Contents</a></span></div></div><div style="margin-top:18pt;text-align:center"><span style="color:#00aae5;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">SIGNATURES</span></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Pursuant to the requirements of the Securities Exchange Act of 1934, the registrant has duly caused this report to be signed on its behalf by the undersigned thereunto duly authorized.</span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:48.900%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:48.900%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Dated: April&#160;26, 2023</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">SPS COMMERCE, INC.</span></td></tr><tr style="height:15pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">/s/ KIMBERLY NELSON</span></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Kimberly Nelson</span></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">Executive Vice President and Chief Financial Officer</span></td></tr><tr><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">(principal financial and accounting officer)</span></td></tr></table></div><div style="height:63pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:32.233%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:30.263%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:34.204%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div><img src="spsc-20230331_g2.jpg" alt="2.jpg" style="height:35px;margin-bottom:5pt;vertical-align:text-bottom;width:38px"/><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:107%">SPS COMMERCE, INC.</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:400;line-height:114%">26</span></div></td><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><div style="text-align:right"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">Form 10-Q for the Quarterly Period ended </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:6pt;font-weight:700;line-height:114%">March&#160;31, 2023</span></div></td></tr></table></div></div></div></body></html>
</XBRL>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>EX-31.1
<SEQUENCE>2
<FILENAME>q1_2023exhibitex311ceo.htm
<DESCRIPTION>EX-31.1
<TEXT>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head>
<!-- Document created using Wdesk -->
<!-- Copyright 2023 Workiva -->
<title>Document</title></head><body><div id="i7a1fc8962fc34b67ae1a7125dd1b8745_1"></div><div style="min-height:45pt;width:100%"><div><font><br></font></div></div><div style="margin-top:12pt;text-align:right"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">EXHIBIT 31.1</font></div><div style="margin-top:12pt;text-align:center"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">CERTIFICATION PURSUANT TO SECTION 302 OF THE SARBANES-OXLEY ACT</font></div><div style="margin-top:12pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">I, Archie Black, certify that&#58;</font></div><div style="margin-top:12pt;padding-left:54pt;text-indent:-36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">1.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:28.5pt">I have reviewed this Quarterly Report on Form 10-Q of SPS Commerce, Inc.&#59;</font></div><div style="margin-top:12pt;padding-left:54pt;text-indent:-36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">2.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:28.5pt">Based on my knowledge, this report does not contain any untrue statement of a material fact or omit to state a material fact necessary to make the statements made, in light of the circumstances under which such statements were made, not misleading with respect to the period covered by this report&#59;</font></div><div style="margin-top:12pt;padding-left:54pt;text-indent:-36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">3.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:28.5pt">Based on my knowledge, the financial statements, and other financial information included in this report, fairly present in all material respects the financial condition, results of operations and cash flows of the Registrant as of, and for, the periods presented in this report&#59;</font></div><div style="margin-top:12pt;padding-left:54pt;text-indent:-36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">4.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:28.5pt">The Registrant&#8217;s other certifying officer and I are responsible for establishing and maintaining disclosure controls and procedures (as defined in Exchange Act Rules 13a-15(e) and 15d-15(e)) and internal control over financial reporting (as defined in Exchange Act Rules 13a-15(f) and 15d-15(f)) for the Registrant and have&#58;</font></div><div style="margin-top:12pt;padding-left:108pt;text-indent:-54pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">a.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:47.07pt">Designed such disclosure controls and procedures, or caused such disclosure controls and procedures to be designed under our supervision, to ensure that material information relating to the Registrant, including its consolidated subsidiaries, is made known to us by others within those entities, particularly during the period in which this report is being prepared&#59;</font></div><div style="margin-top:12pt;padding-left:108pt;text-indent:-54pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">b.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:46.5pt">Designed such internal control over financial reporting, or caused such internal control over financial reporting to be designed under our supervision, to provide reasonable assurance regarding the reliability of financial reporting and the preparation of financial statements for external purposes in accordance with generally accepted accounting principles&#59;</font></div><div style="margin-top:12pt;padding-left:108pt;text-indent:-54pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">c.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:47.07pt">Evaluated the effectiveness of the Registrant&#8217;s disclosure controls and procedures and presented in this report our conclusions about the effectiveness of the disclosure controls and procedures, as of the end of the period covered by this report based on such evaluation&#59; and</font></div><div style="margin-top:12pt;padding-left:108pt;text-indent:-54pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">d.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:46.5pt">Disclosed in this report any change in the Registrant&#8217;s internal control over financial reporting that occurred during the Registrant&#8217;s most recent fiscal quarter (the Registrant&#8217;s fourth fiscal quarter in the case of an annual report) that has materially affected, or is reasonably likely to materially affect, the Registrant&#8217;s internal control over financial reporting&#59; and</font></div><div style="margin-top:12pt;padding-left:54pt;text-indent:-36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">5.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:28.5pt">The Registrant&#8217;s other certifying officer and I have disclosed, based on our most recent evaluation of internal control over financial reporting, to the Registrant&#8217;s auditors and the audit committee of the Registrant&#8217;s board of directors (or persons performing the equivalent functions)&#58;</font></div><div style="margin-top:12pt;padding-left:108pt;text-indent:-54pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">a.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:47.07pt">All significant deficiencies and material weaknesses in the design or operation of internal control over financial reporting which are reasonably likely to adversely affect the Registrant&#8217;s ability to record, process, summarize and report financial information&#59; and</font></div><div style="margin-top:12pt;padding-left:108pt;text-indent:-54pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">b.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:46.5pt">Any fraud, whether or not material, that involves management or other employees who have a significant role in the Registrant&#8217;s internal control over financial reporting.</font></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:48.900%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:48.900%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:112%">&#47;s&#47; ARCHIE BLACK</font></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="border-top:1pt solid #000000;padding:2px 1pt;text-align:left;vertical-align:top"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:112%">Archie Black</font></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:112%">Chief Executive Officer</font></div><div><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">(principal executive officer)</font></div><div><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:112%">April&#160;26, 2023</font></div></td><td colspan="3" style="padding:0 1pt"></td></tr></table></div><div style="height:45pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><font><br></font></div></div></div></body></html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>EX-31.2
<SEQUENCE>3
<FILENAME>q1_2023exhibitex312cfo.htm
<DESCRIPTION>EX-31.2
<TEXT>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head>
<!-- Document created using Wdesk -->
<!-- Copyright 2023 Workiva -->
<title>Document</title></head><body><div id="ice1a1194c83b44e3909b5c2b2daf389d_1"></div><div style="min-height:45pt;width:100%"><div><font><br></font></div></div><div style="margin-top:12pt;text-align:right"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">EXHIBIT 31.2</font></div><div style="margin-top:12pt;text-align:center"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">CERTIFICATION PURSUANT TO SECTION 302 OF THE SARBANES-OXLEY ACT</font></div><div style="margin-top:12pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">I, Kimberly Nelson, certify that&#58;</font></div><div style="margin-top:12pt;padding-left:54pt;text-indent:-36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">1.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:28.5pt">I have reviewed this Quarterly Report on Form 10-Q of SPS Commerce, Inc.&#59;</font></div><div style="margin-top:12pt;padding-left:54pt;text-indent:-36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">2.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:28.5pt">Based on my knowledge, this report does not contain any untrue statement of a material fact or omit to state a material fact necessary to make the statements made, in light of the circumstances under which such statements were made, not misleading with respect to the period covered by this report&#59;</font></div><div style="margin-top:12pt;padding-left:54pt;text-indent:-36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">3.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:28.5pt">Based on my knowledge, the financial statements, and other financial information included in this report, fairly present in all material respects the financial condition, results of operations and cash flows of the Registrant as of, and for, the periods presented in this report&#59;</font></div><div style="margin-top:12pt;padding-left:54pt;text-indent:-36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">4.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:28.5pt">The Registrant&#8217;s other certifying officer and I are responsible for establishing and maintaining disclosure controls and procedures (as defined in Exchange Act Rules 13a-15(e) and 15d-15(e)) and internal control over financial reporting (as defined in Exchange Act Rules 13a-15(f) and 15d-15(f)) for the Registrant and have&#58;</font></div><div style="margin-top:12pt;padding-left:108pt;text-indent:-54pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">a.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:47.07pt">Designed such disclosure controls and procedures, or caused such disclosure controls and procedures to be designed under our supervision, to ensure that material information relating to the Registrant, including its consolidated subsidiaries, is made known to us by others within those entities, particularly during the period in which this report is being prepared&#59;</font></div><div style="margin-top:12pt;padding-left:108pt;text-indent:-54pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">b.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:46.5pt">Designed such internal control over financial reporting, or caused such internal control over financial reporting to be designed under our supervision, to provide reasonable assurance regarding the reliability of financial reporting and the preparation of financial statements for external purposes in accordance with generally accepted accounting principles&#59;</font></div><div style="margin-top:12pt;padding-left:108pt;text-indent:-54pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">c.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:47.07pt">Evaluated the effectiveness of the Registrant&#8217;s disclosure controls and procedures and presented in this report our conclusions about the effectiveness of the disclosure controls and procedures, as of the end of the period covered by this report based on such evaluation&#59; and</font></div><div style="margin-top:12pt;padding-left:108pt;text-indent:-54pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">d.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:46.5pt">Disclosed in this report any change in the Registrant&#8217;s internal control over financial reporting that occurred during the Registrant&#8217;s most recent fiscal quarter (the Registrant&#8217;s fourth fiscal quarter in the case of an annual report) that has materially affected, or is reasonably likely to materially affect, the Registrant&#8217;s internal control over financial reporting&#59; and</font></div><div style="margin-top:12pt;padding-left:54pt;text-indent:-36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">5.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:28.5pt">The Registrant&#8217;s other certifying officer and I have disclosed, based on our most recent evaluation of internal control over financial reporting, to the Registrant&#8217;s auditors and the audit committee of the Registrant&#8217;s board of directors (or persons performing the equivalent functions)&#58;</font></div><div style="margin-top:12pt;padding-left:108pt;text-indent:-54pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">a.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:47.07pt">All significant deficiencies and material weaknesses in the design or operation of internal control over financial reporting which are reasonably likely to adversely affect the Registrant&#8217;s ability to record, process, summarize and report financial information&#59; and</font></div><div style="margin-top:12pt;padding-left:108pt;text-indent:-54pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">b.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:46.5pt">Any fraud, whether or not material, that involves management or other employees who have a significant role in the Registrant&#8217;s internal control over financial reporting.</font></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:48.900%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:48.900%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:112%">&#47;s&#47; KIMBERLY NELSON</font></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="border-top:1pt solid #000000;padding:2px 1pt;text-align:left;vertical-align:top"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:112%">Kimberly Nelson</font></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:112%">Executive Vice President and Chief Financial Officer</font></div><div><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">(principal financial and accounting officer)</font></div><div><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:112%">April&#160;26, 2023</font></div></td><td colspan="3" style="padding:0 1pt"></td></tr></table></div><div style="height:45pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><font><br></font></div></div></div></body></html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>EX-32.1
<SEQUENCE>4
<FILENAME>q1_2023exhibitex321ceocfo.htm
<DESCRIPTION>EX-32.1
<TEXT>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head>
<!-- Document created using Wdesk -->
<!-- Copyright 2023 Workiva -->
<title>Document</title></head><body><div id="id981d458f21d4fa48b3bc0968bb71d2f_1"></div><div style="min-height:45pt;width:100%"><div><font><br></font></div></div><div style="margin-top:12pt;text-align:right"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">EXHIBIT 32.1</font></div><div style="margin-top:12pt;text-align:center"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">CERTIFICATION PURSUANT TO</font></div><div style="text-align:center"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">18 U.S.C. &#167;1350</font></div><div style="text-align:center"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">AS ADOPTED PURSUANT TO</font></div><div style="text-align:center"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%">SECTION 906 OF THE SARBANES-OXLEY ACT OF 2002</font></div><div style="margin-top:12pt;text-indent:36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">In connection with the Quarterly Report on Form 10-Q of SPS Commerce, Inc. (the &#8220;Company&#8221;) for the period ended March&#160;31, 2023, as filed with the Securities and Exchange Commission on the date hereof (the &#8220;Report&#8221;), the undersigned, the Chief Executive Officer and the Chief Financial Officer of the Company, hereby certify, pursuant to and for purposes of 18 U.S.C. &#167;1350, as adopted pursuant to Section 906 of the Sarbanes-Oxley Act of 2002, that&#58;</font></div><div style="margin-top:12pt;padding-left:54pt;text-indent:-36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">1.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:28.5pt">The Report fully complies with the requirements of Section 13(a) or 15(d) of the Securities Exchange Act of 1934&#59; and</font></div><div style="margin-top:12pt;padding-left:54pt;text-indent:-36pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">2.</font><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%;padding-left:28.5pt">The information contained in the Report fairly presents, in all material respects, the financial condition and results of operations of the Company.</font></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:48.900%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:48.900%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#47;s&#47; ARCHIE BLACK</font></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:left;vertical-align:top"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Archie Black</font></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:115%">Chief Executive Officer<br>(principal executive officer)</font></td><td colspan="3" style="padding:0 1pt"></td></tr></table></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"></td><td style="width:48.900%"></td><td style="width:0.1%"></td><td style="width:1.0%"></td><td style="width:48.900%"></td><td style="width:0.1%"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#47;s&#47; KIMBERLY NELSON</font></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="border-top:0.75pt solid #000000;padding:2px 1pt;text-align:left;vertical-align:top"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Kimberly Nelson</font></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:115%">Executive Vice President and Chief Financial Officer</font></div><div><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:115%">(principal financial and accounting officer)</font></div></td><td colspan="3" style="padding:0 1pt"></td></tr><tr style="height:15pt"><td colspan="3" style="padding:0 1pt"></td><td colspan="3" style="padding:0 1pt"></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><div style="margin-top:12pt"><font style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">April&#160;26, 2023</font></div></td><td colspan="3" style="padding:0 1pt"></td></tr></table></div><div style="height:45pt;position:relative;width:100%"><div style="bottom:0;position:absolute;width:100%"><div><font><br></font></div></div></div></body></html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>EX-101.SCH
<SEQUENCE>5
<FILENAME>spsc-20230331.xsd
<DESCRIPTION>XBRL TAXONOMY EXTENSION SCHEMA DOCUMENT
<TEXT>
<XBRL>
<?xml version="1.0" encoding="UTF-8"?>

<!--XBRL Document Created with Wdesk from Workiva-->
<!--Copyright 2023 Workiva-->
<!--r:e8457af8-7448-488b-94ad-becdc804ffea,g:b7f35897-e981-4828-95af-9cb9c0061258-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:spsc="http://www.spscommerce.com/20230331" xmlns:xbrldt="http://xbrl.org/2005/xbrldt" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:dtr-types="http://www.xbrl.org/dtr/type/2020-01-21" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.spscommerce.com/20230331">
  <xs:import namespace="http://fasb.org/srt/2022" schemaLocation="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd"/>
  <xs:import namespace="http://fasb.org/us-gaap/2022" schemaLocation="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd"/>
  <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="http://www.xbrl.org/2003/xlink-2003-12-31.xsd"/>
  <xs:import namespace="http://www.xbrl.org/2003/instance" schemaLocation="http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd"/>
  <xs:import namespace="http://www.xbrl.org/2003/linkbase" schemaLocation="http://www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd"/>
  <xs:import namespace="http://www.xbrl.org/dtr/type/2020-01-21" schemaLocation="https://www.xbrl.org/dtr/type/2020-01-21/types.xsd"/>
  <xs:import namespace="http://xbrl.org/2005/xbrldt" schemaLocation="http://www.xbrl.org/2005/xbrldt-2005.xsd"/>
  <xs:import namespace="http://xbrl.sec.gov/dei/2022" schemaLocation="https://xbrl.sec.gov/dei/2022/dei-2022.xsd"/>
  <xs:annotation>
    <xs:appinfo>
      <link:linkbaseRef xmlns:xlink="http://www.w3.org/1999/xlink" xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:href="spsc-20230331_lab.xml" xlink:role="http://www.xbrl.org/2003/role/labelLinkbaseRef" xlink:type="simple"/>
      <link:linkbaseRef xmlns:xlink="http://www.w3.org/1999/xlink" xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:href="spsc-20230331_pre.xml" xlink:role="http://www.xbrl.org/2003/role/presentationLinkbaseRef" xlink:type="simple"/>
      <link:linkbaseRef xmlns:xlink="http://www.w3.org/1999/xlink" xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:href="spsc-20230331_cal.xml" xlink:role="http://www.xbrl.org/2003/role/calculationLinkbaseRef" xlink:type="simple"/>
      <link:linkbaseRef xmlns:xlink="http://www.w3.org/1999/xlink" xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:href="spsc-20230331_def.xml" xlink:role="http://www.xbrl.org/2003/role/definitionLinkbaseRef" xlink:type="simple"/>
      <link:roleType id="Cover" roleURI="http://www.spscommerce.com/role/Cover">
        <link:definition>0000001 - Document - Cover</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CondensedConsolidatedBalanceSheets" roleURI="http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets">
        <link:definition>0000002 - Statement - Condensed Consolidated Balance Sheets</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CondensedConsolidatedBalanceSheetsParenthetical" roleURI="http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical">
        <link:definition>0000003 - Statement - Condensed Consolidated Balance Sheets (Parenthetical)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CondensedConsolidatedStatementsofComprehensiveIncome" roleURI="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome">
        <link:definition>0000004 - Statement - Condensed Consolidated Statements of Comprehensive Income</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CondensedConsolidatedStatementsofComprehensiveIncomeParenthetical" roleURI="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncomeParenthetical">
        <link:definition>0000005 - Statement - Condensed Consolidated Statements of Comprehensive Income (Parenthetical)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CondensedConsolidatedStatementsofStockholdersEquity" roleURI="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity">
        <link:definition>0000006 - Statement - Condensed Consolidated Statements of Stockholders' Equity</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CondensedConsolidatedStatementsofCashFlows" roleURI="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows">
        <link:definition>0000007 - Statement - Condensed Consolidated Statements of Cash Flows</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="General" roleURI="http://www.spscommerce.com/role/General">
        <link:definition>0000008 - Disclosure - General</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="BusinessAcquisitions" roleURI="http://www.spscommerce.com/role/BusinessAcquisitions">
        <link:definition>0000009 - Disclosure - Business Acquisitions</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="Revenue" roleURI="http://www.spscommerce.com/role/Revenue">
        <link:definition>0000010 - Disclosure - Revenue</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="DeferredCosts" roleURI="http://www.spscommerce.com/role/DeferredCosts">
        <link:definition>0000011 - Disclosure - Deferred Costs</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="FairValueMeasurements" roleURI="http://www.spscommerce.com/role/FairValueMeasurements">
        <link:definition>0000012 - Disclosure - Fair Value Measurements</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="AllowanceforCreditLosses" roleURI="http://www.spscommerce.com/role/AllowanceforCreditLosses">
        <link:definition>0000013 - Disclosure - Allowance for Credit Losses</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="PropertyandEquipmentNet" roleURI="http://www.spscommerce.com/role/PropertyandEquipmentNet">
        <link:definition>0000014 - Disclosure - Property and Equipment, Net</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="GoodwillandIntangibleAssetsNet" roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNet">
        <link:definition>0000015 - Disclosure - Goodwill and Intangible Assets, Net</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CommitmentsandContingencies" roleURI="http://www.spscommerce.com/role/CommitmentsandContingencies">
        <link:definition>0000016 - Disclosure - Commitments and Contingencies</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockholdersEquity" roleURI="http://www.spscommerce.com/role/StockholdersEquity">
        <link:definition>0000017 - Disclosure - Stockholders' Equity</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockBasedCompensation" roleURI="http://www.spscommerce.com/role/StockBasedCompensation">
        <link:definition>0000018 - Disclosure - Stock-Based Compensation</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="IncomeTaxes" roleURI="http://www.spscommerce.com/role/IncomeTaxes">
        <link:definition>0000019 - Disclosure - Income Taxes</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="OtherIncomeandExpense" roleURI="http://www.spscommerce.com/role/OtherIncomeandExpense">
        <link:definition>0000020 - Disclosure - Other Income and Expense</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="NetIncomePerShare" roleURI="http://www.spscommerce.com/role/NetIncomePerShare">
        <link:definition>0000021 - Disclosure - Net Income Per Share</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="GeographicInformation" roleURI="http://www.spscommerce.com/role/GeographicInformation">
        <link:definition>0000022 - Disclosure - Geographic Information</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="GeneralPolicies" roleURI="http://www.spscommerce.com/role/GeneralPolicies">
        <link:definition>0000023 - Disclosure - General (Policies)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="GeneralTables" roleURI="http://www.spscommerce.com/role/GeneralTables">
        <link:definition>0000024 - Disclosure - General (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="RevenueTables" roleURI="http://www.spscommerce.com/role/RevenueTables">
        <link:definition>0000025 - Disclosure - Revenue (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="DeferredCostsTables" roleURI="http://www.spscommerce.com/role/DeferredCostsTables">
        <link:definition>0000026 - Disclosure - Deferred Costs (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="FairValueMeasurementsTables" roleURI="http://www.spscommerce.com/role/FairValueMeasurementsTables">
        <link:definition>0000027 - Disclosure - Fair Value Measurements (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="AllowanceforCreditLossesTables" roleURI="http://www.spscommerce.com/role/AllowanceforCreditLossesTables">
        <link:definition>0000028 - Disclosure - Allowance for Credit Losses (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="PropertyandEquipmentNetTables" roleURI="http://www.spscommerce.com/role/PropertyandEquipmentNetTables">
        <link:definition>0000029 - Disclosure - Property and Equipment, Net (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="GoodwillandIntangibleAssetsNetTables" roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetTables">
        <link:definition>0000030 - Disclosure - Goodwill and Intangible Assets, Net (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CommitmentsandContingenciesTables" roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesTables">
        <link:definition>0000031 - Disclosure - Commitments and Contingencies (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockholdersEquityTables" roleURI="http://www.spscommerce.com/role/StockholdersEquityTables">
        <link:definition>0000032 - Disclosure - Stockholders' Equity (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockBasedCompensationTables" roleURI="http://www.spscommerce.com/role/StockBasedCompensationTables">
        <link:definition>0000033 - Disclosure - Stock-Based Compensation (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="OtherIncomeandExpenseTables" roleURI="http://www.spscommerce.com/role/OtherIncomeandExpenseTables">
        <link:definition>0000034 - Disclosure - Other Income and Expense (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="NetIncomePerShareTables" roleURI="http://www.spscommerce.com/role/NetIncomePerShareTables">
        <link:definition>0000035 - Disclosure - Net Income Per Share (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="GeographicInformationTables" roleURI="http://www.spscommerce.com/role/GeographicInformationTables">
        <link:definition>0000036 - Disclosure - Geographic Information (Tables)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="BusinessAcquisitionsNarrativeDetails" roleURI="http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails">
        <link:definition>0000037 - Disclosure - Business Acquisitions - Narrative (Details)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="RevenueSummaryofRevenuesbyRevenueStreamDetail" roleURI="http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail">
        <link:definition>0000038 - Disclosure - Revenue - Summary of Revenues by Revenue Stream (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="RevenueNarrativeDetail" roleURI="http://www.spscommerce.com/role/RevenueNarrativeDetail">
        <link:definition>0000039 - Disclosure - Revenue - Narrative (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail" roleURI="http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail">
        <link:definition>0000040 - Disclosure - Revenue - Summary of Deferred Revenue Liability Relating to Set-Up Fees (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="DeferredCostsDetail" roleURI="http://www.spscommerce.com/role/DeferredCostsDetail">
        <link:definition>0000041 - Disclosure - Deferred Costs (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail" roleURI="http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail">
        <link:definition>0000042 - Disclosure - Fair Value Measurements - Summary of Cash Equivalents and Investments (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="AllowanceforCreditLossesDetail" roleURI="http://www.spscommerce.com/role/AllowanceforCreditLossesDetail">
        <link:definition>0000043 - Disclosure - Allowance for Credit Losses (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="PropertyandEquipmentNetDetails" roleURI="http://www.spscommerce.com/role/PropertyandEquipmentNetDetails">
        <link:definition>0000044 - Disclosure - Property and Equipment, Net (Details)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="GoodwillandIntangibleAssetsNetScheduleofChangesinNetCarryingAmountofGoodwillDetail" roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetScheduleofChangesinNetCarryingAmountofGoodwillDetail">
        <link:definition>0000045 - Disclosure - Goodwill and Intangible Assets, Net - Schedule of Changes in Net Carrying Amount of Goodwill (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="GoodwillandIntangibleAssetsNetIntangibleAssetsDetail" roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail">
        <link:definition>0000046 - Disclosure - Goodwill and Intangible Assets, Net - Intangible Assets (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail" roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail">
        <link:definition>0000047 - Disclosure - Goodwill and Intangible Assets, Net - Estimated Future Annual Amortization Expense Related to Intangible Assets Subject to Amortization (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CommitmentsandContingenciesComponentsofLeaseExpenseDetail" roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail">
        <link:definition>0000048 - Disclosure - Commitments and Contingencies - Components of Lease Expense (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CommitmentsandContingenciesScheduleofSupplementalCashFlowInformationRelatedtoLeasesDetail" roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalCashFlowInformationRelatedtoLeasesDetail">
        <link:definition>0000049 - Disclosure - Commitments and Contingencies - Schedule of Supplemental Cash Flow Information Related to Leases (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CommitmentsandContingenciesScheduleofSupplementalBalanceSheetInformationRelatedtoLeasesDetail" roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalBalanceSheetInformationRelatedtoLeasesDetail">
        <link:definition>0000050 - Disclosure - Commitments and Contingencies - Schedule of Supplemental Balance Sheet Information Related to Leases (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail" roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail">
        <link:definition>0000051 - Disclosure - Commitments and Contingencies - Schedule of Future Minimum Payments Under Operating Leases (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1" roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1">
        <link:definition>0000051 - Disclosure - Commitments and Contingencies - Schedule of Future Minimum Payments Under Operating Leases (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="CommitmentsandContingenciesNarrativeDetail" roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesNarrativeDetail">
        <link:definition>0000052 - Disclosure - Commitments and Contingencies - Narrative (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockholdersEquityShareRepurchasePlanDetails" roleURI="http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails">
        <link:definition>0000053 - Disclosure - Stockholders' Equity - Share Repurchase Plan (Details)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockholdersEquityStockRepurchaseActivityDetails" roleURI="http://www.spscommerce.com/role/StockholdersEquityStockRepurchaseActivityDetails">
        <link:definition>0000054 - Disclosure - Stockholders' Equity - Stock Repurchase Activity (Details)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockBasedCompensationNarrativeDetail" roleURI="http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail">
        <link:definition>0000055 - Disclosure - Stock-Based Compensation - Narrative (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockBasedCompensationStockBasedCompensationExpenseDetail" roleURI="http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail">
        <link:definition>0000056 - Disclosure - Stock-Based Compensation - Stock-Based Compensation Expense (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockBasedCompensationStockOptionActivityDetail" roleURI="http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail">
        <link:definition>0000057 - Disclosure - Stock-Based Compensation - Stock Option Activity (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail" roleURI="http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail">
        <link:definition>0000058 - Disclosure - Stock-Based Compensation - Weighted Average Grant Date Fair Value of Options Granted, Assumptions (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockBasedCompensationPSURSURSAandDSUDetail" roleURI="http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail">
        <link:definition>0000059 - Disclosure - Stock-Based Compensation - PSU, RSU, RSA, and DSU (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockBasedCompensationSummaryofESPPActivityDetail" roleURI="http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail">
        <link:definition>0000060 - Disclosure - Stock-Based Compensation - Summary of ESPP Activity (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail" roleURI="http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail">
        <link:definition>0000061 - Disclosure - Stock-Based Compensation - Fair Value Estimation of Common Stock Using Black-Scholes Option Pricing Model, Assumptions (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="OtherIncomeandExpenseDetail" roleURI="http://www.spscommerce.com/role/OtherIncomeandExpenseDetail">
        <link:definition>0000062 - Disclosure - Other Income and Expense (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail" roleURI="http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail">
        <link:definition>0000063 - Disclosure - Net Income Per Share - Components and Computation of Basic and Diluted Net Income Per Share (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="NetIncomePerShareScheduleofAntidilutiveCommonSharesExcludedfromCalculationofDilutedNetIncomePerShareDetail" roleURI="http://www.spscommerce.com/role/NetIncomePerShareScheduleofAntidilutiveCommonSharesExcludedfromCalculationofDilutedNetIncomePerShareDetail">
        <link:definition>0000064 - Disclosure - Net Income Per Share - Schedule of Anti-dilutive Common Shares Excluded from Calculation of Diluted Net Income Per Share (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
      <link:roleType id="GeographicInformationSummaryofDomesticRevenueDetail" roleURI="http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail">
        <link:definition>0000065 - Disclosure - Geographic Information - Summary of Domestic Revenue (Detail)</link:definition>
        <link:usedOn>link:presentationLink</link:usedOn>
        <link:usedOn>link:calculationLink</link:usedOn>
        <link:usedOn>link:definitionLink</link:usedOn>
      </link:roleType>
    </xs:appinfo>
  </xs:annotation>
  <xs:element id="spsc_RevenueRecognitionTable" abstract="true" name="RevenueRecognitionTable" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrldt:hypercubeItem" type="xbrli:stringItemType"/>
  <xs:element id="spsc_SetUpFeesRecognizedPeriod" abstract="false" name="SetUpFeesRecognizedPeriod" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="xbrli:durationItemType"/>
  <xs:element id="spsc_A2022StockRepurchaseProgramMember" abstract="true" name="A2022StockRepurchaseProgramMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_GCommerceIncMember" abstract="true" name="GCommerceIncMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee" abstract="false" name="MaximumRecognitionPeriodForMiscellaneousOneTimeFee" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="xbrli:durationItemType"/>
  <xs:element id="spsc_A2021StockRepurchaseProgramMember" abstract="true" name="A2021StockRepurchaseProgramMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_EarningsPerShareBasicAndDilutedEPSAbstract" abstract="true" name="EarningsPerShareBasicAndDilutedEPSAbstract" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="xbrli:stringItemType"/>
  <xs:element id="spsc_ContractTermMaximum" abstract="false" name="ContractTermMaximum" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="xbrli:durationItemType"/>
  <xs:element id="spsc_DeferredCostsIncurred" abstract="false" name="DeferredCostsIncurred" nillable="true" xbrli:periodType="duration" xbrli:balance="debit" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType"/>
  <xs:element id="spsc_CustomerContractCancellationPeriod" abstract="false" name="CustomerContractCancellationPeriod" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="xbrli:durationItemType"/>
  <xs:element id="spsc_ScheduleOfStockholdersEquityTable" abstract="true" name="ScheduleOfStockholdersEquityTable" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrldt:hypercubeItem" type="xbrli:stringItemType"/>
  <xs:element id="spsc_DeferredRevenueInvoicedSetUpFees" abstract="false" name="DeferredRevenueInvoicedSetUpFees" nillable="true" xbrli:periodType="duration" xbrli:balance="credit" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType"/>
  <xs:element id="spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock" abstract="false" name="ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType"/>
  <xs:element id="spsc_DeferredRevenueAmortizedSetUpFees" abstract="false" name="DeferredRevenueAmortizedSetUpFees" nillable="true" xbrli:periodType="duration" xbrli:balance="debit" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType"/>
  <xs:element id="spsc_EmployeeStockPurchasePlanMember" abstract="true" name="EmployeeStockPurchasePlanMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_InterTradeSystemsIncMember" abstract="true" name="InterTradeSystemsIncMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_DeferredRevenueArrangementRollForward" abstract="true" name="DeferredRevenueArrangementRollForward" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="xbrli:stringItemType"/>
  <xs:element id="spsc_BusinessCombinationMeasurementPeriod" abstract="false" name="BusinessCombinationMeasurementPeriod" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="xbrli:durationItemType"/>
  <xs:element id="spsc_FourZeroOneKStockMatchMember" abstract="true" name="FourZeroOneKStockMatchMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_FulfillmentMember" abstract="true" name="FulfillmentMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_GeographicInformationTextBlock" abstract="false" name="GeographicInformationTextBlock" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType"/>
  <xs:element id="spsc_RecurringRevenuesTimingOfBillingsLatestPeriod" abstract="false" name="RecurringRevenuesTimingOfBillingsLatestPeriod" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="xbrli:durationItemType"/>
  <xs:element id="spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour" abstract="false" name="FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour" nillable="true" xbrli:periodType="instant" xbrli:balance="debit" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType"/>
  <xs:element id="spsc_MarketableSecuritiesMember" abstract="true" name="MarketableSecuritiesMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_OtherMember" abstract="true" name="OtherMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_RecurringRevenuesMember" abstract="true" name="RecurringRevenuesMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock" abstract="false" name="ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType"/>
  <xs:element id="spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract" abstract="true" name="CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="xbrli:stringItemType"/>
  <xs:element id="spsc_RevenueRecognitionLineItems" abstract="true" name="RevenueRecognitionLineItems" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="xbrli:stringItemType"/>
  <xs:element id="spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock" abstract="false" name="SignificantAccountingPoliciesPolicyPolicyTextBlock" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType"/>
  <xs:element id="spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock" abstract="false" name="ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType"/>
  <xs:element id="spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward" abstract="false" name="ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward" nillable="true" xbrli:periodType="duration" xbrli:balance="debit" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType"/>
  <xs:element id="spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" abstract="false" name="FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" nillable="true" xbrli:periodType="instant" xbrli:balance="debit" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType"/>
  <xs:element id="spsc_AnalyticsMember" abstract="true" name="AnalyticsMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd" abstract="false" name="ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd" nillable="true" xbrli:periodType="instant" substitutionGroup="xbrli:item" type="xbrli:sharesItemType"/>
  <xs:element id="spsc_IncreaseDecreaseInOperatingLeases" abstract="false" name="IncreaseDecreaseInOperatingLeases" nillable="true" xbrli:periodType="duration" xbrli:balance="debit" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType"/>
  <xs:element id="spsc_ScheduleOfStockholdersEquityLineItems" abstract="true" name="ScheduleOfStockholdersEquityLineItems" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="xbrli:stringItemType"/>
  <xs:element id="spsc_DeferredCostsAndAmortizationTableTextBlock" abstract="false" name="DeferredCostsAndAmortizationTableTextBlock" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType"/>
  <xs:element id="spsc_RestrictedStockUnitsAndDeferredStockUnitsMember" abstract="true" name="RestrictedStockUnitsAndDeferredStockUnitsMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_OneTimeRevenuesMember" abstract="true" name="OneTimeRevenuesMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_InternallyDevelopedSoftwareMember" abstract="true" name="InternallyDevelopedSoftwareMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets" abstract="false" name="BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets" nillable="true" xbrli:periodType="duration" xbrli:balance="credit" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType"/>
  <xs:element id="spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember" abstract="true" name="PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_TreasuryStockUnusedAndExpiredRepurchaseValue" abstract="false" name="TreasuryStockUnusedAndExpiredRepurchaseValue" nillable="true" xbrli:periodType="duration" xbrli:balance="debit" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType"/>
  <xs:element id="spsc_SetUpFeesMember" abstract="true" name="SetUpFeesMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
  <xs:element id="spsc_DeferredCostsRollForward" abstract="true" name="DeferredCostsRollForward" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="xbrli:stringItemType"/>
  <xs:element id="spsc_DeferredCostsAmortized" abstract="false" name="DeferredCostsAmortized" nillable="true" xbrli:periodType="duration" xbrli:balance="debit" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType"/>
  <xs:element id="spsc_DeferredCostsDisclosureTextBlock" abstract="false" name="DeferredCostsDisclosureTextBlock" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType"/>
  <xs:element id="spsc_BusinessDescriptionPolicyPolicyTextBlock" abstract="false" name="BusinessDescriptionPolicyPolicyTextBlock" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType"/>
  <xs:element id="spsc_OfficeEquipmentAndFurnitureMember" abstract="true" name="OfficeEquipmentAndFurnitureMember" nillable="true" xbrli:periodType="duration" substitutionGroup="xbrli:item" type="dtr-types:domainItemType"/>
</xs:schema>
</XBRL>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>EX-101.CAL
<SEQUENCE>6
<FILENAME>spsc-20230331_cal.xml
<DESCRIPTION>XBRL TAXONOMY EXTENSION CALCULATION LINKBASE DOCUMENT
<TEXT>
<XBRL>
<?xml version="1.0" encoding="UTF-8"?>

<!--XBRL Document Created with Wdesk from Workiva-->
<!--Copyright 2023 Workiva-->
<!--r:e8457af8-7448-488b-94ad-becdc804ffea,g:b7f35897-e981-4828-95af-9cb9c0061258-->
<link:linkbase xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xbrl.org/2003/linkbase http://www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd">
  <link:roleRef roleURI="http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets" xlink:type="simple" xlink:href="spsc-20230331.xsd#CondensedConsolidatedBalanceSheets"/>
  <link:calculationLink xlink:role="http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccountsReceivableNetCurrent_1b632aff-e63e-4f57-8ad3-ea7ead69d36b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccountsReceivableNetCurrent"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccountsReceivableGrossCurrent_6ce4f817-c7b5-477a-a536-a771b4886514" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccountsReceivableGrossCurrent"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_AccountsReceivableNetCurrent_1b632aff-e63e-4f57-8ad3-ea7ead69d36b" xlink:to="loc_us-gaap_AccountsReceivableGrossCurrent_6ce4f817-c7b5-477a-a536-a771b4886514" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent_e3262e4b-c2cb-41c8-a2a6-b7982b8b9dd2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent"/>
    <link:calculationArc order="2" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_AccountsReceivableNetCurrent_1b632aff-e63e-4f57-8ad3-ea7ead69d36b" xlink:to="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent_e3262e4b-c2cb-41c8-a2a6-b7982b8b9dd2" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_Assets_c99cb2e0-566f-4852-9b96-621d3216d839" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_Assets"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AssetsCurrent_8bdaaf46-36d0-4f2e-b049-12595c8cf838" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AssetsCurrent"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_Assets_c99cb2e0-566f-4852-9b96-621d3216d839" xlink:to="loc_us-gaap_AssetsCurrent_8bdaaf46-36d0-4f2e-b049-12595c8cf838" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentNet_d6ed6045-7048-4325-a241-c2f55a831e26" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentNet"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_Assets_c99cb2e0-566f-4852-9b96-621d3216d839" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentNet_d6ed6045-7048-4325-a241-c2f55a831e26" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseRightOfUseAsset_490efaf7-1be9-4497-9ae6-c1dcea4d28ea" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseRightOfUseAsset"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_Assets_c99cb2e0-566f-4852-9b96-621d3216d839" xlink:to="loc_us-gaap_OperatingLeaseRightOfUseAsset_490efaf7-1be9-4497-9ae6-c1dcea4d28ea" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_Goodwill_398dddff-b747-4fa4-9ad8-641fc4266219" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_Goodwill"/>
    <link:calculationArc order="4" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_Assets_c99cb2e0-566f-4852-9b96-621d3216d839" xlink:to="loc_us-gaap_Goodwill_398dddff-b747-4fa4-9ad8-641fc4266219" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsNet_b704c505-e837-41f0-8b9b-490fdd8263bc" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsNet"/>
    <link:calculationArc order="5" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_Assets_c99cb2e0-566f-4852-9b96-621d3216d839" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsNet_b704c505-e837-41f0-8b9b-490fdd8263bc" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCosts_e08209bb-9023-4734-9f06-f1cd617f9523" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCosts"/>
    <link:calculationArc order="6" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_Assets_c99cb2e0-566f-4852-9b96-621d3216d839" xlink:to="loc_us-gaap_DeferredCosts_e08209bb-9023-4734-9f06-f1cd617f9523" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredIncomeTaxAssetsNet_fe5206c8-24c8-4da0-b147-285971ed7ec2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredIncomeTaxAssetsNet"/>
    <link:calculationArc order="7" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_Assets_c99cb2e0-566f-4852-9b96-621d3216d839" xlink:to="loc_us-gaap_DeferredIncomeTaxAssetsNet_fe5206c8-24c8-4da0-b147-285971ed7ec2" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherAssetsNoncurrent_9c2db685-5128-4a72-b913-2a5e66ab58a6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherAssetsNoncurrent"/>
    <link:calculationArc order="8" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_Assets_c99cb2e0-566f-4852-9b96-621d3216d839" xlink:to="loc_us-gaap_OtherAssetsNoncurrent_9c2db685-5128-4a72-b913-2a5e66ab58a6" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LiabilitiesCurrent_19c1a876-5f86-472d-be05-d28ab935ab42" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LiabilitiesCurrent"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccountsPayableCurrent_6cecf4e9-f5ba-43e7-a280-fc66e54d3f69" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccountsPayableCurrent"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LiabilitiesCurrent_19c1a876-5f86-472d-be05-d28ab935ab42" xlink:to="loc_us-gaap_AccountsPayableCurrent_6cecf4e9-f5ba-43e7-a280-fc66e54d3f69" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeRelatedLiabilitiesCurrent_0e07d43e-547a-476d-9e12-5294a391b08d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeRelatedLiabilitiesCurrent"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LiabilitiesCurrent_19c1a876-5f86-472d-be05-d28ab935ab42" xlink:to="loc_us-gaap_EmployeeRelatedLiabilitiesCurrent_0e07d43e-547a-476d-9e12-5294a391b08d" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccruedLiabilitiesCurrent_6d5b19b4-7f57-43dd-b7dc-c319b287f0de" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccruedLiabilitiesCurrent"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LiabilitiesCurrent_19c1a876-5f86-472d-be05-d28ab935ab42" xlink:to="loc_us-gaap_AccruedLiabilitiesCurrent_6d5b19b4-7f57-43dd-b7dc-c319b287f0de" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerLiabilityCurrent_9a5a6147-b9bf-4a6d-b457-3c17124bf51c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerLiabilityCurrent"/>
    <link:calculationArc order="4" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LiabilitiesCurrent_19c1a876-5f86-472d-be05-d28ab935ab42" xlink:to="loc_us-gaap_ContractWithCustomerLiabilityCurrent_9a5a6147-b9bf-4a6d-b457-3c17124bf51c" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseLiabilityCurrent_b22b14e8-c5a0-4f8d-9589-96fea5fcb9ea" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseLiabilityCurrent"/>
    <link:calculationArc order="5" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LiabilitiesCurrent_19c1a876-5f86-472d-be05-d28ab935ab42" xlink:to="loc_us-gaap_OperatingLeaseLiabilityCurrent_b22b14e8-c5a0-4f8d-9589-96fea5fcb9ea" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockholdersEquity_3916fb4c-d865-40ff-bab2-2261fb446060" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockholdersEquity"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PreferredStockValue_67fb2ba9-e0c4-4153-af9f-42f13c1a7dc6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PreferredStockValue"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_StockholdersEquity_3916fb4c-d865-40ff-bab2-2261fb446060" xlink:to="loc_us-gaap_PreferredStockValue_67fb2ba9-e0c4-4153-af9f-42f13c1a7dc6" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockValue_4553ec3f-6066-4fd8-8123-afc75db74270" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockValue"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_StockholdersEquity_3916fb4c-d865-40ff-bab2-2261fb446060" xlink:to="loc_us-gaap_CommonStockValue_4553ec3f-6066-4fd8-8123-afc75db74270" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockCommonValue_4dac9e79-0a60-44f2-ab1b-08c40c38aac5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockCommonValue"/>
    <link:calculationArc order="3" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_StockholdersEquity_3916fb4c-d865-40ff-bab2-2261fb446060" xlink:to="loc_us-gaap_TreasuryStockCommonValue_4dac9e79-0a60-44f2-ab1b-08c40c38aac5" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AdditionalPaidInCapitalCommonStock_57901222-0bdd-4c7e-b31d-f922b0e03273" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AdditionalPaidInCapitalCommonStock"/>
    <link:calculationArc order="4" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_StockholdersEquity_3916fb4c-d865-40ff-bab2-2261fb446060" xlink:to="loc_us-gaap_AdditionalPaidInCapitalCommonStock_57901222-0bdd-4c7e-b31d-f922b0e03273" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RetainedEarningsAccumulatedDeficit_7672a2e4-d218-4597-99dc-55444e85e4bf" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RetainedEarningsAccumulatedDeficit"/>
    <link:calculationArc order="5" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_StockholdersEquity_3916fb4c-d865-40ff-bab2-2261fb446060" xlink:to="loc_us-gaap_RetainedEarningsAccumulatedDeficit_7672a2e4-d218-4597-99dc-55444e85e4bf" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax_7222be64-ceee-40a5-8a7e-2f39cad57177" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax"/>
    <link:calculationArc order="6" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_StockholdersEquity_3916fb4c-d865-40ff-bab2-2261fb446060" xlink:to="loc_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax_7222be64-ceee-40a5-8a7e-2f39cad57177" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AssetsCurrent_e7792196-0a83-4d4d-a7ca-b11a58478313" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AssetsCurrent"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CashAndCashEquivalentsAtCarryingValue_f96166e0-88e7-46d3-ad92-6cc4b5c008c2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CashAndCashEquivalentsAtCarryingValue"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_AssetsCurrent_e7792196-0a83-4d4d-a7ca-b11a58478313" xlink:to="loc_us-gaap_CashAndCashEquivalentsAtCarryingValue_f96166e0-88e7-46d3-ad92-6cc4b5c008c2" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShortTermInvestments_0b4d28ab-da78-4274-bdba-1e38ccaa6048" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShortTermInvestments"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_AssetsCurrent_e7792196-0a83-4d4d-a7ca-b11a58478313" xlink:to="loc_us-gaap_ShortTermInvestments_0b4d28ab-da78-4274-bdba-1e38ccaa6048" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccountsReceivableNetCurrent_f31d106f-23e2-4986-80fe-5758716d2b5c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccountsReceivableNetCurrent"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_AssetsCurrent_e7792196-0a83-4d4d-a7ca-b11a58478313" xlink:to="loc_us-gaap_AccountsReceivableNetCurrent_f31d106f-23e2-4986-80fe-5758716d2b5c" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCostsCurrent_4a80d931-84b6-41d0-835d-2400a9a264d4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCostsCurrent"/>
    <link:calculationArc order="4" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_AssetsCurrent_e7792196-0a83-4d4d-a7ca-b11a58478313" xlink:to="loc_us-gaap_DeferredCostsCurrent_4a80d931-84b6-41d0-835d-2400a9a264d4" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherAssetsCurrent_19affbeb-3761-48ff-815f-91c240eb4875" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherAssetsCurrent"/>
    <link:calculationArc order="5" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_AssetsCurrent_e7792196-0a83-4d4d-a7ca-b11a58478313" xlink:to="loc_us-gaap_OtherAssetsCurrent_19affbeb-3761-48ff-815f-91c240eb4875" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LiabilitiesAndStockholdersEquity_4edc2008-faa4-4dae-9505-2c2cbd4c2793" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LiabilitiesAndStockholdersEquity"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_Liabilities_078d21e7-22a9-434a-8000-e2d94c07b9a6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_Liabilities"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LiabilitiesAndStockholdersEquity_4edc2008-faa4-4dae-9505-2c2cbd4c2793" xlink:to="loc_us-gaap_Liabilities_078d21e7-22a9-434a-8000-e2d94c07b9a6" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingencies_755f09be-46b4-4852-a735-899d9988d36c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingencies"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LiabilitiesAndStockholdersEquity_4edc2008-faa4-4dae-9505-2c2cbd4c2793" xlink:to="loc_us-gaap_CommitmentsAndContingencies_755f09be-46b4-4852-a735-899d9988d36c" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockholdersEquity_599cd892-a4f4-45d6-9fad-bc4585d33116" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockholdersEquity"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LiabilitiesAndStockholdersEquity_4edc2008-faa4-4dae-9505-2c2cbd4c2793" xlink:to="loc_us-gaap_StockholdersEquity_599cd892-a4f4-45d6-9fad-bc4585d33116" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_Liabilities_2bb39443-9cb9-4764-97e0-69cedae93af8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_Liabilities"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LiabilitiesCurrent_0778cf60-f7f2-4576-a3e8-2defd3735d92" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LiabilitiesCurrent"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_Liabilities_2bb39443-9cb9-4764-97e0-69cedae93af8" xlink:to="loc_us-gaap_LiabilitiesCurrent_0778cf60-f7f2-4576-a3e8-2defd3735d92" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerLiabilityNoncurrent_e6602269-df57-4581-96bb-a395befd4720" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerLiabilityNoncurrent"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_Liabilities_2bb39443-9cb9-4764-97e0-69cedae93af8" xlink:to="loc_us-gaap_ContractWithCustomerLiabilityNoncurrent_e6602269-df57-4581-96bb-a395befd4720" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseLiabilityNoncurrent_90cbe9e7-67c2-4222-8609-2c03cb381c65" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseLiabilityNoncurrent"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_Liabilities_2bb39443-9cb9-4764-97e0-69cedae93af8" xlink:to="loc_us-gaap_OperatingLeaseLiabilityNoncurrent_90cbe9e7-67c2-4222-8609-2c03cb381c65" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredIncomeTaxLiabilitiesNet_6c2fb1c7-6a8d-4881-bd96-29536f02a7c5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredIncomeTaxLiabilitiesNet"/>
    <link:calculationArc order="4" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_Liabilities_2bb39443-9cb9-4764-97e0-69cedae93af8" xlink:to="loc_us-gaap_DeferredIncomeTaxLiabilitiesNet_6c2fb1c7-6a8d-4881-bd96-29536f02a7c5" xlink:type="arc"/>
  </link:calculationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome" xlink:type="simple" xlink:href="spsc-20230331.xsd#CondensedConsolidatedStatementsofComprehensiveIncome"/>
  <link:calculationLink xlink:role="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest_60adb8ee-c981-464f-864b-34e2de5e32aa" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingIncomeLoss_1fb5c409-fd0d-42c4-860f-2b29251b4639" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingIncomeLoss"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest_60adb8ee-c981-464f-864b-34e2de5e32aa" xlink:to="loc_us-gaap_OperatingIncomeLoss_1fb5c409-fd0d-42c4-860f-2b29251b4639" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NonoperatingIncomeExpense_8c52671c-5fe0-4841-93f8-bc2119d92dfb" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NonoperatingIncomeExpense"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest_60adb8ee-c981-464f-864b-34e2de5e32aa" xlink:to="loc_us-gaap_NonoperatingIncomeExpense_8c52671c-5fe0-4841-93f8-bc2119d92dfb" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetIncomeLoss_87b74258-e2f8-4ec1-9d0c-48c11ff93a9f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetIncomeLoss"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest_3eaeb6ec-4e94-4ff4-a0b6-a854be07fa34" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetIncomeLoss_87b74258-e2f8-4ec1-9d0c-48c11ff93a9f" xlink:to="loc_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest_3eaeb6ec-4e94-4ff4-a0b6-a854be07fa34" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeTaxExpenseBenefit_5420c3f6-1312-431f-9ca2-e273413b5a0f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeTaxExpenseBenefit"/>
    <link:calculationArc order="2" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetIncomeLoss_87b74258-e2f8-4ec1-9d0c-48c11ff93a9f" xlink:to="loc_us-gaap_IncomeTaxExpenseBenefit_5420c3f6-1312-431f-9ca2-e273413b5a0f" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GrossProfit_03a5eb3b-163f-4950-8cfc-d315ed605293" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GrossProfit"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax_b9b5a9d1-a3f4-4fa2-80b8-93eab063c828" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_GrossProfit_03a5eb3b-163f-4950-8cfc-d315ed605293" xlink:to="loc_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax_b9b5a9d1-a3f4-4fa2-80b8-93eab063c828" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CostOfRevenue_ec4c4a4d-d3e3-4e00-a40d-b1b64b9a69f3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CostOfRevenue"/>
    <link:calculationArc order="2" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_GrossProfit_03a5eb3b-163f-4950-8cfc-d315ed605293" xlink:to="loc_us-gaap_CostOfRevenue_ec4c4a4d-d3e3-4e00-a40d-b1b64b9a69f3" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingExpenses_bf43451c-452f-4913-be25-611e5e83a849" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingExpenses"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SellingAndMarketingExpense_1108e18d-807b-4b96-9cc6-d20c3862e793" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SellingAndMarketingExpense"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_OperatingExpenses_bf43451c-452f-4913-be25-611e5e83a849" xlink:to="loc_us-gaap_SellingAndMarketingExpense_1108e18d-807b-4b96-9cc6-d20c3862e793" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ResearchAndDevelopmentExpense_9e62c362-d5df-405e-8b48-02614292b0c5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ResearchAndDevelopmentExpense"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_OperatingExpenses_bf43451c-452f-4913-be25-611e5e83a849" xlink:to="loc_us-gaap_ResearchAndDevelopmentExpense_9e62c362-d5df-405e-8b48-02614292b0c5" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeneralAndAdministrativeExpense_cd7dc163-9a5f-4325-8294-748a6c593d98" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeneralAndAdministrativeExpense"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_OperatingExpenses_bf43451c-452f-4913-be25-611e5e83a849" xlink:to="loc_us-gaap_GeneralAndAdministrativeExpense_cd7dc163-9a5f-4325-8294-748a6c593d98" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AmortizationOfIntangibleAssets_9be4145d-8382-4bf0-bb5b-827aafb7c271" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AmortizationOfIntangibleAssets"/>
    <link:calculationArc order="4" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_OperatingExpenses_bf43451c-452f-4913-be25-611e5e83a849" xlink:to="loc_us-gaap_AmortizationOfIntangibleAssets_9be4145d-8382-4bf0-bb5b-827aafb7c271" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent_1453919b-216a-433f-a453-a9cdf4df07a2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax_7ca0f107-390b-4f10-9678-cc81df31d0f6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent_1453919b-216a-433f-a453-a9cdf4df07a2" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax_7ca0f107-390b-4f10-9678-cc81df31d0f6" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_08e929db-6756-45a5-b791-1a72d1a79cdd" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent_1453919b-216a-433f-a453-a9cdf4df07a2" xlink:to="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_08e929db-6756-45a5-b791-1a72d1a79cdd" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_22a9148f-44a9-4131-a330-82cc75ab9589" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax"/>
    <link:calculationArc order="3" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent_1453919b-216a-433f-a453-a9cdf4df07a2" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_22a9148f-44a9-4131-a330-82cc75ab9589" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingIncomeLoss_e2026d2b-42a9-41c7-af07-d941f5ce766f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingIncomeLoss"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GrossProfit_27e2a8ed-467f-4f08-848a-b039b81a8a80" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GrossProfit"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_OperatingIncomeLoss_e2026d2b-42a9-41c7-af07-d941f5ce766f" xlink:to="loc_us-gaap_GrossProfit_27e2a8ed-467f-4f08-848a-b039b81a8a80" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingExpenses_d4d3cdf8-db09-44e6-b1a1-5084eee56f98" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingExpenses"/>
    <link:calculationArc order="2" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_OperatingIncomeLoss_e2026d2b-42a9-41c7-af07-d941f5ce766f" xlink:to="loc_us-gaap_OperatingExpenses_d4d3cdf8-db09-44e6-b1a1-5084eee56f98" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ComprehensiveIncomeNetOfTax_89a694d5-e96b-4c16-b822-34e70e26a615" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ComprehensiveIncomeNetOfTax"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetIncomeLoss_af76dc15-6541-428e-a8c7-b4b17392f944" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetIncomeLoss"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_ComprehensiveIncomeNetOfTax_89a694d5-e96b-4c16-b822-34e70e26a615" xlink:to="loc_us-gaap_NetIncomeLoss_af76dc15-6541-428e-a8c7-b4b17392f944" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent_c44630c4-d64a-46c9-b105-9fd0e6d97774" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_ComprehensiveIncomeNetOfTax_89a694d5-e96b-4c16-b822-34e70e26a615" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent_c44630c4-d64a-46c9-b105-9fd0e6d97774" xlink:type="arc"/>
  </link:calculationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows" xlink:type="simple" xlink:href="spsc-20230331.xsd#CondensedConsolidatedStatementsofCashFlows"/>
  <link:calculationLink xlink:role="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInFinancingActivities_3365f056-5bac-44e3-ac53-1b8f7b1ef351" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInFinancingActivities"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PaymentsForRepurchaseOfCommonStock_75cc34f9-a6b5-4944-be15-eec2d446b25a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PaymentsForRepurchaseOfCommonStock"/>
    <link:calculationArc order="1" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInFinancingActivities_3365f056-5bac-44e3-ac53-1b8f7b1ef351" xlink:to="loc_us-gaap_PaymentsForRepurchaseOfCommonStock_75cc34f9-a6b5-4944-be15-eec2d446b25a" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProceedsFromStockOptionsExercised_2abd6964-bce4-47b1-aa88-9a4f2d7f3f18" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProceedsFromStockOptionsExercised"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInFinancingActivities_3365f056-5bac-44e3-ac53-1b8f7b1ef351" xlink:to="loc_us-gaap_ProceedsFromStockOptionsExercised_2abd6964-bce4-47b1-aa88-9a4f2d7f3f18" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProceedsFromStockPlans_18527009-cbd7-4f5c-9d71-e1280256ba6d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProceedsFromStockPlans"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInFinancingActivities_3365f056-5bac-44e3-ac53-1b8f7b1ef351" xlink:to="loc_us-gaap_ProceedsFromStockPlans_18527009-cbd7-4f5c-9d71-e1280256ba6d" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInInvestingActivities_1d6180a7-8bb7-41e9-9f16-14f7b8dc2d8b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInInvestingActivities"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment_6ad6dae7-34aa-4fbc-929c-1a285e8a508c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PaymentsToAcquirePropertyPlantAndEquipment"/>
    <link:calculationArc order="1" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInInvestingActivities_1d6180a7-8bb7-41e9-9f16-14f7b8dc2d8b" xlink:to="loc_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment_6ad6dae7-34aa-4fbc-929c-1a285e8a508c" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PaymentsToAcquireOtherInvestments_29dc6488-14e2-454d-9ba9-ce8447ea4b85" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PaymentsToAcquireOtherInvestments"/>
    <link:calculationArc order="2" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInInvestingActivities_1d6180a7-8bb7-41e9-9f16-14f7b8dc2d8b" xlink:to="loc_us-gaap_PaymentsToAcquireOtherInvestments_29dc6488-14e2-454d-9ba9-ce8447ea4b85" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities_b8f4769f-6182-4655-91e7-30844b3e7b0d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInInvestingActivities_1d6180a7-8bb7-41e9-9f16-14f7b8dc2d8b" xlink:to="loc_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities_b8f4769f-6182-4655-91e7-30844b3e7b0d" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInOperatingActivities"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetIncomeLoss_fee14d4b-9339-4035-8676-c72c3c8f3f1f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetIncomeLoss"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_NetIncomeLoss_fee14d4b-9339-4035-8676-c72c3c8f3f1f" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredIncomeTaxExpenseBenefit_45e5f098-13db-4ed7-b653-f8ec6051ab30" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredIncomeTaxExpenseBenefit"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_DeferredIncomeTaxExpenseBenefit_45e5f098-13db-4ed7-b653-f8ec6051ab30" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DepreciationDepletionAndAmortization_a7d64b5c-82d1-409f-8d65-cd0c9a6a95fc" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DepreciationDepletionAndAmortization"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_DepreciationDepletionAndAmortization_a7d64b5c-82d1-409f-8d65-cd0c9a6a95fc" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AmortizationOfIntangibleAssets_2559e470-2a36-4117-a71e-02a406f394b1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AmortizationOfIntangibleAssets"/>
    <link:calculationArc order="4" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_AmortizationOfIntangibleAssets_2559e470-2a36-4117-a71e-02a406f394b1" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProvisionForDoubtfulAccounts_f95fec77-79f5-45a0-a222-4e3f260b3d8e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProvisionForDoubtfulAccounts"/>
    <link:calculationArc order="5" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_ProvisionForDoubtfulAccounts_f95fec77-79f5-45a0-a222-4e3f260b3d8e" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensation_fca9df09-2573-435f-bfc0-31b6a63ad001" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensation"/>
    <link:calculationArc order="6" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_ShareBasedCompensation_fca9df09-2573-435f-bfc0-31b6a63ad001" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherNoncashIncomeExpense_2ad312e1-d87c-40a0-a4a2-529d49415818" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherNoncashIncomeExpense"/>
    <link:calculationArc order="7" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_OtherNoncashIncomeExpense_2ad312e1-d87c-40a0-a4a2-529d49415818" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInAccountsReceivable_f1ce2b00-71e1-4030-8c9f-cf2cb4a96abb" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInAccountsReceivable"/>
    <link:calculationArc order="8" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_IncreaseDecreaseInAccountsReceivable_f1ce2b00-71e1-4030-8c9f-cf2cb4a96abb" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInDeferredCharges_a42b6a44-8a89-4480-a8ce-b444451f7228" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInDeferredCharges"/>
    <link:calculationArc order="9" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_IncreaseDecreaseInDeferredCharges_a42b6a44-8a89-4480-a8ce-b444451f7228" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInOtherOperatingAssets_cdeddb4d-3194-47ec-a412-fe39440ae345" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInOtherOperatingAssets"/>
    <link:calculationArc order="10" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_IncreaseDecreaseInOtherOperatingAssets_cdeddb4d-3194-47ec-a412-fe39440ae345" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInAccountsPayable_72cd1d6f-3f1a-4e27-862b-c863f51a36d9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInAccountsPayable"/>
    <link:calculationArc order="11" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_IncreaseDecreaseInAccountsPayable_72cd1d6f-3f1a-4e27-862b-c863f51a36d9" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities_81c895dc-2d47-4d70-9dfb-a20b4578e922" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities"/>
    <link:calculationArc order="12" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities_81c895dc-2d47-4d70-9dfb-a20b4578e922" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInAccruedLiabilities_4f538d9b-1611-4b11-b081-ecce5279c483" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInAccruedLiabilities"/>
    <link:calculationArc order="13" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_IncreaseDecreaseInAccruedLiabilities_4f538d9b-1611-4b11-b081-ecce5279c483" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInContractWithCustomerLiability_7e1c9615-d350-433b-b9a7-5327295d81e2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInContractWithCustomerLiability"/>
    <link:calculationArc order="14" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_us-gaap_IncreaseDecreaseInContractWithCustomerLiability_7e1c9615-d350-433b-b9a7-5327295d81e2" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_IncreaseDecreaseInOperatingLeases_8c136c3c-f456-4370-b903-7cd6f491d15e" xlink:href="spsc-20230331.xsd#spsc_IncreaseDecreaseInOperatingLeases"/>
    <link:calculationArc order="15" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_808d3ca1-83fe-4efd-bd18-be5b0d1ff226" xlink:to="loc_spsc_IncreaseDecreaseInOperatingLeases_8c136c3c-f456-4370-b903-7cd6f491d15e" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect_78e35364-2405-47bf-bf68-0c50c0095dbc" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_e997126c-4247-4732-9ac4-7e66a48b016f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInOperatingActivities"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect_78e35364-2405-47bf-bf68-0c50c0095dbc" xlink:to="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_e997126c-4247-4732-9ac4-7e66a48b016f" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInInvestingActivities_7917cf83-f58f-4998-829b-e971198d7ed9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInInvestingActivities"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect_78e35364-2405-47bf-bf68-0c50c0095dbc" xlink:to="loc_us-gaap_NetCashProvidedByUsedInInvestingActivities_7917cf83-f58f-4998-829b-e971198d7ed9" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInFinancingActivities_f1731fe2-4f6c-4e56-9062-ae9d2734157f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInFinancingActivities"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect_78e35364-2405-47bf-bf68-0c50c0095dbc" xlink:to="loc_us-gaap_NetCashProvidedByUsedInFinancingActivities_f1731fe2-4f6c-4e56-9062-ae9d2734157f" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_a9bcbb4f-4a62-4238-bc3e-3b344550411f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations"/>
    <link:calculationArc order="4" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect_78e35364-2405-47bf-bf68-0c50c0095dbc" xlink:to="loc_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_a9bcbb4f-4a62-4238-bc3e-3b344550411f" xlink:type="arc"/>
  </link:calculationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"/>
  <link:calculationLink xlink:role="http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis_ea4ac0c3-cfba-4d0c-b97e-d32526ab856e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax_db535c74-e317-4a82-bfbd-6342223a24a3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax"/>
    <link:calculationArc order="1" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis_ea4ac0c3-cfba-4d0c-b97e-d32526ab856e" xlink:to="loc_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax_db535c74-e317-4a82-bfbd-6342223a24a3" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AvailableForSaleSecuritiesDebtSecurities_2e59cc27-0e5f-448c-aa6d-55376062ae5e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AvailableForSaleSecuritiesDebtSecurities"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis_ea4ac0c3-cfba-4d0c-b97e-d32526ab856e" xlink:to="loc_us-gaap_AvailableForSaleSecuritiesDebtSecurities_2e59cc27-0e5f-448c-aa6d-55376062ae5e" xlink:type="arc"/>
  </link:calculationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/PropertyandEquipmentNetDetails" xlink:type="simple" xlink:href="spsc-20230331.xsd#PropertyandEquipmentNetDetails"/>
  <link:calculationLink xlink:role="http://www.spscommerce.com/role/PropertyandEquipmentNetDetails" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentNet_5d84fa98-4af9-4d25-a85e-c7aa76b8b4ff" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentNet"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentGross_2f9563b6-121b-49bf-a041-18284d2b15ab" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentGross"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentNet_5d84fa98-4af9-4d25-a85e-c7aa76b8b4ff" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentGross_2f9563b6-121b-49bf-a041-18284d2b15ab" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment_e77904c2-a869-44e8-a069-83e94b7a2104" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment"/>
    <link:calculationArc order="2" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentNet_5d84fa98-4af9-4d25-a85e-c7aa76b8b4ff" xlink:to="loc_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment_e77904c2-a869-44e8-a069-83e94b7a2104" xlink:type="arc"/>
  </link:calculationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"/>
  <link:calculationLink xlink:role="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsNet_8d56e122-0422-4b4d-97bf-c0ec4c299ae3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsNet"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsGross_3a925966-0267-49ee-91a0-f473b7b3127f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsGross"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsNet_8d56e122-0422-4b4d-97bf-c0ec4c299ae3" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsGross_3a925966-0267-49ee-91a0-f473b7b3127f" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization_85305319-6286-43c3-90b4-1f4b0e4141f0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization"/>
    <link:calculationArc order="2" weight="-1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsNet_8d56e122-0422-4b4d-97bf-c0ec4c299ae3" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization_85305319-6286-43c3-90b4-1f4b0e4141f0" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss_5d4a85da-63c8-43b6-9b0a-a1ca58b6d1c1" xlink:href="spsc-20230331.xsd#spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsNet_8d56e122-0422-4b4d-97bf-c0ec4c299ae3" xlink:to="loc_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss_5d4a85da-63c8-43b6-9b0a-a1ca58b6d1c1" xlink:type="arc"/>
  </link:calculationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail"/>
  <link:calculationLink xlink:role="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsNet_931e5b67-2446-4a45-aadd-5ec5f84785b3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsNet"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear_31025bf7-fd73-4c8f-a997-ca2b019a8cc9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsNet_931e5b67-2446-4a45-aadd-5ec5f84785b3" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear_31025bf7-fd73-4c8f-a997-ca2b019a8cc9" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths_0d6c1fe9-7edb-4c6b-a6d6-433be64b532a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsNet_931e5b67-2446-4a45-aadd-5ec5f84785b3" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths_0d6c1fe9-7edb-4c6b-a6d6-433be64b532a" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo_55fb375a-64d7-4225-9823-4b3b5da8ad85" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsNet_931e5b67-2446-4a45-aadd-5ec5f84785b3" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo_55fb375a-64d7-4225-9823-4b3b5da8ad85" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree_15969f5d-661b-45e8-9018-7e37ca651b2a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree"/>
    <link:calculationArc order="4" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsNet_931e5b67-2446-4a45-aadd-5ec5f84785b3" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree_15969f5d-661b-45e8-9018-7e37ca651b2a" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour_ac4adbf8-a0e3-423e-a501-81279b3c125c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour"/>
    <link:calculationArc order="5" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsNet_931e5b67-2446-4a45-aadd-5ec5f84785b3" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour_ac4adbf8-a0e3-423e-a501-81279b3c125c" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour_0333517e-8263-4c96-ba4c-b1173b0951ea" xlink:href="spsc-20230331.xsd#spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour"/>
    <link:calculationArc order="6" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsNet_931e5b67-2446-4a45-aadd-5ec5f84785b3" xlink:to="loc_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour_0333517e-8263-4c96-ba4c-b1173b0951ea" xlink:type="arc"/>
  </link:calculationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#CommitmentsandContingenciesComponentsofLeaseExpenseDetail"/>
  <link:calculationLink xlink:role="http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LeaseCost_f1b49606-739c-462d-a65b-5e0c785c34a4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LeaseCost"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseCost_d659c6d7-14c5-44cc-8b1f-5bc85bd6eeec" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseCost"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LeaseCost_f1b49606-739c-462d-a65b-5e0c785c34a4" xlink:to="loc_us-gaap_OperatingLeaseCost_d659c6d7-14c5-44cc-8b1f-5bc85bd6eeec" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_VariableLeaseCost_5ed71a2b-c949-41bf-946b-7a1df5fe1150" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_VariableLeaseCost"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LeaseCost_f1b49606-739c-462d-a65b-5e0c785c34a4" xlink:to="loc_us-gaap_VariableLeaseCost_5ed71a2b-c949-41bf-946b-7a1df5fe1150" xlink:type="arc"/>
  </link:calculationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail"/>
  <link:calculationLink xlink:role="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_ecf81c0c-acb3-4f85-bfad-34f9cf7e5050" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount_ad2f7262-2fcc-48dc-a8ef-6a0700328001" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_ecf81c0c-acb3-4f85-bfad-34f9cf7e5050" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount_ad2f7262-2fcc-48dc-a8ef-6a0700328001" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseLiability_189bf232-9382-45c2-8e0b-a58fd469b406" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseLiability"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_ecf81c0c-acb3-4f85-bfad-34f9cf7e5050" xlink:to="loc_us-gaap_OperatingLeaseLiability_189bf232-9382-45c2-8e0b-a58fd469b406" xlink:type="arc"/>
  </link:calculationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1" xlink:type="simple" xlink:href="spsc-20230331.xsd#CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1"/>
  <link:calculationLink xlink:role="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_24dcb0ac-a32b-4c85-8be9-d4b0ccd2261a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear_0a0716f4-8ca8-4bf8-b8ed-00a7fed6a93c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_24dcb0ac-a32b-4c85-8be9-d4b0ccd2261a" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear_0a0716f4-8ca8-4bf8-b8ed-00a7fed6a93c" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths_d4e77f0d-27ae-4722-953a-84d30a10482a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_24dcb0ac-a32b-4c85-8be9-d4b0ccd2261a" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths_d4e77f0d-27ae-4722-953a-84d30a10482a" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo_f8ac2278-c56b-4958-8f5d-d7c2f6e8fbf6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_24dcb0ac-a32b-4c85-8be9-d4b0ccd2261a" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo_f8ac2278-c56b-4958-8f5d-d7c2f6e8fbf6" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree_7590c952-36e0-418d-9acd-3870482c07bd" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree"/>
    <link:calculationArc order="4" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_24dcb0ac-a32b-4c85-8be9-d4b0ccd2261a" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree_7590c952-36e0-418d-9acd-3870482c07bd" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour_2be3df5c-87f3-4b4e-a911-f0c71f69fbd2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour"/>
    <link:calculationArc order="5" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_24dcb0ac-a32b-4c85-8be9-d4b0ccd2261a" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour_2be3df5c-87f3-4b4e-a911-f0c71f69fbd2" xlink:type="arc"/>
  </link:calculationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/OtherIncomeandExpenseDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#OtherIncomeandExpenseDetail"/>
  <link:calculationLink xlink:role="http://www.spscommerce.com/role/OtherIncomeandExpenseDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NonoperatingIncomeExpense_93a12c9c-06a5-489b-ba91-544865dc092f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NonoperatingIncomeExpense"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_InvestmentIncomeNet_64a8b74c-a507-455e-a594-c87fd89f1f1d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_InvestmentIncomeNet"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NonoperatingIncomeExpense_93a12c9c-06a5-489b-ba91-544865dc092f" xlink:to="loc_us-gaap_InvestmentIncomeNet_64a8b74c-a507-455e-a594-c87fd89f1f1d" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax_791fe3da-ba59-48b9-b9ca-d1cc81b8d7f4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ForeignCurrencyTransactionGainLossBeforeTax"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NonoperatingIncomeExpense_93a12c9c-06a5-489b-ba91-544865dc092f" xlink:to="loc_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax_791fe3da-ba59-48b9-b9ca-d1cc81b8d7f4" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherNonoperatingIncomeExpense_ec08c07b-64ef-454a-886a-5dfbdb2c8e48" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherNonoperatingIncomeExpense"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_NonoperatingIncomeExpense_93a12c9c-06a5-489b-ba91-544865dc092f" xlink:to="loc_us-gaap_OtherNonoperatingIncomeExpense_ec08c07b-64ef-454a-886a-5dfbdb2c8e48" xlink:type="arc"/>
  </link:calculationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail"/>
  <link:calculationLink xlink:role="http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding_a7bf4137-9a8e-471e-ba40-767b5ade3a3a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic_34eebd16-a684-41ea-8ddf-b7c8356b3d54" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_WeightedAverageNumberOfSharesOutstandingBasic"/>
    <link:calculationArc order="1" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding_a7bf4137-9a8e-471e-ba40-767b5ade3a3a" xlink:to="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic_34eebd16-a684-41ea-8ddf-b7c8356b3d54" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements_a2fd3660-308e-4dc6-bc57-7fc2c621339a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements"/>
    <link:calculationArc order="2" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding_a7bf4137-9a8e-471e-ba40-767b5ade3a3a" xlink:to="loc_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements_a2fd3660-308e-4dc6-bc57-7fc2c621339a" xlink:type="arc"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares_6788c573-56fd-4396-97e1-fabef2c61a31" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares"/>
    <link:calculationArc order="3" weight="1.0" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" xlink:from="loc_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding_a7bf4137-9a8e-471e-ba40-767b5ade3a3a" xlink:to="loc_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares_6788c573-56fd-4396-97e1-fabef2c61a31" xlink:type="arc"/>
  </link:calculationLink>
</link:linkbase>
</XBRL>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>EX-101.DEF
<SEQUENCE>7
<FILENAME>spsc-20230331_def.xml
<DESCRIPTION>XBRL TAXONOMY EXTENSION DEFINITION LINKBASE DOCUMENT
<TEXT>
<XBRL>
<?xml version="1.0" encoding="UTF-8"?>

<!--XBRL Document Created with Wdesk from Workiva-->
<!--Copyright 2023 Workiva-->
<!--r:e8457af8-7448-488b-94ad-becdc804ffea,g:b7f35897-e981-4828-95af-9cb9c0061258-->
<link:linkbase xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xbrldt="http://xbrl.org/2005/xbrldt" xsi:schemaLocation="http://www.xbrl.org/2003/linkbase http://www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd">
  <link:arcroleRef arcroleURI="http://xbrl.org/int/dim/arcrole/all" xlink:type="simple" xlink:href="http://www.xbrl.org/2005/xbrldt-2005.xsd#all"/>
  <link:arcroleRef arcroleURI="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:type="simple" xlink:href="http://www.xbrl.org/2005/xbrldt-2005.xsd#hypercube-dimension"/>
  <link:arcroleRef arcroleURI="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:type="simple" xlink:href="http://www.xbrl.org/2005/xbrldt-2005.xsd#dimension-default"/>
  <link:arcroleRef arcroleURI="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:type="simple" xlink:href="http://www.xbrl.org/2005/xbrldt-2005.xsd#dimension-domain"/>
  <link:arcroleRef arcroleURI="http://xbrl.org/int/dim/arcrole/domain-member" xlink:type="simple" xlink:href="http://www.xbrl.org/2005/xbrldt-2005.xsd#domain-member"/>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity" xlink:type="simple" xlink:href="spsc-20230331.xsd#CondensedConsolidatedStatementsofStockholdersEquity"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity" xlink:type="extended" id="i33e6881415ff4aa6b4e522dcbd1038bd_CondensedConsolidatedStatementsofStockholdersEquity">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementLineItems_d43c6e3b-ff5c-40b1-9c5d-d634fef1bcd8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInStockholdersEquityRollForward"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_StatementLineItems_d43c6e3b-ff5c-40b1-9c5d-d634fef1bcd8" xlink:to="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockSharesOutstanding_98dfbc3a-5180-47b9-ba14-1b4944e5be00" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockSharesOutstanding"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_CommonStockSharesOutstanding_98dfbc3a-5180-47b9-ba14-1b4944e5be00" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockholdersEquity_fcab5d41-3b4e-4986-8619-82c151a56158" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockholdersEquity"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_StockholdersEquity_fcab5d41-3b4e-4986-8619-82c151a56158" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockCommonShares_66d30a03-cfde-46fe-b5b6-506f1164bb47" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockCommonShares"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_TreasuryStockCommonShares_66d30a03-cfde-46fe-b5b6-506f1164bb47" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue_a43305ba-c7d6-4e9e-9e24-e5c87648aec3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue_a43305ba-c7d6-4e9e-9e24-e5c87648aec3" xlink:type="arc" order="4"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation_850aeb5c-3d97-4d93-9d35-ab3b9e895c2c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation_850aeb5c-3d97-4d93-9d35-ab3b9e895c2c" xlink:type="arc" order="5"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation_0d83b8f5-7b42-4f85-ba3d-31557a33739e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation_0d83b8f5-7b42-4f85-ba3d-31557a33739e" xlink:type="arc" order="6"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans_d84b2ca9-1150-4293-9510-fe170fd8138d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans_d84b2ca9-1150-4293-9510-fe170fd8138d" xlink:type="arc" order="7"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan_c3525379-9f45-4b6c-b133-59162536faf2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan_c3525379-9f45-4b6c-b133-59162536faf2" xlink:type="arc" order="8"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockSharesAcquired_3f7030a3-803f-4a35-b6aa-369d803dd4d4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockSharesAcquired"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_TreasuryStockSharesAcquired_3f7030a3-803f-4a35-b6aa-369d803dd4d4" xlink:type="arc" order="9"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockValueAcquiredCostMethod_afd1322b-f2b0-470d-8d4b-43d844a3dae9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockValueAcquiredCostMethod"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_TreasuryStockValueAcquiredCostMethod_afd1322b-f2b0-470d-8d4b-43d844a3dae9" xlink:type="arc" order="10"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetIncomeLoss_c6bf5ec4-b04f-4726-b998-aabf747717e6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetIncomeLoss"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_NetIncomeLoss_c6bf5ec4-b04f-4726-b998-aabf747717e6" xlink:type="arc" order="11"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax_eb8e2de9-7d82-4b3f-9816-671b27604600" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax_eb8e2de9-7d82-4b3f-9816-671b27604600" xlink:type="arc" order="12"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_b178afeb-aa6a-4f68-bcc4-449a498195ff" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_b178afeb-aa6a-4f68-bcc4-449a498195ff" xlink:type="arc" order="13"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_355afa31-461d-4c9c-a0f0-ac25052d7ee1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_355afa31-461d-4c9c-a0f0-ac25052d7ee1" xlink:type="arc" order="14"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockSharesOutstanding_d1fbd9d6-3e5e-4fe5-abf1-ef70b9376c2f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockSharesOutstanding"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockholdersEquity_85b7c944-8d46-4630-b0af-92711e15d73c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockholdersEquity"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockCommonShares_340e4858-fe54-41c0-9ff5-476fc87f7216" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockCommonShares"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementTable_ed8a9808-efde-4114-85c1-1d687c3e79b0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_StatementLineItems_d43c6e3b-ff5c-40b1-9c5d-d634fef1bcd8" xlink:to="loc_us-gaap_StatementTable_ed8a9808-efde-4114-85c1-1d687c3e79b0" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementEquityComponentsAxis_1535432b-31f9-4ca5-9648-f3b7c5d53c95" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementEquityComponentsAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_StatementTable_ed8a9808-efde-4114-85c1-1d687c3e79b0" xlink:to="loc_us-gaap_StatementEquityComponentsAxis_1535432b-31f9-4ca5-9648-f3b7c5d53c95" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EquityComponentDomain_1535432b-31f9-4ca5-9648-f3b7c5d53c95_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EquityComponentDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_StatementEquityComponentsAxis_1535432b-31f9-4ca5-9648-f3b7c5d53c95" xlink:to="loc_us-gaap_EquityComponentDomain_1535432b-31f9-4ca5-9648-f3b7c5d53c95_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EquityComponentDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_StatementEquityComponentsAxis_1535432b-31f9-4ca5-9648-f3b7c5d53c95" xlink:to="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockMember_5edb3263-543e-4172-8b59-8c341f15968e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:to="loc_us-gaap_CommonStockMember_5edb3263-543e-4172-8b59-8c341f15968e" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockMember_dc4b260d-2bde-4ce1-871e-f61a9fbe7168" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:to="loc_us-gaap_TreasuryStockMember_dc4b260d-2bde-4ce1-871e-f61a9fbe7168" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AdditionalPaidInCapitalMember_a87b02f1-07c0-48eb-a7c1-a4640b2b0f4f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AdditionalPaidInCapitalMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:to="loc_us-gaap_AdditionalPaidInCapitalMember_a87b02f1-07c0-48eb-a7c1-a4640b2b0f4f" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RetainedEarningsMember_eafc18a6-4240-4cc8-a2d9-7a1911a97778" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RetainedEarningsMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:to="loc_us-gaap_RetainedEarningsMember_eafc18a6-4240-4cc8-a2d9-7a1911a97778" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccumulatedOtherComprehensiveIncomeMember_7a3c53e3-d23a-48de-ae1f-4b41b796a9d5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccumulatedOtherComprehensiveIncomeMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:to="loc_us-gaap_AccumulatedOtherComprehensiveIncomeMember_7a3c53e3-d23a-48de-ae1f-4b41b796a9d5" xlink:type="arc" order="4"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails" xlink:type="simple" xlink:href="spsc-20230331.xsd#BusinessAcquisitionsNarrativeDetails"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails" xlink:type="extended" id="i5ae40101ec4a4ee08ba1789843242dc9_BusinessAcquisitionsNarrativeDetails">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessAcquisitionLineItems_0dc8d495-c523-4090-8671-e9790a89ef35" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessAcquisitionLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessCombinationConsiderationTransferred1_d3959297-74e6-4ee7-8f91-368cb74c3260" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessCombinationConsiderationTransferred1"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_BusinessAcquisitionLineItems_0dc8d495-c523-4090-8671-e9790a89ef35" xlink:to="loc_us-gaap_BusinessCombinationConsiderationTransferred1_d3959297-74e6-4ee7-8f91-368cb74c3260" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_BusinessCombinationMeasurementPeriod_67f5412b-2cae-4e3d-b8c0-753d9750275a" xlink:href="spsc-20230331.xsd#spsc_BusinessCombinationMeasurementPeriod"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_BusinessAcquisitionLineItems_0dc8d495-c523-4090-8671-e9790a89ef35" xlink:to="loc_spsc_BusinessCombinationMeasurementPeriod_67f5412b-2cae-4e3d-b8c0-753d9750275a" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred_8d7b631f-9cb0-4207-b5e2-622bc2320f73" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_BusinessAcquisitionLineItems_0dc8d495-c523-4090-8671-e9790a89ef35" xlink:to="loc_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred_8d7b631f-9cb0-4207-b5e2-622bc2320f73" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets_7d8a7ca2-fd4f-4eae-982a-ac5cc7d1d532" xlink:href="spsc-20230331.xsd#spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_BusinessAcquisitionLineItems_0dc8d495-c523-4090-8671-e9790a89ef35" xlink:to="loc_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets_7d8a7ca2-fd4f-4eae-982a-ac5cc7d1d532" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable_c2a67dbc-0c10-49e5-aef6-8e7586c7b522" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_BusinessAcquisitionLineItems_0dc8d495-c523-4090-8671-e9790a89ef35" xlink:to="loc_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable_c2a67dbc-0c10-49e5-aef6-8e7586c7b522" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessAcquisitionAxis_88cdf2ef-6f4b-41c1-a780-aba7039c4663" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessAcquisitionAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable_c2a67dbc-0c10-49e5-aef6-8e7586c7b522" xlink:to="loc_us-gaap_BusinessAcquisitionAxis_88cdf2ef-6f4b-41c1-a780-aba7039c4663" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessAcquisitionAcquireeDomain_88cdf2ef-6f4b-41c1-a780-aba7039c4663_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessAcquisitionAcquireeDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_BusinessAcquisitionAxis_88cdf2ef-6f4b-41c1-a780-aba7039c4663" xlink:to="loc_us-gaap_BusinessAcquisitionAcquireeDomain_88cdf2ef-6f4b-41c1-a780-aba7039c4663_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessAcquisitionAcquireeDomain_71683429-542b-49b3-ad74-9b19facee79c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessAcquisitionAcquireeDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_BusinessAcquisitionAxis_88cdf2ef-6f4b-41c1-a780-aba7039c4663" xlink:to="loc_us-gaap_BusinessAcquisitionAcquireeDomain_71683429-542b-49b3-ad74-9b19facee79c" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_GCommerceIncMember_49c92277-0731-4666-842e-09632fab1916" xlink:href="spsc-20230331.xsd#spsc_GCommerceIncMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_BusinessAcquisitionAcquireeDomain_71683429-542b-49b3-ad74-9b19facee79c" xlink:to="loc_spsc_GCommerceIncMember_49c92277-0731-4666-842e-09632fab1916" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_InterTradeSystemsIncMember_f0958de1-4f97-4dbd-8ee6-96c66dfd59df" xlink:href="spsc-20230331.xsd#spsc_InterTradeSystemsIncMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_BusinessAcquisitionAcquireeDomain_71683429-542b-49b3-ad74-9b19facee79c" xlink:to="loc_spsc_InterTradeSystemsIncMember_f0958de1-4f97-4dbd-8ee6-96c66dfd59df" xlink:type="arc" order="1"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#RevenueSummaryofRevenuesbyRevenueStreamDetail"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail" xlink:type="extended" id="id32995edd513447f8ee66d1dfa53e4b7_RevenueSummaryofRevenuesbyRevenueStreamDetail">
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RevenueRecognitionLineItems_aa6adce3-b9ee-476d-9e15-d7b358d7ea4a" xlink:href="spsc-20230331.xsd#spsc_RevenueRecognitionLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax_3384332c-cdb2-4a00-b8be-d6c68dc0a38c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_spsc_RevenueRecognitionLineItems_aa6adce3-b9ee-476d-9e15-d7b358d7ea4a" xlink:to="loc_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax_3384332c-cdb2-4a00-b8be-d6c68dc0a38c" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RevenueRecognitionTable_0a38909a-e4ec-4a93-8c6d-d9f5bbc16dc2" xlink:href="spsc-20230331.xsd#spsc_RevenueRecognitionTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_spsc_RevenueRecognitionLineItems_aa6adce3-b9ee-476d-9e15-d7b358d7ea4a" xlink:to="loc_spsc_RevenueRecognitionTable_0a38909a-e4ec-4a93-8c6d-d9f5bbc16dc2" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_ProductOrServiceAxis_e754fe7f-6c36-4ef4-ab0f-1b1a3941dbb8" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_ProductOrServiceAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_spsc_RevenueRecognitionTable_0a38909a-e4ec-4a93-8c6d-d9f5bbc16dc2" xlink:to="loc_srt_ProductOrServiceAxis_e754fe7f-6c36-4ef4-ab0f-1b1a3941dbb8" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_ProductsAndServicesDomain_e754fe7f-6c36-4ef4-ab0f-1b1a3941dbb8_default" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_ProductsAndServicesDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_srt_ProductOrServiceAxis_e754fe7f-6c36-4ef4-ab0f-1b1a3941dbb8" xlink:to="loc_srt_ProductsAndServicesDomain_e754fe7f-6c36-4ef4-ab0f-1b1a3941dbb8_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_ProductsAndServicesDomain_5dab2f4f-319f-4413-ab78-0c43ff558f54" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_ProductsAndServicesDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_srt_ProductOrServiceAxis_e754fe7f-6c36-4ef4-ab0f-1b1a3941dbb8" xlink:to="loc_srt_ProductsAndServicesDomain_5dab2f4f-319f-4413-ab78-0c43ff558f54" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FulfillmentMember_eba13071-3c4a-46b3-a8ca-4029e453e36e" xlink:href="spsc-20230331.xsd#spsc_FulfillmentMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_srt_ProductsAndServicesDomain_5dab2f4f-319f-4413-ab78-0c43ff558f54" xlink:to="loc_spsc_FulfillmentMember_eba13071-3c4a-46b3-a8ca-4029e453e36e" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_AnalyticsMember_f38be07d-0804-4494-acaa-2cddf1957a75" xlink:href="spsc-20230331.xsd#spsc_AnalyticsMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_srt_ProductsAndServicesDomain_5dab2f4f-319f-4413-ab78-0c43ff558f54" xlink:to="loc_spsc_AnalyticsMember_f38be07d-0804-4494-acaa-2cddf1957a75" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_OtherMember_f0b52705-9aa7-414a-b82d-73c24965709e" xlink:href="spsc-20230331.xsd#spsc_OtherMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_srt_ProductsAndServicesDomain_5dab2f4f-319f-4413-ab78-0c43ff558f54" xlink:to="loc_spsc_OtherMember_f0b52705-9aa7-414a-b82d-73c24965709e" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerDurationAxis_9913891f-ecf2-4f59-b999-a842918a3fce" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerDurationAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_spsc_RevenueRecognitionTable_0a38909a-e4ec-4a93-8c6d-d9f5bbc16dc2" xlink:to="loc_us-gaap_ContractWithCustomerDurationAxis_9913891f-ecf2-4f59-b999-a842918a3fce" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerDurationDomain_9913891f-ecf2-4f59-b999-a842918a3fce_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerDurationDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_ContractWithCustomerDurationAxis_9913891f-ecf2-4f59-b999-a842918a3fce" xlink:to="loc_us-gaap_ContractWithCustomerDurationDomain_9913891f-ecf2-4f59-b999-a842918a3fce_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerDurationDomain_f94e0bda-6635-467a-bbec-b5854573d4b7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerDurationDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_ContractWithCustomerDurationAxis_9913891f-ecf2-4f59-b999-a842918a3fce" xlink:to="loc_us-gaap_ContractWithCustomerDurationDomain_f94e0bda-6635-467a-bbec-b5854573d4b7" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RecurringRevenuesMember_496febba-84cf-4834-ba72-2482f4cc6517" xlink:href="spsc-20230331.xsd#spsc_RecurringRevenuesMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ContractWithCustomerDurationDomain_f94e0bda-6635-467a-bbec-b5854573d4b7" xlink:to="loc_spsc_RecurringRevenuesMember_496febba-84cf-4834-ba72-2482f4cc6517" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_OneTimeRevenuesMember_9fad7400-b64f-4f9d-b58f-8e23d11de8d6" xlink:href="spsc-20230331.xsd#spsc_OneTimeRevenuesMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ContractWithCustomerDurationDomain_f94e0bda-6635-467a-bbec-b5854573d4b7" xlink:to="loc_spsc_OneTimeRevenuesMember_9fad7400-b64f-4f9d-b58f-8e23d11de8d6" xlink:type="arc" order="1"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/RevenueNarrativeDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#RevenueNarrativeDetail"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/RevenueNarrativeDetail" xlink:type="extended" id="i01091cc5e4ed418f908d0589a690ed17_RevenueNarrativeDetail">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisaggregationOfRevenueLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_CustomerContractCancellationPeriod_2c83aa9f-f454-4f61-91fb-c0dcbdc078db" xlink:href="spsc-20230331.xsd#spsc_CustomerContractCancellationPeriod"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:to="loc_spsc_CustomerContractCancellationPeriod_2c83aa9f-f454-4f61-91fb-c0dcbdc078db" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod_1a25ecc7-2a8e-4c84-8204-459c8e4d969c" xlink:href="spsc-20230331.xsd#spsc_RecurringRevenuesTimingOfBillingsLatestPeriod"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:to="loc_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod_1a25ecc7-2a8e-4c84-8204-459c8e4d969c" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ContractTermMaximum_6d6dbf76-22e7-4053-bfac-587e899b65ac" xlink:href="spsc-20230331.xsd#spsc_ContractTermMaximum"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:to="loc_spsc_ContractTermMaximum_6d6dbf76-22e7-4053-bfac-587e899b65ac" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_SetUpFeesRecognizedPeriod_1abae4e1-71c3-400e-bed8-1de9fe098a2c" xlink:href="spsc-20230331.xsd#spsc_SetUpFeesRecognizedPeriod"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:to="loc_spsc_SetUpFeesRecognizedPeriod_1abae4e1-71c3-400e-bed8-1de9fe098a2c" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee_ff896d89-ccf1-4c5a-b23e-fa1ba655ee6d" xlink:href="spsc-20230331.xsd#spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:to="loc_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee_ff896d89-ccf1-4c5a-b23e-fa1ba655ee6d" xlink:type="arc" order="4"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisaggregationOfRevenueTable_48570de3-6850-430e-a73c-9442633fd6b2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisaggregationOfRevenueTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:to="loc_us-gaap_DisaggregationOfRevenueTable_48570de3-6850-430e-a73c-9442633fd6b2" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeAxis_d374891c-36e2-4cd7-891c-4b1529d70bd9" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_DisaggregationOfRevenueTable_48570de3-6850-430e-a73c-9442633fd6b2" xlink:to="loc_srt_RangeAxis_d374891c-36e2-4cd7-891c-4b1529d70bd9" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeMember_d374891c-36e2-4cd7-891c-4b1529d70bd9_default" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_srt_RangeAxis_d374891c-36e2-4cd7-891c-4b1529d70bd9" xlink:to="loc_srt_RangeMember_d374891c-36e2-4cd7-891c-4b1529d70bd9_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeMember_68ddddea-a6f3-445d-8121-dd06dd4fb43d" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_srt_RangeAxis_d374891c-36e2-4cd7-891c-4b1529d70bd9" xlink:to="loc_srt_RangeMember_68ddddea-a6f3-445d-8121-dd06dd4fb43d" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_MinimumMember_ffb1eed9-d38a-4443-bd8a-1b23404a4e62" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_MinimumMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_srt_RangeMember_68ddddea-a6f3-445d-8121-dd06dd4fb43d" xlink:to="loc_srt_MinimumMember_ffb1eed9-d38a-4443-bd8a-1b23404a4e62" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_MaximumMember_7990b793-2ec8-49de-aea4-33986f72fa8e" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_MaximumMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_srt_RangeMember_68ddddea-a6f3-445d-8121-dd06dd4fb43d" xlink:to="loc_srt_MaximumMember_7990b793-2ec8-49de-aea4-33986f72fa8e" xlink:type="arc" order="1"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail" xlink:type="extended" id="iaa17c7ac91f848b3a26dc87170a11f9e_RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredRevenueArrangementLineItems_11eb1f18-2bfa-49a1-8a3c-af38c659399b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredRevenueArrangementLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredRevenueArrangementRollForward_5b99ae76-3a0f-491a-9346-fe18f4aeb98f" xlink:href="spsc-20230331.xsd#spsc_DeferredRevenueArrangementRollForward"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_DeferredRevenueArrangementLineItems_11eb1f18-2bfa-49a1-8a3c-af38c659399b" xlink:to="loc_spsc_DeferredRevenueArrangementRollForward_5b99ae76-3a0f-491a-9346-fe18f4aeb98f" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerLiability_763c78c5-ae29-40d3-be5f-6cb31275dbc0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerLiability"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_spsc_DeferredRevenueArrangementRollForward_5b99ae76-3a0f-491a-9346-fe18f4aeb98f" xlink:to="loc_us-gaap_ContractWithCustomerLiability_763c78c5-ae29-40d3-be5f-6cb31275dbc0" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredRevenueInvoicedSetUpFees_29107d85-34aa-4916-a7a4-c82135e3d15e" xlink:href="spsc-20230331.xsd#spsc_DeferredRevenueInvoicedSetUpFees"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_spsc_DeferredRevenueArrangementRollForward_5b99ae76-3a0f-491a-9346-fe18f4aeb98f" xlink:to="loc_spsc_DeferredRevenueInvoicedSetUpFees_29107d85-34aa-4916-a7a4-c82135e3d15e" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredRevenueAmortizedSetUpFees_ef06e661-c60f-4dd5-b551-6657cc0bf5e2" xlink:href="spsc-20230331.xsd#spsc_DeferredRevenueAmortizedSetUpFees"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_spsc_DeferredRevenueArrangementRollForward_5b99ae76-3a0f-491a-9346-fe18f4aeb98f" xlink:to="loc_spsc_DeferredRevenueAmortizedSetUpFees_ef06e661-c60f-4dd5-b551-6657cc0bf5e2" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerLiability_1911521a-7b44-4631-acfe-7b65a561743a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerLiability"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredRevenueArrangementByTypeTable_e28017c7-6033-4b8e-8f16-dfa764881459" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredRevenueArrangementByTypeTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_DeferredRevenueArrangementLineItems_11eb1f18-2bfa-49a1-8a3c-af38c659399b" xlink:to="loc_us-gaap_DeferredRevenueArrangementByTypeTable_e28017c7-6033-4b8e-8f16-dfa764881459" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TypeOfArrangementAxis_42d3fb88-efd2-40e9-ab93-0cd5cd84abf0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TypeOfArrangementAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_DeferredRevenueArrangementByTypeTable_e28017c7-6033-4b8e-8f16-dfa764881459" xlink:to="loc_us-gaap_TypeOfArrangementAxis_42d3fb88-efd2-40e9-ab93-0cd5cd84abf0" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ArrangementsAndNonarrangementTransactionsMember_42d3fb88-efd2-40e9-ab93-0cd5cd84abf0_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ArrangementsAndNonarrangementTransactionsMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_TypeOfArrangementAxis_42d3fb88-efd2-40e9-ab93-0cd5cd84abf0" xlink:to="loc_us-gaap_ArrangementsAndNonarrangementTransactionsMember_42d3fb88-efd2-40e9-ab93-0cd5cd84abf0_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ArrangementsAndNonarrangementTransactionsMember_271d32b9-64fd-434f-893e-160b2debc8af" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ArrangementsAndNonarrangementTransactionsMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_TypeOfArrangementAxis_42d3fb88-efd2-40e9-ab93-0cd5cd84abf0" xlink:to="loc_us-gaap_ArrangementsAndNonarrangementTransactionsMember_271d32b9-64fd-434f-893e-160b2debc8af" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_SetUpFeesMember_6bf00126-e1b2-46bc-ade9-322ee5566d34" xlink:href="spsc-20230331.xsd#spsc_SetUpFeesMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ArrangementsAndNonarrangementTransactionsMember_271d32b9-64fd-434f-893e-160b2debc8af" xlink:to="loc_spsc_SetUpFeesMember_6bf00126-e1b2-46bc-ade9-322ee5566d34" xlink:type="arc" order="0"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail" xlink:type="extended" id="i6db48961424e4e5db16b2468d673d574_FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems_a66119a9-ec9d-4681-b997-e478f8bf4c43" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis_8c225509-753f-474a-8a07-ffa681205d56" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems_a66119a9-ec9d-4681-b997-e478f8bf4c43" xlink:to="loc_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis_8c225509-753f-474a-8a07-ffa681205d56" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax_a0c7dbab-6c27-4c3f-a94b-c74f94c1354c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems_a66119a9-ec9d-4681-b997-e478f8bf4c43" xlink:to="loc_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax_a0c7dbab-6c27-4c3f-a94b-c74f94c1354c" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AvailableForSaleSecuritiesDebtSecurities_19a486d7-7756-4334-8dbc-b08c9607368b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AvailableForSaleSecuritiesDebtSecurities"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems_a66119a9-ec9d-4681-b997-e478f8bf4c43" xlink:to="loc_us-gaap_AvailableForSaleSecuritiesDebtSecurities_19a486d7-7756-4334-8dbc-b08c9607368b" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DebtSecuritiesAvailableForSaleTable_798547ef-5da5-4354-b3ae-a7e10ec170a5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DebtSecuritiesAvailableForSaleTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems_a66119a9-ec9d-4681-b997-e478f8bf4c43" xlink:to="loc_us-gaap_DebtSecuritiesAvailableForSaleTable_798547ef-5da5-4354-b3ae-a7e10ec170a5" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BalanceSheetLocationAxis_9e16cb06-c080-4325-a7e6-8e7718e2089b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BalanceSheetLocationAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_DebtSecuritiesAvailableForSaleTable_798547ef-5da5-4354-b3ae-a7e10ec170a5" xlink:to="loc_us-gaap_BalanceSheetLocationAxis_9e16cb06-c080-4325-a7e6-8e7718e2089b" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BalanceSheetLocationDomain_9e16cb06-c080-4325-a7e6-8e7718e2089b_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BalanceSheetLocationDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_BalanceSheetLocationAxis_9e16cb06-c080-4325-a7e6-8e7718e2089b" xlink:to="loc_us-gaap_BalanceSheetLocationDomain_9e16cb06-c080-4325-a7e6-8e7718e2089b_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BalanceSheetLocationDomain_bfcca629-61a6-44cb-9ade-b16e0fbda915" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BalanceSheetLocationDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_BalanceSheetLocationAxis_9e16cb06-c080-4325-a7e6-8e7718e2089b" xlink:to="loc_us-gaap_BalanceSheetLocationDomain_bfcca629-61a6-44cb-9ade-b16e0fbda915" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CashEquivalentsMember_68914023-3646-4b89-b608-f5fd22c1a570" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CashEquivalentsMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_BalanceSheetLocationDomain_bfcca629-61a6-44cb-9ade-b16e0fbda915" xlink:to="loc_us-gaap_CashEquivalentsMember_68914023-3646-4b89-b608-f5fd22c1a570" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_MarketableSecuritiesMember_9d8c7097-6fe8-47d5-a1c2-fa73ffd79a7e" xlink:href="spsc-20230331.xsd#spsc_MarketableSecuritiesMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_BalanceSheetLocationDomain_bfcca629-61a6-44cb-9ade-b16e0fbda915" xlink:to="loc_spsc_MarketableSecuritiesMember_9d8c7097-6fe8-47d5-a1c2-fa73ffd79a7e" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FinancialInstrumentAxis_7c4774a5-e364-4b5a-b40e-8c3374c4d7a6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FinancialInstrumentAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_DebtSecuritiesAvailableForSaleTable_798547ef-5da5-4354-b3ae-a7e10ec170a5" xlink:to="loc_us-gaap_FinancialInstrumentAxis_7c4774a5-e364-4b5a-b40e-8c3374c4d7a6" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_7c4774a5-e364-4b5a-b40e-8c3374c4d7a6_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_FinancialInstrumentAxis_7c4774a5-e364-4b5a-b40e-8c3374c4d7a6" xlink:to="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_7c4774a5-e364-4b5a-b40e-8c3374c4d7a6_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_b64d1acc-a93e-4f71-b3c5-27fd0e5e8d38" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_FinancialInstrumentAxis_7c4774a5-e364-4b5a-b40e-8c3374c4d7a6" xlink:to="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_b64d1acc-a93e-4f71-b3c5-27fd0e5e8d38" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_MoneyMarketFundsMember_b9c28594-92a9-43f4-b215-70c1fefdb5f2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_MoneyMarketFundsMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_b64d1acc-a93e-4f71-b3c5-27fd0e5e8d38" xlink:to="loc_us-gaap_MoneyMarketFundsMember_b9c28594-92a9-43f4-b215-70c1fefdb5f2" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CertificatesOfDepositMember_55452760-4a82-4e89-a15d-fc6f67516b53" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CertificatesOfDepositMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_b64d1acc-a93e-4f71-b3c5-27fd0e5e8d38" xlink:to="loc_us-gaap_CertificatesOfDepositMember_55452760-4a82-4e89-a15d-fc6f67516b53" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommercialPaperMember_1e1dee34-5255-485b-b904-a8a1e715d841" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommercialPaperMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_b64d1acc-a93e-4f71-b3c5-27fd0e5e8d38" xlink:to="loc_us-gaap_CommercialPaperMember_1e1dee34-5255-485b-b904-a8a1e715d841" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_USTreasurySecuritiesMember_f5659032-673d-4344-9e9c-464b54d6bcb2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_USTreasurySecuritiesMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_b64d1acc-a93e-4f71-b3c5-27fd0e5e8d38" xlink:to="loc_us-gaap_USTreasurySecuritiesMember_f5659032-673d-4344-9e9c-464b54d6bcb2" xlink:type="arc" order="3"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/PropertyandEquipmentNetDetails" xlink:type="simple" xlink:href="spsc-20230331.xsd#PropertyandEquipmentNetDetails"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/PropertyandEquipmentNetDetails" xlink:type="extended" id="id37b374be8c34a27974bb53bdcc992c2_PropertyandEquipmentNetDetails">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentLineItems_7ec1d9f0-1e4b-42d8-bc8d-882d503c0244" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentGross_312e06d5-6949-4c31-a922-43b064414f77" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentGross"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentLineItems_7ec1d9f0-1e4b-42d8-bc8d-882d503c0244" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentGross_312e06d5-6949-4c31-a922-43b064414f77" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment_5a8eb7d8-603f-491d-b227-35df2774760f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentLineItems_7ec1d9f0-1e4b-42d8-bc8d-882d503c0244" xlink:to="loc_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment_5a8eb7d8-603f-491d-b227-35df2774760f" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentNet_5206d494-87a7-4961-ab3a-81ad8b4ace17" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentNet"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentLineItems_7ec1d9f0-1e4b-42d8-bc8d-882d503c0244" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentNet_5206d494-87a7-4961-ab3a-81ad8b4ace17" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable_b730cd74-1ee3-46ec-bb47-83be6e41cbe5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfPropertyPlantAndEquipmentTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentLineItems_7ec1d9f0-1e4b-42d8-bc8d-882d503c0244" xlink:to="loc_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable_b730cd74-1ee3-46ec-bb47-83be6e41cbe5" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentByTypeAxis_f869a205-4096-4e49-90ea-b4f175bb2f62" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentByTypeAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable_b730cd74-1ee3-46ec-bb47-83be6e41cbe5" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentByTypeAxis_f869a205-4096-4e49-90ea-b4f175bb2f62" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_f869a205-4096-4e49-90ea-b4f175bb2f62_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentTypeDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentByTypeAxis_f869a205-4096-4e49-90ea-b4f175bb2f62" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_f869a205-4096-4e49-90ea-b4f175bb2f62_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_e5d678c5-ec8f-4dff-b2b8-99287664acb5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentTypeDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentByTypeAxis_f869a205-4096-4e49-90ea-b4f175bb2f62" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_e5d678c5-ec8f-4dff-b2b8-99287664acb5" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_InternallyDevelopedSoftwareMember_ac266197-4b52-4003-ae1d-df6695fea43f" xlink:href="spsc-20230331.xsd#spsc_InternallyDevelopedSoftwareMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_e5d678c5-ec8f-4dff-b2b8-99287664acb5" xlink:to="loc_spsc_InternallyDevelopedSoftwareMember_ac266197-4b52-4003-ae1d-df6695fea43f" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ComputerEquipmentMember_149d417e-4ecb-4920-8bd6-25470d8c9a76" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ComputerEquipmentMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_e5d678c5-ec8f-4dff-b2b8-99287664acb5" xlink:to="loc_us-gaap_ComputerEquipmentMember_149d417e-4ecb-4920-8bd6-25470d8c9a76" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LeaseholdImprovementsMember_20485dc9-5a86-4133-be3c-ba4d4b12365c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LeaseholdImprovementsMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_e5d678c5-ec8f-4dff-b2b8-99287664acb5" xlink:to="loc_us-gaap_LeaseholdImprovementsMember_20485dc9-5a86-4133-be3c-ba4d4b12365c" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_OfficeEquipmentAndFurnitureMember_f0982f56-fc36-4d78-8f9c-cfb0e9593829" xlink:href="spsc-20230331.xsd#spsc_OfficeEquipmentAndFurnitureMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_e5d678c5-ec8f-4dff-b2b8-99287664acb5" xlink:to="loc_spsc_OfficeEquipmentAndFurnitureMember_f0982f56-fc36-4d78-8f9c-cfb0e9593829" xlink:type="arc" order="3"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail" xlink:type="extended" id="ic1c97b0e06644fd186cd3bcb72d8c18e_GoodwillandIntangibleAssetsNetIntangibleAssetsDetail">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsGross_c622dca7-ae59-496a-9c30-9d1ab49ebfa1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsGross"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsGross_c622dca7-ae59-496a-9c30-9d1ab49ebfa1" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization_0d3262a2-9935-400d-9837-ab0c1ce25eb0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization_0d3262a2-9935-400d-9837-ab0c1ce25eb0" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss_b072e8ef-c592-495c-90e4-7dab4e9f0cb5" xlink:href="spsc-20230331.xsd#spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:to="loc_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss_b072e8ef-c592-495c-90e4-7dab4e9f0cb5" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsNet_b39c0f61-f307-4374-93d7-633c2e7c887d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsNet"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsNet_b39c0f61-f307-4374-93d7-633c2e7c887d" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1_9c3dbf79-ebde-4399-a5c8-b06d78f7d4e5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1_9c3dbf79-ebde-4399-a5c8-b06d78f7d4e5" xlink:type="arc" order="4"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable_f7445e3b-7939-459d-ab6c-4fb5e9596cb3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:to="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable_f7445e3b-7939-459d-ab6c-4fb5e9596cb3" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis_1bf2c829-853d-4abb-b5e3-1dcb6e60b1bd" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable_f7445e3b-7939-459d-ab6c-4fb5e9596cb3" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis_1bf2c829-853d-4abb-b5e3-1dcb6e60b1bd" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain_1bf2c829-853d-4abb-b5e3-1dcb6e60b1bd_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis_1bf2c829-853d-4abb-b5e3-1dcb6e60b1bd" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain_1bf2c829-853d-4abb-b5e3-1dcb6e60b1bd_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain_ca32002a-2e46-48cc-8320-5cd3e20413d5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis_1bf2c829-853d-4abb-b5e3-1dcb6e60b1bd" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain_ca32002a-2e46-48cc-8320-5cd3e20413d5" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CustomerRelationshipsMember_88edbc9f-dbfe-4442-b59c-1a3a78a83f6c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CustomerRelationshipsMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain_ca32002a-2e46-48cc-8320-5cd3e20413d5" xlink:to="loc_us-gaap_CustomerRelationshipsMember_88edbc9f-dbfe-4442-b59c-1a3a78a83f6c" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TechnologyBasedIntangibleAssetsMember_100fba85-9eec-4294-8c22-f6ebc0ddad59" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TechnologyBasedIntangibleAssetsMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain_ca32002a-2e46-48cc-8320-5cd3e20413d5" xlink:to="loc_us-gaap_TechnologyBasedIntangibleAssetsMember_100fba85-9eec-4294-8c22-f6ebc0ddad59" xlink:type="arc" order="1"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockholdersEquityShareRepurchasePlanDetails"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails" xlink:type="extended" id="i98164e4bcde24235a931001ec6107f41_StockholdersEquityShareRepurchasePlanDetails">
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ScheduleOfStockholdersEquityLineItems_b73ccf79-3227-406d-81be-419e4740a587" xlink:href="spsc-20230331.xsd#spsc_ScheduleOfStockholdersEquityLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockRepurchaseProgramAuthorizedAmount1_28c607fa-f1bd-4826-bcc9-5a1e9b5cc8e7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockRepurchaseProgramAuthorizedAmount1"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_spsc_ScheduleOfStockholdersEquityLineItems_b73ccf79-3227-406d-81be-419e4740a587" xlink:to="loc_us-gaap_StockRepurchaseProgramAuthorizedAmount1_28c607fa-f1bd-4826-bcc9-5a1e9b5cc8e7" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockCommonValue_6d37bbc5-3077-4700-a96e-96d892fbc880" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockCommonValue"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_spsc_ScheduleOfStockholdersEquityLineItems_b73ccf79-3227-406d-81be-419e4740a587" xlink:to="loc_us-gaap_TreasuryStockCommonValue_6d37bbc5-3077-4700-a96e-96d892fbc880" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue_6b6477dc-e114-4b9d-bdda-5b425b21a52b" xlink:href="spsc-20230331.xsd#spsc_TreasuryStockUnusedAndExpiredRepurchaseValue"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_spsc_ScheduleOfStockholdersEquityLineItems_b73ccf79-3227-406d-81be-419e4740a587" xlink:to="loc_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue_6b6477dc-e114-4b9d-bdda-5b425b21a52b" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1_d9743253-8cf5-49cc-81b6-569bf7d78a51" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_spsc_ScheduleOfStockholdersEquityLineItems_b73ccf79-3227-406d-81be-419e4740a587" xlink:to="loc_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1_d9743253-8cf5-49cc-81b6-569bf7d78a51" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ScheduleOfStockholdersEquityTable_f68db2eb-a8a3-4ffa-adf1-ce381893c8d4" xlink:href="spsc-20230331.xsd#spsc_ScheduleOfStockholdersEquityTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_spsc_ScheduleOfStockholdersEquityLineItems_b73ccf79-3227-406d-81be-419e4740a587" xlink:to="loc_spsc_ScheduleOfStockholdersEquityTable_f68db2eb-a8a3-4ffa-adf1-ce381893c8d4" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementEquityComponentsAxis_aa742721-31ad-4021-9dc6-7330bc7d7bd0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementEquityComponentsAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_spsc_ScheduleOfStockholdersEquityTable_f68db2eb-a8a3-4ffa-adf1-ce381893c8d4" xlink:to="loc_us-gaap_StatementEquityComponentsAxis_aa742721-31ad-4021-9dc6-7330bc7d7bd0" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EquityComponentDomain_aa742721-31ad-4021-9dc6-7330bc7d7bd0_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EquityComponentDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_StatementEquityComponentsAxis_aa742721-31ad-4021-9dc6-7330bc7d7bd0" xlink:to="loc_us-gaap_EquityComponentDomain_aa742721-31ad-4021-9dc6-7330bc7d7bd0_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EquityComponentDomain_f8af2cf4-9650-41ec-959b-841b0d16cf99" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EquityComponentDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_StatementEquityComponentsAxis_aa742721-31ad-4021-9dc6-7330bc7d7bd0" xlink:to="loc_us-gaap_EquityComponentDomain_f8af2cf4-9650-41ec-959b-841b0d16cf99" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockMember_aa8ecf51-6726-408e-a072-706f62b2c44a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_EquityComponentDomain_f8af2cf4-9650-41ec-959b-841b0d16cf99" xlink:to="loc_us-gaap_CommonStockMember_aa8ecf51-6726-408e-a072-706f62b2c44a" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareRepurchaseProgramAxis_1f3b8fa0-7a10-4e36-876e-3fad90574bc5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareRepurchaseProgramAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_spsc_ScheduleOfStockholdersEquityTable_f68db2eb-a8a3-4ffa-adf1-ce381893c8d4" xlink:to="loc_us-gaap_ShareRepurchaseProgramAxis_1f3b8fa0-7a10-4e36-876e-3fad90574bc5" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareRepurchaseProgramDomain_1f3b8fa0-7a10-4e36-876e-3fad90574bc5_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareRepurchaseProgramDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_ShareRepurchaseProgramAxis_1f3b8fa0-7a10-4e36-876e-3fad90574bc5" xlink:to="loc_us-gaap_ShareRepurchaseProgramDomain_1f3b8fa0-7a10-4e36-876e-3fad90574bc5_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareRepurchaseProgramDomain_c0262ddd-74aa-4db1-996a-6df7c16ee346" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareRepurchaseProgramDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_ShareRepurchaseProgramAxis_1f3b8fa0-7a10-4e36-876e-3fad90574bc5" xlink:to="loc_us-gaap_ShareRepurchaseProgramDomain_c0262ddd-74aa-4db1-996a-6df7c16ee346" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_A2021StockRepurchaseProgramMember_86fa7f13-5941-4364-a5f6-685ad4696b42" xlink:href="spsc-20230331.xsd#spsc_A2021StockRepurchaseProgramMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareRepurchaseProgramDomain_c0262ddd-74aa-4db1-996a-6df7c16ee346" xlink:to="loc_spsc_A2021StockRepurchaseProgramMember_86fa7f13-5941-4364-a5f6-685ad4696b42" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_A2022StockRepurchaseProgramMember_50a08ea5-8bf9-4113-8333-72bf6c410d7d" xlink:href="spsc-20230331.xsd#spsc_A2022StockRepurchaseProgramMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareRepurchaseProgramDomain_c0262ddd-74aa-4db1-996a-6df7c16ee346" xlink:to="loc_spsc_A2022StockRepurchaseProgramMember_50a08ea5-8bf9-4113-8333-72bf6c410d7d" xlink:type="arc" order="1"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationNarrativeDetail"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail" xlink:type="extended" id="i03fea784176b46b7a3b1ae9e0d4405fa_StockBasedCompensationNarrativeDetail">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant_18bbdab5-f3e7-4943-b532-29d0b5066a18" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant_18bbdab5-f3e7-4943-b532-29d0b5066a18" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized_4e00e2d2-f7cc-459c-8b9f-da77bf518eaf" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized_4e00e2d2-f7cc-459c-8b9f-da77bf518eaf" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1_f4329ddd-e98f-42f2-b967-18a29bd0cca6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1_f4329ddd-e98f-42f2-b967-18a29bd0cca6" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber_0c3c66cf-f495-4dff-a99b-2465759a2af9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber_0c3c66cf-f495-4dff-a99b-2465759a2af9" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice_ab279faf-8dfe-4415-8a18-406cf4507f96" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice_ab279faf-8dfe-4415-8a18-406cf4507f96" xlink:type="arc" order="4"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2_52995e42-9059-4a73-a9ea-a69e687d4c20" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2_52995e42-9059-4a73-a9ea-a69e687d4c20" xlink:type="arc" order="5"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue_d7ed1955-827a-491f-8434-41019906d473" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue_d7ed1955-827a-491f-8434-41019906d473" xlink:type="arc" order="6"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1_55b3fa16-e011-4cd7-9c60-6ff2aac05c3a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1_55b3fa16-e011-4cd7-9c60-6ff2aac05c3a" xlink:type="arc" order="7"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod_6a9636ab-9489-41f1-b398-f2c064e87d93" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod_6a9636ab-9489-41f1-b398-f2c064e87d93" xlink:type="arc" order="8"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd_354b2dd9-698d-4d33-8663-27fc47eb03bd" xlink:href="spsc-20230331.xsd#spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd_354b2dd9-698d-4d33-8663-27fc47eb03bd" xlink:type="arc" order="9"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance_91e49a1c-c5ae-4cbe-bc54-3109b00a6d15" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance_91e49a1c-c5ae-4cbe-bc54-3109b00a6d15" xlink:type="arc" order="10"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_1407fa95-da98-4749-bc42-358a9a3d87ef" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_1407fa95-da98-4749-bc42-358a9a3d87ef" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AwardTypeAxis_9f4aee91-461d-42e5-a0fc-e5b9e8740016" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AwardTypeAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_1407fa95-da98-4749-bc42-358a9a3d87ef" xlink:to="loc_us-gaap_AwardTypeAxis_9f4aee91-461d-42e5-a0fc-e5b9e8740016" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9f4aee91-461d-42e5-a0fc-e5b9e8740016_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_AwardTypeAxis_9f4aee91-461d-42e5-a0fc-e5b9e8740016" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9f4aee91-461d-42e5-a0fc-e5b9e8740016_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_0819e138-3e82-40a4-94d2-e3da96a433c8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_AwardTypeAxis_9f4aee91-461d-42e5-a0fc-e5b9e8740016" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_0819e138-3e82-40a4-94d2-e3da96a433c8" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockOptionMember_947d2f97-8d17-4035-8517-3efffbef5f29" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockOptionMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_0819e138-3e82-40a4-94d2-e3da96a433c8" xlink:to="loc_us-gaap_EmployeeStockOptionMember_947d2f97-8d17-4035-8517-3efffbef5f29" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PerformanceSharesMember_eb33e216-3ee4-46b9-9040-930c4d6ab1e6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PerformanceSharesMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_0819e138-3e82-40a4-94d2-e3da96a433c8" xlink:to="loc_us-gaap_PerformanceSharesMember_eb33e216-3ee4-46b9-9040-930c4d6ab1e6" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember_d61ed5a8-d7e9-4e40-9b8b-86f62937f036" xlink:href="spsc-20230331.xsd#spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_0819e138-3e82-40a4-94d2-e3da96a433c8" xlink:to="loc_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember_d61ed5a8-d7e9-4e40-9b8b-86f62937f036" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SubsidiarySaleOfStockAxis_3f9c1703-9a9f-483e-902b-ee2e2f1b6eb9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SubsidiarySaleOfStockAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_1407fa95-da98-4749-bc42-358a9a3d87ef" xlink:to="loc_us-gaap_SubsidiarySaleOfStockAxis_3f9c1703-9a9f-483e-902b-ee2e2f1b6eb9" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SaleOfStockNameOfTransactionDomain_3f9c1703-9a9f-483e-902b-ee2e2f1b6eb9_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SaleOfStockNameOfTransactionDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_SubsidiarySaleOfStockAxis_3f9c1703-9a9f-483e-902b-ee2e2f1b6eb9" xlink:to="loc_us-gaap_SaleOfStockNameOfTransactionDomain_3f9c1703-9a9f-483e-902b-ee2e2f1b6eb9_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SaleOfStockNameOfTransactionDomain_41af7e84-ff75-4f0e-aa76-fbac17d328a4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SaleOfStockNameOfTransactionDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_SubsidiarySaleOfStockAxis_3f9c1703-9a9f-483e-902b-ee2e2f1b6eb9" xlink:to="loc_us-gaap_SaleOfStockNameOfTransactionDomain_41af7e84-ff75-4f0e-aa76-fbac17d328a4" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockMember_7b56ecd1-24a7-4d31-8644-c771a6d80d00" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_SaleOfStockNameOfTransactionDomain_41af7e84-ff75-4f0e-aa76-fbac17d328a4" xlink:to="loc_us-gaap_EmployeeStockMember_7b56ecd1-24a7-4d31-8644-c771a6d80d00" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeAxis_b2f8aaa9-7ab4-44f7-8b33-ad32227b3d68" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_1407fa95-da98-4749-bc42-358a9a3d87ef" xlink:to="loc_srt_RangeAxis_b2f8aaa9-7ab4-44f7-8b33-ad32227b3d68" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeMember_b2f8aaa9-7ab4-44f7-8b33-ad32227b3d68_default" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_srt_RangeAxis_b2f8aaa9-7ab4-44f7-8b33-ad32227b3d68" xlink:to="loc_srt_RangeMember_b2f8aaa9-7ab4-44f7-8b33-ad32227b3d68_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeMember_ae148c02-524e-4f15-a1c7-0826d23508f8" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_srt_RangeAxis_b2f8aaa9-7ab4-44f7-8b33-ad32227b3d68" xlink:to="loc_srt_RangeMember_ae148c02-524e-4f15-a1c7-0826d23508f8" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_MaximumMember_7a0abfdf-91d8-407d-9228-f46dcf648bd4" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_MaximumMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_srt_RangeMember_ae148c02-524e-4f15-a1c7-0826d23508f8" xlink:to="loc_srt_MaximumMember_7a0abfdf-91d8-407d-9228-f46dcf648bd4" xlink:type="arc" order="0"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationStockBasedCompensationExpenseDetail"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail" xlink:type="extended" id="i595c785d7dd844ce8e6f7e49440e55ab_StockBasedCompensationStockBasedCompensationExpenseDetail">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems_fe0b3892-8143-4a97-97de-8eae68287061" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllocatedShareBasedCompensationExpense_1a3a5d07-ec22-4f53-bd86-56d209836091" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllocatedShareBasedCompensationExpense"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems_fe0b3892-8143-4a97-97de-8eae68287061" xlink:to="loc_us-gaap_AllocatedShareBasedCompensationExpense_1a3a5d07-ec22-4f53-bd86-56d209836091" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable_b358f252-14c2-417c-8f9b-8be34622250d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems_fe0b3892-8143-4a97-97de-8eae68287061" xlink:to="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable_b358f252-14c2-417c-8f9b-8be34622250d" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeStatementLocationAxis_cb4c63ff-9025-4fae-9bb8-c8f30e14b82f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeStatementLocationAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable_b358f252-14c2-417c-8f9b-8be34622250d" xlink:to="loc_us-gaap_IncomeStatementLocationAxis_cb4c63ff-9025-4fae-9bb8-c8f30e14b82f" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeStatementLocationDomain_cb4c63ff-9025-4fae-9bb8-c8f30e14b82f_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeStatementLocationDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_IncomeStatementLocationAxis_cb4c63ff-9025-4fae-9bb8-c8f30e14b82f" xlink:to="loc_us-gaap_IncomeStatementLocationDomain_cb4c63ff-9025-4fae-9bb8-c8f30e14b82f_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeStatementLocationDomain_d09c87be-b375-4b0b-b4c3-0d7f646f8026" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeStatementLocationDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_IncomeStatementLocationAxis_cb4c63ff-9025-4fae-9bb8-c8f30e14b82f" xlink:to="loc_us-gaap_IncomeStatementLocationDomain_d09c87be-b375-4b0b-b4c3-0d7f646f8026" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CostOfSalesMember_3b872e4f-9155-4ede-af22-85cba38c43c6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CostOfSalesMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncomeStatementLocationDomain_d09c87be-b375-4b0b-b4c3-0d7f646f8026" xlink:to="loc_us-gaap_CostOfSalesMember_3b872e4f-9155-4ede-af22-85cba38c43c6" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SellingAndMarketingExpenseMember_ff7271fd-73b1-42c1-99e0-03fce45433c4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SellingAndMarketingExpenseMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncomeStatementLocationDomain_d09c87be-b375-4b0b-b4c3-0d7f646f8026" xlink:to="loc_us-gaap_SellingAndMarketingExpenseMember_ff7271fd-73b1-42c1-99e0-03fce45433c4" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ResearchAndDevelopmentExpenseMember_2e5e279e-7a50-4f7d-ac6c-95ff4bc53625" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ResearchAndDevelopmentExpenseMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncomeStatementLocationDomain_d09c87be-b375-4b0b-b4c3-0d7f646f8026" xlink:to="loc_us-gaap_ResearchAndDevelopmentExpenseMember_2e5e279e-7a50-4f7d-ac6c-95ff4bc53625" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeneralAndAdministrativeExpenseMember_8bdd7bb7-1194-4880-8f8c-89c4ffb5f5f7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeneralAndAdministrativeExpenseMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_IncomeStatementLocationDomain_d09c87be-b375-4b0b-b4c3-0d7f646f8026" xlink:to="loc_us-gaap_GeneralAndAdministrativeExpenseMember_8bdd7bb7-1194-4880-8f8c-89c4ffb5f5f7" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AwardTypeAxis_a3f67bb2-c895-4346-80b3-7a03a2b2fbcd" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AwardTypeAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable_b358f252-14c2-417c-8f9b-8be34622250d" xlink:to="loc_us-gaap_AwardTypeAxis_a3f67bb2-c895-4346-80b3-7a03a2b2fbcd" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_a3f67bb2-c895-4346-80b3-7a03a2b2fbcd_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_AwardTypeAxis_a3f67bb2-c895-4346-80b3-7a03a2b2fbcd" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_a3f67bb2-c895-4346-80b3-7a03a2b2fbcd_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_AwardTypeAxis_a3f67bb2-c895-4346-80b3-7a03a2b2fbcd" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockOptionMember_29d99ba6-03e2-4f13-8a32-e5529a31ff7a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockOptionMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:to="loc_us-gaap_EmployeeStockOptionMember_29d99ba6-03e2-4f13-8a32-e5529a31ff7a" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PerformanceSharesMember_8ce119a4-8a99-48f8-a308-e54a8b1b9ab0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PerformanceSharesMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:to="loc_us-gaap_PerformanceSharesMember_8ce119a4-8a99-48f8-a308-e54a8b1b9ab0" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RestrictedStockUnitsRSUMember_84ac40ae-8637-42ba-a864-529801fcda45" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RestrictedStockUnitsRSUMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:to="loc_us-gaap_RestrictedStockUnitsRSUMember_84ac40ae-8637-42ba-a864-529801fcda45" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember_b5894695-b5e3-4485-8256-361e60de8c56" xlink:href="spsc-20230331.xsd#spsc_RestrictedStockUnitsAndDeferredStockUnitsMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:to="loc_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember_b5894695-b5e3-4485-8256-361e60de8c56" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_EmployeeStockPurchasePlanMember_b92089b4-0e6b-4369-9275-943b446dba7e" xlink:href="spsc-20230331.xsd#spsc_EmployeeStockPurchasePlanMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:to="loc_spsc_EmployeeStockPurchasePlanMember_b92089b4-0e6b-4369-9275-943b446dba7e" xlink:type="arc" order="4"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FourZeroOneKStockMatchMember_3736ec3f-137e-4800-a8f0-56a3fe46a462" xlink:href="spsc-20230331.xsd#spsc_FourZeroOneKStockMatchMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:to="loc_spsc_FourZeroOneKStockMatchMember_3736ec3f-137e-4800-a8f0-56a3fe46a462" xlink:type="arc" order="5"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail" xlink:type="extended" id="ic904c24017d24f2c935f1bb2fd349ed5_StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_12e2d29b-c026-45bf-b424-c8ad44321ecb" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1_5be16d78-55de-4dfb-be3f-ed219e03af1d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_12e2d29b-c026-45bf-b424-c8ad44321ecb" xlink:to="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1_5be16d78-55de-4dfb-be3f-ed219e03af1d" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate_572037a5-7a7e-4dba-920e-926b6d044ad8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_12e2d29b-c026-45bf-b424-c8ad44321ecb" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate_572037a5-7a7e-4dba-920e-926b6d044ad8" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate_8e501678-e917-4fa9-9766-d330a65d2cf7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_12e2d29b-c026-45bf-b424-c8ad44321ecb" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate_8e501678-e917-4fa9-9766-d330a65d2cf7" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate_3dfcd0c6-f57b-4170-a9c3-21e71b719f5f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_12e2d29b-c026-45bf-b424-c8ad44321ecb" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate_3dfcd0c6-f57b-4170-a9c3-21e71b719f5f" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_6f2d4d81-eac9-49c2-aa23-8068e24d54e6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_12e2d29b-c026-45bf-b424-c8ad44321ecb" xlink:to="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_6f2d4d81-eac9-49c2-aa23-8068e24d54e6" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AwardTypeAxis_edc931ad-1a96-4421-b6f5-d34ae9d9a538" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AwardTypeAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_6f2d4d81-eac9-49c2-aa23-8068e24d54e6" xlink:to="loc_us-gaap_AwardTypeAxis_edc931ad-1a96-4421-b6f5-d34ae9d9a538" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_edc931ad-1a96-4421-b6f5-d34ae9d9a538_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_AwardTypeAxis_edc931ad-1a96-4421-b6f5-d34ae9d9a538" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_edc931ad-1a96-4421-b6f5-d34ae9d9a538_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_6a9a93d4-1fd1-4065-9da2-2fd7fd963e19" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_AwardTypeAxis_edc931ad-1a96-4421-b6f5-d34ae9d9a538" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_6a9a93d4-1fd1-4065-9da2-2fd7fd963e19" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockOptionMember_8064b087-6004-4f14-aa67-26ace155985f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockOptionMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_6a9a93d4-1fd1-4065-9da2-2fd7fd963e19" xlink:to="loc_us-gaap_EmployeeStockOptionMember_8064b087-6004-4f14-aa67-26ace155985f" xlink:type="arc" order="0"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationPSURSURSAandDSUDetail"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail" xlink:type="extended" id="i0e0fb5617d264347a9e1cb35e1e3294f_StockBasedCompensationPSURSURSAandDSUDetail">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_30d842e7-021f-4919-b2e3-422bc3ca1816" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_30d842e7-021f-4919-b2e3-422bc3ca1816" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber_0f3a1312-3060-4412-9769-f795e8fd2dbf" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber_0f3a1312-3060-4412-9769-f795e8fd2dbf" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod_71c3a406-9ffe-49ac-9683-9d12499d2a60" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod_71c3a406-9ffe-49ac-9683-9d12499d2a60" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod_0fac64aa-9fcd-43a8-b134-04b0e8cd9c89" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod_0fac64aa-9fcd-43a8-b134-04b0e8cd9c89" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod_db8de851-0dc2-4791-bafb-e394a021af89" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod_db8de851-0dc2-4791-bafb-e394a021af89" xlink:type="arc" order="4"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber_f3ed4337-6c0b-4a04-8d0e-8e8578a9250f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_30d842e7-021f-4919-b2e3-422bc3ca1816" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue_8f6bef5e-1be1-429d-9f67-fd7b647dd06e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue_8f6bef5e-1be1-429d-9f67-fd7b647dd06e" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue_97c16c0d-d23c-4602-a77a-a114092c286e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue_97c16c0d-d23c-4602-a77a-a114092c286e" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue_a89b2264-fc41-4e13-b0ce-c046783aa5e3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue_a89b2264-fc41-4e13-b0ce-c046783aa5e3" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue_16a80043-0675-42c6-ad98-fe3cbdd1a8d7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue_16a80043-0675-42c6-ad98-fe3cbdd1a8d7" xlink:type="arc" order="4"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue_172fe4ed-991b-4320-8e95-06f24bcd24d7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_23bd1a16-2ffe-4898-8094-3e392230a357" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_30d842e7-021f-4919-b2e3-422bc3ca1816" xlink:to="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_23bd1a16-2ffe-4898-8094-3e392230a357" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AwardTypeAxis_58584e30-f1e0-41fd-9ece-19618aedcd2b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AwardTypeAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_23bd1a16-2ffe-4898-8094-3e392230a357" xlink:to="loc_us-gaap_AwardTypeAxis_58584e30-f1e0-41fd-9ece-19618aedcd2b" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_58584e30-f1e0-41fd-9ece-19618aedcd2b_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_AwardTypeAxis_58584e30-f1e0-41fd-9ece-19618aedcd2b" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_58584e30-f1e0-41fd-9ece-19618aedcd2b_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_6d49b574-e9f3-4f35-99f1-2b08efef6582" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_AwardTypeAxis_58584e30-f1e0-41fd-9ece-19618aedcd2b" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_6d49b574-e9f3-4f35-99f1-2b08efef6582" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember_638d5860-071d-458e-9ce4-fc28a61d806e" xlink:href="spsc-20230331.xsd#spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_6d49b574-e9f3-4f35-99f1-2b08efef6582" xlink:to="loc_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember_638d5860-071d-458e-9ce4-fc28a61d806e" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeAxis_75d3a938-418b-4bdc-a1de-df3369dc19ef" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_23bd1a16-2ffe-4898-8094-3e392230a357" xlink:to="loc_srt_RangeAxis_75d3a938-418b-4bdc-a1de-df3369dc19ef" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeMember_75d3a938-418b-4bdc-a1de-df3369dc19ef_default" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_srt_RangeAxis_75d3a938-418b-4bdc-a1de-df3369dc19ef" xlink:to="loc_srt_RangeMember_75d3a938-418b-4bdc-a1de-df3369dc19ef_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeMember_c0b938ec-e076-4078-86e6-0627be46a972" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_srt_RangeAxis_75d3a938-418b-4bdc-a1de-df3369dc19ef" xlink:to="loc_srt_RangeMember_c0b938ec-e076-4078-86e6-0627be46a972" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_MaximumMember_30cde468-e179-414c-a1cd-2c6eaef62493" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_MaximumMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_srt_RangeMember_c0b938ec-e076-4078-86e6-0627be46a972" xlink:to="loc_srt_MaximumMember_30cde468-e179-414c-a1cd-2c6eaef62493" xlink:type="arc" order="0"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationSummaryofESPPActivityDetail"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail" xlink:type="extended" id="i3bded9a446fb4efc91abb73a70796d07_StockBasedCompensationSummaryofESPPActivityDetail">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_11a87adb-8c76-4854-9f46-c4d8cc7468a8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward_9aa96908-d0d9-4067-a699-356e7d2bd2d5" xlink:href="spsc-20230331.xsd#spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_11a87adb-8c76-4854-9f46-c4d8cc7468a8" xlink:to="loc_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward_9aa96908-d0d9-4067-a699-356e7d2bd2d5" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward_fab8c751-5acd-4ad4-ad30-2ce6d2f334c2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_11a87adb-8c76-4854-9f46-c4d8cc7468a8" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward_fab8c751-5acd-4ad4-ad30-2ce6d2f334c2" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance_9af9bca0-78b4-4327-8a01-a40837a0bb08" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_11a87adb-8c76-4854-9f46-c4d8cc7468a8" xlink:to="loc_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance_9af9bca0-78b4-4327-8a01-a40837a0bb08" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_66f74980-bfdd-4ce0-ba9f-7c7247a647e7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_11a87adb-8c76-4854-9f46-c4d8cc7468a8" xlink:to="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_66f74980-bfdd-4ce0-ba9f-7c7247a647e7" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SubsidiarySaleOfStockAxis_79bc8903-ed08-4730-bc9f-ff32e2ac7971" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SubsidiarySaleOfStockAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_66f74980-bfdd-4ce0-ba9f-7c7247a647e7" xlink:to="loc_us-gaap_SubsidiarySaleOfStockAxis_79bc8903-ed08-4730-bc9f-ff32e2ac7971" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SaleOfStockNameOfTransactionDomain_79bc8903-ed08-4730-bc9f-ff32e2ac7971_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SaleOfStockNameOfTransactionDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_SubsidiarySaleOfStockAxis_79bc8903-ed08-4730-bc9f-ff32e2ac7971" xlink:to="loc_us-gaap_SaleOfStockNameOfTransactionDomain_79bc8903-ed08-4730-bc9f-ff32e2ac7971_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SaleOfStockNameOfTransactionDomain_1f36bed9-97cd-43f7-8f14-c656723be987" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SaleOfStockNameOfTransactionDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_SubsidiarySaleOfStockAxis_79bc8903-ed08-4730-bc9f-ff32e2ac7971" xlink:to="loc_us-gaap_SaleOfStockNameOfTransactionDomain_1f36bed9-97cd-43f7-8f14-c656723be987" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockMember_c05ef9ec-7af9-4af8-b265-39cfb2f97bec" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_SaleOfStockNameOfTransactionDomain_1f36bed9-97cd-43f7-8f14-c656723be987" xlink:to="loc_us-gaap_EmployeeStockMember_c05ef9ec-7af9-4af8-b265-39cfb2f97bec" xlink:type="arc" order="0"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail" xlink:type="extended" id="i33d4058bc4c24be2a9f51c9367bc3fe5_StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_10ebdfa0-fff4-416f-833a-a635b7a31571" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1_f2e39f79-9e79-4c6c-8ff1-2075ad8948d0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_10ebdfa0-fff4-416f-833a-a635b7a31571" xlink:to="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1_f2e39f79-9e79-4c6c-8ff1-2075ad8948d0" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate_5ecef928-ed2f-4122-af70-192178ce1d27" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_10ebdfa0-fff4-416f-833a-a635b7a31571" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate_5ecef928-ed2f-4122-af70-192178ce1d27" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate_20c1ed73-ca61-4281-9778-5013d49286fb" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_10ebdfa0-fff4-416f-833a-a635b7a31571" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate_20c1ed73-ca61-4281-9778-5013d49286fb" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate_3e23ca96-11b9-472c-a493-7b6a3dddfbb3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_10ebdfa0-fff4-416f-833a-a635b7a31571" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate_3e23ca96-11b9-472c-a493-7b6a3dddfbb3" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_a32408bc-4396-47b3-b7ca-41cf902fface" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_10ebdfa0-fff4-416f-833a-a635b7a31571" xlink:to="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_a32408bc-4396-47b3-b7ca-41cf902fface" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SubsidiarySaleOfStockAxis_7502177e-a7d6-4af9-a279-47bd5baaad85" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SubsidiarySaleOfStockAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_a32408bc-4396-47b3-b7ca-41cf902fface" xlink:to="loc_us-gaap_SubsidiarySaleOfStockAxis_7502177e-a7d6-4af9-a279-47bd5baaad85" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SaleOfStockNameOfTransactionDomain_7502177e-a7d6-4af9-a279-47bd5baaad85_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SaleOfStockNameOfTransactionDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_SubsidiarySaleOfStockAxis_7502177e-a7d6-4af9-a279-47bd5baaad85" xlink:to="loc_us-gaap_SaleOfStockNameOfTransactionDomain_7502177e-a7d6-4af9-a279-47bd5baaad85_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SaleOfStockNameOfTransactionDomain_712848aa-559f-4c33-8dc8-16e6cd861f82" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SaleOfStockNameOfTransactionDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_SubsidiarySaleOfStockAxis_7502177e-a7d6-4af9-a279-47bd5baaad85" xlink:to="loc_us-gaap_SaleOfStockNameOfTransactionDomain_712848aa-559f-4c33-8dc8-16e6cd861f82" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockMember_b10c881a-094b-4eea-9701-25bd188dae84" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_SaleOfStockNameOfTransactionDomain_712848aa-559f-4c33-8dc8-16e6cd861f82" xlink:to="loc_us-gaap_EmployeeStockMember_b10c881a-094b-4eea-9701-25bd188dae84" xlink:type="arc" order="0"/>
  </link:definitionLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#GeographicInformationSummaryofDomesticRevenueDetail"/>
  <link:definitionLink xlink:role="http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail" xlink:type="extended" id="i9d36b993dafd44fe9db34971a7c950f6_GeographicInformationSummaryofDomesticRevenueDetail">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisaggregationOfRevenueLineItems_1b5d5276-d497-44a3-ab0d-33fded68ad8c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisaggregationOfRevenueLineItems"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskPercentage1_ee5820fe-07b1-4176-99ae-5178918142c3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskPercentage1"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_1b5d5276-d497-44a3-ab0d-33fded68ad8c" xlink:to="loc_us-gaap_ConcentrationRiskPercentage1_ee5820fe-07b1-4176-99ae-5178918142c3" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisaggregationOfRevenueTable_928023df-e210-44c1-824e-3a7e7926737b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisaggregationOfRevenueTable"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/all" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_1b5d5276-d497-44a3-ab0d-33fded68ad8c" xlink:to="loc_us-gaap_DisaggregationOfRevenueTable_928023df-e210-44c1-824e-3a7e7926737b" xlink:type="arc" order="1" xbrldt:closed="true" xbrldt:contextElement="segment"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskByBenchmarkAxis_eedb3343-ca32-44d1-af12-7a0d6f7e30fc" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskByBenchmarkAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_DisaggregationOfRevenueTable_928023df-e210-44c1-824e-3a7e7926737b" xlink:to="loc_us-gaap_ConcentrationRiskByBenchmarkAxis_eedb3343-ca32-44d1-af12-7a0d6f7e30fc" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskBenchmarkDomain_eedb3343-ca32-44d1-af12-7a0d6f7e30fc_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskBenchmarkDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_ConcentrationRiskByBenchmarkAxis_eedb3343-ca32-44d1-af12-7a0d6f7e30fc" xlink:to="loc_us-gaap_ConcentrationRiskBenchmarkDomain_eedb3343-ca32-44d1-af12-7a0d6f7e30fc_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskBenchmarkDomain_e303fe2b-f70c-42bf-8fbd-f9f168d1aa95" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskBenchmarkDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_ConcentrationRiskByBenchmarkAxis_eedb3343-ca32-44d1-af12-7a0d6f7e30fc" xlink:to="loc_us-gaap_ConcentrationRiskBenchmarkDomain_e303fe2b-f70c-42bf-8fbd-f9f168d1aa95" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SalesRevenueNetMember_953020a4-7d43-4d42-983e-5e52abc06746" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SalesRevenueNetMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ConcentrationRiskBenchmarkDomain_e303fe2b-f70c-42bf-8fbd-f9f168d1aa95" xlink:to="loc_us-gaap_SalesRevenueNetMember_953020a4-7d43-4d42-983e-5e52abc06746" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskByTypeAxis_f3c5690f-ecc6-499c-9c98-b67d170018fc" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskByTypeAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_DisaggregationOfRevenueTable_928023df-e210-44c1-824e-3a7e7926737b" xlink:to="loc_us-gaap_ConcentrationRiskByTypeAxis_f3c5690f-ecc6-499c-9c98-b67d170018fc" xlink:type="arc" order="2"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskTypeDomain_f3c5690f-ecc6-499c-9c98-b67d170018fc_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskTypeDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_ConcentrationRiskByTypeAxis_f3c5690f-ecc6-499c-9c98-b67d170018fc" xlink:to="loc_us-gaap_ConcentrationRiskTypeDomain_f3c5690f-ecc6-499c-9c98-b67d170018fc_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskTypeDomain_4d299c96-0862-4de5-9f6f-839f330959e6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskTypeDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_ConcentrationRiskByTypeAxis_f3c5690f-ecc6-499c-9c98-b67d170018fc" xlink:to="loc_us-gaap_ConcentrationRiskTypeDomain_4d299c96-0862-4de5-9f6f-839f330959e6" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicConcentrationRiskMember_8f9f6a6a-768a-4a8f-a393-d51c7059ee38" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicConcentrationRiskMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_ConcentrationRiskTypeDomain_4d299c96-0862-4de5-9f6f-839f330959e6" xlink:to="loc_us-gaap_GeographicConcentrationRiskMember_8f9f6a6a-768a-4a8f-a393-d51c7059ee38" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionAxis_8577926e-360c-4383-8a12-ab0778f435e4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionAxis"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/hypercube-dimension" xlink:from="loc_us-gaap_DisaggregationOfRevenueTable_928023df-e210-44c1-824e-3a7e7926737b" xlink:to="loc_us-gaap_GeographicDistributionAxis_8577926e-360c-4383-8a12-ab0778f435e4" xlink:type="arc" order="3"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionDomain_8577926e-360c-4383-8a12-ab0778f435e4_default" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-default" xlink:from="loc_us-gaap_GeographicDistributionAxis_8577926e-360c-4383-8a12-ab0778f435e4" xlink:to="loc_us-gaap_GeographicDistributionDomain_8577926e-360c-4383-8a12-ab0778f435e4_default" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionDomain_a1cfacbb-f04d-4394-aa5f-6eb4bd8680ca" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionDomain"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/dimension-domain" xlink:from="loc_us-gaap_GeographicDistributionAxis_8577926e-360c-4383-8a12-ab0778f435e4" xlink:to="loc_us-gaap_GeographicDistributionDomain_a1cfacbb-f04d-4394-aa5f-6eb4bd8680ca" xlink:type="arc" order="1"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionDomesticMember_63b8d919-b1cf-4dc2-a4e1-bbe17e8199f5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionDomesticMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_GeographicDistributionDomain_a1cfacbb-f04d-4394-aa5f-6eb4bd8680ca" xlink:to="loc_us-gaap_GeographicDistributionDomesticMember_63b8d919-b1cf-4dc2-a4e1-bbe17e8199f5" xlink:type="arc" order="0"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionForeignMember_8491ee28-1166-46c2-94bf-9ec374032997" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionForeignMember"/>
    <link:definitionArc xlink:arcrole="http://xbrl.org/int/dim/arcrole/domain-member" xlink:from="loc_us-gaap_GeographicDistributionDomain_a1cfacbb-f04d-4394-aa5f-6eb4bd8680ca" xlink:to="loc_us-gaap_GeographicDistributionForeignMember_8491ee28-1166-46c2-94bf-9ec374032997" xlink:type="arc" order="1"/>
  </link:definitionLink>
</link:linkbase>
</XBRL>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>EX-101.LAB
<SEQUENCE>8
<FILENAME>spsc-20230331_lab.xml
<DESCRIPTION>XBRL TAXONOMY EXTENSION LABEL LINKBASE DOCUMENT
<TEXT>
<XBRL>
<?xml version="1.0" encoding="UTF-8"?>

<!--XBRL Document Created with Wdesk from Workiva-->
<!--Copyright 2023 Workiva-->
<!--r:e8457af8-7448-488b-94ad-becdc804ffea,g:b7f35897-e981-4828-95af-9cb9c0061258-->
<link:linkbase xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xbrl.org/2003/linkbase http://www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd">
  <link:roleRef roleURI="http://www.xbrl.org/2009/role/negatedPeriodStartLabel" xlink:type="simple" xlink:href="http://www.xbrl.org/lrr/role/negated-2009-12-16.xsd#negatedPeriodStartLabel"/>
  <link:roleRef roleURI="http://www.xbrl.org/2009/role/netLabel" xlink:type="simple" xlink:href="http://www.xbrl.org/lrr/role/net-2009-12-16.xsd#netLabel"/>
  <link:roleRef roleURI="http://www.xbrl.org/2009/role/negatedNetLabel" xlink:type="simple" xlink:href="http://www.xbrl.org/lrr/role/negated-2009-12-16.xsd#negatedNetLabel"/>
  <link:roleRef roleURI="http://www.xbrl.org/2009/role/negatedTerseLabel" xlink:type="simple" xlink:href="http://www.xbrl.org/lrr/role/negated-2009-12-16.xsd#negatedTerseLabel"/>
  <link:roleRef roleURI="http://www.xbrl.org/2009/role/negatedPeriodEndLabel" xlink:type="simple" xlink:href="http://www.xbrl.org/lrr/role/negated-2009-12-16.xsd#negatedPeriodEndLabel"/>
  <link:roleRef roleURI="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="simple" xlink:href="http://www.xbrl.org/lrr/role/negated-2009-12-16.xsd#negatedLabel"/>
  <link:roleRef roleURI="http://www.xbrl.org/2009/role/negatedTotalLabel" xlink:type="simple" xlink:href="http://www.xbrl.org/lrr/role/negated-2009-12-16.xsd#negatedTotalLabel"/>
  <link:labelLink xlink:role="http://www.xbrl.org/2003/role/link" xlink:type="extended">
    <link:label id="lab_us-gaap_GeographicConcentrationRiskMember_1a178a40-5693-47c4-9ce3-4b340985cad4_terseLabel_en-US" xlink:label="lab_us-gaap_GeographicConcentrationRiskMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Geographic Concentration Risk</link:label>
    <link:label id="lab_us-gaap_GeographicConcentrationRiskMember_label_en-US" xlink:label="lab_us-gaap_GeographicConcentrationRiskMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Geographic Concentration Risk [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicConcentrationRiskMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicConcentrationRiskMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GeographicConcentrationRiskMember" xlink:to="lab_us-gaap_GeographicConcentrationRiskMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DeferredCosts_8506b42a-6b5c-4550-aace-ab2005092786_terseLabel_en-US" xlink:label="lab_us-gaap_DeferredCosts" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred costs, non-current</link:label>
    <link:label id="lab_us-gaap_DeferredCosts_label_en-US" xlink:label="lab_us-gaap_DeferredCosts" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs, Noncurrent</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCosts" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCosts"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DeferredCosts" xlink:to="lab_us-gaap_DeferredCosts" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_BusinessAcquisitionAxis_20333ee9-7aeb-4154-867a-a746614a66f6_terseLabel_en-US" xlink:label="lab_us-gaap_BusinessAcquisitionAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Acquisition</link:label>
    <link:label id="lab_us-gaap_BusinessAcquisitionAxis_label_en-US" xlink:label="lab_us-gaap_BusinessAcquisitionAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Acquisition [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessAcquisitionAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessAcquisitionAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_BusinessAcquisitionAxis" xlink:to="lab_us-gaap_BusinessAcquisitionAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_6540e1b3-0b44-4710-8c57-909ef364aeb7_terseLabel_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Increase (Decrease) in Stockholders' Equity [Roll Forward]</link:label>
    <link:label id="lab_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_label_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Increase (Decrease) in Stockholders' Equity [Roll Forward]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInStockholdersEquityRollForward"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward" xlink:to="lab_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_fdef55f8-e6d9-4fdd-8794-371dd48903f4_totalLabel_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Total future gross payments</link:label>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_label_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Lessee, Operating Lease, Liability, to be Paid</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue" xlink:to="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ProvisionForDoubtfulAccounts_3fe9ee8f-f823-4264-80b9-2cb5bb664cdc_terseLabel_en-US" xlink:label="lab_us-gaap_ProvisionForDoubtfulAccounts" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Provision for credit losses</link:label>
    <link:label id="lab_us-gaap_ProvisionForDoubtfulAccounts_label_en-US" xlink:label="lab_us-gaap_ProvisionForDoubtfulAccounts" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts Receivable, Credit Loss Expense (Reversal)</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProvisionForDoubtfulAccounts" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProvisionForDoubtfulAccounts"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ProvisionForDoubtfulAccounts" xlink:to="lab_us-gaap_ProvisionForDoubtfulAccounts" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DeferredIncomeTaxAssetsNet_f57195b0-7a5e-4041-a911-c5bb58cc147f_terseLabel_en-US" xlink:label="lab_us-gaap_DeferredIncomeTaxAssetsNet" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred income tax assets</link:label>
    <link:label id="lab_us-gaap_DeferredIncomeTaxAssetsNet_label_en-US" xlink:label="lab_us-gaap_DeferredIncomeTaxAssetsNet" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Income Tax Assets, Net</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredIncomeTaxAssetsNet" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredIncomeTaxAssetsNet"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DeferredIncomeTaxAssetsNet" xlink:to="lab_us-gaap_DeferredIncomeTaxAssetsNet" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityAddressPostalZipCode_ad580a73-3e10-4224-975a-7ee98c67212b_terseLabel_en-US" xlink:label="lab_dei_EntityAddressPostalZipCode" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Address, Postal Zip Code</link:label>
    <link:label id="lab_dei_EntityAddressPostalZipCode_label_en-US" xlink:label="lab_dei_EntityAddressPostalZipCode" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Address, Postal Zip Code</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityAddressPostalZipCode" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityAddressPostalZipCode"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityAddressPostalZipCode" xlink:to="lab_dei_EntityAddressPostalZipCode" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_EarningsPerShareBasicAndDilutedEPSAbstract_47885d70-84ad-467a-9a8e-8c7d46c5da7a_terseLabel_en-US" xlink:label="lab_spsc_EarningsPerShareBasicAndDilutedEPSAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net income per share</link:label>
    <link:label id="lab_spsc_EarningsPerShareBasicAndDilutedEPSAbstract_label_en-US" xlink:label="lab_spsc_EarningsPerShareBasicAndDilutedEPSAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Earnings Per Share, Basic And Diluted EPS [Abstract]</link:label>
    <link:label id="lab_spsc_EarningsPerShareBasicAndDilutedEPSAbstract_documentation_en-US" xlink:label="lab_spsc_EarningsPerShareBasicAndDilutedEPSAbstract" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Earnings Per Share, Basic And Diluted EPS</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_EarningsPerShareBasicAndDilutedEPSAbstract" xlink:href="spsc-20230331.xsd#spsc_EarningsPerShareBasicAndDilutedEPSAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_EarningsPerShareBasicAndDilutedEPSAbstract" xlink:to="lab_spsc_EarningsPerShareBasicAndDilutedEPSAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentAbstract_label_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property, Plant and Equipment [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentAbstract" xlink:to="lab_us-gaap_PropertyPlantAndEquipmentAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PreferredStockSharesOutstanding_19314a58-0512-4bfb-ac05-6851592117cc_terseLabel_en-US" xlink:label="lab_us-gaap_PreferredStockSharesOutstanding" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Preferred stock, shares outstanding (in shares)</link:label>
    <link:label id="lab_us-gaap_PreferredStockSharesOutstanding_label_en-US" xlink:label="lab_us-gaap_PreferredStockSharesOutstanding" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Preferred Stock, Shares Outstanding</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PreferredStockSharesOutstanding" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PreferredStockSharesOutstanding"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PreferredStockSharesOutstanding" xlink:to="lab_us-gaap_PreferredStockSharesOutstanding" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentGross_6d903f6f-d38b-4f2d-a40d-86df505ab120_terseLabel_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentGross" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property and equipment, cost</link:label>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentGross_label_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentGross" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property, Plant and Equipment, Gross</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentGross" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentGross"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentGross" xlink:to="lab_us-gaap_PropertyPlantAndEquipmentGross" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember_7f85b2ef-aff5-4833-817f-0b7896421df2_terseLabel_en-US" xlink:label="lab_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">RSAs &amp; DSUs</link:label>
    <link:label id="lab_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember_label_en-US" xlink:label="lab_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Restricted Stock Units And Deferred Stock Units [Member]</link:label>
    <link:label id="lab_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember_documentation_en-US" xlink:label="lab_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Restricted stock units and deferred stock units member.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember" xlink:href="spsc-20230331.xsd#spsc_RestrictedStockUnitsAndDeferredStockUnitsMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember" xlink:to="lab_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncomeTaxDisclosureAbstract_d25ac7b2-31c5-44ce-904a-199aaf9aaa43_terseLabel_en-US" xlink:label="lab_us-gaap_IncomeTaxDisclosureAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income Tax Disclosure [Abstract]</link:label>
    <link:label id="lab_us-gaap_IncomeTaxDisclosureAbstract_label_en-US" xlink:label="lab_us-gaap_IncomeTaxDisclosureAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income Tax Disclosure [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeTaxDisclosureAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeTaxDisclosureAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncomeTaxDisclosureAbstract" xlink:to="lab_us-gaap_IncomeTaxDisclosureAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock_cfd17ecb-f011-4616-bd66-1a799fd3b121_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Summary of Cash Equivalents and Investments</link:label>
    <link:label id="lab_us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash, Cash Equivalents and Investments [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock" xlink:to="lab_us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherIncomeAndExpensesAbstract_152cf49a-b6df-45b0-b0e3-9d44330dcf23_terseLabel_en-US" xlink:label="lab_us-gaap_OtherIncomeAndExpensesAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Income and Expenses [Abstract]</link:label>
    <link:label id="lab_us-gaap_OtherIncomeAndExpensesAbstract_label_en-US" xlink:label="lab_us-gaap_OtherIncomeAndExpensesAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Income and Expenses [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherIncomeAndExpensesAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherIncomeAndExpensesAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherIncomeAndExpensesAbstract" xlink:to="lab_us-gaap_OtherIncomeAndExpensesAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_GCommerceIncMember_87f1fd7c-a557-44d3-8807-9c8c379b1a55_terseLabel_en-US" xlink:label="lab_spsc_GCommerceIncMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">GCommerce Inc</link:label>
    <link:label id="lab_spsc_GCommerceIncMember_label_en-US" xlink:label="lab_spsc_GCommerceIncMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">GCommerce Inc [Member]</link:label>
    <link:label id="lab_spsc_GCommerceIncMember_documentation_en-US" xlink:label="lab_spsc_GCommerceIncMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">GCommerce Inc</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_GCommerceIncMember" xlink:href="spsc-20230331.xsd#spsc_GCommerceIncMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_GCommerceIncMember" xlink:to="lab_spsc_GCommerceIncMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock_898d03fc-515a-443b-acc7-b22cd313a7a8_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Summary of Other Income (Expense), Net</link:label>
    <link:label id="lab_us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Other Nonoperating Income (Expense) [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock" xlink:to="lab_us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_c8de5433-8dd9-48a4-ae13-06ea9debb051_terseLabel_en-US" xlink:label="lab_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Financial Instruments [Domain]</link:label>
    <link:label id="lab_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_label_en-US" xlink:label="lab_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Financial Instruments [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain" xlink:to="lab_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_srt_RangeMember_3c4a10f4-2eda-45b1-a45c-4d4a53e8891a_terseLabel_en-US" xlink:label="lab_srt_RangeMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statistical Measurement</link:label>
    <link:label id="lab_srt_RangeMember_label_en-US" xlink:label="lab_srt_RangeMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statistical Measurement [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeMember" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_srt_RangeMember" xlink:to="lab_srt_RangeMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised_df059baf-6968-49fa-88e1-3c9e6efc172b_negatedLabel_en-US" xlink:label="lab_us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Exercised (in shares)</link:label>
    <link:label id="lab_us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised_label_en-US" xlink:label="lab_us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Exercises in Period</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised" xlink:to="lab_us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod_01e6c6df-3e1e-4c59-a9bf-668d4ac58e27_terseLabel_en-US" xlink:label="lab_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Latest timing of billings</link:label>
    <link:label id="lab_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod_label_en-US" xlink:label="lab_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Recurring Revenues Timing Of Billings Latest Period</link:label>
    <link:label id="lab_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod_documentation_en-US" xlink:label="lab_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Recurring revenues timing of billings latest period.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod" xlink:href="spsc-20230331.xsd#spsc_RecurringRevenuesTimingOfBillingsLatestPeriod"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod" xlink:to="lab_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract_81abcb20-a015-47a1-b386-8a5280aa327b_terseLabel_en-US" xlink:label="lab_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash paid for amounts included in the measurement of lease liabilities</link:label>
    <link:label id="lab_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract_label_en-US" xlink:label="lab_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash Paid For Amounts Included In Measurement Of Lease Liabilities [Abstract]</link:label>
    <link:label id="lab_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract_documentation_en-US" xlink:label="lab_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash paid for amounts included in the measurement of lease liabilities.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract" xlink:href="spsc-20230331.xsd#spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract" xlink:to="lab_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent_6462d8f9-cc0f-4545-b57b-d90a7b025dcc_terseLabel_en-US" xlink:label="lab_us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted-average discount rate</link:label>
    <link:label id="lab_us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent_label_en-US" xlink:label="lab_us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating Lease, Weighted Average Discount Rate, Percent</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent" xlink:to="lab_us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_3bf37cb4-ca1e-4248-a2c2-c987f5e5d6d6_terseLabel_en-US" xlink:label="lab_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-based Payment Arrangement [Abstract]</link:label>
    <link:label id="lab_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_label_en-US" xlink:label="lab_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Payment Arrangement [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract" xlink:to="lab_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AdditionalPaidInCapitalCommonStock_a487a834-6b33-4dae-aa35-f17cc4476a96_terseLabel_en-US" xlink:label="lab_us-gaap_AdditionalPaidInCapitalCommonStock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Additional paid-in capital</link:label>
    <link:label id="lab_us-gaap_AdditionalPaidInCapitalCommonStock_label_en-US" xlink:label="lab_us-gaap_AdditionalPaidInCapitalCommonStock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Additional Paid in Capital, Common Stock</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AdditionalPaidInCapitalCommonStock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AdditionalPaidInCapitalCommonStock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AdditionalPaidInCapitalCommonStock" xlink:to="lab_us-gaap_AdditionalPaidInCapitalCommonStock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherNoncashIncomeExpense_697592bd-330c-41b6-bb15-a94ffc35b948_negatedLabel_en-US" xlink:label="lab_us-gaap_OtherNoncashIncomeExpense" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other, net</link:label>
    <link:label id="lab_us-gaap_OtherNoncashIncomeExpense_label_en-US" xlink:label="lab_us-gaap_OtherNoncashIncomeExpense" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Noncash Income (Expense)</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherNoncashIncomeExpense" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherNoncashIncomeExpense"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherNoncashIncomeExpense" xlink:to="lab_us-gaap_OtherNoncashIncomeExpense" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_ddbbaa05-28e7-4a51-89d1-182da35cb6f9_terseLabel_en-US" xlink:label="lab_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Effect of foreign currency exchange rate changes</link:label>
    <link:label id="lab_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_label_en-US" xlink:label="lab_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Effect of Exchange Rate on Cash, Cash Equivalents, Restricted Cash, and Restricted Cash Equivalents, Including Disposal Group and Discontinued Operations</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" xlink:to="lab_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_TreasuryStockValueAcquiredCostMethod_f91e0ba0-2b43-4667-9c61-30bb8b2af055_negatedLabel_en-US" xlink:label="lab_us-gaap_TreasuryStockValueAcquiredCostMethod" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Repurchases of common stock</link:label>
    <link:label id="lab_us-gaap_TreasuryStockValueAcquiredCostMethod_b6e8dbd4-4f6f-49bd-843e-91db9b2b2767_verboseLabel_en-US" xlink:label="lab_us-gaap_TreasuryStockValueAcquiredCostMethod" xlink:role="http://www.xbrl.org/2003/role/verboseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Shares repurchased cost</link:label>
    <link:label id="lab_us-gaap_TreasuryStockValueAcquiredCostMethod_label_en-US" xlink:label="lab_us-gaap_TreasuryStockValueAcquiredCostMethod" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Treasury Stock, Value, Acquired, Cost Method</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockValueAcquiredCostMethod" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockValueAcquiredCostMethod"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_TreasuryStockValueAcquiredCostMethod" xlink:to="lab_us-gaap_TreasuryStockValueAcquiredCostMethod" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_NetIncomeLoss_50356af0-c65e-48cf-8e5e-909b3e7252af_totalLabel_en-US" xlink:label="lab_us-gaap_NetIncomeLoss" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net income</link:label>
    <link:label id="lab_us-gaap_NetIncomeLoss_eb87606c-3fd3-405c-83ee-876babd81add_terseLabel_en-US" xlink:label="lab_us-gaap_NetIncomeLoss" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net income</link:label>
    <link:label id="lab_us-gaap_NetIncomeLoss_2d247637-a2e1-4dc6-8725-cc2020206fbf_verboseLabel_en-US" xlink:label="lab_us-gaap_NetIncomeLoss" xlink:role="http://www.xbrl.org/2003/role/verboseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net income</link:label>
    <link:label id="lab_us-gaap_NetIncomeLoss_label_en-US" xlink:label="lab_us-gaap_NetIncomeLoss" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net Income (Loss) Attributable to Parent</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetIncomeLoss" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetIncomeLoss"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_NetIncomeLoss" xlink:to="lab_us-gaap_NetIncomeLoss" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate_3e20967b-1c2c-4bdb-a4d7-3bc333c206a7_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Volatility</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Fair Value Assumptions, Weighted Average Volatility Rate</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock_679de87d-a293-4f04-bce0-6e66c2897aa8_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Fair Value Estimation of Common Stock Using Black-Scholes Option Pricing Model, Assumptions</link:label>
    <link:label id="lab_us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Share-Based Payment Award, Employee Stock Purchase Plan, Valuation Assumptions [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock" xlink:to="lab_us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount_5d75b3ef-47c9-4529-80c7-6c7c8ae08fa2_terseLabel_en-US" xlink:label="lab_us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Antidilutive shares (in shares)</link:label>
    <link:label id="lab_us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount_label_en-US" xlink:label="lab_us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Antidilutive Securities Excluded from Computation of Earnings Per Share, Amount</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount" xlink:to="lab_us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_0c676108-ef50-410a-98c4-09c80b1c94ac_negatedLabel_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Reclassification of (gain) loss on investments into earnings, net of tax of ($125) and $4, respectively</link:label>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_27b8aad8-7774-4e99-95dc-01699800c59a_negatedTerseLabel_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax" xlink:role="http://www.xbrl.org/2009/role/negatedTerseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Reclassification of (gain) loss on investments into earnings, net of tax</link:label>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_label_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Comprehensive Income (Loss), Reclassification Adjustment from AOCI for Sale of Securities, Net of Tax</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax" xlink:to="lab_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareRepurchaseProgramDomain_fe1531f2-a018-4f69-afab-f55db749d39c_terseLabel_en-US" xlink:label="lab_us-gaap_ShareRepurchaseProgramDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share Repurchase Program</link:label>
    <link:label id="lab_us-gaap_ShareRepurchaseProgramDomain_label_en-US" xlink:label="lab_us-gaap_ShareRepurchaseProgramDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share Repurchase Program [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareRepurchaseProgramDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareRepurchaseProgramDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareRepurchaseProgramDomain" xlink:to="lab_us-gaap_ShareRepurchaseProgramDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AccountsReceivableGrossCurrent_160417dd-70b9-4d2a-86d1-01dc33aa3ab8_terseLabel_en-US" xlink:label="lab_us-gaap_AccountsReceivableGrossCurrent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts receivable</link:label>
    <link:label id="lab_us-gaap_AccountsReceivableGrossCurrent_label_en-US" xlink:label="lab_us-gaap_AccountsReceivableGrossCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts Receivable, before Allowance for Credit Loss, Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccountsReceivableGrossCurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccountsReceivableGrossCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AccountsReceivableGrossCurrent" xlink:to="lab_us-gaap_AccountsReceivableGrossCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EquityComponentDomain_c97c3c08-b6bd-4063-810b-596ec95ca5f6_terseLabel_en-US" xlink:label="lab_us-gaap_EquityComponentDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Equity Component</link:label>
    <link:label id="lab_us-gaap_EquityComponentDomain_label_en-US" xlink:label="lab_us-gaap_EquityComponentDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Equity Component [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EquityComponentDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EquityComponentDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EquityComponentDomain" xlink:to="lab_us-gaap_EquityComponentDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_TreasuryStockCommonValue_f5a4ca52-02b4-47e5-b684-db9238bfa9d9_negatedLabel_en-US" xlink:label="lab_us-gaap_TreasuryStockCommonValue" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Treasury Stock, at cost; 2,151,098 shares</link:label>
    <link:label id="lab_us-gaap_TreasuryStockCommonValue_025eef62-c5d0-4810-9475-36b9a0f251d8_terseLabel_en-US" xlink:label="lab_us-gaap_TreasuryStockCommonValue" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share Value Repurchased</link:label>
    <link:label id="lab_us-gaap_TreasuryStockCommonValue_label_en-US" xlink:label="lab_us-gaap_TreasuryStockCommonValue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Treasury Stock, Common, Value</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockCommonValue" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockCommonValue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_TreasuryStockCommonValue" xlink:to="lab_us-gaap_TreasuryStockCommonValue" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AvailableForSaleSecuritiesDebtSecurities_a5aab80d-2ff7-4a2b-a4df-80436d35e814_terseLabel_en-US" xlink:label="lab_us-gaap_AvailableForSaleSecuritiesDebtSecurities" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Fair Value</link:label>
    <link:label id="lab_us-gaap_AvailableForSaleSecuritiesDebtSecurities_label_en-US" xlink:label="lab_us-gaap_AvailableForSaleSecuritiesDebtSecurities" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Debt Securities, Available-for-Sale</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AvailableForSaleSecuritiesDebtSecurities" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AvailableForSaleSecuritiesDebtSecurities"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AvailableForSaleSecuritiesDebtSecurities" xlink:to="lab_us-gaap_AvailableForSaleSecuritiesDebtSecurities" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice_9eb995cb-9f98-4e1d-a934-21819c650af5_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Forfeited (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangements by Share-Based Payment Award, Options, Forfeitures in Period, Weighted Average Exercise Price</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_DeferredCostsAmortized_3c53acb3-e504-4ca4-88f6-3d1005049aa8_terseLabel_en-US" xlink:label="lab_spsc_DeferredCostsAmortized" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Amortized deferred costs</link:label>
    <link:label id="lab_spsc_DeferredCostsAmortized_label_en-US" xlink:label="lab_spsc_DeferredCostsAmortized" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs Amortized</link:label>
    <link:label id="lab_spsc_DeferredCostsAmortized_documentation_en-US" xlink:label="lab_spsc_DeferredCostsAmortized" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred costs amortized.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredCostsAmortized" xlink:href="spsc-20230331.xsd#spsc_DeferredCostsAmortized"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_DeferredCostsAmortized" xlink:to="lab_spsc_DeferredCostsAmortized" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear_1f11042b-fd25-48cb-a3da-350fcb693052_terseLabel_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Remainder of 2023</link:label>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear_label_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Lessee, Operating Lease, Liability, to be Paid, Remainder of Fiscal Year</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear" xlink:to="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_SetUpFeesMember_cb61aaf5-7339-4a1b-828c-694423bd7c90_terseLabel_en-US" xlink:label="lab_spsc_SetUpFeesMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Set-Up Fees</link:label>
    <link:label id="lab_spsc_SetUpFeesMember_label_en-US" xlink:label="lab_spsc_SetUpFeesMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Set Up Fees [Member]</link:label>
    <link:label id="lab_spsc_SetUpFeesMember_documentation_en-US" xlink:label="lab_spsc_SetUpFeesMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Set up fees.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_SetUpFeesMember" xlink:href="spsc-20230331.xsd#spsc_SetUpFeesMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_SetUpFeesMember" xlink:to="lab_spsc_SetUpFeesMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StatementOfCashFlowsAbstract_ec50bdd9-4887-4c44-9144-0a41b3a88287_terseLabel_en-US" xlink:label="lab_us-gaap_StatementOfCashFlowsAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statement of Cash Flows [Abstract]</link:label>
    <link:label id="lab_us-gaap_StatementOfCashFlowsAbstract_label_en-US" xlink:label="lab_us-gaap_StatementOfCashFlowsAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statement of Cash Flows [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementOfCashFlowsAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementOfCashFlowsAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StatementOfCashFlowsAbstract" xlink:to="lab_us-gaap_StatementOfCashFlowsAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityAddressStateOrProvince_675a3a21-2f82-4c56-8dc5-7485d79dadf2_terseLabel_en-US" xlink:label="lab_dei_EntityAddressStateOrProvince" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Address, State or Province</link:label>
    <link:label id="lab_dei_EntityAddressStateOrProvince_label_en-US" xlink:label="lab_dei_EntityAddressStateOrProvince" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Address, State or Province</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityAddressStateOrProvince" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityAddressStateOrProvince"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityAddressStateOrProvince" xlink:to="lab_dei_EntityAddressStateOrProvince" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EmployeeStockMember_0aa80305-b0fd-42a7-9715-b22d5a9495c8_terseLabel_en-US" xlink:label="lab_us-gaap_EmployeeStockMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Employee Stock Purchase Plan</link:label>
    <link:label id="lab_us-gaap_EmployeeStockMember_label_en-US" xlink:label="lab_us-gaap_EmployeeStockMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Employee Stock [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EmployeeStockMember" xlink:to="lab_us-gaap_EmployeeStockMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2_5f29de4a-4a64-47e6-8f05-b36ec601daa4_terseLabel_en-US" xlink:label="lab_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted average remaining contractual life</link:label>
    <link:label id="lab_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2_label_en-US" xlink:label="lab_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding, Weighted Average Remaining Contractual Term</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2" xlink:to="lab_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DeferredRevenueArrangementByTypeTable_9af49010-8ee8-417c-af3f-b4f8cef4e14c_terseLabel_en-US" xlink:label="lab_us-gaap_DeferredRevenueArrangementByTypeTable" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Revenue Arrangement By Type [Table]</link:label>
    <link:label id="lab_us-gaap_DeferredRevenueArrangementByTypeTable_label_en-US" xlink:label="lab_us-gaap_DeferredRevenueArrangementByTypeTable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Revenue Arrangement, by Type [Table]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredRevenueArrangementByTypeTable" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredRevenueArrangementByTypeTable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DeferredRevenueArrangementByTypeTable" xlink:to="lab_us-gaap_DeferredRevenueArrangementByTypeTable" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AwardTypeAxis_65bda025-bbc5-42dc-a09c-255e5cf46f58_terseLabel_en-US" xlink:label="lab_us-gaap_AwardTypeAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Award Type</link:label>
    <link:label id="lab_us-gaap_AwardTypeAxis_label_en-US" xlink:label="lab_us-gaap_AwardTypeAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Award Type [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AwardTypeAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AwardTypeAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AwardTypeAxis" xlink:to="lab_us-gaap_AwardTypeAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue_d7626a4f-0c24-46ad-9e73-f68c869f43aa_terseLabel_en-US" xlink:label="lab_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Unused &amp; Expired Share Repurchase Value</link:label>
    <link:label id="lab_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue_label_en-US" xlink:label="lab_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Treasury Stock, Unused and Expired Repurchase Value</link:label>
    <link:label id="lab_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue_documentation_en-US" xlink:label="lab_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Treasury Stock, Unused and Expired Repurchase Value</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue" xlink:href="spsc-20230331.xsd#spsc_TreasuryStockUnusedAndExpiredRepurchaseValue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue" xlink:to="lab_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_NetCashProvidedByUsedInOperatingActivities_8ba64030-cea8-4dda-9b64-583955233d9b_totalLabel_en-US" xlink:label="lab_us-gaap_NetCashProvidedByUsedInOperatingActivities" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net cash provided by operating activities</link:label>
    <link:label id="lab_us-gaap_NetCashProvidedByUsedInOperatingActivities_label_en-US" xlink:label="lab_us-gaap_NetCashProvidedByUsedInOperatingActivities" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net Cash Provided by (Used in) Operating Activities</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInOperatingActivities"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities" xlink:to="lab_us-gaap_NetCashProvidedByUsedInOperatingActivities" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OperatingLeaseLiabilityCurrent_fafdfee7-fa44-4efa-99a2-face2d97a13d_terseLabel_en-US" xlink:label="lab_us-gaap_OperatingLeaseLiabilityCurrent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating lease liabilities</link:label>
    <link:label id="lab_us-gaap_OperatingLeaseLiabilityCurrent_label_en-US" xlink:label="lab_us-gaap_OperatingLeaseLiabilityCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating Lease, Liability, Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseLiabilityCurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseLiabilityCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OperatingLeaseLiabilityCurrent" xlink:to="lab_us-gaap_OperatingLeaseLiabilityCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable_b281d41a-9be7-49e4-8a68-32b2f1852fd7_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule Of Employee Service Share Based Compensation Allocation Of Recognized Period Costs [Table]</link:label>
    <link:label id="lab_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable_label_en-US" xlink:label="lab_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Payment Arrangement, Expensed and Capitalized, Amount [Table]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable" xlink:to="lab_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock_40092668-2795-459c-ab0d-89efb0ad66da_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">PSU, RSU, RSA, and DSU</link:label>
    <link:label id="lab_us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Payment Arrangement, Restricted Stock and Restricted Stock Unit, Activity [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock" xlink:to="lab_us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_ScheduleOfStockholdersEquityTable_7973aca1-9b3f-4991-911e-3044b28aeb01_terseLabel_en-US" xlink:label="lab_spsc_ScheduleOfStockholdersEquityTable" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule Of Stockholders Equity [Table]</link:label>
    <link:label id="lab_spsc_ScheduleOfStockholdersEquityTable_label_en-US" xlink:label="lab_spsc_ScheduleOfStockholdersEquityTable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule Of Stockholders Equity [Table]</link:label>
    <link:label id="lab_spsc_ScheduleOfStockholdersEquityTable_documentation_en-US" xlink:label="lab_spsc_ScheduleOfStockholdersEquityTable" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of stockholders equity.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ScheduleOfStockholdersEquityTable" xlink:href="spsc-20230331.xsd#spsc_ScheduleOfStockholdersEquityTable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_ScheduleOfStockholdersEquityTable" xlink:to="lab_spsc_ScheduleOfStockholdersEquityTable" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod_921374e9-1d88-4944-8a89-ad8fa0e45b10_negatedLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Forfeited (in shares)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Forfeitures in Period</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CertificatesOfDepositMember_d6d333f4-c323-4a15-b719-7dea9ea73e05_terseLabel_en-US" xlink:label="lab_us-gaap_CertificatesOfDepositMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Investments:</link:label>
    <link:label id="lab_us-gaap_CertificatesOfDepositMember_label_en-US" xlink:label="lab_us-gaap_CertificatesOfDepositMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Certificates of Deposit [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CertificatesOfDepositMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CertificatesOfDepositMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CertificatesOfDepositMember" xlink:to="lab_us-gaap_CertificatesOfDepositMember" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_BusinessCombinationMeasurementPeriod_935c6d0c-6a69-45f1-8e01-75bbbc4fa589_terseLabel_en-US" xlink:label="lab_spsc_BusinessCombinationMeasurementPeriod" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Measurement period</link:label>
    <link:label id="lab_spsc_BusinessCombinationMeasurementPeriod_label_en-US" xlink:label="lab_spsc_BusinessCombinationMeasurementPeriod" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Combination, Measurement Period</link:label>
    <link:label id="lab_spsc_BusinessCombinationMeasurementPeriod_documentation_en-US" xlink:label="lab_spsc_BusinessCombinationMeasurementPeriod" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Combination, Measurement Period</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_BusinessCombinationMeasurementPeriod" xlink:href="spsc-20230331.xsd#spsc_BusinessCombinationMeasurementPeriod"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_BusinessCombinationMeasurementPeriod" xlink:to="lab_spsc_BusinessCombinationMeasurementPeriod" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_Liabilities_06279773-dd0e-4278-8628-8f3dc67ebee2_totalLabel_en-US" xlink:label="lab_us-gaap_Liabilities" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Total liabilities</link:label>
    <link:label id="lab_us-gaap_Liabilities_label_en-US" xlink:label="lab_us-gaap_Liabilities" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Liabilities</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_Liabilities" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_Liabilities"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_Liabilities" xlink:to="lab_us-gaap_Liabilities" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock_15bfc841-17aa-4551-bd5f-9ef1963974eb_terseLabel_en-US" xlink:label="lab_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Significant Accounting Policies</link:label>
    <link:label id="lab_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock_label_en-US" xlink:label="lab_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Significant Accounting Policies Policy [Policy Text Block]</link:label>
    <link:label id="lab_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock_documentation_en-US" xlink:label="lab_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Significant accounting policies.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock" xlink:href="spsc-20230331.xsd#spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock" xlink:to="lab_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1_989cbfd4-0e46-4fa6-a7e8-b4678d7e4a6b_terseLabel_en-US" xlink:label="lab_us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted-average remaining lease term</link:label>
    <link:label id="lab_us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1_label_en-US" xlink:label="lab_us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating Lease, Weighted Average Remaining Lease Term</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1" xlink:to="lab_us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_0411da10-6dc9-4d28-9fdd-c24740c8d156_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-based Compensation Arrangement by Share-based Payment Award [Line Items]</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award [Line Items]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_GoodwillPurchaseAccountingAdjustments_bf1ddeec-9e2e-4014-8ca1-f6a66cd172d2_terseLabel_en-US" xlink:label="lab_us-gaap_GoodwillPurchaseAccountingAdjustments" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Remeasurement from provisional purchase accounting amount</link:label>
    <link:label id="lab_us-gaap_GoodwillPurchaseAccountingAdjustments_label_en-US" xlink:label="lab_us-gaap_GoodwillPurchaseAccountingAdjustments" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Goodwill, Purchase Accounting Adjustments</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillPurchaseAccountingAdjustments" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillPurchaseAccountingAdjustments"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GoodwillPurchaseAccountingAdjustments" xlink:to="lab_us-gaap_GoodwillPurchaseAccountingAdjustments" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract_ccbbc1fc-9867-423a-93e3-a1a249669865_terseLabel_en-US" xlink:label="lab_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash flows from investing activities</link:label>
    <link:label id="lab_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract_label_en-US" xlink:label="lab_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net Cash Provided by (Used in) Investing Activities [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract" xlink:to="lab_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_DeferredRevenueAmortizedSetUpFees_046d47f4-1553-41ef-876d-81b5ad1566f9_negatedLabel_en-US" xlink:label="lab_spsc_DeferredRevenueAmortizedSetUpFees" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Recognized set-up fees</link:label>
    <link:label id="lab_spsc_DeferredRevenueAmortizedSetUpFees_label_en-US" xlink:label="lab_spsc_DeferredRevenueAmortizedSetUpFees" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Revenue Amortized Set Up Fees</link:label>
    <link:label id="lab_spsc_DeferredRevenueAmortizedSetUpFees_documentation_en-US" xlink:label="lab_spsc_DeferredRevenueAmortizedSetUpFees" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred revenue amortized set up fees.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredRevenueAmortizedSetUpFees" xlink:href="spsc-20230331.xsd#spsc_DeferredRevenueAmortizedSetUpFees"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_DeferredRevenueAmortizedSetUpFees" xlink:to="lab_spsc_DeferredRevenueAmortizedSetUpFees" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_TechnologyBasedIntangibleAssetsMember_946a8069-6bbe-4ca4-ac27-67f871ccde60_terseLabel_en-US" xlink:label="lab_us-gaap_TechnologyBasedIntangibleAssetsMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Acquired technology</link:label>
    <link:label id="lab_us-gaap_TechnologyBasedIntangibleAssetsMember_label_en-US" xlink:label="lab_us-gaap_TechnologyBasedIntangibleAssetsMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Technology-Based Intangible Assets [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TechnologyBasedIntangibleAssetsMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TechnologyBasedIntangibleAssetsMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_TechnologyBasedIntangibleAssetsMember" xlink:to="lab_us-gaap_TechnologyBasedIntangibleAssetsMember" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd_85382017-2b72-4cd1-a4f8-cc23600da4ca_terseLabel_en-US" xlink:label="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Vested at period end (in shares)</link:label>
    <link:label id="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd_label_en-US" xlink:label="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement By Share-Based Payment Award, Equity Instruments Other Than Options, Vested At Period End</link:label>
    <link:label id="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd_documentation_en-US" xlink:label="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement By Share-Based Payment Award, Equity Instruments Other Than Options, Vested At Period End</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd" xlink:href="spsc-20230331.xsd#spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd" xlink:to="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityCommonStockSharesOutstanding_c9a8fd9e-279a-4ce3-a861-0e9f40fd3463_terseLabel_en-US" xlink:label="lab_dei_EntityCommonStockSharesOutstanding" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Common Stock, Shares Outstanding</link:label>
    <link:label id="lab_dei_EntityCommonStockSharesOutstanding_label_en-US" xlink:label="lab_dei_EntityCommonStockSharesOutstanding" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Common Stock, Shares Outstanding</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityCommonStockSharesOutstanding" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityCommonStockSharesOutstanding"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityCommonStockSharesOutstanding" xlink:to="lab_dei_EntityCommonStockSharesOutstanding" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentTextBlock_acace09f-fd20-48f0-a434-cc2da7d38e0c_terseLabel_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property, Plant and Equipment</link:label>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentTextBlock_label_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property, Plant and Equipment [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentTextBlock" xlink:to="lab_us-gaap_PropertyPlantAndEquipmentTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PreferredStockSharesIssued_1d57934e-c959-4344-bb51-bbb591a2a372_terseLabel_en-US" xlink:label="lab_us-gaap_PreferredStockSharesIssued" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Preferred stock, shares issued (in shares)</link:label>
    <link:label id="lab_us-gaap_PreferredStockSharesIssued_label_en-US" xlink:label="lab_us-gaap_PreferredStockSharesIssued" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Preferred Stock, Shares Issued</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PreferredStockSharesIssued" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PreferredStockSharesIssued"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PreferredStockSharesIssued" xlink:to="lab_us-gaap_PreferredStockSharesIssued" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_DocumentType_084dfcb8-2244-46bb-b90c-3e0a4c351abf_verboseLabel_en-US" xlink:label="lab_dei_DocumentType" xlink:role="http://www.xbrl.org/2003/role/verboseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Document Type</link:label>
    <link:label id="lab_dei_DocumentType_label_en-US" xlink:label="lab_dei_DocumentType" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Document Type</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_DocumentType" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_DocumentType"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_DocumentType" xlink:to="lab_dei_DocumentType" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward_3dbe7b9b-d3a6-40fc-b945-803addf6597a_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding, Weighted Average Exercise Price [Abstract]</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding, Weighted Average Exercise Price [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ConcentrationRiskBenchmarkDomain_6b1966ae-cc2b-47b1-b34b-05d18929cbc1_terseLabel_en-US" xlink:label="lab_us-gaap_ConcentrationRiskBenchmarkDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Concentration Risk Benchmark</link:label>
    <link:label id="lab_us-gaap_ConcentrationRiskBenchmarkDomain_label_en-US" xlink:label="lab_us-gaap_ConcentrationRiskBenchmarkDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Concentration Risk Benchmark [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskBenchmarkDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskBenchmarkDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ConcentrationRiskBenchmarkDomain" xlink:to="lab_us-gaap_ConcentrationRiskBenchmarkDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_f5f505b4-764c-40fb-8de7-600058fc9b1a_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">#</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Nonvested, Number of Shares [Roll Forward]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain_7444c9b8-dbc7-438f-abe6-54401e3defdc_terseLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite Lived Intangible Assets, Major Class Name [Domain]</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain_label_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Assets, Major Class Name [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain" xlink:to="lab_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue_fbe33f93-a229-4fd3-93c3-57439a3189cf_periodStartLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue" xlink:role="http://www.xbrl.org/2003/role/periodStartLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Outstanding, beginning of period (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue_7c0b8a05-5352-4ba9-9ed3-c4b0591dcc72_periodEndLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue" xlink:role="http://www.xbrl.org/2003/role/periodEndLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Outstanding, end of period (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Nonvested, Weighted Average Grant Date Fair Value</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock_e195a48b-87fc-4e0f-9dc1-9d5839a9d3a6_terseLabel_en-US" xlink:label="lab_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Supplemental Balance Sheet Information Related to Leases</link:label>
    <link:label id="lab_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock_label_en-US" xlink:label="lab_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule Of Supplemental Balance Sheet Information Related To Leases Table [Table Text Block]</link:label>
    <link:label id="lab_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock_documentation_en-US" xlink:label="lab_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of supplemental balance sheet information related to leases.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock" xlink:href="spsc-20230331.xsd#spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock" xlink:to="lab_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_srt_ProductsAndServicesDomain_5c54d7d0-2bc4-4db9-b461-6f52e9904bc8_terseLabel_en-US" xlink:label="lab_srt_ProductsAndServicesDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Product and Service</link:label>
    <link:label id="lab_srt_ProductsAndServicesDomain_label_en-US" xlink:label="lab_srt_ProductsAndServicesDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Product and Service [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_srt_ProductsAndServicesDomain" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_ProductsAndServicesDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_srt_ProductsAndServicesDomain" xlink:to="lab_srt_ProductsAndServicesDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityShellCompany_05980e4e-ae47-49d4-a575-74d5e7605245_terseLabel_en-US" xlink:label="lab_dei_EntityShellCompany" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Shell Company</link:label>
    <link:label id="lab_dei_EntityShellCompany_label_en-US" xlink:label="lab_dei_EntityShellCompany" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Shell Company</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityShellCompany" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityShellCompany"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityShellCompany" xlink:to="lab_dei_EntityShellCompany" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DeferredIncomeTaxExpenseBenefit_c58158e1-1785-4f4d-8379-a6d74c9ef228_terseLabel_en-US" xlink:label="lab_us-gaap_DeferredIncomeTaxExpenseBenefit" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred income taxes</link:label>
    <link:label id="lab_us-gaap_DeferredIncomeTaxExpenseBenefit_label_en-US" xlink:label="lab_us-gaap_DeferredIncomeTaxExpenseBenefit" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Income Tax Expense (Benefit)</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredIncomeTaxExpenseBenefit" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredIncomeTaxExpenseBenefit"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DeferredIncomeTaxExpenseBenefit" xlink:to="lab_us-gaap_DeferredIncomeTaxExpenseBenefit" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncreaseDecreaseInAccruedLiabilities_cc0687ee-7732-4356-b73b-a850e1926d82_terseLabel_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInAccruedLiabilities" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accrued expenses</link:label>
    <link:label id="lab_us-gaap_IncreaseDecreaseInAccruedLiabilities_label_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInAccruedLiabilities" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Increase (Decrease) in Accrued Liabilities</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInAccruedLiabilities" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInAccruedLiabilities"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncreaseDecreaseInAccruedLiabilities" xlink:to="lab_us-gaap_IncreaseDecreaseInAccruedLiabilities" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths_7f4151af-e7e6-4c6d-ba09-eba3d4b80303_terseLabel_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2024</link:label>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths_label_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Lessee, Operating Lease, Liability, to be Paid, Year One</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths" xlink:to="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FinancialInstrumentAxis_28d0e81b-ebb5-485d-8b6a-4702913fda2b_terseLabel_en-US" xlink:label="lab_us-gaap_FinancialInstrumentAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Financial Instrument [Axis]</link:label>
    <link:label id="lab_us-gaap_FinancialInstrumentAxis_label_en-US" xlink:label="lab_us-gaap_FinancialInstrumentAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Financial Instrument [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FinancialInstrumentAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FinancialInstrumentAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FinancialInstrumentAxis" xlink:to="lab_us-gaap_FinancialInstrumentAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FinancialInstrumentsDisclosureTextBlock_320c947d-0d6c-4463-9af1-b4afbc81a511_terseLabel_en-US" xlink:label="lab_us-gaap_FinancialInstrumentsDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Fair Value Measurements</link:label>
    <link:label id="lab_us-gaap_FinancialInstrumentsDisclosureTextBlock_label_en-US" xlink:label="lab_us-gaap_FinancialInstrumentsDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Financial Instruments Disclosure [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FinancialInstrumentsDisclosureTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FinancialInstrumentsDisclosureTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FinancialInstrumentsDisclosureTextBlock" xlink:to="lab_us-gaap_FinancialInstrumentsDisclosureTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_SalesRevenueNetMember_b8a641ee-920b-40c2-98c9-b0d8236ccc08_terseLabel_en-US" xlink:label="lab_us-gaap_SalesRevenueNetMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue Benchmark</link:label>
    <link:label id="lab_us-gaap_SalesRevenueNetMember_label_en-US" xlink:label="lab_us-gaap_SalesRevenueNetMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue Benchmark [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SalesRevenueNetMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SalesRevenueNetMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_SalesRevenueNetMember" xlink:to="lab_us-gaap_SalesRevenueNetMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock_fc2b8f33-958e-4f2d-854c-cb3f67b2c778_terseLabel_en-US" xlink:label="lab_us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Summary of Deferred Revenue Liability Relating to Set-Up Fees</link:label>
    <link:label id="lab_us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock_label_en-US" xlink:label="lab_us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Contract with Customer, Contract Asset, Contract Liability, and Receivable [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock" xlink:to="lab_us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_DocumentPeriodEndDate_326f108e-fe94-4c86-be25-89ab14c9630a_terseLabel_en-US" xlink:label="lab_dei_DocumentPeriodEndDate" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Document Period End Date</link:label>
    <link:label id="lab_dei_DocumentPeriodEndDate_label_en-US" xlink:label="lab_dei_DocumentPeriodEndDate" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Document Period End Date</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_DocumentPeriodEndDate" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_DocumentPeriodEndDate"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_DocumentPeriodEndDate" xlink:to="lab_dei_DocumentPeriodEndDate" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DebtSecuritiesAvailableForSaleTable_20a584a9-8f92-4e1f-bc49-c3c40d46075f_terseLabel_en-US" xlink:label="lab_us-gaap_DebtSecuritiesAvailableForSaleTable" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule Of Financial Instruments [Table]</link:label>
    <link:label id="lab_us-gaap_DebtSecuritiesAvailableForSaleTable_label_en-US" xlink:label="lab_us-gaap_DebtSecuritiesAvailableForSaleTable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Debt Securities, Available-for-Sale [Table]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DebtSecuritiesAvailableForSaleTable" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DebtSecuritiesAvailableForSaleTable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DebtSecuritiesAvailableForSaleTable" xlink:to="lab_us-gaap_DebtSecuritiesAvailableForSaleTable" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DeferredCostsAbstract_e776adc7-b05e-45fd-b183-1d16c54b377c_terseLabel_en-US" xlink:label="lab_us-gaap_DeferredCostsAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs [Abstract]</link:label>
    <link:label id="lab_us-gaap_DeferredCostsAbstract_label_en-US" xlink:label="lab_us-gaap_DeferredCostsAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCostsAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCostsAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DeferredCostsAbstract" xlink:to="lab_us-gaap_DeferredCostsAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_Assets_69516fd7-ebde-4ed7-bada-55f6cfd94101_totalLabel_en-US" xlink:label="lab_us-gaap_Assets" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Total assets</link:label>
    <link:label id="lab_us-gaap_Assets_label_en-US" xlink:label="lab_us-gaap_Assets" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Assets</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_Assets" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_Assets"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_Assets" xlink:to="lab_us-gaap_Assets" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs_60754bee-cda6-45d9-8d77-4e468fcfb443_negatedLabel_en-US" xlink:label="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Write-offs, net of recoveries</link:label>
    <link:label id="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs_label_en-US" xlink:label="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts Receivable, Allowance for Credit Loss, Writeoff</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs" xlink:to="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EarningsPerShareAbstract_10dca2d1-2072-47e9-a739-3a95e5353d6b_terseLabel_en-US" xlink:label="lab_us-gaap_EarningsPerShareAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net income per share</link:label>
    <link:label id="lab_us-gaap_EarningsPerShareAbstract_label_en-US" xlink:label="lab_us-gaap_EarningsPerShareAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Earnings Per Share [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EarningsPerShareAbstract" xlink:to="lab_us-gaap_EarningsPerShareAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncomeStatementLocationAxis_85d2ff00-e421-43eb-a331-ff9ccf3e563e_terseLabel_en-US" xlink:label="lab_us-gaap_IncomeStatementLocationAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income Statement Location</link:label>
    <link:label id="lab_us-gaap_IncomeStatementLocationAxis_label_en-US" xlink:label="lab_us-gaap_IncomeStatementLocationAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income Statement Location [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeStatementLocationAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeStatementLocationAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncomeStatementLocationAxis" xlink:to="lab_us-gaap_IncomeStatementLocationAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PerformanceSharesMember_0e08b114-c076-453d-babb-780e4b5c62bd_terseLabel_en-US" xlink:label="lab_us-gaap_PerformanceSharesMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Performance Share Unit</link:label>
    <link:label id="lab_us-gaap_PerformanceSharesMember_85ef2123-7f69-4ba2-8633-c5772a0a59dc_verboseLabel_en-US" xlink:label="lab_us-gaap_PerformanceSharesMember" xlink:role="http://www.xbrl.org/2003/role/verboseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">PSUs</link:label>
    <link:label id="lab_us-gaap_PerformanceSharesMember_label_en-US" xlink:label="lab_us-gaap_PerformanceSharesMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Performance Shares [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PerformanceSharesMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PerformanceSharesMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PerformanceSharesMember" xlink:to="lab_us-gaap_PerformanceSharesMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AccruedLiabilitiesCurrent_69ac926f-48c2-4aa8-b657-761d8139edaa_terseLabel_en-US" xlink:label="lab_us-gaap_AccruedLiabilitiesCurrent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accrued expenses</link:label>
    <link:label id="lab_us-gaap_AccruedLiabilitiesCurrent_label_en-US" xlink:label="lab_us-gaap_AccruedLiabilitiesCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accrued Liabilities, Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccruedLiabilitiesCurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccruedLiabilitiesCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AccruedLiabilitiesCurrent" xlink:to="lab_us-gaap_AccruedLiabilitiesCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_GeographicInformationTextBlock_06a7ada9-caff-499a-a912-b8d67dd83483_terseLabel_en-US" xlink:label="lab_spsc_GeographicInformationTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Geographic Information</link:label>
    <link:label id="lab_spsc_GeographicInformationTextBlock_label_en-US" xlink:label="lab_spsc_GeographicInformationTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Geographic Information [Text Block]</link:label>
    <link:label id="lab_spsc_GeographicInformationTextBlock_documentation_en-US" xlink:label="lab_spsc_GeographicInformationTextBlock" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">The entire disclosure of geographic information.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_GeographicInformationTextBlock" xlink:href="spsc-20230331.xsd#spsc_GeographicInformationTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_GeographicInformationTextBlock" xlink:to="lab_spsc_GeographicInformationTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice_85050c1a-f5ee-47e6-83ff-1c2584a1765a_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Exercised (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangements by Share-Based Payment Award, Options, Exercises in Period, Weighted Average Exercise Price</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_NetCashProvidedByUsedInFinancingActivities_55099954-1121-4a9c-92e2-0c83c431c3aa_totalLabel_en-US" xlink:label="lab_us-gaap_NetCashProvidedByUsedInFinancingActivities" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net cash provided by (used in) financing activities</link:label>
    <link:label id="lab_us-gaap_NetCashProvidedByUsedInFinancingActivities_label_en-US" xlink:label="lab_us-gaap_NetCashProvidedByUsedInFinancingActivities" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net Cash Provided by (Used in) Financing Activities</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInFinancingActivities" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInFinancingActivities"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_NetCashProvidedByUsedInFinancingActivities" xlink:to="lab_us-gaap_NetCashProvidedByUsedInFinancingActivities" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StockRepurchaseProgramAuthorizedAmount1_cf15bbbe-695c-4501-93bd-f497d36e55df_terseLabel_en-US" xlink:label="lab_us-gaap_StockRepurchaseProgramAuthorizedAmount1" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share Value Authorized for Repurchase</link:label>
    <link:label id="lab_us-gaap_StockRepurchaseProgramAuthorizedAmount1_label_en-US" xlink:label="lab_us-gaap_StockRepurchaseProgramAuthorizedAmount1" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stock Repurchase Program, Authorized Amount</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockRepurchaseProgramAuthorizedAmount1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockRepurchaseProgramAuthorizedAmount1"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StockRepurchaseProgramAuthorizedAmount1" xlink:to="lab_us-gaap_StockRepurchaseProgramAuthorizedAmount1" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_GeographicDistributionDomesticMember_223c5dec-8146-4c80-a81d-fc6ea1d19719_terseLabel_en-US" xlink:label="lab_us-gaap_GeographicDistributionDomesticMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Domestic Revenue</link:label>
    <link:label id="lab_us-gaap_GeographicDistributionDomesticMember_label_en-US" xlink:label="lab_us-gaap_GeographicDistributionDomesticMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Geographic Distribution, Domestic [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionDomesticMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionDomesticMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GeographicDistributionDomesticMember" xlink:to="lab_us-gaap_GeographicDistributionDomesticMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EmployeeRelatedLiabilitiesCurrent_6d277628-1901-4de7-beb2-967a062f5398_terseLabel_en-US" xlink:label="lab_us-gaap_EmployeeRelatedLiabilitiesCurrent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accrued compensation</link:label>
    <link:label id="lab_us-gaap_EmployeeRelatedLiabilitiesCurrent_label_en-US" xlink:label="lab_us-gaap_EmployeeRelatedLiabilitiesCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Employee-related Liabilities, Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeRelatedLiabilitiesCurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeRelatedLiabilitiesCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EmployeeRelatedLiabilitiesCurrent" xlink:to="lab_us-gaap_EmployeeRelatedLiabilitiesCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_VariableLeaseCost_7b0bb670-1ef0-49f4-8a83-fe55d19bc6b0_terseLabel_en-US" xlink:label="lab_us-gaap_VariableLeaseCost" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Variable lease cost</link:label>
    <link:label id="lab_us-gaap_VariableLeaseCost_label_en-US" xlink:label="lab_us-gaap_VariableLeaseCost" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Variable Lease, Cost</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_VariableLeaseCost" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_VariableLeaseCost"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_VariableLeaseCost" xlink:to="lab_us-gaap_VariableLeaseCost" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock_5e3e9851-8fae-434a-8969-346d7dd2076a_terseLabel_en-US" xlink:label="lab_us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Allowance for Credit Losses Activity Included in Accounts Receivable Net</link:label>
    <link:label id="lab_us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock_label_en-US" xlink:label="lab_us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Financing Receivable, Allowance for Credit Loss [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock" xlink:to="lab_us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest_73868825-4b23-41ba-a510-6cd4287b6c03_totalLabel_en-US" xlink:label="lab_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income before income taxes</link:label>
    <link:label id="lab_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest_label_en-US" xlink:label="lab_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income (Loss) from Continuing Operations before Income Taxes, Noncontrolling Interest</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest" xlink:to="lab_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StockholdersEquityAbstract_f18ccfca-2cff-472d-bb87-341ac4b82974_terseLabel_en-US" xlink:label="lab_us-gaap_StockholdersEquityAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stockholders' equity</link:label>
    <link:label id="lab_us-gaap_StockholdersEquityAbstract_label_en-US" xlink:label="lab_us-gaap_StockholdersEquityAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stockholders' Equity Attributable to Parent [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockholdersEquityAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockholdersEquityAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StockholdersEquityAbstract" xlink:to="lab_us-gaap_StockholdersEquityAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EarningsPerShareTextBlock_c85f2ac9-a768-4ed1-ae0c-3e8c2f479ab4_terseLabel_en-US" xlink:label="lab_us-gaap_EarningsPerShareTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net Income Per Share</link:label>
    <link:label id="lab_us-gaap_EarningsPerShareTextBlock_label_en-US" xlink:label="lab_us-gaap_EarningsPerShareTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Earnings Per Share [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EarningsPerShareTextBlock" xlink:to="lab_us-gaap_EarningsPerShareTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock_4b6116e4-5454-4e1d-ba1d-edcde92e5c31_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted Average Grant Date Fair Value of Options Granted, Assumptions</link:label>
    <link:label id="lab_us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Share-Based Payment Award, Stock Options, Valuation Assumptions [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock" xlink:to="lab_us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax_434e9349-9986-46fa-8782-f5ea1094653f_terseLabel_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Unrealized gain (loss) on investments, tax</link:label>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax_label_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">OCI, Debt Securities, Available-for-Sale, Unrealized Holding Gain (Loss), before Adjustment, Tax</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax" xlink:to="lab_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_87044bf3-e822-4af7-a469-7ca15cd2384d_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Award Type</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Award Type [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1_c855976a-ccd0-45a9-9d55-d383732bd273_terseLabel_en-US" xlink:label="lab_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Unrecognized stock-based compensation, expected to be recognized, weighted average period</link:label>
    <link:label id="lab_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1_label_en-US" xlink:label="lab_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Period for Recognition</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1" xlink:to="lab_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock_2a695d8a-9a03-447c-8e73-a3990a065ba4_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Intangible Assets</link:label>
    <link:label id="lab_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Finite-Lived Intangible Assets [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock" xlink:to="lab_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ProceedsFromStockPlans_87854e5b-e77a-40a0-b2f8-75b98d63b430_terseLabel_en-US" xlink:label="lab_us-gaap_ProceedsFromStockPlans" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net proceeds from employee stock purchase plan activity</link:label>
    <link:label id="lab_us-gaap_ProceedsFromStockPlans_label_en-US" xlink:label="lab_us-gaap_ProceedsFromStockPlans" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Proceeds from Stock Plans</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProceedsFromStockPlans" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProceedsFromStockPlans"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ProceedsFromStockPlans" xlink:to="lab_us-gaap_ProceedsFromStockPlans" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ComputerEquipmentMember_bd485b8f-069f-4545-8654-82bf681fec23_terseLabel_en-US" xlink:label="lab_us-gaap_ComputerEquipmentMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Computer equipment</link:label>
    <link:label id="lab_us-gaap_ComputerEquipmentMember_label_en-US" xlink:label="lab_us-gaap_ComputerEquipmentMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Computer Equipment [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ComputerEquipmentMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ComputerEquipmentMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ComputerEquipmentMember" xlink:to="lab_us-gaap_ComputerEquipmentMember" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_CustomerContractCancellationPeriod_007dbc25-893b-4714-9eb8-c5e9d1fa0c4b_terseLabel_en-US" xlink:label="lab_spsc_CustomerContractCancellationPeriod" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Customer contract cancellation period</link:label>
    <link:label id="lab_spsc_CustomerContractCancellationPeriod_label_en-US" xlink:label="lab_spsc_CustomerContractCancellationPeriod" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Customer Contract Cancellation Period</link:label>
    <link:label id="lab_spsc_CustomerContractCancellationPeriod_documentation_en-US" xlink:label="lab_spsc_CustomerContractCancellationPeriod" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Customer contract cancellation period.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_CustomerContractCancellationPeriod" xlink:href="spsc-20230331.xsd#spsc_CustomerContractCancellationPeriod"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_CustomerContractCancellationPeriod" xlink:to="lab_spsc_CustomerContractCancellationPeriod" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PaymentsToAcquireOtherInvestments_0c775254-df97-4b41-b34d-832eb2c8657e_negatedLabel_en-US" xlink:label="lab_us-gaap_PaymentsToAcquireOtherInvestments" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Purchases of investments</link:label>
    <link:label id="lab_us-gaap_PaymentsToAcquireOtherInvestments_label_en-US" xlink:label="lab_us-gaap_PaymentsToAcquireOtherInvestments" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Payments to Acquire Other Investments</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PaymentsToAcquireOtherInvestments" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PaymentsToAcquireOtherInvestments"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PaymentsToAcquireOtherInvestments" xlink:to="lab_us-gaap_PaymentsToAcquireOtherInvestments" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_GrossProfit_c92ff36f-3e46-411e-be19-b5403c10a8a1_totalLabel_en-US" xlink:label="lab_us-gaap_GrossProfit" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Gross profit</link:label>
    <link:label id="lab_us-gaap_GrossProfit_label_en-US" xlink:label="lab_us-gaap_GrossProfit" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Gross Profit</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GrossProfit" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GrossProfit"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GrossProfit" xlink:to="lab_us-gaap_GrossProfit" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityRegistrantName_d01016c6-f29b-43d1-8aa5-71baed26d0a0_terseLabel_en-US" xlink:label="lab_dei_EntityRegistrantName" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Registrant Name</link:label>
    <link:label id="lab_dei_EntityRegistrantName_label_en-US" xlink:label="lab_dei_EntityRegistrantName" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Registrant Name</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityRegistrantName" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityRegistrantName"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityRegistrantName" xlink:to="lab_dei_EntityRegistrantName" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate_bbc49093-3b6c-4e71-99f1-394e9148e43b_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Dividend yield</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Fair Value Assumptions, Expected Dividend Rate</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_GoodwillForeignCurrencyTranslationGainLoss_cd02514b-f2e4-457b-ab16-8025cf87a834_terseLabel_en-US" xlink:label="lab_us-gaap_GoodwillForeignCurrencyTranslationGainLoss" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Foreign currency translation</link:label>
    <link:label id="lab_us-gaap_GoodwillForeignCurrencyTranslationGainLoss_label_en-US" xlink:label="lab_us-gaap_GoodwillForeignCurrencyTranslationGainLoss" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Goodwill, Foreign Currency Translation Gain (Loss)</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillForeignCurrencyTranslationGainLoss" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillForeignCurrencyTranslationGainLoss"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GoodwillForeignCurrencyTranslationGainLoss" xlink:to="lab_us-gaap_GoodwillForeignCurrencyTranslationGainLoss" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CustomerRelationshipsMember_18cfa64a-51c8-4d31-b570-bd40c4501ac0_terseLabel_en-US" xlink:label="lab_us-gaap_CustomerRelationshipsMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Subscriber relationships</link:label>
    <link:label id="lab_us-gaap_CustomerRelationshipsMember_label_en-US" xlink:label="lab_us-gaap_CustomerRelationshipsMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Customer Relationships [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CustomerRelationshipsMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CustomerRelationshipsMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CustomerRelationshipsMember" xlink:to="lab_us-gaap_CustomerRelationshipsMember" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityAddressCityOrTown_59abc2a7-e24f-4f7a-962a-8243286ff186_terseLabel_en-US" xlink:label="lab_dei_EntityAddressCityOrTown" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Address, City or Town</link:label>
    <link:label id="lab_dei_EntityAddressCityOrTown_label_en-US" xlink:label="lab_dei_EntityAddressCityOrTown" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Address, City or Town</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityAddressCityOrTown" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityAddressCityOrTown"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityAddressCityOrTown" xlink:to="lab_dei_EntityAddressCityOrTown" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember_18db102a-3557-4bd6-b361-7c636e03d031_terseLabel_en-US" xlink:label="lab_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">PSU, RSU, RSA, and DSU</link:label>
    <link:label id="lab_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember_7a3b4a50-8f10-4aaa-957a-4e250e500ce2_verboseLabel_en-US" xlink:label="lab_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember" xlink:role="http://www.xbrl.org/2003/role/verboseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">PSU, RSU, RSA, and DSU</link:label>
    <link:label id="lab_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember_label_en-US" xlink:label="lab_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Performance Share Units Restricted Stock Units Restricted Stock Awards And Deferred Stock Units [Member]</link:label>
    <link:label id="lab_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember_documentation_en-US" xlink:label="lab_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Performance share units, restricted stock units, restricted stock awards, and deferred stock units.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember" xlink:href="spsc-20230331.xsd#spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember" xlink:to="lab_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OperatingExpensesAbstract_dff37dd9-08a4-4eeb-9a06-849b8bd28d8f_terseLabel_en-US" xlink:label="lab_us-gaap_OperatingExpensesAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating expenses</link:label>
    <link:label id="lab_us-gaap_OperatingExpensesAbstract_label_en-US" xlink:label="lab_us-gaap_OperatingExpensesAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating Expenses [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingExpensesAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingExpensesAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OperatingExpensesAbstract" xlink:to="lab_us-gaap_OperatingExpensesAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_GeographicDistributionDomain_ca751e94-eacb-40fa-ae7a-019d581dfa29_terseLabel_en-US" xlink:label="lab_us-gaap_GeographicDistributionDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Geographic Distribution</link:label>
    <link:label id="lab_us-gaap_GeographicDistributionDomain_label_en-US" xlink:label="lab_us-gaap_GeographicDistributionDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Geographic Distribution [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GeographicDistributionDomain" xlink:to="lab_us-gaap_GeographicDistributionDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_RevenueRecognitionTable_af7c3efb-b9dc-4471-9357-ab4ebd5af3da_terseLabel_en-US" xlink:label="lab_spsc_RevenueRecognitionTable" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue Recognition [Table]</link:label>
    <link:label id="lab_spsc_RevenueRecognitionTable_label_en-US" xlink:label="lab_spsc_RevenueRecognitionTable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue Recognition [Table]</link:label>
    <link:label id="lab_spsc_RevenueRecognitionTable_documentation_en-US" xlink:label="lab_spsc_RevenueRecognitionTable" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue Recognition.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RevenueRecognitionTable" xlink:href="spsc-20230331.xsd#spsc_RevenueRecognitionTable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_RevenueRecognitionTable" xlink:to="lab_spsc_RevenueRecognitionTable" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_AnalyticsMember_aaeba957-0d4c-47af-8b98-36546f969cc5_terseLabel_en-US" xlink:label="lab_spsc_AnalyticsMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Analytics</link:label>
    <link:label id="lab_spsc_AnalyticsMember_label_en-US" xlink:label="lab_spsc_AnalyticsMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Analytics [Member]</link:label>
    <link:label id="lab_spsc_AnalyticsMember_documentation_en-US" xlink:label="lab_spsc_AnalyticsMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Analytics.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_AnalyticsMember" xlink:href="spsc-20230331.xsd#spsc_AnalyticsMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_AnalyticsMember" xlink:to="lab_spsc_AnalyticsMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfProductInformationTableTextBlock_45a46d21-8f33-44f1-acce-f6f3bcf94c10_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfProductInformationTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Summary of Domestic Revenue</link:label>
    <link:label id="lab_us-gaap_ScheduleOfProductInformationTableTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfProductInformationTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Product Information [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfProductInformationTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfProductInformationTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfProductInformationTableTextBlock" xlink:to="lab_us-gaap_ScheduleOfProductInformationTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_srt_MinimumMember_5ec77d49-521a-4ac3-868c-49fb73056554_terseLabel_en-US" xlink:label="lab_srt_MinimumMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Minimum</link:label>
    <link:label id="lab_srt_MinimumMember_label_en-US" xlink:label="lab_srt_MinimumMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Minimum [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_srt_MinimumMember" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_MinimumMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_srt_MinimumMember" xlink:to="lab_srt_MinimumMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StatementOfFinancialPositionAbstract_bb720d23-2c21-45ca-a80d-3e8f371e2145_terseLabel_en-US" xlink:label="lab_us-gaap_StatementOfFinancialPositionAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statement of Financial Position [Abstract]</link:label>
    <link:label id="lab_us-gaap_StatementOfFinancialPositionAbstract_label_en-US" xlink:label="lab_us-gaap_StatementOfFinancialPositionAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statement of Financial Position [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementOfFinancialPositionAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementOfFinancialPositionAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StatementOfFinancialPositionAbstract" xlink:to="lab_us-gaap_StatementOfFinancialPositionAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityEmergingGrowthCompany_73517552-0687-4d6e-9d23-1c6a125b81c1_terseLabel_en-US" xlink:label="lab_dei_EntityEmergingGrowthCompany" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Emerging Growth Company</link:label>
    <link:label id="lab_dei_EntityEmergingGrowthCompany_label_en-US" xlink:label="lab_dei_EntityEmergingGrowthCompany" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Emerging Growth Company</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityEmergingGrowthCompany" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityEmergingGrowthCompany"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityEmergingGrowthCompany" xlink:to="lab_dei_EntityEmergingGrowthCompany" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CommonStockParOrStatedValuePerShare_a3f1a9c6-c6d2-4bac-b842-99daa307fad4_terseLabel_en-US" xlink:label="lab_us-gaap_CommonStockParOrStatedValuePerShare" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common stock, par value (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_CommonStockParOrStatedValuePerShare_label_en-US" xlink:label="lab_us-gaap_CommonStockParOrStatedValuePerShare" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common Stock, Par or Stated Value Per Share</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockParOrStatedValuePerShare" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockParOrStatedValuePerShare"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CommonStockParOrStatedValuePerShare" xlink:to="lab_us-gaap_CommonStockParOrStatedValuePerShare" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_InterTradeSystemsIncMember_339675f1-e52a-40af-a6b5-afa6bdc1fa05_terseLabel_en-US" xlink:label="lab_spsc_InterTradeSystemsIncMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">InterTrade Systems Inc.</link:label>
    <link:label id="lab_spsc_InterTradeSystemsIncMember_label_en-US" xlink:label="lab_spsc_InterTradeSystemsIncMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">InterTrade Systems Inc. [Member]</link:label>
    <link:label id="lab_spsc_InterTradeSystemsIncMember_documentation_en-US" xlink:label="lab_spsc_InterTradeSystemsIncMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">InterTrade Systems Inc.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_InterTradeSystemsIncMember" xlink:href="spsc-20230331.xsd#spsc_InterTradeSystemsIncMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_InterTradeSystemsIncMember" xlink:to="lab_spsc_InterTradeSystemsIncMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_be3df8a4-86fa-41a3-9676-8be9d83eefc2_terseLabel_en-US" xlink:label="lab_us-gaap_CommitmentsAndContingenciesDisclosureAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Commitments and Contingencies Disclosure [Abstract]</link:label>
    <link:label id="lab_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_label_en-US" xlink:label="lab_us-gaap_CommitmentsAndContingenciesDisclosureAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Commitments and Contingencies Disclosure [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingenciesDisclosureAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract" xlink:to="lab_us-gaap_CommitmentsAndContingenciesDisclosureAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_GeographicDistributionForeignMember_aff35508-264a-4be1-b456-e4c3328545c3_terseLabel_en-US" xlink:label="lab_us-gaap_GeographicDistributionForeignMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Foreign</link:label>
    <link:label id="lab_us-gaap_GeographicDistributionForeignMember_label_en-US" xlink:label="lab_us-gaap_GeographicDistributionForeignMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Geographic Distribution, Foreign [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionForeignMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionForeignMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GeographicDistributionForeignMember" xlink:to="lab_us-gaap_GeographicDistributionForeignMember" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_TradingSymbol_5d5e1c0f-ca6c-437f-a25f-186eabaf83f0_terseLabel_en-US" xlink:label="lab_dei_TradingSymbol" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Trading Symbol</link:label>
    <link:label id="lab_dei_TradingSymbol_label_en-US" xlink:label="lab_dei_TradingSymbol" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Trading Symbol</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_TradingSymbol" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_TradingSymbol"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_TradingSymbol" xlink:to="lab_dei_TradingSymbol" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityFileNumber_278ecfe5-58e8-4f29-81c4-575e5e7b3f2f_terseLabel_en-US" xlink:label="lab_dei_EntityFileNumber" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity File Number</link:label>
    <link:label id="lab_dei_EntityFileNumber_label_en-US" xlink:label="lab_dei_EntityFileNumber" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity File Number</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityFileNumber" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityFileNumber"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityFileNumber" xlink:to="lab_dei_EntityFileNumber" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_TreasuryStockAcquiredAverageCostPerShare_337639ed-75b8-4b48-a141-a2acd9a9da15_terseLabel_en-US" xlink:label="lab_us-gaap_TreasuryStockAcquiredAverageCostPerShare" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Average price per repurchased share (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_TreasuryStockAcquiredAverageCostPerShare_label_en-US" xlink:label="lab_us-gaap_TreasuryStockAcquiredAverageCostPerShare" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Treasury Stock Acquired, Average Cost Per Share</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockAcquiredAverageCostPerShare" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockAcquiredAverageCostPerShare"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_TreasuryStockAcquiredAverageCostPerShare" xlink:to="lab_us-gaap_TreasuryStockAcquiredAverageCostPerShare" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_TreasuryStockCommonShares_7bf04256-5e89-41ce-9513-2ac901da5db3_terseLabel_en-US" xlink:label="lab_us-gaap_TreasuryStockCommonShares" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Treasury stock, shares (in shares)</link:label>
    <link:label id="lab_us-gaap_TreasuryStockCommonShares_9b69e0e1-2a54-46c7-b5df-782b0ce361a5_periodStartLabel_en-US" xlink:label="lab_us-gaap_TreasuryStockCommonShares" xlink:role="http://www.xbrl.org/2003/role/periodStartLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Beginning balance (in shares)</link:label>
    <link:label id="lab_us-gaap_TreasuryStockCommonShares_fe76238d-f332-4d79-97f9-415db3d0674c_periodEndLabel_en-US" xlink:label="lab_us-gaap_TreasuryStockCommonShares" xlink:role="http://www.xbrl.org/2003/role/periodEndLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Ending balance (in shares)</link:label>
    <link:label id="lab_us-gaap_TreasuryStockCommonShares_label_en-US" xlink:label="lab_us-gaap_TreasuryStockCommonShares" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Treasury Stock, Common, Shares</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockCommonShares" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockCommonShares"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_TreasuryStockCommonShares" xlink:to="lab_us-gaap_TreasuryStockCommonShares" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour_901071f4-297d-4f8a-abab-b63b29a66e46_terseLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2027</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour_label_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Asset, Expected Amortization, Year Four</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour" xlink:to="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ContractWithCustomerLiabilityNoncurrent_eff7b0df-926c-49ea-a60d-995817f86d09_terseLabel_en-US" xlink:label="lab_us-gaap_ContractWithCustomerLiabilityNoncurrent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred revenue, non-current</link:label>
    <link:label id="lab_us-gaap_ContractWithCustomerLiabilityNoncurrent_label_en-US" xlink:label="lab_us-gaap_ContractWithCustomerLiabilityNoncurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Contract with Customer, Liability, Noncurrent</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerLiabilityNoncurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerLiabilityNoncurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ContractWithCustomerLiabilityNoncurrent" xlink:to="lab_us-gaap_ContractWithCustomerLiabilityNoncurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AllowanceForCreditLossesTextBlock_87582b0b-03c3-4d90-89f0-c649b6dff22a_terseLabel_en-US" xlink:label="lab_us-gaap_AllowanceForCreditLossesTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Allowance for Credit Losses</link:label>
    <link:label id="lab_us-gaap_AllowanceForCreditLossesTextBlock_label_en-US" xlink:label="lab_us-gaap_AllowanceForCreditLossesTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Allowance for Credit Losses [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForCreditLossesTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForCreditLossesTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AllowanceForCreditLossesTextBlock" xlink:to="lab_us-gaap_AllowanceForCreditLossesTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ResearchAndDevelopmentExpense_59688ec4-ef58-46ce-8c43-d6952f442bee_terseLabel_en-US" xlink:label="lab_us-gaap_ResearchAndDevelopmentExpense" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Research and development</link:label>
    <link:label id="lab_us-gaap_ResearchAndDevelopmentExpense_label_en-US" xlink:label="lab_us-gaap_ResearchAndDevelopmentExpense" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Research and Development Expense</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ResearchAndDevelopmentExpense" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ResearchAndDevelopmentExpense"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ResearchAndDevelopmentExpense" xlink:to="lab_us-gaap_ResearchAndDevelopmentExpense" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod_1a32648d-20c9-46d4-9e7d-5db3b063c16d_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Granted (in shares)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Grants in Period</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_RestrictedStockUnitsRSUMember_6279451a-4c03-45c4-9319-6353cb239bd1_verboseLabel_en-US" xlink:label="lab_us-gaap_RestrictedStockUnitsRSUMember" xlink:role="http://www.xbrl.org/2003/role/verboseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">RSUs</link:label>
    <link:label id="lab_us-gaap_RestrictedStockUnitsRSUMember_label_en-US" xlink:label="lab_us-gaap_RestrictedStockUnitsRSUMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Restricted Stock Units (RSUs) [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RestrictedStockUnitsRSUMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RestrictedStockUnitsRSUMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_RestrictedStockUnitsRSUMember" xlink:to="lab_us-gaap_RestrictedStockUnitsRSUMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ConcentrationRiskByBenchmarkAxis_3d4020f5-95f8-4df7-80ce-924ca367d397_terseLabel_en-US" xlink:label="lab_us-gaap_ConcentrationRiskByBenchmarkAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Concentration Risk Benchmark</link:label>
    <link:label id="lab_us-gaap_ConcentrationRiskByBenchmarkAxis_label_en-US" xlink:label="lab_us-gaap_ConcentrationRiskByBenchmarkAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Concentration Risk Benchmark [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskByBenchmarkAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskByBenchmarkAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ConcentrationRiskByBenchmarkAxis" xlink:to="lab_us-gaap_ConcentrationRiskByBenchmarkAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_UseOfEstimates_06d26496-e16e-4fc2-91ea-1a93dc5ba3d5_terseLabel_en-US" xlink:label="lab_us-gaap_UseOfEstimates" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Use of Estimates</link:label>
    <link:label id="lab_us-gaap_UseOfEstimates_label_en-US" xlink:label="lab_us-gaap_UseOfEstimates" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Use of Estimates, Policy [Policy Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_UseOfEstimates" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_UseOfEstimates"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_UseOfEstimates" xlink:to="lab_us-gaap_UseOfEstimates" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_BusinessCombinationDisclosureTextBlock_bb02a7db-fce0-4267-973a-5bcf5f54e289_terseLabel_en-US" xlink:label="lab_us-gaap_BusinessCombinationDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Acquisitions</link:label>
    <link:label id="lab_us-gaap_BusinessCombinationDisclosureTextBlock_label_en-US" xlink:label="lab_us-gaap_BusinessCombinationDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Combination Disclosure [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessCombinationDisclosureTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessCombinationDisclosureTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_BusinessCombinationDisclosureTextBlock" xlink:to="lab_us-gaap_BusinessCombinationDisclosureTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract_6775cd50-c001-4c2c-af44-e313c1630819_terseLabel_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other comprehensive income (expense)</link:label>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract_label_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Comprehensive Income (Loss), Net of Tax, Portion Attributable to Parent [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract" xlink:to="lab_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncreaseDecreaseInAccountsPayable_976d3a86-52aa-4e05-b288-9d145fb8bdc8_terseLabel_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInAccountsPayable" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts payable</link:label>
    <link:label id="lab_us-gaap_IncreaseDecreaseInAccountsPayable_label_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInAccountsPayable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Increase (Decrease) in Accounts Payable</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInAccountsPayable" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInAccountsPayable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncreaseDecreaseInAccountsPayable" xlink:to="lab_us-gaap_IncreaseDecreaseInAccountsPayable" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ConcentrationRiskPercentage1_ee628608-4bc8-4210-acb4-2ef1cf0827c1_terseLabel_en-US" xlink:label="lab_us-gaap_ConcentrationRiskPercentage1" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Concentration risk, percentage</link:label>
    <link:label id="lab_us-gaap_ConcentrationRiskPercentage1_label_en-US" xlink:label="lab_us-gaap_ConcentrationRiskPercentage1" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Concentration Risk, Percentage</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskPercentage1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskPercentage1"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ConcentrationRiskPercentage1" xlink:to="lab_us-gaap_ConcentrationRiskPercentage1" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_InvestmentIncomeNet_9722bdcd-ca70-4ae2-a900-1c2364c1eb1b_terseLabel_en-US" xlink:label="lab_us-gaap_InvestmentIncomeNet" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Investment income</link:label>
    <link:label id="lab_us-gaap_InvestmentIncomeNet_label_en-US" xlink:label="lab_us-gaap_InvestmentIncomeNet" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Investment Income, Net</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_InvestmentIncomeNet" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_InvestmentIncomeNet"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_InvestmentIncomeNet" xlink:to="lab_us-gaap_InvestmentIncomeNet" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncomeTaxDisclosureTextBlock_96e1b362-4f93-4c88-9c0c-ee90586c5df8_terseLabel_en-US" xlink:label="lab_us-gaap_IncomeTaxDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income Taxes</link:label>
    <link:label id="lab_us-gaap_IncomeTaxDisclosureTextBlock_label_en-US" xlink:label="lab_us-gaap_IncomeTaxDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income Tax Disclosure [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeTaxDisclosureTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeTaxDisclosureTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncomeTaxDisclosureTextBlock" xlink:to="lab_us-gaap_IncomeTaxDisclosureTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AmortizationOfIntangibleAssets_4fdae779-d6a7-45ad-8554-cf6d803415b4_terseLabel_en-US" xlink:label="lab_us-gaap_AmortizationOfIntangibleAssets" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Amortization of intangible assets</link:label>
    <link:label id="lab_us-gaap_AmortizationOfIntangibleAssets_label_en-US" xlink:label="lab_us-gaap_AmortizationOfIntangibleAssets" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Amortization of Intangible Assets</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AmortizationOfIntangibleAssets" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AmortizationOfIntangibleAssets"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AmortizationOfIntangibleAssets" xlink:to="lab_us-gaap_AmortizationOfIntangibleAssets" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfGoodwillTextBlock_9740a0c2-da82-4c80-9859-6cec8f48d785_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfGoodwillTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Changes in Net Carrying Amount of Goodwill</link:label>
    <link:label id="lab_us-gaap_ScheduleOfGoodwillTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfGoodwillTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Goodwill [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfGoodwillTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfGoodwillTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfGoodwillTextBlock" xlink:to="lab_us-gaap_ScheduleOfGoodwillTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EarningsPerShareBasic_eb913c68-4a7e-4c1e-9928-bdae77746f0c_terseLabel_en-US" xlink:label="lab_us-gaap_EarningsPerShareBasic" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Basic (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_EarningsPerShareBasic_label_en-US" xlink:label="lab_us-gaap_EarningsPerShareBasic" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Earnings Per Share, Basic</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareBasic" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareBasic"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EarningsPerShareBasic" xlink:to="lab_us-gaap_EarningsPerShareBasic" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree_d7cc7ef2-bc7b-4d55-9ff2-7ace7a094d72_terseLabel_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2026</link:label>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree_label_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Lessee, Operating Lease, Liability, to be Paid, Year Three</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree" xlink:to="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_FourZeroOneKStockMatchMember_99dfa631-016d-48eb-a834-5478f4c86891_terseLabel_en-US" xlink:label="lab_spsc_FourZeroOneKStockMatchMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">401(k) stock match</link:label>
    <link:label id="lab_spsc_FourZeroOneKStockMatchMember_label_en-US" xlink:label="lab_spsc_FourZeroOneKStockMatchMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Four Zero One K Stock Match [Member]</link:label>
    <link:label id="lab_spsc_FourZeroOneKStockMatchMember_documentation_en-US" xlink:label="lab_spsc_FourZeroOneKStockMatchMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Four zero one (k) stock match.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FourZeroOneKStockMatchMember" xlink:href="spsc-20230331.xsd#spsc_FourZeroOneKStockMatchMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_FourZeroOneKStockMatchMember" xlink:to="lab_spsc_FourZeroOneKStockMatchMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ConcentrationRiskTypeDomain_cd31eba9-1e29-4b20-9ed2-e324a128208e_terseLabel_en-US" xlink:label="lab_us-gaap_ConcentrationRiskTypeDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Concentration Risk Type</link:label>
    <link:label id="lab_us-gaap_ConcentrationRiskTypeDomain_label_en-US" xlink:label="lab_us-gaap_ConcentrationRiskTypeDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Concentration Risk Type [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskTypeDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskTypeDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ConcentrationRiskTypeDomain" xlink:to="lab_us-gaap_ConcentrationRiskTypeDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_TreasuryStockMember_b1a71dcd-ed1d-447e-9cfd-8b4490d54514_terseLabel_en-US" xlink:label="lab_us-gaap_TreasuryStockMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Treasury Stock</link:label>
    <link:label id="lab_us-gaap_TreasuryStockMember_label_en-US" xlink:label="lab_us-gaap_TreasuryStockMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Treasury Stock [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_TreasuryStockMember" xlink:to="lab_us-gaap_TreasuryStockMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_SellingAndMarketingExpense_88d73fb3-1696-408e-9c53-9ba9120485f0_terseLabel_en-US" xlink:label="lab_us-gaap_SellingAndMarketingExpense" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Sales and marketing</link:label>
    <link:label id="lab_us-gaap_SellingAndMarketingExpense_label_en-US" xlink:label="lab_us-gaap_SellingAndMarketingExpense" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Selling and Marketing Expense</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SellingAndMarketingExpense" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SellingAndMarketingExpense"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_SellingAndMarketingExpense" xlink:to="lab_us-gaap_SellingAndMarketingExpense" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StockholdersEquity_c6587fc2-d3a8-4052-a31a-bd5a2e55bb24_totalLabel_en-US" xlink:label="lab_us-gaap_StockholdersEquity" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Total stockholders&#8217; equity</link:label>
    <link:label id="lab_us-gaap_StockholdersEquity_7240d19f-b1ee-455a-af22-a1fa758eb8a3_periodStartLabel_en-US" xlink:label="lab_us-gaap_StockholdersEquity" xlink:role="http://www.xbrl.org/2003/role/periodStartLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Beginning balance</link:label>
    <link:label id="lab_us-gaap_StockholdersEquity_544475f7-ce39-4645-93f1-cf123cf196cd_periodEndLabel_en-US" xlink:label="lab_us-gaap_StockholdersEquity" xlink:role="http://www.xbrl.org/2003/role/periodEndLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Ending balance</link:label>
    <link:label id="lab_us-gaap_StockholdersEquity_label_en-US" xlink:label="lab_us-gaap_StockholdersEquity" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stockholders' Equity Attributable to Parent</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockholdersEquity" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockholdersEquity"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StockholdersEquity" xlink:to="lab_us-gaap_StockholdersEquity" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_2d8c2808-4744-40bc-bba8-21c2d55dcc63_periodStartLabel_en-US" xlink:label="lab_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" xlink:role="http://www.xbrl.org/2003/role/periodStartLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash and cash equivalents at beginning of period</link:label>
    <link:label id="lab_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_645fe0ff-6042-4a05-b805-a4cc01b1c4cb_periodEndLabel_en-US" xlink:label="lab_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" xlink:role="http://www.xbrl.org/2003/role/periodEndLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash and cash equivalents at end of period</link:label>
    <link:label id="lab_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_label_en-US" xlink:label="lab_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash, Cash Equivalents, Restricted Cash, and Restricted Cash Equivalents, Including Disposal Group and Discontinued Operations</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" xlink:to="lab_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue_712a7806-aa76-4773-bb7c-881e67aeedba_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Forfeited (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Forfeitures, Weighted Average Grant Date Fair Value</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityInteractiveDataCurrent_a5c74e76-9e59-4d43-846c-8ba5988a5564_terseLabel_en-US" xlink:label="lab_dei_EntityInteractiveDataCurrent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Interactive Data Current</link:label>
    <link:label id="lab_dei_EntityInteractiveDataCurrent_label_en-US" xlink:label="lab_dei_EntityInteractiveDataCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Interactive Data Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityInteractiveDataCurrent" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityInteractiveDataCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityInteractiveDataCurrent" xlink:to="lab_dei_EntityInteractiveDataCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization_013a56fd-6fa5-4832-894e-fd177a4caf22_negatedLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accumulated Amortization</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization_label_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Assets, Accumulated Amortization</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization" xlink:to="lab_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable_95ba9b18-27d0-4870-8d7e-f47dbfb809a1_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property, Plant and Equipment [Table]</link:label>
    <link:label id="lab_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable_label_en-US" xlink:label="lab_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property, Plant and Equipment [Table]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfPropertyPlantAndEquipmentTable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable" xlink:to="lab_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AllowanceForCreditLossAbstract_cf703c7b-590a-4622-8c7f-d55c5b5d27b8_terseLabel_en-US" xlink:label="lab_us-gaap_AllowanceForCreditLossAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Allowance for Credit Loss [Abstract]</link:label>
    <link:label id="lab_us-gaap_AllowanceForCreditLossAbstract_label_en-US" xlink:label="lab_us-gaap_AllowanceForCreditLossAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Allowance for Credit Loss [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForCreditLossAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForCreditLossAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AllowanceForCreditLossAbstract" xlink:to="lab_us-gaap_AllowanceForCreditLossAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract_bbd85b2c-b7a0-4933-b20d-872cb5c3b2f9_terseLabel_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Changes in assets and liabilities</link:label>
    <link:label id="lab_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract_label_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Increase (Decrease) in Operating Capital [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInOperatingCapitalAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract" xlink:to="lab_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_NetIncomeLossAbstract_88eb449b-7007-4d60-a6a5-408c9af62ced_terseLabel_en-US" xlink:label="lab_us-gaap_NetIncomeLossAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Numerator</link:label>
    <link:label id="lab_us-gaap_NetIncomeLossAbstract_label_en-US" xlink:label="lab_us-gaap_NetIncomeLossAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net Income (Loss) Attributable to Parent [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetIncomeLossAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetIncomeLossAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_NetIncomeLossAbstract" xlink:to="lab_us-gaap_NetIncomeLossAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree_3696f826-f276-4cc4-8939-3108a1a8df1c_terseLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2026</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree_label_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Asset, Expected Amortization, Year Three</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree" xlink:to="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares_af36b6d9-8fe4-47f2-b1e2-b32bcf6abc6d_terseLabel_en-US" xlink:label="lab_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">PSUs, RSUs, RSAs, and DSUs (in shares)</link:label>
    <link:label id="lab_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares_label_en-US" xlink:label="lab_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Incremental Common Shares Attributable to Dilutive Effect of Contingently Issuable Shares</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares" xlink:to="lab_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_MoneyMarketFundsMember_44870a74-7cca-42e8-ae59-f07ab3116953_terseLabel_en-US" xlink:label="lab_us-gaap_MoneyMarketFundsMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Money market funds</link:label>
    <link:label id="lab_us-gaap_MoneyMarketFundsMember_label_en-US" xlink:label="lab_us-gaap_MoneyMarketFundsMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Money Market Funds [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_MoneyMarketFundsMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_MoneyMarketFundsMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_MoneyMarketFundsMember" xlink:to="lab_us-gaap_MoneyMarketFundsMember" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour_d533c554-4772-4ca2-ac29-6cf5fd2929af_terseLabel_en-US" xlink:label="lab_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Thereafter</link:label>
    <link:label id="lab_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour_label_en-US" xlink:label="lab_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite Lived Intangible Assets Amortization Expense After Year Four</link:label>
    <link:label id="lab_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour_documentation_en-US" xlink:label="lab_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite lived intangible assets, amortization expense after year four.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour" xlink:href="spsc-20230331.xsd#spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour" xlink:to="lab_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_RetainedEarningsMember_d9bf5a2a-27b8-49e9-8432-26f9da7cb18a_terseLabel_en-US" xlink:label="lab_us-gaap_RetainedEarningsMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Retained Earnings</link:label>
    <link:label id="lab_us-gaap_RetainedEarningsMember_label_en-US" xlink:label="lab_us-gaap_RetainedEarningsMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Retained Earnings [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RetainedEarningsMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RetainedEarningsMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_RetainedEarningsMember" xlink:to="lab_us-gaap_RetainedEarningsMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LeaseCost_bf617538-5d67-45ae-b616-1ad06460fc92_totalLabel_en-US" xlink:label="lab_us-gaap_LeaseCost" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Lease expense</link:label>
    <link:label id="lab_us-gaap_LeaseCost_label_en-US" xlink:label="lab_us-gaap_LeaseCost" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Lease, Cost</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LeaseCost" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LeaseCost"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LeaseCost" xlink:to="lab_us-gaap_LeaseCost" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CommonStockMember_92f82628-1c84-4a32-a58e-6ebcde561856_terseLabel_en-US" xlink:label="lab_us-gaap_CommonStockMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common Stock</link:label>
    <link:label id="lab_us-gaap_CommonStockMember_label_en-US" xlink:label="lab_us-gaap_CommonStockMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common Stock [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CommonStockMember" xlink:to="lab_us-gaap_CommonStockMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock_ae487cb6-e46e-4dc2-8f07-a11da0ee10cc_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stock-Based Compensation Expense</link:label>
    <link:label id="lab_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Payment Arrangement, Expensed and Capitalized, Amount [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock" xlink:to="lab_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent_0c080d75-fe7c-431b-86cd-aee03853ef43_totalLabel_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Total other comprehensive income (expense)</link:label>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent_label_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Comprehensive Income (Loss), Net of Tax, Portion Attributable to Parent</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent" xlink:to="lab_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation_e4a3efea-a95a-42ae-8f10-df6b3b6dadf9_terseLabel_en-US" xlink:label="lab_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Shares issued pursuant to stock awards</link:label>
    <link:label id="lab_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation_label_en-US" xlink:label="lab_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Shares Issued, Value, Share-Based Payment Arrangement, after Forfeiture</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation" xlink:to="lab_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LeaseCostTableTextBlock_6ee0382f-a1f7-4464-bd47-500ad25e0086_terseLabel_en-US" xlink:label="lab_us-gaap_LeaseCostTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Components of Lease Expense</link:label>
    <link:label id="lab_us-gaap_LeaseCostTableTextBlock_label_en-US" xlink:label="lab_us-gaap_LeaseCostTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Lease, Cost [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LeaseCostTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LeaseCostTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LeaseCostTableTextBlock" xlink:to="lab_us-gaap_LeaseCostTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PaymentsForRepurchaseOfCommonStock_4aa31497-9883-4726-8853-12537f697c4a_negatedLabel_en-US" xlink:label="lab_us-gaap_PaymentsForRepurchaseOfCommonStock" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Repurchases of common stock</link:label>
    <link:label id="lab_us-gaap_PaymentsForRepurchaseOfCommonStock_label_en-US" xlink:label="lab_us-gaap_PaymentsForRepurchaseOfCommonStock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Payments for Repurchase of Common Stock</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PaymentsForRepurchaseOfCommonStock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PaymentsForRepurchaseOfCommonStock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PaymentsForRepurchaseOfCommonStock" xlink:to="lab_us-gaap_PaymentsForRepurchaseOfCommonStock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncreaseDecreaseInDeferredCharges_a6e4f66a-4355-469c-aea3-053b060eeb72_negatedLabel_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInDeferredCharges" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred costs</link:label>
    <link:label id="lab_us-gaap_IncreaseDecreaseInDeferredCharges_label_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInDeferredCharges" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Increase (Decrease) in Deferred Charges</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInDeferredCharges" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInDeferredCharges"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncreaseDecreaseInDeferredCharges" xlink:to="lab_us-gaap_IncreaseDecreaseInDeferredCharges" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant_fcd3089b-9f6a-44b4-a08b-bbab8a9a262f_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Shares available for grant (in shares)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Number of Shares Available for Grant</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StatementTable_3bdf3e64-f35e-49d4-8f8d-9ca662607ed7_terseLabel_en-US" xlink:label="lab_us-gaap_StatementTable" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statement [Table]</link:label>
    <link:label id="lab_us-gaap_StatementTable_label_en-US" xlink:label="lab_us-gaap_StatementTable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statement [Table]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementTable" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementTable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StatementTable" xlink:to="lab_us-gaap_StatementTable" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue_6cc79cdf-85ae-4cd4-bb27-f960ebb3d074_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Vested and common stock issued (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Vested in Period, Weighted Average Grant Date Fair Value</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_DocumentQuarterlyReport_d3f8f466-5cab-4848-8b2f-c9aee3af0e40_terseLabel_en-US" xlink:label="lab_dei_DocumentQuarterlyReport" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Document Quarterly Report</link:label>
    <link:label id="lab_dei_DocumentQuarterlyReport_label_en-US" xlink:label="lab_dei_DocumentQuarterlyReport" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Document Quarterly Report</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_DocumentQuarterlyReport" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_DocumentQuarterlyReport"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_DocumentQuarterlyReport" xlink:to="lab_dei_DocumentQuarterlyReport" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AssetsCurrentAbstract_10ae1887-cd23-47b1-a53f-f2f248922066_terseLabel_en-US" xlink:label="lab_us-gaap_AssetsCurrentAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Current assets</link:label>
    <link:label id="lab_us-gaap_AssetsCurrentAbstract_label_en-US" xlink:label="lab_us-gaap_AssetsCurrentAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Assets, Current [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AssetsCurrentAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AssetsCurrentAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AssetsCurrentAbstract" xlink:to="lab_us-gaap_AssetsCurrentAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OperatingLeaseLiabilityNoncurrent_49e3f10e-25ab-4834-8a98-cb93a57b93ed_terseLabel_en-US" xlink:label="lab_us-gaap_OperatingLeaseLiabilityNoncurrent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating lease liabilities, non-current</link:label>
    <link:label id="lab_us-gaap_OperatingLeaseLiabilityNoncurrent_label_en-US" xlink:label="lab_us-gaap_OperatingLeaseLiabilityNoncurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating Lease, Liability, Noncurrent</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseLiabilityNoncurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseLiabilityNoncurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OperatingLeaseLiabilityNoncurrent" xlink:to="lab_us-gaap_OperatingLeaseLiabilityNoncurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfTreasuryStockByClassTextBlock_6e380a51-f995-48bb-8d5f-c3f1028313d3_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfTreasuryStockByClassTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stock Repurchase Activity</link:label>
    <link:label id="lab_us-gaap_ScheduleOfTreasuryStockByClassTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfTreasuryStockByClassTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Class of Treasury Stock [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfTreasuryStockByClassTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfTreasuryStockByClassTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfTreasuryStockByClassTextBlock" xlink:to="lab_us-gaap_ScheduleOfTreasuryStockByClassTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_srt_RangeAxis_23636329-1a49-4321-8d28-dd996ccb146b_terseLabel_en-US" xlink:label="lab_srt_RangeAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statistical Measurement</link:label>
    <link:label id="lab_srt_RangeAxis_label_en-US" xlink:label="lab_srt_RangeAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statistical Measurement [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeAxis" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_srt_RangeAxis" xlink:to="lab_srt_RangeAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_TreasuryStockSharesAcquired_d56c5211-b68f-4815-a0dc-6d95e7f6e1a9_negatedTerseLabel_en-US" xlink:label="lab_us-gaap_TreasuryStockSharesAcquired" xlink:role="http://www.xbrl.org/2009/role/negatedTerseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Repurchases of common stock (in shares)</link:label>
    <link:label id="lab_us-gaap_TreasuryStockSharesAcquired_0b69baeb-e327-4858-b99d-0a15c4e266bf_verboseLabel_en-US" xlink:label="lab_us-gaap_TreasuryStockSharesAcquired" xlink:role="http://www.xbrl.org/2003/role/verboseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Number of shares repurchased (in shares)</link:label>
    <link:label id="lab_us-gaap_TreasuryStockSharesAcquired_label_en-US" xlink:label="lab_us-gaap_TreasuryStockSharesAcquired" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Treasury Stock, Shares, Acquired</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockSharesAcquired" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockSharesAcquired"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_TreasuryStockSharesAcquired" xlink:to="lab_us-gaap_TreasuryStockSharesAcquired" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DeferredRevenueArrangementLineItems_b26f52d9-e428-4eff-aba5-75b36b2fb4b1_terseLabel_en-US" xlink:label="lab_us-gaap_DeferredRevenueArrangementLineItems" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Revenue Arrangement [Line Items]</link:label>
    <link:label id="lab_us-gaap_DeferredRevenueArrangementLineItems_label_en-US" xlink:label="lab_us-gaap_DeferredRevenueArrangementLineItems" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Revenue Arrangement [Line Items]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredRevenueArrangementLineItems" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredRevenueArrangementLineItems"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DeferredRevenueArrangementLineItems" xlink:to="lab_us-gaap_DeferredRevenueArrangementLineItems" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LeaseholdImprovementsMember_400ea5d7-7ee4-4509-868f-bf74bfbd389a_terseLabel_en-US" xlink:label="lab_us-gaap_LeaseholdImprovementsMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Leasehold improvements</link:label>
    <link:label id="lab_us-gaap_LeaseholdImprovementsMember_label_en-US" xlink:label="lab_us-gaap_LeaseholdImprovementsMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Leasehold Improvements [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LeaseholdImprovementsMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LeaseholdImprovementsMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LeaseholdImprovementsMember" xlink:to="lab_us-gaap_LeaseholdImprovementsMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_RetainedEarningsAccumulatedDeficit_c7df63ea-1e1b-4ed0-b17c-96a79d82ae41_terseLabel_en-US" xlink:label="lab_us-gaap_RetainedEarningsAccumulatedDeficit" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Retained earnings</link:label>
    <link:label id="lab_us-gaap_RetainedEarningsAccumulatedDeficit_label_en-US" xlink:label="lab_us-gaap_RetainedEarningsAccumulatedDeficit" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Retained Earnings (Accumulated Deficit)</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RetainedEarningsAccumulatedDeficit" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RetainedEarningsAccumulatedDeficit"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_RetainedEarningsAccumulatedDeficit" xlink:to="lab_us-gaap_RetainedEarningsAccumulatedDeficit" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward_46652849-c624-48e5-b267-4f4ff9715419_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Shares Purchased for Award</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Shares Purchased for Award</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AccountsReceivableNetCurrent_1e4816f9-ecbf-4409-a3dd-4317c183fd7b_totalLabel_en-US" xlink:label="lab_us-gaap_AccountsReceivableNetCurrent" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts receivable, net</link:label>
    <link:label id="lab_us-gaap_AccountsReceivableNetCurrent_label_en-US" xlink:label="lab_us-gaap_AccountsReceivableNetCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts Receivable, after Allowance for Credit Loss, Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccountsReceivableNetCurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccountsReceivableNetCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AccountsReceivableNetCurrent" xlink:to="lab_us-gaap_AccountsReceivableNetCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable_bb8f85da-9285-4c09-903c-442c7efe6145_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Finite Lived Intangible Assets [Table]</link:label>
    <link:label id="lab_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable_label_en-US" xlink:label="lab_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Finite-Lived Intangible Assets [Table]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable" xlink:to="lab_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StatementEquityComponentsAxis_09885182-29a1-4406-b531-36b1ab1dad2d_terseLabel_en-US" xlink:label="lab_us-gaap_StatementEquityComponentsAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Equity Components [Axis]</link:label>
    <link:label id="lab_us-gaap_StatementEquityComponentsAxis_label_en-US" xlink:label="lab_us-gaap_StatementEquityComponentsAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Equity Components [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementEquityComponentsAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementEquityComponentsAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StatementEquityComponentsAxis" xlink:to="lab_us-gaap_StatementEquityComponentsAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice_707f769c-9c00-4cc7-aa19-6aefd3375d56_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted average exercise price (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Exercisable, Weighted Average Exercise Price</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax_062fb843-2314-4c82-8d6b-69cb2ff5de5b_negatedTerseLabel_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax" xlink:role="http://www.xbrl.org/2009/role/negatedTerseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Reclassification of (gain) loss on investments into earnings, tax</link:label>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax_label_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Comprehensive Income (Loss), Reclassification Adjustment from AOCI for Sale of Securities, Tax</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax" xlink:to="lab_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_DocumentFiscalYearFocus_3e2f87da-e604-49b4-90cd-2f32fecbac51_terseLabel_en-US" xlink:label="lab_dei_DocumentFiscalYearFocus" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Document Fiscal Year Focus</link:label>
    <link:label id="lab_dei_DocumentFiscalYearFocus_label_en-US" xlink:label="lab_dei_DocumentFiscalYearFocus" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Document Fiscal Year Focus</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_DocumentFiscalYearFocus" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_DocumentFiscalYearFocus"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_DocumentFiscalYearFocus" xlink:to="lab_dei_DocumentFiscalYearFocus" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_A2021StockRepurchaseProgramMember_6f5ac4bf-c1a4-431c-828d-555dc45b6e87_terseLabel_en-US" xlink:label="lab_spsc_A2021StockRepurchaseProgramMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2021 Share Repurchase Program</link:label>
    <link:label id="lab_spsc_A2021StockRepurchaseProgramMember_label_en-US" xlink:label="lab_spsc_A2021StockRepurchaseProgramMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2021 Stock Repurchase Program [Member]</link:label>
    <link:label id="lab_spsc_A2021StockRepurchaseProgramMember_documentation_en-US" xlink:label="lab_spsc_A2021StockRepurchaseProgramMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2021 Stock Repurchase Program</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_A2021StockRepurchaseProgramMember" xlink:href="spsc-20230331.xsd#spsc_A2021StockRepurchaseProgramMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_A2021StockRepurchaseProgramMember" xlink:to="lab_spsc_A2021StockRepurchaseProgramMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract_6fdfbe29-5b1e-4908-a93d-c2719b9017e4_terseLabel_en-US" xlink:label="lab_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash flows from operating activities</link:label>
    <link:label id="lab_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract_label_en-US" xlink:label="lab_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net Cash Provided by (Used in) Operating Activities [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract" xlink:to="lab_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StatementLineItems_990a021f-010b-4c31-9553-0e3c1445b6a3_terseLabel_en-US" xlink:label="lab_us-gaap_StatementLineItems" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statement [Line Items]</link:label>
    <link:label id="lab_us-gaap_StatementLineItems_label_en-US" xlink:label="lab_us-gaap_StatementLineItems" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statement [Line Items]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementLineItems" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementLineItems"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StatementLineItems" xlink:to="lab_us-gaap_StatementLineItems" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber_a476001a-f943-4ca9-92e8-596c95f2101d_periodStartLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber" xlink:role="http://www.xbrl.org/2003/role/periodStartLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Outstanding, beginning of period (in shares)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber_536552aa-56fc-4876-b7bf-2aa79aa5e499_periodEndLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber" xlink:role="http://www.xbrl.org/2003/role/periodEndLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Outstanding, end of period (in shares)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Nonvested, Number</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_NonoperatingIncomeExpense_eec37240-4c01-4a9a-943d-8ac90bc5fae8_terseLabel_en-US" xlink:label="lab_us-gaap_NonoperatingIncomeExpense" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other income, net</link:label>
    <link:label id="lab_us-gaap_NonoperatingIncomeExpense_ab0d32b6-a81e-44cd-ab3c-069f8c40bd14_totalLabel_en-US" xlink:label="lab_us-gaap_NonoperatingIncomeExpense" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Total other income, net</link:label>
    <link:label id="lab_us-gaap_NonoperatingIncomeExpense_label_en-US" xlink:label="lab_us-gaap_NonoperatingIncomeExpense" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Nonoperating Income (Expense)</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NonoperatingIncomeExpense" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NonoperatingIncomeExpense"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_NonoperatingIncomeExpense" xlink:to="lab_us-gaap_NonoperatingIncomeExpense" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DeferredCostsCurrent_01f123fe-ba64-4da4-954b-45001d8e7275_terseLabel_en-US" xlink:label="lab_us-gaap_DeferredCostsCurrent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred costs</link:label>
    <link:label id="lab_us-gaap_DeferredCostsCurrent_label_en-US" xlink:label="lab_us-gaap_DeferredCostsCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs, Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCostsCurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCostsCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DeferredCostsCurrent" xlink:to="lab_us-gaap_DeferredCostsCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsGross_ce26f61d-7cae-4af9-889c-963f316db3da_terseLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsGross" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Gross Carrying Amount</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsGross_label_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsGross" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Assets, Gross</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsGross" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsGross"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsGross" xlink:to="lab_us-gaap_FiniteLivedIntangibleAssetsGross" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OperatingLeaseRightOfUseAsset_c4f2ac89-0cb1-48e9-ae47-90389c30851a_terseLabel_en-US" xlink:label="lab_us-gaap_OperatingLeaseRightOfUseAsset" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating lease right-of-use assets</link:label>
    <link:label id="lab_us-gaap_OperatingLeaseRightOfUseAsset_label_en-US" xlink:label="lab_us-gaap_OperatingLeaseRightOfUseAsset" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating Lease, Right-of-Use Asset</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseRightOfUseAsset" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseRightOfUseAsset"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OperatingLeaseRightOfUseAsset" xlink:to="lab_us-gaap_OperatingLeaseRightOfUseAsset" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AccumulatedOtherComprehensiveIncomeMember_77c5e749-4e7c-4e31-be9b-5a57bd5c21b0_terseLabel_en-US" xlink:label="lab_us-gaap_AccumulatedOtherComprehensiveIncomeMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accumulated Other Comprehensive Loss</link:label>
    <link:label id="lab_us-gaap_AccumulatedOtherComprehensiveIncomeMember_label_en-US" xlink:label="lab_us-gaap_AccumulatedOtherComprehensiveIncomeMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">AOCI Attributable to Parent [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccumulatedOtherComprehensiveIncomeMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccumulatedOtherComprehensiveIncomeMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AccumulatedOtherComprehensiveIncomeMember" xlink:to="lab_us-gaap_AccumulatedOtherComprehensiveIncomeMember" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_DocumentTransitionReport_f1d1df83-0940-4ba7-a86c-5e178c30b3c4_terseLabel_en-US" xlink:label="lab_dei_DocumentTransitionReport" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Document Transition Report</link:label>
    <link:label id="lab_dei_DocumentTransitionReport_label_en-US" xlink:label="lab_dei_DocumentTransitionReport" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Document Transition Report</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_DocumentTransitionReport" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_DocumentTransitionReport"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_DocumentTransitionReport" xlink:to="lab_dei_DocumentTransitionReport" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_LocalPhoneNumber_8cecc26f-69d3-46a8-b0e7-98c01c064b66_terseLabel_en-US" xlink:label="lab_dei_LocalPhoneNumber" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Local Phone Number</link:label>
    <link:label id="lab_dei_LocalPhoneNumber_label_en-US" xlink:label="lab_dei_LocalPhoneNumber" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Local Phone Number</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_LocalPhoneNumber" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_LocalPhoneNumber"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_LocalPhoneNumber" xlink:to="lab_dei_LocalPhoneNumber" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock_c2c15f82-b4d2-460c-ba28-b4b33924dcf7_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stock Option Activity</link:label>
    <link:label id="lab_us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Payment Arrangement, Option, Activity [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock" xlink:to="lab_us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OperatingIncomeLoss_954345cd-c776-442e-b7e6-1a5637565f1d_totalLabel_en-US" xlink:label="lab_us-gaap_OperatingIncomeLoss" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income from operations</link:label>
    <link:label id="lab_us-gaap_OperatingIncomeLoss_label_en-US" xlink:label="lab_us-gaap_OperatingIncomeLoss" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating Income (Loss)</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingIncomeLoss" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingIncomeLoss"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OperatingIncomeLoss" xlink:to="lab_us-gaap_OperatingIncomeLoss" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_FulfillmentMember_6478aa58-e950-472d-bc62-2c8c78110ce7_terseLabel_en-US" xlink:label="lab_spsc_FulfillmentMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Fulfillment</link:label>
    <link:label id="lab_spsc_FulfillmentMember_label_en-US" xlink:label="lab_spsc_FulfillmentMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Fulfillment [Member]</link:label>
    <link:label id="lab_spsc_FulfillmentMember_documentation_en-US" xlink:label="lab_spsc_FulfillmentMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Fulfillment.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FulfillmentMember" xlink:href="spsc-20230331.xsd#spsc_FulfillmentMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_FulfillmentMember" xlink:to="lab_spsc_FulfillmentMember" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee_d65fed3c-c20c-4eb6-b434-080d52d3eccc_terseLabel_en-US" xlink:label="lab_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Maximum recognition period for miscellaneous one-time fee</link:label>
    <link:label id="lab_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee_label_en-US" xlink:label="lab_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Maximum Recognition Period For Miscellaneous One Time Fee</link:label>
    <link:label id="lab_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee_documentation_en-US" xlink:label="lab_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Maximum recognition period for miscellaneous one-time fee.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee" xlink:href="spsc-20230331.xsd#spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee" xlink:to="lab_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CommonStockSharesOutstanding_8438a940-597b-4bad-8b32-2e38157a3965_terseLabel_en-US" xlink:label="lab_us-gaap_CommonStockSharesOutstanding" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common stock, shares outstanding (in shares)</link:label>
    <link:label id="lab_us-gaap_CommonStockSharesOutstanding_50c6e674-d016-47bc-9b8e-d906aa11fc6d_periodStartLabel_en-US" xlink:label="lab_us-gaap_CommonStockSharesOutstanding" xlink:role="http://www.xbrl.org/2003/role/periodStartLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Beginning balance (in shares)</link:label>
    <link:label id="lab_us-gaap_CommonStockSharesOutstanding_74147201-f29f-4591-9db5-a3cade4a459e_periodEndLabel_en-US" xlink:label="lab_us-gaap_CommonStockSharesOutstanding" xlink:role="http://www.xbrl.org/2003/role/periodEndLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Ending balance (in shares)</link:label>
    <link:label id="lab_us-gaap_CommonStockSharesOutstanding_label_en-US" xlink:label="lab_us-gaap_CommonStockSharesOutstanding" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common Stock, Shares, Outstanding</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockSharesOutstanding" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockSharesOutstanding"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CommonStockSharesOutstanding" xlink:to="lab_us-gaap_CommonStockSharesOutstanding" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_Goodwill_e70f9491-a96f-47d3-8ddb-a07ec3e61252_terseLabel_en-US" xlink:label="lab_us-gaap_Goodwill" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Goodwill</link:label>
    <link:label id="lab_us-gaap_Goodwill_bb00e8ae-5eda-47d2-af41-f5693505a0de_periodStartLabel_en-US" xlink:label="lab_us-gaap_Goodwill" xlink:role="http://www.xbrl.org/2003/role/periodStartLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Balance, beginning of period</link:label>
    <link:label id="lab_us-gaap_Goodwill_cceac046-455a-4af9-a2af-08db633dee2e_periodEndLabel_en-US" xlink:label="lab_us-gaap_Goodwill" xlink:role="http://www.xbrl.org/2003/role/periodEndLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Balance, end of period</link:label>
    <link:label id="lab_us-gaap_Goodwill_label_en-US" xlink:label="lab_us-gaap_Goodwill" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Goodwill</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_Goodwill" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_Goodwill"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_Goodwill" xlink:to="lab_us-gaap_Goodwill" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentByTypeAxis_82bec485-e38d-404b-a82e-166b65805680_terseLabel_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentByTypeAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Long-Lived Tangible Asset [Axis]</link:label>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentByTypeAxis_label_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentByTypeAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Long-Lived Tangible Asset [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentByTypeAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentByTypeAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentByTypeAxis" xlink:to="lab_us-gaap_PropertyPlantAndEquipmentByTypeAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract_a23208fb-1aee-4a55-974b-ac15565d72c4_terseLabel_en-US" xlink:label="lab_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Reconciliation of net income to net cash provided by operating activities</link:label>
    <link:label id="lab_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract_label_en-US" xlink:label="lab_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Adjustments to Reconcile Net Income (Loss) to Cash Provided by (Used in) Operating Activities [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract" xlink:to="lab_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock_7a482a67-e49d-499b-a54a-e7841e31bb14_terseLabel_en-US" xlink:label="lab_us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Goodwill and Intangible Assets, Net</link:label>
    <link:label id="lab_us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock_label_en-US" xlink:label="lab_us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Goodwill and Intangible Assets Disclosure [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock" xlink:to="lab_us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncomeTaxExpenseBenefit_0dff70bb-e3f5-44bf-9a94-879c2dba74cc_terseLabel_en-US" xlink:label="lab_us-gaap_IncomeTaxExpenseBenefit" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income tax expense</link:label>
    <link:label id="lab_us-gaap_IncomeTaxExpenseBenefit_label_en-US" xlink:label="lab_us-gaap_IncomeTaxExpenseBenefit" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income Tax Expense (Benefit)</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeTaxExpenseBenefit" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeTaxExpenseBenefit"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncomeTaxExpenseBenefit" xlink:to="lab_us-gaap_IncomeTaxExpenseBenefit" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DeferredIncomeTaxLiabilitiesNet_26f32752-e0c7-4906-ace6-21958ad485ff_terseLabel_en-US" xlink:label="lab_us-gaap_DeferredIncomeTaxLiabilitiesNet" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred income tax liabilities</link:label>
    <link:label id="lab_us-gaap_DeferredIncomeTaxLiabilitiesNet_label_en-US" xlink:label="lab_us-gaap_DeferredIncomeTaxLiabilitiesNet" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Income Tax Liabilities, Net</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredIncomeTaxLiabilitiesNet" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredIncomeTaxLiabilitiesNet"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DeferredIncomeTaxLiabilitiesNet" xlink:to="lab_us-gaap_DeferredIncomeTaxLiabilitiesNet" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PreferredStockParOrStatedValuePerShare_f95a564e-3bea-42d5-bd59-b1793a9ac201_terseLabel_en-US" xlink:label="lab_us-gaap_PreferredStockParOrStatedValuePerShare" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Preferred stock, par value (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_PreferredStockParOrStatedValuePerShare_label_en-US" xlink:label="lab_us-gaap_PreferredStockParOrStatedValuePerShare" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Preferred Stock, Par or Stated Value Per Share</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PreferredStockParOrStatedValuePerShare" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PreferredStockParOrStatedValuePerShare"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PreferredStockParOrStatedValuePerShare" xlink:to="lab_us-gaap_PreferredStockParOrStatedValuePerShare" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour_d00a19d0-1af6-4ffc-8c2f-a2674a88f2eb_terseLabel_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2027</link:label>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour_label_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Lessee, Operating Lease, Liability, to be Paid, Year Four</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour" xlink:to="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_DeferredRevenueArrangementRollForward_be714ac7-050f-4be4-9af9-e354fc84d9ed_terseLabel_en-US" xlink:label="lab_spsc_DeferredRevenueArrangementRollForward" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Revenue Arrangement [Roll Forward]</link:label>
    <link:label id="lab_spsc_DeferredRevenueArrangementRollForward_label_en-US" xlink:label="lab_spsc_DeferredRevenueArrangementRollForward" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Revenue Arrangement [Roll Forward]</link:label>
    <link:label id="lab_spsc_DeferredRevenueArrangementRollForward_documentation_en-US" xlink:label="lab_spsc_DeferredRevenueArrangementRollForward" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Revenue Arrangement</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredRevenueArrangementRollForward" xlink:href="spsc-20230331.xsd#spsc_DeferredRevenueArrangementRollForward"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_DeferredRevenueArrangementRollForward" xlink:to="lab_spsc_DeferredRevenueArrangementRollForward" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncomeStatementAbstract_521b0756-8e44-4ba5-a3bd-a9727ecf36de_terseLabel_en-US" xlink:label="lab_us-gaap_IncomeStatementAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income Statement [Abstract]</link:label>
    <link:label id="lab_us-gaap_IncomeStatementAbstract_label_en-US" xlink:label="lab_us-gaap_IncomeStatementAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income Statement [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeStatementAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeStatementAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncomeStatementAbstract" xlink:to="lab_us-gaap_IncomeStatementAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross_e357e3fc-f011-4274-9f49-e1b98ac59c23_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Granted (in shares)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Grants in Period, Gross</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AdditionalPaidInCapitalMember_2fbe83fd-440e-4b6c-a34f-8726e9958406_terseLabel_en-US" xlink:label="lab_us-gaap_AdditionalPaidInCapitalMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Additional Paid-in Capital</link:label>
    <link:label id="lab_us-gaap_AdditionalPaidInCapitalMember_label_en-US" xlink:label="lab_us-gaap_AdditionalPaidInCapitalMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Additional Paid-in Capital [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AdditionalPaidInCapitalMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AdditionalPaidInCapitalMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AdditionalPaidInCapitalMember" xlink:to="lab_us-gaap_AdditionalPaidInCapitalMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_BalanceSheetLocationDomain_11fe5d05-7983-4615-aa1d-64f76dd6340a_terseLabel_en-US" xlink:label="lab_us-gaap_BalanceSheetLocationDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Balance Sheet Location [Domain]</link:label>
    <link:label id="lab_us-gaap_BalanceSheetLocationDomain_label_en-US" xlink:label="lab_us-gaap_BalanceSheetLocationDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Balance Sheet Location [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BalanceSheetLocationDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BalanceSheetLocationDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_BalanceSheetLocationDomain" xlink:to="lab_us-gaap_BalanceSheetLocationDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_DocumentFiscalPeriodFocus_a509064f-c132-4727-a994-edc838fcca44_verboseLabel_en-US" xlink:label="lab_dei_DocumentFiscalPeriodFocus" xlink:role="http://www.xbrl.org/2003/role/verboseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Document Fiscal Period Focus</link:label>
    <link:label id="lab_dei_DocumentFiscalPeriodFocus_label_en-US" xlink:label="lab_dei_DocumentFiscalPeriodFocus" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Document Fiscal Period Focus</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_DocumentFiscalPeriodFocus" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_DocumentFiscalPeriodFocus"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_DocumentFiscalPeriodFocus" xlink:to="lab_dei_DocumentFiscalPeriodFocus" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_OtherMember_15961f42-a39d-41c2-aeb4-541bb6a94311_terseLabel_en-US" xlink:label="lab_spsc_OtherMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other</link:label>
    <link:label id="lab_spsc_OtherMember_label_en-US" xlink:label="lab_spsc_OtherMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other [Member]</link:label>
    <link:label id="lab_spsc_OtherMember_documentation_en-US" xlink:label="lab_spsc_OtherMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_OtherMember" xlink:href="spsc-20230331.xsd#spsc_OtherMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_OtherMember" xlink:to="lab_spsc_OtherMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding_429ff09f-c55c-4da4-90b5-97a61a299a67_terseLabel_en-US" xlink:label="lab_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Diluted (in shares)</link:label>
    <link:label id="lab_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding_c2e10335-5418-4fa8-9038-9f40c5bc3ec8_totalLabel_en-US" xlink:label="lab_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted average common shares outstanding, diluted (in shares)</link:label>
    <link:label id="lab_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding_label_en-US" xlink:label="lab_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted Average Number of Shares Outstanding, Diluted</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding" xlink:to="lab_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment_0e3de343-10b8-413a-ac63-e8ddcc121c2c_negatedTerseLabel_en-US" xlink:label="lab_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment" xlink:role="http://www.xbrl.org/2009/role/negatedTerseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Less: accumulated depreciation and amortization</link:label>
    <link:label id="lab_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment_label_en-US" xlink:label="lab_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accumulated Depreciation, Depletion and Amortization, Property, Plant, and Equipment</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment" xlink:to="lab_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1_408ddf2a-86b2-47d8-9f00-2fd435bc4786_terseLabel_en-US" xlink:label="lab_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Life (in years)</link:label>
    <link:label id="lab_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1_label_en-US" xlink:label="lab_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Fair Value Assumptions, Expected Term</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1" xlink:to="lab_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock_e8a9ac29-0753-4204-8340-cae58f536ee9_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounting Pronouncements Note Yet Adopted</link:label>
    <link:label id="lab_us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounting Standards Update and Change in Accounting Principle [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock" xlink:to="lab_us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ArrangementsAndNonarrangementTransactionsMember_ea6722ad-f421-4604-962a-9a7960e142ec_terseLabel_en-US" xlink:label="lab_us-gaap_ArrangementsAndNonarrangementTransactionsMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Collaborative Arrangement and Arrangement Other than Collaborative</link:label>
    <link:label id="lab_us-gaap_ArrangementsAndNonarrangementTransactionsMember_label_en-US" xlink:label="lab_us-gaap_ArrangementsAndNonarrangementTransactionsMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Collaborative Arrangement and Arrangement Other than Collaborative [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ArrangementsAndNonarrangementTransactionsMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ArrangementsAndNonarrangementTransactionsMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ArrangementsAndNonarrangementTransactionsMember" xlink:to="lab_us-gaap_ArrangementsAndNonarrangementTransactionsMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems_cf267a86-3852-42f9-b6c1-98cb9110e23a_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Financial Instruments [Line Items]</link:label>
    <link:label id="lab_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems_label_en-US" xlink:label="lab_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Debt Securities, Available-for-Sale [Line Items]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems" xlink:to="lab_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward_a9dd0f9a-5950-44af-8661-632773bc3d39_terseLabel_en-US" xlink:label="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts Receivable, Allowance for Credit Loss [Roll Forward]</link:label>
    <link:label id="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward_label_en-US" xlink:label="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts Receivable, Allowance for Credit Loss [Roll Forward]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward" xlink:to="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CommonStockValue_b1baa67e-218a-4127-9d0f-205f67769227_terseLabel_en-US" xlink:label="lab_us-gaap_CommonStockValue" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common stock, $0.001 par value; 110,000,000 shares authorized; 38,683,854 and 38,309,144 shares issued; and 36,532,756 and 36,158,046 shares outstanding, respectively</link:label>
    <link:label id="lab_us-gaap_CommonStockValue_label_en-US" xlink:label="lab_us-gaap_CommonStockValue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common Stock, Value, Issued</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockValue" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockValue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CommonStockValue" xlink:to="lab_us-gaap_CommonStockValue" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_IncreaseDecreaseInOperatingLeases_b7a4bdbf-b27e-4b97-998f-c26a0c49d78c_terseLabel_en-US" xlink:label="lab_spsc_IncreaseDecreaseInOperatingLeases" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating leases</link:label>
    <link:label id="lab_spsc_IncreaseDecreaseInOperatingLeases_label_en-US" xlink:label="lab_spsc_IncreaseDecreaseInOperatingLeases" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Increase (Decrease) In Operating Leases</link:label>
    <link:label id="lab_spsc_IncreaseDecreaseInOperatingLeases_documentation_en-US" xlink:label="lab_spsc_IncreaseDecreaseInOperatingLeases" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Increase decrease in operating leases.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_IncreaseDecreaseInOperatingLeases" xlink:href="spsc-20230331.xsd#spsc_IncreaseDecreaseInOperatingLeases"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_IncreaseDecreaseInOperatingLeases" xlink:to="lab_spsc_IncreaseDecreaseInOperatingLeases" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_BusinessAcquisitionAcquireeDomain_31cb98e6-300c-41eb-846a-25a1fccecc0b_terseLabel_en-US" xlink:label="lab_us-gaap_BusinessAcquisitionAcquireeDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Acquisition, Acquiree</link:label>
    <link:label id="lab_us-gaap_BusinessAcquisitionAcquireeDomain_label_en-US" xlink:label="lab_us-gaap_BusinessAcquisitionAcquireeDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Acquisition, Acquiree [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessAcquisitionAcquireeDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessAcquisitionAcquireeDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_BusinessAcquisitionAcquireeDomain" xlink:to="lab_us-gaap_BusinessAcquisitionAcquireeDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue_959e1325-8fa5-4152-8282-42e67df37a29_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Granted (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Grants in Period, Weighted Average Grant Date Fair Value</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock_e6038bea-4e6a-4180-8837-9fe3a959c246_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Anti-dilutive Common Shares Excluded from Calculation of Diluted Net Income Per Share</link:label>
    <link:label id="lab_us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Antidilutive Securities Excluded from Computation of Earnings Per Share [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock" xlink:to="lab_us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PreferredStockSharesAuthorized_e86c05ea-e519-4ea6-a0cc-19eb49390b5f_terseLabel_en-US" xlink:label="lab_us-gaap_PreferredStockSharesAuthorized" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Preferred stock, shares authorized (in shares)</link:label>
    <link:label id="lab_us-gaap_PreferredStockSharesAuthorized_label_en-US" xlink:label="lab_us-gaap_PreferredStockSharesAuthorized" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Preferred Stock, Shares Authorized</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PreferredStockSharesAuthorized" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PreferredStockSharesAuthorized"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PreferredStockSharesAuthorized" xlink:to="lab_us-gaap_PreferredStockSharesAuthorized" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CommitmentsAndContingenciesDisclosureTextBlock_359ab4fc-f383-48a2-a6ca-b3d995358b41_terseLabel_en-US" xlink:label="lab_us-gaap_CommitmentsAndContingenciesDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Commitments and Contingencies</link:label>
    <link:label id="lab_us-gaap_CommitmentsAndContingenciesDisclosureTextBlock_label_en-US" xlink:label="lab_us-gaap_CommitmentsAndContingenciesDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Commitments and Contingencies Disclosure [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingenciesDisclosureTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingenciesDisclosureTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureTextBlock" xlink:to="lab_us-gaap_CommitmentsAndContingenciesDisclosureTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LiabilitiesCurrentAbstract_6872fae5-dcc1-4044-8f4f-ffce9b60159c_terseLabel_en-US" xlink:label="lab_us-gaap_LiabilitiesCurrentAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Current liabilities</link:label>
    <link:label id="lab_us-gaap_LiabilitiesCurrentAbstract_label_en-US" xlink:label="lab_us-gaap_LiabilitiesCurrentAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Liabilities, Current [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LiabilitiesCurrentAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LiabilitiesCurrentAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LiabilitiesCurrentAbstract" xlink:to="lab_us-gaap_LiabilitiesCurrentAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ProceedsFromStockOptionsExercised_9867d859-cb5c-457c-ae51-dd5d3ce2de65_terseLabel_en-US" xlink:label="lab_us-gaap_ProceedsFromStockOptionsExercised" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net proceeds from exercise of options to purchase common stock</link:label>
    <link:label id="lab_us-gaap_ProceedsFromStockOptionsExercised_label_en-US" xlink:label="lab_us-gaap_ProceedsFromStockOptionsExercised" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Proceeds from Stock Options Exercised</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProceedsFromStockOptionsExercised" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProceedsFromStockOptionsExercised"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ProceedsFromStockOptionsExercised" xlink:to="lab_us-gaap_ProceedsFromStockOptionsExercised" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CommonStockSharesIssued_84c03e64-bd0a-4a83-94d1-a5d242029f72_terseLabel_en-US" xlink:label="lab_us-gaap_CommonStockSharesIssued" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common stock, shares issued (in shares)</link:label>
    <link:label id="lab_us-gaap_CommonStockSharesIssued_label_en-US" xlink:label="lab_us-gaap_CommonStockSharesIssued" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common Stock, Shares, Issued</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockSharesIssued" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockSharesIssued"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CommonStockSharesIssued" xlink:to="lab_us-gaap_CommonStockSharesIssued" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_OfficeEquipmentAndFurnitureMember_6077f436-0a9e-4dba-8224-ebdb7ca6cb99_terseLabel_en-US" xlink:label="lab_spsc_OfficeEquipmentAndFurnitureMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Office equipment and furniture</link:label>
    <link:label id="lab_spsc_OfficeEquipmentAndFurnitureMember_label_en-US" xlink:label="lab_spsc_OfficeEquipmentAndFurnitureMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Office Equipment And Furniture [Member]</link:label>
    <link:label id="lab_spsc_OfficeEquipmentAndFurnitureMember_documentation_en-US" xlink:label="lab_spsc_OfficeEquipmentAndFurnitureMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Office Equipment And Furniture</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_OfficeEquipmentAndFurnitureMember" xlink:href="spsc-20230331.xsd#spsc_OfficeEquipmentAndFurnitureMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_OfficeEquipmentAndFurnitureMember" xlink:to="lab_spsc_OfficeEquipmentAndFurnitureMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ContractWithCustomerLiabilityCurrent_7c61d17c-06db-4680-8816-e0c8e47114a5_terseLabel_en-US" xlink:label="lab_us-gaap_ContractWithCustomerLiabilityCurrent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred revenue</link:label>
    <link:label id="lab_us-gaap_ContractWithCustomerLiabilityCurrent_label_en-US" xlink:label="lab_us-gaap_ContractWithCustomerLiabilityCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Contract with Customer, Liability, Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerLiabilityCurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerLiabilityCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ContractWithCustomerLiabilityCurrent" xlink:to="lab_us-gaap_ContractWithCustomerLiabilityCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CashEquivalentsMember_94055a0e-c319-4f2a-8f79-6e4830d832c3_terseLabel_en-US" xlink:label="lab_us-gaap_CashEquivalentsMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash Equivalents</link:label>
    <link:label id="lab_us-gaap_CashEquivalentsMember_label_en-US" xlink:label="lab_us-gaap_CashEquivalentsMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash Equivalents [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CashEquivalentsMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CashEquivalentsMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CashEquivalentsMember" xlink:to="lab_us-gaap_CashEquivalentsMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax_6ea5df1c-a0fc-4717-907f-4686f041466e_terseLabel_en-US" xlink:label="lab_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Realized gain from foreign currency on cash and investments held</link:label>
    <link:label id="lab_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax_label_en-US" xlink:label="lab_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Foreign Currency Transaction Gain (Loss), before Tax</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ForeignCurrencyTransactionGainLossBeforeTax"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax" xlink:to="lab_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncomeStatementLocationDomain_d0b2c997-683b-4178-8730-6915546666d6_terseLabel_en-US" xlink:label="lab_us-gaap_IncomeStatementLocationDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income Statement Location</link:label>
    <link:label id="lab_us-gaap_IncomeStatementLocationDomain_label_en-US" xlink:label="lab_us-gaap_IncomeStatementLocationDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Income Statement Location [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeStatementLocationDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeStatementLocationDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncomeStatementLocationDomain" xlink:to="lab_us-gaap_IncomeStatementLocationDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_EmployeeStockPurchasePlanMember_d25a0dec-d4e8-46ed-9a74-2af303ad401e_verboseLabel_en-US" xlink:label="lab_spsc_EmployeeStockPurchasePlanMember" xlink:role="http://www.xbrl.org/2003/role/verboseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">ESPP</link:label>
    <link:label id="lab_spsc_EmployeeStockPurchasePlanMember_label_en-US" xlink:label="lab_spsc_EmployeeStockPurchasePlanMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Employee Stock Purchase Plan [Member]</link:label>
    <link:label id="lab_spsc_EmployeeStockPurchasePlanMember_documentation_en-US" xlink:label="lab_spsc_EmployeeStockPurchasePlanMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Employee stock purchase plan.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_EmployeeStockPurchasePlanMember" xlink:href="spsc-20230331.xsd#spsc_EmployeeStockPurchasePlanMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_EmployeeStockPurchasePlanMember" xlink:to="lab_spsc_EmployeeStockPurchasePlanMember" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_AmendmentFlag_fbc513f5-f52a-44c2-a69f-f44946029d1c_terseLabel_en-US" xlink:label="lab_dei_AmendmentFlag" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Amendment Flag</link:label>
    <link:label id="lab_dei_AmendmentFlag_label_en-US" xlink:label="lab_dei_AmendmentFlag" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Amendment Flag</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_AmendmentFlag" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_AmendmentFlag"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_AmendmentFlag" xlink:to="lab_dei_AmendmentFlag" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_NetCashProvidedByUsedInInvestingActivities_fa881769-1b96-4f35-a3a6-b5351a6c2bdf_totalLabel_en-US" xlink:label="lab_us-gaap_NetCashProvidedByUsedInInvestingActivities" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net cash provided by (used in) investing activities</link:label>
    <link:label id="lab_us-gaap_NetCashProvidedByUsedInInvestingActivities_label_en-US" xlink:label="lab_us-gaap_NetCashProvidedByUsedInInvestingActivities" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net Cash Provided by (Used in) Investing Activities</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInInvestingActivities" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInInvestingActivities"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_NetCashProvidedByUsedInInvestingActivities" xlink:to="lab_us-gaap_NetCashProvidedByUsedInInvestingActivities" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OperatingLeaseCost_eaadc36b-1693-4ff8-8209-4c698bbf67f9_terseLabel_en-US" xlink:label="lab_us-gaap_OperatingLeaseCost" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating lease cost</link:label>
    <link:label id="lab_us-gaap_OperatingLeaseCost_label_en-US" xlink:label="lab_us-gaap_OperatingLeaseCost" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating Lease, Cost</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseCost" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseCost"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OperatingLeaseCost" xlink:to="lab_us-gaap_OperatingLeaseCost" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1_98c7fed1-21d1-465f-9d8f-d88aca5412bd_terseLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted Average Remaining Amortization Period</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1_label_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Assets, Remaining Amortization Period</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1" xlink:to="lab_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan_95e381fb-4ee4-4b9f-ad94-38f2fe4eac62_terseLabel_en-US" xlink:label="lab_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Employee stock purchase plan activity</link:label>
    <link:label id="lab_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan_label_en-US" xlink:label="lab_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stock Issued During Period, Value, Employee Stock Purchase Plan</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan" xlink:to="lab_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ComprehensiveIncomeNetOfTax_b2a41220-204a-464b-a63d-7a46b386dad9_totalLabel_en-US" xlink:label="lab_us-gaap_ComprehensiveIncomeNetOfTax" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Comprehensive income</link:label>
    <link:label id="lab_us-gaap_ComprehensiveIncomeNetOfTax_label_en-US" xlink:label="lab_us-gaap_ComprehensiveIncomeNetOfTax" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Comprehensive Income (Loss), Net of Tax, Attributable to Parent</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ComprehensiveIncomeNetOfTax" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ComprehensiveIncomeNetOfTax"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ComprehensiveIncomeNetOfTax" xlink:to="lab_us-gaap_ComprehensiveIncomeNetOfTax" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityCurrentReportingStatus_3c15027c-e3b3-43f6-ac8f-de5ee9a7eaac_terseLabel_en-US" xlink:label="lab_dei_EntityCurrentReportingStatus" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Current Reporting Status</link:label>
    <link:label id="lab_dei_EntityCurrentReportingStatus_label_en-US" xlink:label="lab_dei_EntityCurrentReportingStatus" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Current Reporting Status</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityCurrentReportingStatus" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityCurrentReportingStatus"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityCurrentReportingStatus" xlink:to="lab_dei_EntityCurrentReportingStatus" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_e3406316-3b36-4f25-befa-ce83f6f02cbd_terseLabel_en-US" xlink:label="lab_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Goodwill and Intangible Assets Disclosure [Abstract]</link:label>
    <link:label id="lab_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_label_en-US" xlink:label="lab_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Goodwill and Intangible Assets Disclosure [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract" xlink:to="lab_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherAssetsNoncurrent_593d4dc0-bf80-4bf7-86c1-662597b87d80_terseLabel_en-US" xlink:label="lab_us-gaap_OtherAssetsNoncurrent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other assets, non-current</link:label>
    <link:label id="lab_us-gaap_OtherAssetsNoncurrent_label_en-US" xlink:label="lab_us-gaap_OtherAssetsNoncurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Assets, Noncurrent</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherAssetsNoncurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherAssetsNoncurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherAssetsNoncurrent" xlink:to="lab_us-gaap_OtherAssetsNoncurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_DeferredRevenueInvoicedSetUpFees_45e308ef-9a23-4566-a1fc-8b0643737845_terseLabel_en-US" xlink:label="lab_spsc_DeferredRevenueInvoicedSetUpFees" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Invoiced set-up fees</link:label>
    <link:label id="lab_spsc_DeferredRevenueInvoicedSetUpFees_label_en-US" xlink:label="lab_spsc_DeferredRevenueInvoicedSetUpFees" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Revenue Invoiced Set Up Fees</link:label>
    <link:label id="lab_spsc_DeferredRevenueInvoicedSetUpFees_documentation_en-US" xlink:label="lab_spsc_DeferredRevenueInvoicedSetUpFees" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred revenue Invoiced set up fees.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredRevenueInvoicedSetUpFees" xlink:href="spsc-20230331.xsd#spsc_DeferredRevenueInvoicedSetUpFees"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_DeferredRevenueInvoicedSetUpFees" xlink:to="lab_spsc_DeferredRevenueInvoicedSetUpFees" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities_651750b5-1fb6-43f9-92b7-aed13fc8cef4_terseLabel_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accrued compensation</link:label>
    <link:label id="lab_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities_label_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Increase (Decrease) in Employee Related Liabilities</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities" xlink:to="lab_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber_26bf55e2-e6bf-4a9e-93a5-985e4a4d84a8_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Outstanding and exercisable options (in shares)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Exercisable, Number</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DepreciationDepletionAndAmortization_53ed2755-e31b-40a2-8039-7b7d75c56a28_terseLabel_en-US" xlink:label="lab_us-gaap_DepreciationDepletionAndAmortization" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Depreciation and amortization of property and equipment</link:label>
    <link:label id="lab_us-gaap_DepreciationDepletionAndAmortization_label_en-US" xlink:label="lab_us-gaap_DepreciationDepletionAndAmortization" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Depreciation, Depletion and Amortization</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DepreciationDepletionAndAmortization" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DepreciationDepletionAndAmortization"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DepreciationDepletionAndAmortization" xlink:to="lab_us-gaap_DepreciationDepletionAndAmortization" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DisaggregationOfRevenueTable_15753e7a-5151-47b2-85c0-5de02945604b_terseLabel_en-US" xlink:label="lab_us-gaap_DisaggregationOfRevenueTable" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Disaggregation Of Revenue [Table]</link:label>
    <link:label id="lab_us-gaap_DisaggregationOfRevenueTable_label_en-US" xlink:label="lab_us-gaap_DisaggregationOfRevenueTable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Disaggregation of Revenue [Table]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisaggregationOfRevenueTable" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisaggregationOfRevenueTable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DisaggregationOfRevenueTable" xlink:to="lab_us-gaap_DisaggregationOfRevenueTable" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ContractWithCustomerDurationAxis_0f050a74-8c56-47b5-9960-6a1ce60f78e7_terseLabel_en-US" xlink:label="lab_us-gaap_ContractWithCustomerDurationAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Contract with Customer, Duration</link:label>
    <link:label id="lab_us-gaap_ContractWithCustomerDurationAxis_label_en-US" xlink:label="lab_us-gaap_ContractWithCustomerDurationAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Contract with Customer, Duration [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerDurationAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerDurationAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ContractWithCustomerDurationAxis" xlink:to="lab_us-gaap_ContractWithCustomerDurationAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_BusinessDescriptionPolicyPolicyTextBlock_9202962a-8353-4d5a-8606-253080ce035f_terseLabel_en-US" xlink:label="lab_spsc_BusinessDescriptionPolicyPolicyTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Description</link:label>
    <link:label id="lab_spsc_BusinessDescriptionPolicyPolicyTextBlock_label_en-US" xlink:label="lab_spsc_BusinessDescriptionPolicyPolicyTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Description Policy [Policy Text Block]</link:label>
    <link:label id="lab_spsc_BusinessDescriptionPolicyPolicyTextBlock_documentation_en-US" xlink:label="lab_spsc_BusinessDescriptionPolicyPolicyTextBlock" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business description policy.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_BusinessDescriptionPolicyPolicyTextBlock" xlink:href="spsc-20230331.xsd#spsc_BusinessDescriptionPolicyPolicyTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_BusinessDescriptionPolicyPolicyTextBlock" xlink:to="lab_spsc_BusinessDescriptionPolicyPolicyTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_DeferredCostsRollForward_50bcb5c3-cd21-4937-b906-e5754ef6ecdb_terseLabel_en-US" xlink:label="lab_spsc_DeferredCostsRollForward" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs [Roll Forward]</link:label>
    <link:label id="lab_spsc_DeferredCostsRollForward_label_en-US" xlink:label="lab_spsc_DeferredCostsRollForward" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs [Roll Forward]</link:label>
    <link:label id="lab_spsc_DeferredCostsRollForward_documentation_en-US" xlink:label="lab_spsc_DeferredCostsRollForward" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredCostsRollForward" xlink:href="spsc-20230331.xsd#spsc_DeferredCostsRollForward"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_DeferredCostsRollForward" xlink:to="lab_spsc_DeferredCostsRollForward" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss_b885e86a-b7f7-45b3-afc8-bceb94d2c8cb_terseLabel_en-US" xlink:label="lab_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Foreign Currency Translation</link:label>
    <link:label id="lab_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss_label_en-US" xlink:label="lab_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite Lived Intangible Assets Accumulated Foreign Currency Translation Gain Loss</link:label>
    <link:label id="lab_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss_documentation_en-US" xlink:label="lab_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite lived intangible assets accumulated foreign currency translation gain (loss).</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" xlink:href="spsc-20230331.xsd#spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" xlink:to="lab_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans_17132c60-78fc-4a94-87b5-2072530d401b_terseLabel_en-US" xlink:label="lab_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Employee stock purchase plan activity (in shares)</link:label>
    <link:label id="lab_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans_label_en-US" xlink:label="lab_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stock Issued During Period, Shares, Employee Stock Purchase Plans</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans" xlink:to="lab_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber_a08097d0-396f-45e5-a4f8-e0cc17c7c3c4_periodStartLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber" xlink:role="http://www.xbrl.org/2003/role/periodStartLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Outstanding, beginning of period (in shares)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber_fc7f494d-c70e-4ec8-a7ae-f346a3c4cc0f_periodEndLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber" xlink:role="http://www.xbrl.org/2003/role/periodEndLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Outstanding, end of period (in shares)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding, Number</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityIncorporationStateCountryCode_23ee2da2-abac-4dd3-ae95-2e9dfc1dfe09_terseLabel_en-US" xlink:label="lab_dei_EntityIncorporationStateCountryCode" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Incorporation, State or Country Code</link:label>
    <link:label id="lab_dei_EntityIncorporationStateCountryCode_label_en-US" xlink:label="lab_dei_EntityIncorporationStateCountryCode" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Incorporation, State or Country Code</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityIncorporationStateCountryCode" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityIncorporationStateCountryCode"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityIncorporationStateCountryCode" xlink:to="lab_dei_EntityIncorporationStateCountryCode" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_BasisOfAccountingPolicyPolicyTextBlock_cef966a3-e920-4940-ba33-e59f394c8185_terseLabel_en-US" xlink:label="lab_us-gaap_BasisOfAccountingPolicyPolicyTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Basis of Presentation</link:label>
    <link:label id="lab_us-gaap_BasisOfAccountingPolicyPolicyTextBlock_label_en-US" xlink:label="lab_us-gaap_BasisOfAccountingPolicyPolicyTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Basis of Accounting, Policy [Policy Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BasisOfAccountingPolicyPolicyTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BasisOfAccountingPolicyPolicyTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_BasisOfAccountingPolicyPolicyTextBlock" xlink:to="lab_us-gaap_BasisOfAccountingPolicyPolicyTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentNet_be25972a-feee-431a-9f37-a3f406b3496c_terseLabel_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentNet" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property and equipment, net</link:label>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentNet_4cc283c6-dd28-431e-9006-b24e2e8c3cdb_totalLabel_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentNet" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property and equipment, net</link:label>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentNet_label_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentNet" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property, Plant and Equipment, Net</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentNet" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentNet"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentNet" xlink:to="lab_us-gaap_PropertyPlantAndEquipmentNet" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OperatingLeasePayments_05b2f846-34fa-4b39-bc07-fe39ff4da383_terseLabel_en-US" xlink:label="lab_us-gaap_OperatingLeasePayments" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating cash flows from operating leases</link:label>
    <link:label id="lab_us-gaap_OperatingLeasePayments_label_en-US" xlink:label="lab_us-gaap_OperatingLeasePayments" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating Lease, Payments</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeasePayments" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeasePayments"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OperatingLeasePayments" xlink:to="lab_us-gaap_OperatingLeasePayments" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock_b28658f9-98a9-46c2-9c44-12bf43f9f6c9_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Estimated Future Annual Amortization Expense Related to Intangible Assets Subject to Amortization</link:label>
    <link:label id="lab_us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Finite-Lived Intangible Assets, Future Amortization Expense [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock" xlink:to="lab_us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_SellingAndMarketingExpenseMember_efa461a8-1ebe-4528-b33c-1e32e06b5414_terseLabel_en-US" xlink:label="lab_us-gaap_SellingAndMarketingExpenseMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Sales and marketing</link:label>
    <link:label id="lab_us-gaap_SellingAndMarketingExpenseMember_label_en-US" xlink:label="lab_us-gaap_SellingAndMarketingExpenseMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Selling and Marketing Expense [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SellingAndMarketingExpenseMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SellingAndMarketingExpenseMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_SellingAndMarketingExpenseMember" xlink:to="lab_us-gaap_SellingAndMarketingExpenseMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EmployeeStockOptionMember_8b401dac-180e-4749-bc84-100ce014cc8f_terseLabel_en-US" xlink:label="lab_us-gaap_EmployeeStockOptionMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stock options</link:label>
    <link:label id="lab_us-gaap_EmployeeStockOptionMember_label_en-US" xlink:label="lab_us-gaap_EmployeeStockOptionMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Payment Arrangement, Option [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockOptionMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockOptionMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EmployeeStockOptionMember" xlink:to="lab_us-gaap_EmployeeStockOptionMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate_0473c727-1887-4b5e-ad32-3c7bb9ff9b0d_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Volatility</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Fair Value Assumptions, Expected Volatility Rate</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent_bbc10d2b-7b41-44b1-be6f-1696fcfd5847_negatedLabel_en-US" xlink:label="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Allowance for credit losses</link:label>
    <link:label id="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent_a75bb2c4-beed-4a03-b3bd-4e918f803cab_periodStartLabel_en-US" xlink:label="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent" xlink:role="http://www.xbrl.org/2003/role/periodStartLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Balance, beginning of period</link:label>
    <link:label id="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent_c9601615-369c-459c-a01f-93d55baa2fbc_periodEndLabel_en-US" xlink:label="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent" xlink:role="http://www.xbrl.org/2003/role/periodEndLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Balance, end of period</link:label>
    <link:label id="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent_label_en-US" xlink:label="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts Receivable, Allowance for Credit Loss, Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent" xlink:to="lab_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherNonoperatingIncomeExpense_96bbe58f-d3ed-4005-85dc-41b13da00762_terseLabel_en-US" xlink:label="lab_us-gaap_OtherNonoperatingIncomeExpense" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other income (expense), net</link:label>
    <link:label id="lab_us-gaap_OtherNonoperatingIncomeExpense_label_en-US" xlink:label="lab_us-gaap_OtherNonoperatingIncomeExpense" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Nonoperating Income (Expense)</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherNonoperatingIncomeExpense" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherNonoperatingIncomeExpense"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherNonoperatingIncomeExpense" xlink:to="lab_us-gaap_OtherNonoperatingIncomeExpense" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod_ede80058-0b0c-4da4-b302-0f5cda514952_negatedLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Forfeited (in shares)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Forfeited in Period</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_BalanceSheetLocationAxis_0143a9f1-56b4-4e5a-aac6-c9c3fd15b35d_terseLabel_en-US" xlink:label="lab_us-gaap_BalanceSheetLocationAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Balance Sheet Location [Axis]</link:label>
    <link:label id="lab_us-gaap_BalanceSheetLocationAxis_label_en-US" xlink:label="lab_us-gaap_BalanceSheetLocationAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Balance Sheet Location [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BalanceSheetLocationAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BalanceSheetLocationAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_BalanceSheetLocationAxis" xlink:to="lab_us-gaap_BalanceSheetLocationAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_OneTimeRevenuesMember_a648cf83-e7ba-4f72-b8aa-8d91df55e834_terseLabel_en-US" xlink:label="lab_spsc_OneTimeRevenuesMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">One-time revenues</link:label>
    <link:label id="lab_spsc_OneTimeRevenuesMember_label_en-US" xlink:label="lab_spsc_OneTimeRevenuesMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">One Time Revenues [Member]</link:label>
    <link:label id="lab_spsc_OneTimeRevenuesMember_documentation_en-US" xlink:label="lab_spsc_OneTimeRevenuesMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">One time revenues.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_OneTimeRevenuesMember" xlink:href="spsc-20230331.xsd#spsc_OneTimeRevenuesMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_OneTimeRevenuesMember" xlink:to="lab_spsc_OneTimeRevenuesMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CommonStockSharesAuthorized_b9f3c246-e89c-4237-8eaa-12fa061114ca_terseLabel_en-US" xlink:label="lab_us-gaap_CommonStockSharesAuthorized" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common stock, shares authorized (in shares)</link:label>
    <link:label id="lab_us-gaap_CommonStockSharesAuthorized_label_en-US" xlink:label="lab_us-gaap_CommonStockSharesAuthorized" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common Stock, Shares Authorized</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockSharesAuthorized" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockSharesAuthorized"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CommonStockSharesAuthorized" xlink:to="lab_us-gaap_CommonStockSharesAuthorized" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OperatingExpenses_cf336d3c-96eb-40e8-8fe0-36dbda23e28e_totalLabel_en-US" xlink:label="lab_us-gaap_OperatingExpenses" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Total operating expenses</link:label>
    <link:label id="lab_us-gaap_OperatingExpenses_label_en-US" xlink:label="lab_us-gaap_OperatingExpenses" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating Expenses</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingExpenses" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingExpenses"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OperatingExpenses" xlink:to="lab_us-gaap_OperatingExpenses" xlink:type="arc" order="1"/>
    <link:label id="lab_srt_MaximumMember_a58fd5b8-bae3-4815-9861-3989ed792d20_terseLabel_en-US" xlink:label="lab_srt_MaximumMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Maximum</link:label>
    <link:label id="lab_srt_MaximumMember_label_en-US" xlink:label="lab_srt_MaximumMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Maximum [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_srt_MaximumMember" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_MaximumMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_srt_MaximumMember" xlink:to="lab_srt_MaximumMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax_9638f983-3a66-493f-a4ad-ec0f67bdd0b9_terseLabel_en-US" xlink:label="lab_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accumulated other comprehensive loss</link:label>
    <link:label id="lab_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax_label_en-US" xlink:label="lab_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accumulated Other Comprehensive Income (Loss), Net of Tax</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax" xlink:to="lab_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable_10cb3cee-b098-484f-ba21-2823ea79b151_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Business Acquisitions, by Acquisition [Table]</link:label>
    <link:label id="lab_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable_label_en-US" xlink:label="lab_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Business Acquisitions, by Acquisition [Table]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable" xlink:to="lab_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CashAndCashEquivalentsAtCarryingValue_e9897acd-4447-46b6-af3a-94d33c9ef0af_terseLabel_en-US" xlink:label="lab_us-gaap_CashAndCashEquivalentsAtCarryingValue" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash and cash equivalents</link:label>
    <link:label id="lab_us-gaap_CashAndCashEquivalentsAtCarryingValue_label_en-US" xlink:label="lab_us-gaap_CashAndCashEquivalentsAtCarryingValue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash and Cash Equivalents, at Carrying Value</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CashAndCashEquivalentsAtCarryingValue" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CashAndCashEquivalentsAtCarryingValue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CashAndCashEquivalentsAtCarryingValue" xlink:to="lab_us-gaap_CashAndCashEquivalentsAtCarryingValue" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncreaseDecreaseInContractWithCustomerLiability_02fb80f3-9c38-4ee6-a3b1-2bad66ff47ce_terseLabel_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInContractWithCustomerLiability" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred revenue</link:label>
    <link:label id="lab_us-gaap_IncreaseDecreaseInContractWithCustomerLiability_label_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInContractWithCustomerLiability" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Increase (Decrease) in Contract with Customer, Liability</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInContractWithCustomerLiability" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInContractWithCustomerLiability"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncreaseDecreaseInContractWithCustomerLiability" xlink:to="lab_us-gaap_IncreaseDecreaseInContractWithCustomerLiability" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AssetsCurrent_c27da138-7da8-46fc-a083-1cda777b423f_totalLabel_en-US" xlink:label="lab_us-gaap_AssetsCurrent" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Total current assets</link:label>
    <link:label id="lab_us-gaap_AssetsCurrent_label_en-US" xlink:label="lab_us-gaap_AssetsCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Assets, Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AssetsCurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AssetsCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AssetsCurrent" xlink:to="lab_us-gaap_AssetsCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_BusinessAcquisitionLineItems_af08da46-2639-4b69-9c28-98b29ffade28_terseLabel_en-US" xlink:label="lab_us-gaap_BusinessAcquisitionLineItems" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Acquisition [Line Items]</link:label>
    <link:label id="lab_us-gaap_BusinessAcquisitionLineItems_label_en-US" xlink:label="lab_us-gaap_BusinessAcquisitionLineItems" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Acquisition [Line Items]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessAcquisitionLineItems" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessAcquisitionLineItems"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_BusinessAcquisitionLineItems" xlink:to="lab_us-gaap_BusinessAcquisitionLineItems" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntitySmallBusiness_39d858ea-e476-4b4a-965c-0aa1ec8dc816_terseLabel_en-US" xlink:label="lab_dei_EntitySmallBusiness" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Small Business</link:label>
    <link:label id="lab_dei_EntitySmallBusiness_label_en-US" xlink:label="lab_dei_EntitySmallBusiness" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Small Business</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntitySmallBusiness" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntitySmallBusiness"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntitySmallBusiness" xlink:to="lab_dei_EntitySmallBusiness" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StockholdersEquityNoteDisclosureTextBlock_e4ddda41-8cfb-4590-891b-8a6770879703_terseLabel_en-US" xlink:label="lab_us-gaap_StockholdersEquityNoteDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stockholders' Equity</link:label>
    <link:label id="lab_us-gaap_StockholdersEquityNoteDisclosureTextBlock_label_en-US" xlink:label="lab_us-gaap_StockholdersEquityNoteDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stockholders' Equity Note Disclosure [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockholdersEquityNoteDisclosureTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockholdersEquityNoteDisclosureTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StockholdersEquityNoteDisclosureTextBlock" xlink:to="lab_us-gaap_StockholdersEquityNoteDisclosureTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod_f6059fca-2b16-4960-a06b-fade05f507ee_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Shares issued (in shares)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Shares Issued in Period</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ContractWithCustomerDurationDomain_5fe6a94c-3fb5-46dd-942f-34b4547e0d63_terseLabel_en-US" xlink:label="lab_us-gaap_ContractWithCustomerDurationDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Contract with Customer, Duration</link:label>
    <link:label id="lab_us-gaap_ContractWithCustomerDurationDomain_label_en-US" xlink:label="lab_us-gaap_ContractWithCustomerDurationDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Contract with Customer, Duration [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerDurationDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerDurationDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ContractWithCustomerDurationDomain" xlink:to="lab_us-gaap_ContractWithCustomerDurationDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsNet_32ab39fc-679b-4919-8673-a9dd3b3000f7_terseLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsNet" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Intangible assets, net</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsNet_09c51dc8-4aa5-4129-a57a-cf72b53e720f_totalLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsNet" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsNet_label_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsNet" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Assets, Net</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsNet" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsNet"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsNet" xlink:to="lab_us-gaap_FiniteLivedIntangibleAssetsNet" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax_4d9bbd44-eab8-4177-81c0-fd0f123ece3e_terseLabel_en-US" xlink:label="lab_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Unrealized Gains (Losses), net</link:label>
    <link:label id="lab_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax_label_en-US" xlink:label="lab_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Debt Securities, Available-for-Sale, Accumulated Gross Unrealized Gain (Loss), before Tax</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" xlink:to="lab_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized_1d49948e-8573-4cb0-82cf-ddff6c059f14_terseLabel_en-US" xlink:label="lab_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Unrecognized stock-based compensation expense</link:label>
    <link:label id="lab_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized_label_en-US" xlink:label="lab_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Amount</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized" xlink:to="lab_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_DeferredCostsDisclosureTextBlock_8af8e8f1-c6ad-4921-bf46-6e5277e60f91_terseLabel_en-US" xlink:label="lab_spsc_DeferredCostsDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs</link:label>
    <link:label id="lab_spsc_DeferredCostsDisclosureTextBlock_label_en-US" xlink:label="lab_spsc_DeferredCostsDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs Disclosure [Text Block]</link:label>
    <link:label id="lab_spsc_DeferredCostsDisclosureTextBlock_documentation_en-US" xlink:label="lab_spsc_DeferredCostsDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred costs.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredCostsDisclosureTextBlock" xlink:href="spsc-20230331.xsd#spsc_DeferredCostsDisclosureTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_DeferredCostsDisclosureTextBlock" xlink:to="lab_spsc_DeferredCostsDisclosureTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward_c6cc4785-0d60-4069-9f57-54b445aa40ff_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding [Roll Forward]</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding [Roll Forward]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock_5444563c-39db-4400-837d-2eb863ae4f3e_terseLabel_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property and Equipment, Net</link:label>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock_label_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property, Plant and Equipment Disclosure [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock" xlink:to="lab_us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentTypeDomain_2a5fc788-fcbd-47e5-9a0e-518fb794bee5_terseLabel_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentTypeDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Long-Lived Tangible Asset [Domain]</link:label>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentTypeDomain_label_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentTypeDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Long-Lived Tangible Asset [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentTypeDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain" xlink:to="lab_us-gaap_PropertyPlantAndEquipmentTypeDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncreaseDecreaseInAccountsReceivable_49be8744-3b7a-4ca8-ad44-e815d1d4eced_negatedLabel_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInAccountsReceivable" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts receivable</link:label>
    <link:label id="lab_us-gaap_IncreaseDecreaseInAccountsReceivable_label_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInAccountsReceivable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Increase (Decrease) in Accounts Receivable</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInAccountsReceivable" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInAccountsReceivable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncreaseDecreaseInAccountsReceivable" xlink:to="lab_us-gaap_IncreaseDecreaseInAccountsReceivable" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_Security12bTitle_86edc825-d503-4623-87b8-3b88c966a488_terseLabel_en-US" xlink:label="lab_dei_Security12bTitle" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Title of 12(b) Security</link:label>
    <link:label id="lab_dei_Security12bTitle_label_en-US" xlink:label="lab_dei_Security12bTitle" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Title of 12(b) Security</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_Security12bTitle" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_Security12bTitle"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_Security12bTitle" xlink:to="lab_dei_Security12bTitle" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock_041a476b-2d58-4f55-990c-111758e57c7d_terseLabel_en-US" xlink:label="lab_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">General</link:label>
    <link:label id="lab_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock_label_en-US" xlink:label="lab_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Organization, Consolidation and Presentation of Financial Statements Disclosure [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock" xlink:to="lab_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_ContractTermMaximum_4c55111b-29f4-4a61-9750-fad6bc188fd6_terseLabel_en-US" xlink:label="lab_spsc_ContractTermMaximum" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Contract term maximum</link:label>
    <link:label id="lab_spsc_ContractTermMaximum_label_en-US" xlink:label="lab_spsc_ContractTermMaximum" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Contract Term Maximum</link:label>
    <link:label id="lab_spsc_ContractTermMaximum_documentation_en-US" xlink:label="lab_spsc_ContractTermMaximum" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Contract Term Maximum</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ContractTermMaximum" xlink:href="spsc-20230331.xsd#spsc_ContractTermMaximum"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_ContractTermMaximum" xlink:to="lab_spsc_ContractTermMaximum" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShortTermInvestments_3c0dd614-a538-4c7b-accd-1356a3e4e1b8_terseLabel_en-US" xlink:label="lab_us-gaap_ShortTermInvestments" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Short-term investments</link:label>
    <link:label id="lab_us-gaap_ShortTermInvestments_label_en-US" xlink:label="lab_us-gaap_ShortTermInvestments" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Short-Term Investments</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShortTermInvestments" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShortTermInvestments"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShortTermInvestments" xlink:to="lab_us-gaap_ShortTermInvestments" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock_74ed007e-fb90-4d21-83d3-e4f8397739af_terseLabel_en-US" xlink:label="lab_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Supplemental Cash Flow Information Related to Leases</link:label>
    <link:label id="lab_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock_label_en-US" xlink:label="lab_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule Of Supplemental Cash Flow Information Related To Leases Table [Table Text Block]</link:label>
    <link:label id="lab_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock_documentation_en-US" xlink:label="lab_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of supplemental cash flow information related to leases.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock" xlink:href="spsc-20230331.xsd#spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock" xlink:to="lab_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_BusinessCombinationAndAssetAcquisitionAbstract_label_en-US" xlink:label="lab_us-gaap_BusinessCombinationAndAssetAcquisitionAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Combination and Asset Acquisition [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessCombinationAndAssetAcquisitionAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessCombinationAndAssetAcquisitionAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_BusinessCombinationAndAssetAcquisitionAbstract" xlink:to="lab_us-gaap_BusinessCombinationAndAssetAcquisitionAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation_615bffbb-fb04-43f1-a005-d4ec6493ea06_terseLabel_en-US" xlink:label="lab_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Shares issued pursuant to stock awards (in shares)</link:label>
    <link:label id="lab_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation_label_en-US" xlink:label="lab_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Shares Issued, Shares, Share-Based Payment Arrangement, after Forfeiture</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation" xlink:to="lab_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OperatingLeaseLiability_c3ed73cc-15f1-460a-b6ad-d699decda974_terseLabel_en-US" xlink:label="lab_us-gaap_OperatingLeaseLiability" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Total operating lease liabilities</link:label>
    <link:label id="lab_us-gaap_OperatingLeaseLiability_label_en-US" xlink:label="lab_us-gaap_OperatingLeaseLiability" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Operating Lease, Liability</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseLiability" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseLiability"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OperatingLeaseLiability" xlink:to="lab_us-gaap_OperatingLeaseLiability" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo_b55ce695-4eb3-495f-afac-ef4495401019_terseLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2025</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo_label_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Asset, Expected Amortization, Year Two</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo" xlink:to="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LiabilitiesAndStockholdersEquityAbstract_cba2ebba-00e7-4089-ae20-27a900097544_terseLabel_en-US" xlink:label="lab_us-gaap_LiabilitiesAndStockholdersEquityAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">LIABILITIES AND STOCKHOLDERS&#8217; EQUITY</link:label>
    <link:label id="lab_us-gaap_LiabilitiesAndStockholdersEquityAbstract_label_en-US" xlink:label="lab_us-gaap_LiabilitiesAndStockholdersEquityAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Liabilities and Equity [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LiabilitiesAndStockholdersEquityAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LiabilitiesAndStockholdersEquityAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LiabilitiesAndStockholdersEquityAbstract" xlink:to="lab_us-gaap_LiabilitiesAndStockholdersEquityAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_USTreasurySecuritiesMember_a1bc488c-4680-4db4-b60d-615dfcf68c21_terseLabel_en-US" xlink:label="lab_us-gaap_USTreasurySecuritiesMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">U.S. treasury securities</link:label>
    <link:label id="lab_us-gaap_USTreasurySecuritiesMember_label_en-US" xlink:label="lab_us-gaap_USTreasurySecuritiesMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">US Treasury Securities [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_USTreasurySecuritiesMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_USTreasurySecuritiesMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_USTreasurySecuritiesMember" xlink:to="lab_us-gaap_USTreasurySecuritiesMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice_0c2015a5-ca39-460d-b04b-0405c84f8423_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Granted (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangements by Share-Based Payment Award, Options, Grants in Period, Weighted Average Exercise Price</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis_ca781c1a-cc7e-408f-8e46-41a8f8f242cf_totalLabel_en-US" xlink:label="lab_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Amortized Cost</link:label>
    <link:label id="lab_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis_label_en-US" xlink:label="lab_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Debt Securities, Available-for-Sale, Amortized Cost</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis" xlink:to="lab_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_64f4d710-085b-44a8-bdcf-20bb56146e8e_terseLabel_en-US" xlink:label="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted average common shares used to compute net income per share</link:label>
    <link:label id="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_704c395d-f825-4a07-911e-5f464fda0f1c_verboseLabel_en-US" xlink:label="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract" xlink:role="http://www.xbrl.org/2003/role/verboseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Denominator</link:label>
    <link:label id="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_label_en-US" xlink:label="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted Average Number of Shares Outstanding, Diluted [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract" xlink:to="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock_0a8d9775-9cbb-4362-828e-94505865d2e0_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Summary of ESPP Activity</link:label>
    <link:label id="lab_us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Share-Based Compensation, Employee Stock Purchase Plan, Activity [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock" xlink:to="lab_us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred_61bf1231-d1d6-49a8-a3bd-d71ac510e7f5_negatedTerseLabel_en-US" xlink:label="lab_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred" xlink:role="http://www.xbrl.org/2009/role/negatedTerseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Decrease in purchase price due to measurement period adjustment</link:label>
    <link:label id="lab_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred_label_en-US" xlink:label="lab_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Combination, Provisional Information, Initial Accounting Incomplete, Adjustment, Consideration Transferred</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred" xlink:to="lab_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AccountsPayableCurrent_abcc38e1-ca2a-4781-8357-a5bd9f908d13_terseLabel_en-US" xlink:label="lab_us-gaap_AccountsPayableCurrent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts payable</link:label>
    <link:label id="lab_us-gaap_AccountsPayableCurrent_label_en-US" xlink:label="lab_us-gaap_AccountsPayableCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Accounts Payable, Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccountsPayableCurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccountsPayableCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AccountsPayableCurrent" xlink:to="lab_us-gaap_AccountsPayableCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncreaseDecreaseInOtherOperatingAssets_4ecefda5-c934-406a-b0cd-390e358f3861_negatedLabel_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInOtherOperatingAssets" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other current and non-current assets</link:label>
    <link:label id="lab_us-gaap_IncreaseDecreaseInOtherOperatingAssets_label_en-US" xlink:label="lab_us-gaap_IncreaseDecreaseInOtherOperatingAssets" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Increase (Decrease) in Other Operating Assets</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInOtherOperatingAssets" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInOtherOperatingAssets"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncreaseDecreaseInOtherOperatingAssets" xlink:to="lab_us-gaap_IncreaseDecreaseInOtherOperatingAssets" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_InternallyDevelopedSoftwareMember_23559f5a-c45c-4725-a901-0609025dcf89_terseLabel_en-US" xlink:label="lab_spsc_InternallyDevelopedSoftwareMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Internally developed software</link:label>
    <link:label id="lab_spsc_InternallyDevelopedSoftwareMember_label_en-US" xlink:label="lab_spsc_InternallyDevelopedSoftwareMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Internally Developed Software [Member]</link:label>
    <link:label id="lab_spsc_InternallyDevelopedSoftwareMember_documentation_en-US" xlink:label="lab_spsc_InternallyDevelopedSoftwareMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Internally Developed Software</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_InternallyDevelopedSoftwareMember" xlink:href="spsc-20230331.xsd#spsc_InternallyDevelopedSoftwareMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_InternallyDevelopedSoftwareMember" xlink:to="lab_spsc_InternallyDevelopedSoftwareMember" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityFilerCategory_40d7b48e-7f71-496b-a224-74487d9dc171_terseLabel_en-US" xlink:label="lab_dei_EntityFilerCategory" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Filer Category</link:label>
    <link:label id="lab_dei_EntityFilerCategory_label_en-US" xlink:label="lab_dei_EntityFilerCategory" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Filer Category</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityFilerCategory" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityFilerCategory"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityFilerCategory" xlink:to="lab_dei_EntityFilerCategory" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic_46e1486b-9d3b-436d-b9dd-5f4795e5b254_terseLabel_en-US" xlink:label="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Basic (in shares)</link:label>
    <link:label id="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic_e0053104-ccf3-4ea4-af44-2f547590309c_verboseLabel_en-US" xlink:label="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic" xlink:role="http://www.xbrl.org/2003/role/verboseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted average common shares outstanding, basic (in shares)</link:label>
    <link:label id="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic_label_en-US" xlink:label="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted Average Number of Shares Outstanding, Basic</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_WeightedAverageNumberOfSharesOutstandingBasic"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic" xlink:to="lab_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AllocatedShareBasedCompensationExpense_6e93b3a5-4513-49a3-b190-66485420b2a0_terseLabel_en-US" xlink:label="lab_us-gaap_AllocatedShareBasedCompensationExpense" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stock-based compensation expense</link:label>
    <link:label id="lab_us-gaap_AllocatedShareBasedCompensationExpense_label_en-US" xlink:label="lab_us-gaap_AllocatedShareBasedCompensationExpense" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Payment Arrangement, Expense</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllocatedShareBasedCompensationExpense" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllocatedShareBasedCompensationExpense"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AllocatedShareBasedCompensationExpense" xlink:to="lab_us-gaap_AllocatedShareBasedCompensationExpense" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CommitmentsAndContingencies_254afd25-5cf9-4a2b-9785-46121e41813d_terseLabel_en-US" xlink:label="lab_us-gaap_CommitmentsAndContingencies" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Commitments and contingencies</link:label>
    <link:label id="lab_us-gaap_CommitmentsAndContingencies_label_en-US" xlink:label="lab_us-gaap_CommitmentsAndContingencies" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Commitments and Contingencies</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingencies" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingencies"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CommitmentsAndContingencies" xlink:to="lab_us-gaap_CommitmentsAndContingencies" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_SecurityExchangeName_83b14451-fa35-4967-b1e8-135de6471427_terseLabel_en-US" xlink:label="lab_dei_SecurityExchangeName" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Security Exchange Name</link:label>
    <link:label id="lab_dei_SecurityExchangeName_label_en-US" xlink:label="lab_dei_SecurityExchangeName" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Security Exchange Name</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_SecurityExchangeName" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_SecurityExchangeName"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_SecurityExchangeName" xlink:to="lab_dei_SecurityExchangeName" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice_ee7c3ed6-9e12-4bc1-ad06-c5638d6faa86_periodStartLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice" xlink:role="http://www.xbrl.org/2003/role/periodStartLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Outstanding, beginning of period (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice_e66beeda-416b-4532-a439-a4131430faa3_periodEndLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice" xlink:role="http://www.xbrl.org/2003/role/periodEndLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Outstanding, end of period (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding, Weighted Average Exercise Price</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PreferredStockValue_465aa60b-9011-40e0-9f05-c9380a6ec5d0_terseLabel_en-US" xlink:label="lab_us-gaap_PreferredStockValue" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Preferred stock, $0.001 par value; 5,000,000 shares authorized; 0 shares issued and outstanding</link:label>
    <link:label id="lab_us-gaap_PreferredStockValue_label_en-US" xlink:label="lab_us-gaap_PreferredStockValue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Preferred Stock, Value, Issued</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PreferredStockValue" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PreferredStockValue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PreferredStockValue" xlink:to="lab_us-gaap_PreferredStockValue" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DeferredCostsCurrentAndNoncurrent_b1358878-e528-4041-8ea1-cdcda32a13f3_periodStartLabel_en-US" xlink:label="lab_us-gaap_DeferredCostsCurrentAndNoncurrent" xlink:role="http://www.xbrl.org/2003/role/periodStartLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Balance, beginning of period</link:label>
    <link:label id="lab_us-gaap_DeferredCostsCurrentAndNoncurrent_392fce38-11dc-4b57-a5e4-f515d5b0a46b_periodEndLabel_en-US" xlink:label="lab_us-gaap_DeferredCostsCurrentAndNoncurrent" xlink:role="http://www.xbrl.org/2003/role/periodEndLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Balance, end of period</link:label>
    <link:label id="lab_us-gaap_DeferredCostsCurrentAndNoncurrent_label_en-US" xlink:label="lab_us-gaap_DeferredCostsCurrentAndNoncurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCostsCurrentAndNoncurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCostsCurrentAndNoncurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DeferredCostsCurrentAndNoncurrent" xlink:to="lab_us-gaap_DeferredCostsCurrentAndNoncurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentLineItems_132e7a70-24d3-45a5-8d73-25995bef1a6e_terseLabel_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentLineItems" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property, Plant and Equipment [Line Items]</link:label>
    <link:label id="lab_us-gaap_PropertyPlantAndEquipmentLineItems_label_en-US" xlink:label="lab_us-gaap_PropertyPlantAndEquipmentLineItems" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Property, Plant and Equipment [Line Items]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentLineItems" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentLineItems"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentLineItems" xlink:to="lab_us-gaap_PropertyPlantAndEquipmentLineItems" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_GeneralAndAdministrativeExpenseMember_807afde3-b673-4697-a190-188f71336d25_terseLabel_en-US" xlink:label="lab_us-gaap_GeneralAndAdministrativeExpenseMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">General and administrative</link:label>
    <link:label id="lab_us-gaap_GeneralAndAdministrativeExpenseMember_label_en-US" xlink:label="lab_us-gaap_GeneralAndAdministrativeExpenseMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">General and Administrative Expense [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeneralAndAdministrativeExpenseMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeneralAndAdministrativeExpenseMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GeneralAndAdministrativeExpenseMember" xlink:to="lab_us-gaap_GeneralAndAdministrativeExpenseMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax_e4052b33-7507-4db0-9a80-7171f3bab1df_terseLabel_en-US" xlink:label="lab_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenues</link:label>
    <link:label id="lab_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax_label_en-US" xlink:label="lab_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue from Contract with Customer, Excluding Assessed Tax</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax" xlink:to="lab_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_CoverAbstract_428c4c1b-f1de-4e89-bc10-84e38ca8def7_terseLabel_en-US" xlink:label="lab_dei_CoverAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cover [Abstract]</link:label>
    <link:label id="lab_dei_CoverAbstract_label_en-US" xlink:label="lab_dei_CoverAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cover [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_CoverAbstract" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_CoverAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_CoverAbstract" xlink:to="lab_dei_CoverAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_GeographicDistributionAxis_da3c4525-6883-4ded-ab55-6751ccb6b344_terseLabel_en-US" xlink:label="lab_us-gaap_GeographicDistributionAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Geographic Distribution</link:label>
    <link:label id="lab_us-gaap_GeographicDistributionAxis_label_en-US" xlink:label="lab_us-gaap_GeographicDistributionAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Geographic Distribution [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GeographicDistributionAxis" xlink:to="lab_us-gaap_GeographicDistributionAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock_47465f76-19be-44bd-b008-2d7cc7ab79b9_terseLabel_en-US" xlink:label="lab_us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stock-Based Compensation</link:label>
    <link:label id="lab_us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock_label_en-US" xlink:label="lab_us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Payment Arrangement [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock" xlink:to="lab_us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_RevenueFromContractWithCustomerTextBlock_c1e32db2-0e19-45c4-a6dc-08a1cd8ccbe1_terseLabel_en-US" xlink:label="lab_us-gaap_RevenueFromContractWithCustomerTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue</link:label>
    <link:label id="lab_us-gaap_RevenueFromContractWithCustomerTextBlock_label_en-US" xlink:label="lab_us-gaap_RevenueFromContractWithCustomerTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue from Contract with Customer [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerTextBlock" xlink:to="lab_us-gaap_RevenueFromContractWithCustomerTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_RecurringRevenuesMember_80f732fb-6be8-4cdd-9c74-f67d02bc38c8_terseLabel_en-US" xlink:label="lab_spsc_RecurringRevenuesMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Recurring revenues</link:label>
    <link:label id="lab_spsc_RecurringRevenuesMember_label_en-US" xlink:label="lab_spsc_RecurringRevenuesMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Recurring Revenues [Member]</link:label>
    <link:label id="lab_spsc_RecurringRevenuesMember_documentation_en-US" xlink:label="lab_spsc_RecurringRevenuesMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Recurring revenues.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RecurringRevenuesMember" xlink:href="spsc-20230331.xsd#spsc_RecurringRevenuesMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_RecurringRevenuesMember" xlink:to="lab_spsc_RecurringRevenuesMember" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets_adfe034e-45c9-4227-a15a-4da1e05aa003_negatedTerseLabel_en-US" xlink:label="lab_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets" xlink:role="http://www.xbrl.org/2009/role/negatedTerseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Decrease in estimated value of deferred income tax assets</link:label>
    <link:label id="lab_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets_label_en-US" xlink:label="lab_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Combination, Provisional Information, Initial Accounting Incomplete, Adjustment, Deferred Income Tax Assets</link:label>
    <link:label id="lab_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets_documentation_en-US" xlink:label="lab_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Combination, Provisional Information, Initial Accounting Incomplete, Adjustment, Deferred Income Tax Assets</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets" xlink:href="spsc-20230331.xsd#spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets" xlink:to="lab_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate_a0be8c5d-fe66-4fd9-b56c-1f7c7bbf4b31_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Risk-free interest rate</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Fair Value Assumptions, Risk Free Interest Rate</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LiabilitiesAndStockholdersEquity_2965d3f1-c522-498b-af20-fc07c1b38089_totalLabel_en-US" xlink:label="lab_us-gaap_LiabilitiesAndStockholdersEquity" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Total liabilities and stockholders&#8217; equity</link:label>
    <link:label id="lab_us-gaap_LiabilitiesAndStockholdersEquity_label_en-US" xlink:label="lab_us-gaap_LiabilitiesAndStockholdersEquity" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Liabilities and Equity</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LiabilitiesAndStockholdersEquity" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LiabilitiesAndStockholdersEquity"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LiabilitiesAndStockholdersEquity" xlink:to="lab_us-gaap_LiabilitiesAndStockholdersEquity" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_TypeOfArrangementAxis_c67a7298-bf29-4498-b63e-d7b8dcdc1c3b_terseLabel_en-US" xlink:label="lab_us-gaap_TypeOfArrangementAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Collaborative Arrangement and Arrangement Other than Collaborative</link:label>
    <link:label id="lab_us-gaap_TypeOfArrangementAxis_label_en-US" xlink:label="lab_us-gaap_TypeOfArrangementAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Collaborative Arrangement and Arrangement Other than Collaborative [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TypeOfArrangementAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TypeOfArrangementAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_TypeOfArrangementAxis" xlink:to="lab_us-gaap_TypeOfArrangementAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_GoodwillRollForward_a4eaa442-b070-41c3-86d7-f97288debf50_terseLabel_en-US" xlink:label="lab_us-gaap_GoodwillRollForward" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Goodwill [Roll Forward]</link:label>
    <link:label id="lab_us-gaap_GoodwillRollForward_label_en-US" xlink:label="lab_us-gaap_GoodwillRollForward" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Goodwill [Roll Forward]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillRollForward" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillRollForward"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GoodwillRollForward" xlink:to="lab_us-gaap_GoodwillRollForward" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1_6594ba54-e32c-4d72-8d82-0f3c76e880bd_terseLabel_en-US" xlink:label="lab_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share Value Available for Future Repurchase</link:label>
    <link:label id="lab_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1_label_en-US" xlink:label="lab_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stock Repurchase Program, Remaining Authorized Repurchase Amount</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1" xlink:to="lab_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements_cb286e50-e806-406c-87ce-c56be358e843_terseLabel_en-US" xlink:label="lab_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Options to purchase common stock (in shares)</link:label>
    <link:label id="lab_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements_label_en-US" xlink:label="lab_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Incremental Common Shares Attributable to Dilutive Effect of Share-Based Payment Arrangements</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements" xlink:to="lab_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract_c41eadcb-3a32-46e0-9cd9-533a973311d1_terseLabel_en-US" xlink:label="lab_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Organization, Consolidation and Presentation of Financial Statements [Abstract]</link:label>
    <link:label id="lab_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract_label_en-US" xlink:label="lab_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Organization, Consolidation and Presentation of Financial Statements [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract" xlink:to="lab_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems_d048b512-34d6-4536-bf9c-f9c99acb45ff_terseLabel_en-US" xlink:label="lab_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]</link:label>
    <link:label id="lab_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems_label_en-US" xlink:label="lab_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Payment Arrangement, Expensed and Capitalized, Amount [Line Items]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems" xlink:to="lab_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_CurrentFiscalYearEndDate_aac04f8d-efe2-4b72-9a55-90fc389a6ae8_terseLabel_en-US" xlink:label="lab_dei_CurrentFiscalYearEndDate" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Current Fiscal Year End Date</link:label>
    <link:label id="lab_dei_CurrentFiscalYearEndDate_label_en-US" xlink:label="lab_dei_CurrentFiscalYearEndDate" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Current Fiscal Year End Date</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_CurrentFiscalYearEndDate" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_CurrentFiscalYearEndDate"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_CurrentFiscalYearEndDate" xlink:to="lab_dei_CurrentFiscalYearEndDate" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount_a908275e-7e93-44df-8144-ed2125a76820_negatedLabel_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Less: imputed interest</link:label>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount_label_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Lessee, Operating Lease, Liability, Undiscounted Excess Amount</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount" xlink:to="lab_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsLineItems_8f63e1fc-daec-45e1-9783-ffa28d8c69c4_terseLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsLineItems" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Assets [Line Items]</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsLineItems_label_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsLineItems" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Assets [Line Items]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsLineItems"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems" xlink:to="lab_us-gaap_FiniteLivedIntangibleAssetsLineItems" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EarningsPerShareDiluted_29bb7e2b-c1dc-4784-b56b-12b4f1cd92e2_terseLabel_en-US" xlink:label="lab_us-gaap_EarningsPerShareDiluted" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Diluted (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_EarningsPerShareDiluted_label_en-US" xlink:label="lab_us-gaap_EarningsPerShareDiluted" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Earnings Per Share, Diluted</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareDiluted" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareDiluted"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EarningsPerShareDiluted" xlink:to="lab_us-gaap_EarningsPerShareDiluted" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_SaleOfStockNameOfTransactionDomain_d3a79f76-f525-4b9c-91e3-2bb2f10188e1_terseLabel_en-US" xlink:label="lab_us-gaap_SaleOfStockNameOfTransactionDomain" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Sale of Stock</link:label>
    <link:label id="lab_us-gaap_SaleOfStockNameOfTransactionDomain_label_en-US" xlink:label="lab_us-gaap_SaleOfStockNameOfTransactionDomain" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Sale of Stock [Domain]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SaleOfStockNameOfTransactionDomain" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SaleOfStockNameOfTransactionDomain"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_SaleOfStockNameOfTransactionDomain" xlink:to="lab_us-gaap_SaleOfStockNameOfTransactionDomain" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock_564b83c2-9561-4f9b-a909-5d9e28b94fff_terseLabel_en-US" xlink:label="lab_us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Income and Expense</link:label>
    <link:label id="lab_us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock_label_en-US" xlink:label="lab_us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Nonoperating Income and Expense [Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock" xlink:to="lab_us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1_6ae2e2ad-5c5a-4330-8685-d5ed38e23ce4_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Vesting period</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Award Vesting Period</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue_0e3c323d-15e7-44da-8d78-079803365d20_terseLabel_en-US" xlink:label="lab_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stock-based compensation</link:label>
    <link:label id="lab_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue_label_en-US" xlink:label="lab_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">APIC, Share-Based Payment Arrangement, Increase for Cost Recognition</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue" xlink:to="lab_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ConcentrationRiskByTypeAxis_114f78f1-f5ce-42ef-a5e7-cab64fb164b5_terseLabel_en-US" xlink:label="lab_us-gaap_ConcentrationRiskByTypeAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Concentration Risk Type</link:label>
    <link:label id="lab_us-gaap_ConcentrationRiskByTypeAxis_label_en-US" xlink:label="lab_us-gaap_ConcentrationRiskByTypeAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Concentration Risk Type [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskByTypeAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskByTypeAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ConcentrationRiskByTypeAxis" xlink:to="lab_us-gaap_ConcentrationRiskByTypeAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LiabilitiesCurrent_a80b3fa8-b483-4fdd-ba96-2046fceadbc6_totalLabel_en-US" xlink:label="lab_us-gaap_LiabilitiesCurrent" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Total current liabilities</link:label>
    <link:label id="lab_us-gaap_LiabilitiesCurrent_label_en-US" xlink:label="lab_us-gaap_LiabilitiesCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Liabilities, Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LiabilitiesCurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LiabilitiesCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LiabilitiesCurrent" xlink:to="lab_us-gaap_LiabilitiesCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_SetUpFeesRecognizedPeriod_51ee4808-4db1-4211-b78f-6b7009f5f456_terseLabel_en-US" xlink:label="lab_spsc_SetUpFeesRecognizedPeriod" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Set up fees recognized period</link:label>
    <link:label id="lab_spsc_SetUpFeesRecognizedPeriod_label_en-US" xlink:label="lab_spsc_SetUpFeesRecognizedPeriod" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Set Up Fees Recognized Period</link:label>
    <link:label id="lab_spsc_SetUpFeesRecognizedPeriod_documentation_en-US" xlink:label="lab_spsc_SetUpFeesRecognizedPeriod" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Set up fees recognized period.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_SetUpFeesRecognizedPeriod" xlink:href="spsc-20230331.xsd#spsc_SetUpFeesRecognizedPeriod"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_SetUpFeesRecognizedPeriod" xlink:to="lab_spsc_SetUpFeesRecognizedPeriod" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo_0f5c0fdb-b514-4cb3-916e-ee2372b14aa8_terseLabel_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2025</link:label>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo_label_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Lessee, Operating Lease, Liability, to be Paid, Year Two</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo" xlink:to="lab_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherAssetsCurrent_59e3930d-2172-4313-bc51-9591dd769643_terseLabel_en-US" xlink:label="lab_us-gaap_OtherAssetsCurrent" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other assets</link:label>
    <link:label id="lab_us-gaap_OtherAssetsCurrent_label_en-US" xlink:label="lab_us-gaap_OtherAssetsCurrent" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Assets, Current</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherAssetsCurrent" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherAssetsCurrent"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherAssetsCurrent" xlink:to="lab_us-gaap_OtherAssetsCurrent" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock_86bcfbba-d1f9-4ddd-a22c-8e98eddbdbad_terseLabel_en-US" xlink:label="lab_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule Of Percentage Of Property And Equipment Net</link:label>
    <link:label id="lab_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock_label_en-US" xlink:label="lab_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule Of Percentage Of Property And Equipment Net [Table Text Block]</link:label>
    <link:label id="lab_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock_documentation_en-US" xlink:label="lab_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule Of Percentage Of Property And Equipment Net</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock" xlink:href="spsc-20230331.xsd#spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock" xlink:to="lab_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_RevenueRecognitionLineItems_a311108d-60cd-47cd-9ff7-424bf8f19ef2_terseLabel_en-US" xlink:label="lab_spsc_RevenueRecognitionLineItems" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue Recognition [Line Items]</link:label>
    <link:label id="lab_spsc_RevenueRecognitionLineItems_label_en-US" xlink:label="lab_spsc_RevenueRecognitionLineItems" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue Recognition [Line Items]</link:label>
    <link:label id="lab_spsc_RevenueRecognitionLineItems_documentation_en-US" xlink:label="lab_spsc_RevenueRecognitionLineItems" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue recognition.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RevenueRecognitionLineItems" xlink:href="spsc-20230331.xsd#spsc_RevenueRecognitionLineItems"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_RevenueRecognitionLineItems" xlink:to="lab_spsc_RevenueRecognitionLineItems" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareRepurchaseProgramAxis_cc04cbbb-bc9e-490a-81bd-705e0d0d63e5_terseLabel_en-US" xlink:label="lab_us-gaap_ShareRepurchaseProgramAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share Repurchase Program</link:label>
    <link:label id="lab_us-gaap_ShareRepurchaseProgramAxis_label_en-US" xlink:label="lab_us-gaap_ShareRepurchaseProgramAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share Repurchase Program [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareRepurchaseProgramAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareRepurchaseProgramAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareRepurchaseProgramAxis" xlink:to="lab_us-gaap_ShareRepurchaseProgramAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherLiabilitiesNoncurrentAbstract_3570e724-c1b9-48cb-acb0-7ca157ff517d_terseLabel_en-US" xlink:label="lab_us-gaap_OtherLiabilitiesNoncurrentAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other liabilities</link:label>
    <link:label id="lab_us-gaap_OtherLiabilitiesNoncurrentAbstract_label_en-US" xlink:label="lab_us-gaap_OtherLiabilitiesNoncurrentAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Liabilities, Noncurrent [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherLiabilitiesNoncurrentAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherLiabilitiesNoncurrentAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherLiabilitiesNoncurrentAbstract" xlink:to="lab_us-gaap_OtherLiabilitiesNoncurrentAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock_f34c3fd4-1b50-4b72-8d67-baca198fb92f_terseLabel_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Future Minimum Payments Under Operating Leases</link:label>
    <link:label id="lab_us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock_label_en-US" xlink:label="lab_us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Lessee, Operating Lease, Liability, Maturity [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock" xlink:to="lab_us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityAddressAddressLine2_0489f454-0f28-4f3e-8bfe-40331b8e59eb_terseLabel_en-US" xlink:label="lab_dei_EntityAddressAddressLine2" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Address, Address Line Two</link:label>
    <link:label id="lab_dei_EntityAddressAddressLine2_label_en-US" xlink:label="lab_dei_EntityAddressAddressLine2" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Address, Address Line Two</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityAddressAddressLine2" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityAddressAddressLine2"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityAddressAddressLine2" xlink:to="lab_dei_EntityAddressAddressLine2" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityAddressAddressLine1_2788ed22-a496-434a-aa9f-4269f0399164_terseLabel_en-US" xlink:label="lab_dei_EntityAddressAddressLine1" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Address, Address Line One</link:label>
    <link:label id="lab_dei_EntityAddressAddressLine1_label_en-US" xlink:label="lab_dei_EntityAddressAddressLine1" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Address, Address Line One</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityAddressAddressLine1" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityAddressAddressLine1"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityAddressAddressLine1" xlink:to="lab_dei_EntityAddressAddressLine1" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_ScheduleOfStockholdersEquityLineItems_7867a11f-04f0-4c7f-8355-fa22d2ee02c2_terseLabel_en-US" xlink:label="lab_spsc_ScheduleOfStockholdersEquityLineItems" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule Of Stockholders Equity [Line Items]</link:label>
    <link:label id="lab_spsc_ScheduleOfStockholdersEquityLineItems_label_en-US" xlink:label="lab_spsc_ScheduleOfStockholdersEquityLineItems" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule Of Stockholders Equity [Line Items]</link:label>
    <link:label id="lab_spsc_ScheduleOfStockholdersEquityLineItems_documentation_en-US" xlink:label="lab_spsc_ScheduleOfStockholdersEquityLineItems" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of stockholders equity.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ScheduleOfStockholdersEquityLineItems" xlink:href="spsc-20230331.xsd#spsc_ScheduleOfStockholdersEquityLineItems"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_ScheduleOfStockholdersEquityLineItems" xlink:to="lab_spsc_ScheduleOfStockholdersEquityLineItems" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CostOfRevenue_90a15f30-ead4-424f-9cf9-a575c2e62698_terseLabel_en-US" xlink:label="lab_us-gaap_CostOfRevenue" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cost of revenues</link:label>
    <link:label id="lab_us-gaap_CostOfRevenue_label_en-US" xlink:label="lab_us-gaap_CostOfRevenue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cost of Revenue</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CostOfRevenue" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CostOfRevenue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CostOfRevenue" xlink:to="lab_us-gaap_CostOfRevenue" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ContractWithCustomerLiability_3a37ae04-0686-4502-9a3f-a63b86222ace_periodStartLabel_en-US" xlink:label="lab_us-gaap_ContractWithCustomerLiability" xlink:role="http://www.xbrl.org/2003/role/periodStartLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Balance, beginning of period</link:label>
    <link:label id="lab_us-gaap_ContractWithCustomerLiability_d03f0d80-83ee-44f2-8bed-477107cf5000_periodEndLabel_en-US" xlink:label="lab_us-gaap_ContractWithCustomerLiability" xlink:role="http://www.xbrl.org/2003/role/periodEndLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Balance, end of period</link:label>
    <link:label id="lab_us-gaap_ContractWithCustomerLiability_label_en-US" xlink:label="lab_us-gaap_ContractWithCustomerLiability" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Contract with Customer, Liability</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerLiability" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerLiability"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ContractWithCustomerLiability" xlink:to="lab_us-gaap_ContractWithCustomerLiability" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherAssetsNoncurrentAbstract_be4c73a0-6496-4314-aa48-36df6100787a_terseLabel_en-US" xlink:label="lab_us-gaap_OtherAssetsNoncurrentAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other assets</link:label>
    <link:label id="lab_us-gaap_OtherAssetsNoncurrentAbstract_label_en-US" xlink:label="lab_us-gaap_OtherAssetsNoncurrentAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Assets, Noncurrent [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherAssetsNoncurrentAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherAssetsNoncurrentAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherAssetsNoncurrentAbstract" xlink:to="lab_us-gaap_OtherAssetsNoncurrentAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_srt_ProductOrServiceAxis_4b37d18e-4c8d-4965-95a9-6d53a739f57b_terseLabel_en-US" xlink:label="lab_srt_ProductOrServiceAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Product and Service</link:label>
    <link:label id="lab_srt_ProductOrServiceAxis_label_en-US" xlink:label="lab_srt_ProductOrServiceAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Product and Service [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_srt_ProductOrServiceAxis" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_ProductOrServiceAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_srt_ProductOrServiceAxis" xlink:to="lab_srt_ProductOrServiceAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FairValueDisclosuresAbstract_88604b8f-87df-47f7-ac36-b1983c950698_terseLabel_en-US" xlink:label="lab_us-gaap_FairValueDisclosuresAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Fair Value Disclosures [Abstract]</link:label>
    <link:label id="lab_us-gaap_FairValueDisclosuresAbstract_label_en-US" xlink:label="lab_us-gaap_FairValueDisclosuresAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Fair Value Disclosures [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FairValueDisclosuresAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FairValueDisclosuresAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FairValueDisclosuresAbstract" xlink:to="lab_us-gaap_FairValueDisclosuresAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_A2022StockRepurchaseProgramMember_be3feabd-7d3f-458b-b2da-3b223e2e72b5_terseLabel_en-US" xlink:label="lab_spsc_A2022StockRepurchaseProgramMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2022 Stock Repurchase Program</link:label>
    <link:label id="lab_spsc_A2022StockRepurchaseProgramMember_label_en-US" xlink:label="lab_spsc_A2022StockRepurchaseProgramMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2022 Stock Repurchase Program [Member]</link:label>
    <link:label id="lab_spsc_A2022StockRepurchaseProgramMember_documentation_en-US" xlink:label="lab_spsc_A2022StockRepurchaseProgramMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2022 Stock Repurchase Program</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_A2022StockRepurchaseProgramMember" xlink:href="spsc-20230331.xsd#spsc_A2022StockRepurchaseProgramMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_A2022StockRepurchaseProgramMember" xlink:to="lab_spsc_A2022StockRepurchaseProgramMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_bfe1cf17-0bf3-44b1-b09f-b1a4f572d1f3_terseLabel_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Unrealized gain (loss) on investments, net of tax of $133 and ($1), respectively</link:label>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_e4b4d86b-d907-47af-8c1c-b5af19c1b7b6_verboseLabel_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax" xlink:role="http://www.xbrl.org/2003/role/verboseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Unrealized gain (loss) on investments, net of tax</link:label>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_label_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">OCI, Debt Securities, Available-for-Sale, Unrealized Holding Gain (Loss), before Adjustment, after Tax</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax" xlink:to="lab_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities_60bd460a-0211-4766-b304-4fc22206c557_terseLabel_en-US" xlink:label="lab_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Maturities of investments</link:label>
    <link:label id="lab_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities_label_en-US" xlink:label="lab_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Proceeds from Sale and Maturity of Debt Securities, Available-for-Sale</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities" xlink:to="lab_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_MarketableSecuritiesMember_f528ce5e-ac71-4486-8c03-2d422cd76fde_terseLabel_en-US" xlink:label="lab_spsc_MarketableSecuritiesMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Marketable Securities</link:label>
    <link:label id="lab_spsc_MarketableSecuritiesMember_label_en-US" xlink:label="lab_spsc_MarketableSecuritiesMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Marketable Securities [Member]</link:label>
    <link:label id="lab_spsc_MarketableSecuritiesMember_documentation_en-US" xlink:label="lab_spsc_MarketableSecuritiesMember" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Marketable Securities</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_MarketableSecuritiesMember" xlink:href="spsc-20230331.xsd#spsc_MarketableSecuritiesMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_MarketableSecuritiesMember" xlink:to="lab_spsc_MarketableSecuritiesMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_EquityAbstract_76e6dd52-2f2a-441d-972c-8d24d5f295f0_terseLabel_en-US" xlink:label="lab_us-gaap_EquityAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Equity [Abstract]</link:label>
    <link:label id="lab_us-gaap_EquityAbstract_label_en-US" xlink:label="lab_us-gaap_EquityAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Equity [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EquityAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EquityAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_EquityAbstract" xlink:to="lab_us-gaap_EquityAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod_18b1a02c-bb07-4697-acbf-7fe98320adeb_negatedLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Vested and common stock issued (in shares)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Vested in Period</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityTaxIdentificationNumber_cd40cfff-e79b-4d97-aae7-d13ff04bec7c_terseLabel_en-US" xlink:label="lab_dei_EntityTaxIdentificationNumber" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Tax Identification Number</link:label>
    <link:label id="lab_dei_EntityTaxIdentificationNumber_label_en-US" xlink:label="lab_dei_EntityTaxIdentificationNumber" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Tax Identification Number</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityTaxIdentificationNumber" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityTaxIdentificationNumber"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityTaxIdentificationNumber" xlink:to="lab_dei_EntityTaxIdentificationNumber" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DisaggregationOfRevenueTableTextBlock_c805b9de-f3c4-4f06-9b8e-ddb30882ed07_terseLabel_en-US" xlink:label="lab_us-gaap_DisaggregationOfRevenueTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Summary of Revenues by Revenue Stream</link:label>
    <link:label id="lab_us-gaap_DisaggregationOfRevenueTableTextBlock_label_en-US" xlink:label="lab_us-gaap_DisaggregationOfRevenueTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Disaggregation of Revenue [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisaggregationOfRevenueTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisaggregationOfRevenueTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DisaggregationOfRevenueTableTextBlock" xlink:to="lab_us-gaap_DisaggregationOfRevenueTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_RevenueFromContractWithCustomerAbstract_bce1bc38-050b-4991-b93d-a631c1b183a0_terseLabel_en-US" xlink:label="lab_us-gaap_RevenueFromContractWithCustomerAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue from Contract with Customer [Abstract]</link:label>
    <link:label id="lab_us-gaap_RevenueFromContractWithCustomerAbstract_label_en-US" xlink:label="lab_us-gaap_RevenueFromContractWithCustomerAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Revenue from Contract with Customer [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerAbstract" xlink:to="lab_us-gaap_RevenueFromContractWithCustomerAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear_36f5824d-bb2e-41e2-8f39-41a951c8392f_terseLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Remainder of 2023</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear_label_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Asset, Expected Amortization, Remainder of Fiscal Year</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear" xlink:to="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_DeferredCostsAndAmortizationTableTextBlock_29c79ea2-9eef-4a2d-afe7-d3693e80bbc0_terseLabel_en-US" xlink:label="lab_spsc_DeferredCostsAndAmortizationTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Summary of Deferred Costs and Amortization of Deferred Costs</link:label>
    <link:label id="lab_spsc_DeferredCostsAndAmortizationTableTextBlock_label_en-US" xlink:label="lab_spsc_DeferredCostsAndAmortizationTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs And Amortization [Table Text Block]</link:label>
    <link:label id="lab_spsc_DeferredCostsAndAmortizationTableTextBlock_documentation_en-US" xlink:label="lab_spsc_DeferredCostsAndAmortizationTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred costs and amortization.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredCostsAndAmortizationTableTextBlock" xlink:href="spsc-20230331.xsd#spsc_DeferredCostsAndAmortizationTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_DeferredCostsAndAmortizationTableTextBlock" xlink:to="lab_spsc_DeferredCostsAndAmortizationTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect_9ba75193-9ede-455a-8c32-d58d8fd3d69f_totalLabel_en-US" xlink:label="lab_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect" xlink:role="http://www.xbrl.org/2003/role/totalLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net increase (decrease) in cash and cash equivalents</link:label>
    <link:label id="lab_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect_label_en-US" xlink:label="lab_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash, Cash Equivalents, Restricted Cash, and Restricted Cash Equivalents, Period Increase (Decrease), Including Exchange Rate Effect</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect" xlink:to="lab_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CommercialPaperMember_06506ffa-13c8-4c9e-8624-f33cc64ae0b4_terseLabel_en-US" xlink:label="lab_us-gaap_CommercialPaperMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Commercial paper</link:label>
    <link:label id="lab_us-gaap_CommercialPaperMember_label_en-US" xlink:label="lab_us-gaap_CommercialPaperMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Commercial Paper [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommercialPaperMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommercialPaperMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CommercialPaperMember" xlink:to="lab_us-gaap_CommercialPaperMember" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_EntityCentralIndexKey_5c2971d2-a6c7-42ff-ba63-fc68815278e3_terseLabel_en-US" xlink:label="lab_dei_EntityCentralIndexKey" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Central Index Key</link:label>
    <link:label id="lab_dei_EntityCentralIndexKey_label_en-US" xlink:label="lab_dei_EntityCentralIndexKey" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Entity Central Index Key</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityCentralIndexKey" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityCentralIndexKey"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_EntityCentralIndexKey" xlink:to="lab_dei_EntityCentralIndexKey" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_d6b8e8a0-6f9b-4bb2-8c26-438c6d332365_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted Average Grant Date Fair Value ($/share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Nonvested, Weighted Average Grant Date Fair Value [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis_3814fd3c-8cf3-4a50-aec0-8c28802d0a9a_terseLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite Lived Intangible Assets by Major Class [Axis]</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis_label_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Assets by Major Class [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis" xlink:to="lab_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_f35ab96b-c5a4-4ae4-a777-e55a35a3aa64_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule Of Share Based Compensation Arrangements By Share Based Payment Award [Table]</link:label>
    <link:label id="lab_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_label_en-US" xlink:label="lab_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Share-Based Compensation Arrangements by Share-Based Payment Award [Table]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable" xlink:to="lab_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_BusinessCombinationConsiderationTransferred1_f620918d-2d26-44a1-ba82-e45e120c3625_terseLabel_en-US" xlink:label="lab_us-gaap_BusinessCombinationConsiderationTransferred1" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Purchase price</link:label>
    <link:label id="lab_us-gaap_BusinessCombinationConsiderationTransferred1_label_en-US" xlink:label="lab_us-gaap_BusinessCombinationConsiderationTransferred1" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Business Combination, Consideration Transferred</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessCombinationConsiderationTransferred1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessCombinationConsiderationTransferred1"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_BusinessCombinationConsiderationTransferred1" xlink:to="lab_us-gaap_BusinessCombinationConsiderationTransferred1" xlink:type="arc" order="1"/>
    <link:label id="lab_dei_CityAreaCode_de8e987c-e6ca-41ef-a533-e22cab0fb70e_terseLabel_en-US" xlink:label="lab_dei_CityAreaCode" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">City Area Code</link:label>
    <link:label id="lab_dei_CityAreaCode_label_en-US" xlink:label="lab_dei_CityAreaCode" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">City Area Code</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_dei_CityAreaCode" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_CityAreaCode"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_dei_CityAreaCode" xlink:to="lab_dei_CityAreaCode" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_GeneralAndAdministrativeExpense_0f5de7ac-3ff2-4ee9-b8d4-07aa0b149a7a_terseLabel_en-US" xlink:label="lab_us-gaap_GeneralAndAdministrativeExpense" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">General and administrative</link:label>
    <link:label id="lab_us-gaap_GeneralAndAdministrativeExpense_label_en-US" xlink:label="lab_us-gaap_GeneralAndAdministrativeExpense" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">General and Administrative Expense</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeneralAndAdministrativeExpense" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeneralAndAdministrativeExpense"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_GeneralAndAdministrativeExpense" xlink:to="lab_us-gaap_GeneralAndAdministrativeExpense" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_AssetsAbstract_3cc86010-e09b-434e-9abd-e2cf87ec6b29_terseLabel_en-US" xlink:label="lab_us-gaap_AssetsAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">ASSETS</link:label>
    <link:label id="lab_us-gaap_AssetsAbstract_label_en-US" xlink:label="lab_us-gaap_AssetsAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Assets [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AssetsAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AssetsAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_AssetsAbstract" xlink:to="lab_us-gaap_AssetsAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_StatementOfStockholdersEquityAbstract_f211bf0b-9671-4220-a98e-40999f9fa5cd_terseLabel_en-US" xlink:label="lab_us-gaap_StatementOfStockholdersEquityAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statement of Stockholders' Equity [Abstract]</link:label>
    <link:label id="lab_us-gaap_StatementOfStockholdersEquityAbstract_label_en-US" xlink:label="lab_us-gaap_StatementOfStockholdersEquityAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Statement of Stockholders' Equity [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementOfStockholdersEquityAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementOfStockholdersEquityAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_StatementOfStockholdersEquityAbstract" xlink:to="lab_us-gaap_StatementOfStockholdersEquityAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_SubsidiarySaleOfStockAxis_fc2063a6-e861-477d-b58f-fd23e1e7e559_terseLabel_en-US" xlink:label="lab_us-gaap_SubsidiarySaleOfStockAxis" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Sale of Stock</link:label>
    <link:label id="lab_us-gaap_SubsidiarySaleOfStockAxis_label_en-US" xlink:label="lab_us-gaap_SubsidiarySaleOfStockAxis" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Sale of Stock [Axis]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SubsidiarySaleOfStockAxis" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SubsidiarySaleOfStockAxis"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_SubsidiarySaleOfStockAxis" xlink:to="lab_us-gaap_SubsidiarySaleOfStockAxis" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract_99212e3e-d949-4db0-a3d1-bc416f272e1a_terseLabel_en-US" xlink:label="lab_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cash flows from financing activities</link:label>
    <link:label id="lab_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract_label_en-US" xlink:label="lab_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Net Cash Provided by (Used in) Financing Activities [Abstract]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract" xlink:to="lab_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax_7d8a3db3-9ae2-4bf5-8198-6cd02a3356aa_terseLabel_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Foreign currency translation adjustments</link:label>
    <link:label id="lab_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax_label_en-US" xlink:label="lab_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Other Comprehensive Income (Loss), Foreign Currency Transaction and Translation Adjustment, before Tax</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax" xlink:to="lab_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensation_58cbfdeb-22b1-48d3-8de3-2b512c3d87fa_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensation" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Stock-based compensation</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensation_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensation" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Payment Arrangement, Noncash Expense</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensation" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensation"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensation" xlink:to="lab_us-gaap_ShareBasedCompensation" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue_e2e97cb8-c985-4405-8cbe-32b7b03c8630_terseLabel_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Weighted average fair value per share of options granted (in dollars per share)</link:label>
    <link:label id="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue_label_en-US" xlink:label="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Grants in Period, Weighted Average Grant Date Fair Value</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue" xlink:to="lab_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_DeferredCostsIncurred_2a0ed91e-eedf-45ed-9dc2-e8acf81f7dba_terseLabel_en-US" xlink:label="lab_spsc_DeferredCostsIncurred" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Incurred deferred costs</link:label>
    <link:label id="lab_spsc_DeferredCostsIncurred_label_en-US" xlink:label="lab_spsc_DeferredCostsIncurred" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Costs Incurred</link:label>
    <link:label id="lab_spsc_DeferredCostsIncurred_documentation_en-US" xlink:label="lab_spsc_DeferredCostsIncurred" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred costs incurred.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredCostsIncurred" xlink:href="spsc-20230331.xsd#spsc_DeferredCostsIncurred"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_DeferredCostsIncurred" xlink:to="lab_spsc_DeferredCostsIncurred" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance_e2028eb7-5a68-4091-a035-58fb9fd53d74_terseLabel_en-US" xlink:label="lab_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Common stock reserved for future issuance (in shares)</link:label>
    <link:label id="lab_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance_label_en-US" xlink:label="lab_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Deferred Compensation Arrangement with Individual, Common Stock Reserved for Future Issuance</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance" xlink:to="lab_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment_cce4038a-32b5-4fb3-a6ab-aac824b9176c_negatedLabel_en-US" xlink:label="lab_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment" xlink:role="http://www.xbrl.org/2009/role/negatedLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Purchases of property and equipment</link:label>
    <link:label id="lab_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment_label_en-US" xlink:label="lab_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Payments to Acquire Property, Plant, and Equipment</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PaymentsToAcquirePropertyPlantAndEquipment"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment" xlink:to="lab_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment" xlink:type="arc" order="1"/>
    <link:label id="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward_7b0edee6-9b36-46df-b5a5-ef1dc6e397f4_terseLabel_en-US" xlink:label="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share Based Compensation Arrangement By Share Based Payment Award Value Purchased For Award</link:label>
    <link:label id="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward_label_en-US" xlink:label="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share Based Compensation Arrangement By Share Based Payment Award Value Purchased For Award</link:label>
    <link:label id="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward_documentation_en-US" xlink:label="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward" xlink:role="http://www.xbrl.org/2003/role/documentation" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Share-based compensation arrangement by share-based payment award value purchased for award.</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward" xlink:href="spsc-20230331.xsd#spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward" xlink:to="lab_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ResearchAndDevelopmentExpenseMember_3e2bb09f-6c4c-4b7d-8197-ff8149444e46_terseLabel_en-US" xlink:label="lab_us-gaap_ResearchAndDevelopmentExpenseMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Research and development</link:label>
    <link:label id="lab_us-gaap_ResearchAndDevelopmentExpenseMember_label_en-US" xlink:label="lab_us-gaap_ResearchAndDevelopmentExpenseMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Research and Development Expense [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ResearchAndDevelopmentExpenseMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ResearchAndDevelopmentExpenseMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ResearchAndDevelopmentExpenseMember" xlink:to="lab_us-gaap_ResearchAndDevelopmentExpenseMember" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_DisaggregationOfRevenueLineItems_25120ed2-32f0-474d-a01d-cb4573d0094d_terseLabel_en-US" xlink:label="lab_us-gaap_DisaggregationOfRevenueLineItems" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Disaggregation Of Revenue [Line Items]</link:label>
    <link:label id="lab_us-gaap_DisaggregationOfRevenueLineItems_label_en-US" xlink:label="lab_us-gaap_DisaggregationOfRevenueLineItems" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Disaggregation of Revenue [Line Items]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisaggregationOfRevenueLineItems" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisaggregationOfRevenueLineItems"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems" xlink:to="lab_us-gaap_DisaggregationOfRevenueLineItems" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted_18098210-f7dd-4ef8-b660-bfd1ddf6a015_terseLabel_en-US" xlink:label="lab_us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Remaining purchase commitment</link:label>
    <link:label id="lab_us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted_label_en-US" xlink:label="lab_us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Purchase Commitment, Remaining Minimum Amount Committed</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted" xlink:to="lab_us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths_e72bcd8d-eb11-4ce2-80d1-f5287dc4f8a4_terseLabel_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">2024</link:label>
    <link:label id="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths_label_en-US" xlink:label="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Finite-Lived Intangible Asset, Expected Amortization, Year One</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths" xlink:to="lab_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock_3842e7f8-2de3-4985-8e04-47333f2e7f80_terseLabel_en-US" xlink:label="lab_us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Components and Computation of Basic and Diluted Net Income Per Share</link:label>
    <link:label id="lab_us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock_label_en-US" xlink:label="lab_us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Schedule of Earnings Per Share, Basic and Diluted [Table Text Block]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock" xlink:to="lab_us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock" xlink:type="arc" order="1"/>
    <link:label id="lab_us-gaap_CostOfSalesMember_fd3dba13-05c7-44d7-9507-c276ddbd3d26_terseLabel_en-US" xlink:label="lab_us-gaap_CostOfSalesMember" xlink:role="http://www.xbrl.org/2003/role/terseLabel" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cost of revenues</link:label>
    <link:label id="lab_us-gaap_CostOfSalesMember_label_en-US" xlink:label="lab_us-gaap_CostOfSalesMember" xlink:role="http://www.xbrl.org/2003/role/label" xlink:type="resource" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US">Cost of Sales [Member]</link:label>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CostOfSalesMember" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CostOfSalesMember"/>
    <link:labelArc xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="loc_us-gaap_CostOfSalesMember" xlink:to="lab_us-gaap_CostOfSalesMember" xlink:type="arc" order="1"/>
  </link:labelLink>
</link:linkbase>
</XBRL>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>EX-101.PRE
<SEQUENCE>9
<FILENAME>spsc-20230331_pre.xml
<DESCRIPTION>XBRL TAXONOMY EXTENSION PRESENTATION LINKBASE DOCUMENT
<TEXT>
<XBRL>
<?xml version="1.0" encoding="UTF-8"?>

<!--XBRL Document Created with Wdesk from Workiva-->
<!--Copyright 2023 Workiva-->
<!--r:e8457af8-7448-488b-94ad-becdc804ffea,g:b7f35897-e981-4828-95af-9cb9c0061258-->
<link:linkbase xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xbrl.org/2003/linkbase http://www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd">
  <link:roleRef roleURI="http://www.spscommerce.com/role/Cover" xlink:type="simple" xlink:href="spsc-20230331.xsd#Cover"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/Cover" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_CoverAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_DocumentType_69d340b7-8c86-45fe-9979-56239561e21e" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_DocumentType"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_DocumentType_69d340b7-8c86-45fe-9979-56239561e21e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/verboseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_DocumentQuarterlyReport_316a2a3d-8288-4a96-ba6f-c7a2cdd0b49f" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_DocumentQuarterlyReport"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_DocumentQuarterlyReport_316a2a3d-8288-4a96-ba6f-c7a2cdd0b49f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_DocumentPeriodEndDate_70d6101c-5861-4448-ba50-6235f916c7d4" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_DocumentPeriodEndDate"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_DocumentPeriodEndDate_70d6101c-5861-4448-ba50-6235f916c7d4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_DocumentTransitionReport_cbf42d6d-25cf-4ae8-a63c-6e8b7fe46034" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_DocumentTransitionReport"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_DocumentTransitionReport_cbf42d6d-25cf-4ae8-a63c-6e8b7fe46034" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityFileNumber_f29dbd69-b5f1-437a-b551-6351b5a8da33" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityFileNumber"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityFileNumber_f29dbd69-b5f1-437a-b551-6351b5a8da33" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityRegistrantName_3533797b-0148-4874-85b5-609bee6a9baa" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityRegistrantName"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityRegistrantName_3533797b-0148-4874-85b5-609bee6a9baa" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityIncorporationStateCountryCode_ddb30675-fe0d-4d0e-b10f-0cdfb79e1f40" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityIncorporationStateCountryCode"/>
    <link:presentationArc order="7" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityIncorporationStateCountryCode_ddb30675-fe0d-4d0e-b10f-0cdfb79e1f40" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityTaxIdentificationNumber_d38c85f4-ceec-4ee2-a0f8-afef4cde4191" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityTaxIdentificationNumber"/>
    <link:presentationArc order="8" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityTaxIdentificationNumber_d38c85f4-ceec-4ee2-a0f8-afef4cde4191" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityAddressAddressLine1_05eaeb32-f519-4592-b7a4-8e99ecff2a16" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityAddressAddressLine1"/>
    <link:presentationArc order="9" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityAddressAddressLine1_05eaeb32-f519-4592-b7a4-8e99ecff2a16" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityAddressAddressLine2_dd052e7e-e361-4f9e-a8fb-1de1598f4d98" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityAddressAddressLine2"/>
    <link:presentationArc order="10" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityAddressAddressLine2_dd052e7e-e361-4f9e-a8fb-1de1598f4d98" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityAddressCityOrTown_e1666614-3202-4846-a7e6-e02275c14b7c" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityAddressCityOrTown"/>
    <link:presentationArc order="11" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityAddressCityOrTown_e1666614-3202-4846-a7e6-e02275c14b7c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityAddressStateOrProvince_fe8f875c-af71-44c4-bc5d-62050d15cd79" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityAddressStateOrProvince"/>
    <link:presentationArc order="12" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityAddressStateOrProvince_fe8f875c-af71-44c4-bc5d-62050d15cd79" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityAddressPostalZipCode_27232085-2a07-438e-8c01-9b02258b81ff" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityAddressPostalZipCode"/>
    <link:presentationArc order="13" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityAddressPostalZipCode_27232085-2a07-438e-8c01-9b02258b81ff" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_CityAreaCode_bd84b390-f79b-44c6-a669-4ed1a3b71079" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_CityAreaCode"/>
    <link:presentationArc order="14" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_CityAreaCode_bd84b390-f79b-44c6-a669-4ed1a3b71079" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_LocalPhoneNumber_e4c7b596-935b-4c24-8ea6-aea6319f81d8" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_LocalPhoneNumber"/>
    <link:presentationArc order="15" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_LocalPhoneNumber_e4c7b596-935b-4c24-8ea6-aea6319f81d8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_Security12bTitle_89986c5f-352c-49c3-b18b-d32453679a1f" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_Security12bTitle"/>
    <link:presentationArc order="16" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_Security12bTitle_89986c5f-352c-49c3-b18b-d32453679a1f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_TradingSymbol_a00f6418-53aa-4d2a-97f7-044c05400a2f" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_TradingSymbol"/>
    <link:presentationArc order="17" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_TradingSymbol_a00f6418-53aa-4d2a-97f7-044c05400a2f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_SecurityExchangeName_33b66784-5b5b-4bdb-8495-cfb766119a68" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_SecurityExchangeName"/>
    <link:presentationArc order="18" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_SecurityExchangeName_33b66784-5b5b-4bdb-8495-cfb766119a68" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityCurrentReportingStatus_ca4a504e-6408-48f0-9076-b283d30c5856" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityCurrentReportingStatus"/>
    <link:presentationArc order="19" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityCurrentReportingStatus_ca4a504e-6408-48f0-9076-b283d30c5856" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityInteractiveDataCurrent_e88703bc-703b-4265-af8c-5db68c082545" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityInteractiveDataCurrent"/>
    <link:presentationArc order="20" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityInteractiveDataCurrent_e88703bc-703b-4265-af8c-5db68c082545" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityFilerCategory_52e06016-a1e6-4e81-9313-1db95e6a9e42" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityFilerCategory"/>
    <link:presentationArc order="21" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityFilerCategory_52e06016-a1e6-4e81-9313-1db95e6a9e42" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntitySmallBusiness_b25cdd92-d961-4cea-b0c3-5836fc372fee" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntitySmallBusiness"/>
    <link:presentationArc order="22" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntitySmallBusiness_b25cdd92-d961-4cea-b0c3-5836fc372fee" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityEmergingGrowthCompany_8eeca8f5-4b45-425f-85b7-c682943d5a06" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityEmergingGrowthCompany"/>
    <link:presentationArc order="23" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityEmergingGrowthCompany_8eeca8f5-4b45-425f-85b7-c682943d5a06" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityShellCompany_d82f3851-d981-40ff-afbc-a049b5dd2d78" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityShellCompany"/>
    <link:presentationArc order="24" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityShellCompany_d82f3851-d981-40ff-afbc-a049b5dd2d78" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityCommonStockSharesOutstanding_bfe16f3f-8982-4a25-975e-279802663f05" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityCommonStockSharesOutstanding"/>
    <link:presentationArc order="25" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityCommonStockSharesOutstanding_bfe16f3f-8982-4a25-975e-279802663f05" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_EntityCentralIndexKey_d5374658-d9e3-4430-8be2-8bea21b44c92" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_EntityCentralIndexKey"/>
    <link:presentationArc order="26" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_EntityCentralIndexKey_d5374658-d9e3-4430-8be2-8bea21b44c92" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_CurrentFiscalYearEndDate_0abf413e-0be5-4bc7-a993-f1831f8306fe" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_CurrentFiscalYearEndDate"/>
    <link:presentationArc order="27" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_CurrentFiscalYearEndDate_0abf413e-0be5-4bc7-a993-f1831f8306fe" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_DocumentFiscalYearFocus_66dd9cd7-9749-4dfe-be3f-abad8250a9f8" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_DocumentFiscalYearFocus"/>
    <link:presentationArc order="28" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_DocumentFiscalYearFocus_66dd9cd7-9749-4dfe-be3f-abad8250a9f8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_DocumentFiscalPeriodFocus_0ef8992e-73d5-4db8-b85c-4dfb79d9710d" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_DocumentFiscalPeriodFocus"/>
    <link:presentationArc order="29" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_DocumentFiscalPeriodFocus_0ef8992e-73d5-4db8-b85c-4dfb79d9710d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/verboseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_dei_AmendmentFlag_31e532ab-50c4-495f-9311-3774e0e48b17" xlink:href="https://xbrl.sec.gov/dei/2022/dei-2022.xsd#dei_AmendmentFlag"/>
    <link:presentationArc order="30" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_dei_CoverAbstract_eff5eb58-79f2-45f2-819d-64581338385a" xlink:to="loc_dei_AmendmentFlag_31e532ab-50c4-495f-9311-3774e0e48b17" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets" xlink:type="simple" xlink:href="spsc-20230331.xsd#CondensedConsolidatedBalanceSheets"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementOfFinancialPositionAbstract_76cf2cb4-2cd7-496c-b06b-e3d9ebf81136" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementOfFinancialPositionAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AssetsAbstract_dbc92043-dac5-4dd8-87bb-3b77726996d5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AssetsAbstract"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfFinancialPositionAbstract_76cf2cb4-2cd7-496c-b06b-e3d9ebf81136" xlink:to="loc_us-gaap_AssetsAbstract_dbc92043-dac5-4dd8-87bb-3b77726996d5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AssetsCurrentAbstract_ce5c1b2d-fb82-4c75-b556-c763fe17796f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AssetsCurrentAbstract"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsAbstract_dbc92043-dac5-4dd8-87bb-3b77726996d5" xlink:to="loc_us-gaap_AssetsCurrentAbstract_ce5c1b2d-fb82-4c75-b556-c763fe17796f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CashAndCashEquivalentsAtCarryingValue_2d8907d3-bf55-425c-91b9-4308bce4a772" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CashAndCashEquivalentsAtCarryingValue"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsCurrentAbstract_ce5c1b2d-fb82-4c75-b556-c763fe17796f" xlink:to="loc_us-gaap_CashAndCashEquivalentsAtCarryingValue_2d8907d3-bf55-425c-91b9-4308bce4a772" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShortTermInvestments_c384b4d6-7010-4c68-9787-fa41d3c28903" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShortTermInvestments"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsCurrentAbstract_ce5c1b2d-fb82-4c75-b556-c763fe17796f" xlink:to="loc_us-gaap_ShortTermInvestments_c384b4d6-7010-4c68-9787-fa41d3c28903" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccountsReceivableGrossCurrent_3167cfbe-31da-4d27-bdc0-8f233eef7318" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccountsReceivableGrossCurrent"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsCurrentAbstract_ce5c1b2d-fb82-4c75-b556-c763fe17796f" xlink:to="loc_us-gaap_AccountsReceivableGrossCurrent_3167cfbe-31da-4d27-bdc0-8f233eef7318" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent_56c3f393-2829-4504-b17e-bfe44f5a4356" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsCurrentAbstract_ce5c1b2d-fb82-4c75-b556-c763fe17796f" xlink:to="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent_56c3f393-2829-4504-b17e-bfe44f5a4356" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccountsReceivableNetCurrent_08120c65-7039-4936-9013-f3063869ec92" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccountsReceivableNetCurrent"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsCurrentAbstract_ce5c1b2d-fb82-4c75-b556-c763fe17796f" xlink:to="loc_us-gaap_AccountsReceivableNetCurrent_08120c65-7039-4936-9013-f3063869ec92" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCostsCurrent_fb5c21c9-5eed-428f-8c0b-db845d3fd2d6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCostsCurrent"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsCurrentAbstract_ce5c1b2d-fb82-4c75-b556-c763fe17796f" xlink:to="loc_us-gaap_DeferredCostsCurrent_fb5c21c9-5eed-428f-8c0b-db845d3fd2d6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherAssetsCurrent_a4a2b637-0d97-4eae-bda3-c655327c5c5b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherAssetsCurrent"/>
    <link:presentationArc order="7" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsCurrentAbstract_ce5c1b2d-fb82-4c75-b556-c763fe17796f" xlink:to="loc_us-gaap_OtherAssetsCurrent_a4a2b637-0d97-4eae-bda3-c655327c5c5b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AssetsCurrent_77b40515-70c6-4c2a-975a-7eb092cbbab0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AssetsCurrent"/>
    <link:presentationArc order="8" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsCurrentAbstract_ce5c1b2d-fb82-4c75-b556-c763fe17796f" xlink:to="loc_us-gaap_AssetsCurrent_77b40515-70c6-4c2a-975a-7eb092cbbab0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentNet_fe281af0-b572-4027-8ffc-90e9c11a4c5f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentNet"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsAbstract_dbc92043-dac5-4dd8-87bb-3b77726996d5" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentNet_fe281af0-b572-4027-8ffc-90e9c11a4c5f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseRightOfUseAsset_f464673d-6ce7-4f09-8420-6f25614336cc" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseRightOfUseAsset"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsAbstract_dbc92043-dac5-4dd8-87bb-3b77726996d5" xlink:to="loc_us-gaap_OperatingLeaseRightOfUseAsset_f464673d-6ce7-4f09-8420-6f25614336cc" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_Goodwill_b7dd15da-b247-4254-965b-56b3e35f0857" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_Goodwill"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsAbstract_dbc92043-dac5-4dd8-87bb-3b77726996d5" xlink:to="loc_us-gaap_Goodwill_b7dd15da-b247-4254-965b-56b3e35f0857" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsNet_ba46036b-f810-4be9-9e1e-06dcbf5aeb1b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsNet"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsAbstract_dbc92043-dac5-4dd8-87bb-3b77726996d5" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsNet_ba46036b-f810-4be9-9e1e-06dcbf5aeb1b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherAssetsNoncurrentAbstract_dad1be0e-503f-415b-a522-9577df37081e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherAssetsNoncurrentAbstract"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsAbstract_dbc92043-dac5-4dd8-87bb-3b77726996d5" xlink:to="loc_us-gaap_OtherAssetsNoncurrentAbstract_dad1be0e-503f-415b-a522-9577df37081e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCosts_058cc2ef-7c22-4f58-b87e-131d7d62ae3e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCosts"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherAssetsNoncurrentAbstract_dad1be0e-503f-415b-a522-9577df37081e" xlink:to="loc_us-gaap_DeferredCosts_058cc2ef-7c22-4f58-b87e-131d7d62ae3e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredIncomeTaxAssetsNet_51860359-d6af-4ac6-a4ed-49f217fab395" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredIncomeTaxAssetsNet"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherAssetsNoncurrentAbstract_dad1be0e-503f-415b-a522-9577df37081e" xlink:to="loc_us-gaap_DeferredIncomeTaxAssetsNet_51860359-d6af-4ac6-a4ed-49f217fab395" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherAssetsNoncurrent_36a47e76-5271-4e77-8d4c-5420a0d9cde6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherAssetsNoncurrent"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherAssetsNoncurrentAbstract_dad1be0e-503f-415b-a522-9577df37081e" xlink:to="loc_us-gaap_OtherAssetsNoncurrent_36a47e76-5271-4e77-8d4c-5420a0d9cde6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_Assets_b7cd2cee-2c47-49da-bae9-7f7c7738b8a6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_Assets"/>
    <link:presentationArc order="7" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AssetsAbstract_dbc92043-dac5-4dd8-87bb-3b77726996d5" xlink:to="loc_us-gaap_Assets_b7cd2cee-2c47-49da-bae9-7f7c7738b8a6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LiabilitiesAndStockholdersEquityAbstract_5dc1fef8-a13b-4f5c-83d9-90141c739021" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LiabilitiesAndStockholdersEquityAbstract"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfFinancialPositionAbstract_76cf2cb4-2cd7-496c-b06b-e3d9ebf81136" xlink:to="loc_us-gaap_LiabilitiesAndStockholdersEquityAbstract_5dc1fef8-a13b-4f5c-83d9-90141c739021" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LiabilitiesCurrentAbstract_671d775a-4ed6-4297-b4c6-b8b5014b0f67" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LiabilitiesCurrentAbstract"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_LiabilitiesAndStockholdersEquityAbstract_5dc1fef8-a13b-4f5c-83d9-90141c739021" xlink:to="loc_us-gaap_LiabilitiesCurrentAbstract_671d775a-4ed6-4297-b4c6-b8b5014b0f67" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccountsPayableCurrent_66f05ec0-58db-4be4-bb82-bc3f33afa407" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccountsPayableCurrent"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_LiabilitiesCurrentAbstract_671d775a-4ed6-4297-b4c6-b8b5014b0f67" xlink:to="loc_us-gaap_AccountsPayableCurrent_66f05ec0-58db-4be4-bb82-bc3f33afa407" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeRelatedLiabilitiesCurrent_f539df2b-aefe-413f-a175-2128cb00910d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeRelatedLiabilitiesCurrent"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_LiabilitiesCurrentAbstract_671d775a-4ed6-4297-b4c6-b8b5014b0f67" xlink:to="loc_us-gaap_EmployeeRelatedLiabilitiesCurrent_f539df2b-aefe-413f-a175-2128cb00910d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccruedLiabilitiesCurrent_79ffdffe-8a72-472b-b562-4a5ee19fd69f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccruedLiabilitiesCurrent"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_LiabilitiesCurrentAbstract_671d775a-4ed6-4297-b4c6-b8b5014b0f67" xlink:to="loc_us-gaap_AccruedLiabilitiesCurrent_79ffdffe-8a72-472b-b562-4a5ee19fd69f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerLiabilityCurrent_e3beaccd-adcd-49fe-8c95-407808d1c056" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerLiabilityCurrent"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_LiabilitiesCurrentAbstract_671d775a-4ed6-4297-b4c6-b8b5014b0f67" xlink:to="loc_us-gaap_ContractWithCustomerLiabilityCurrent_e3beaccd-adcd-49fe-8c95-407808d1c056" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseLiabilityCurrent_214ee3f9-6c74-45d2-a11e-1dac5e01090b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseLiabilityCurrent"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_LiabilitiesCurrentAbstract_671d775a-4ed6-4297-b4c6-b8b5014b0f67" xlink:to="loc_us-gaap_OperatingLeaseLiabilityCurrent_214ee3f9-6c74-45d2-a11e-1dac5e01090b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LiabilitiesCurrent_ec65dbff-62b0-4a93-b9bb-ba145a9424f6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LiabilitiesCurrent"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_LiabilitiesCurrentAbstract_671d775a-4ed6-4297-b4c6-b8b5014b0f67" xlink:to="loc_us-gaap_LiabilitiesCurrent_ec65dbff-62b0-4a93-b9bb-ba145a9424f6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherLiabilitiesNoncurrentAbstract_1c5f4032-0d88-4b5b-81d8-f9ba0d671e43" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherLiabilitiesNoncurrentAbstract"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_LiabilitiesAndStockholdersEquityAbstract_5dc1fef8-a13b-4f5c-83d9-90141c739021" xlink:to="loc_us-gaap_OtherLiabilitiesNoncurrentAbstract_1c5f4032-0d88-4b5b-81d8-f9ba0d671e43" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerLiabilityNoncurrent_4a7459ea-d288-494a-9bae-d05499d35cc9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerLiabilityNoncurrent"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherLiabilitiesNoncurrentAbstract_1c5f4032-0d88-4b5b-81d8-f9ba0d671e43" xlink:to="loc_us-gaap_ContractWithCustomerLiabilityNoncurrent_4a7459ea-d288-494a-9bae-d05499d35cc9" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseLiabilityNoncurrent_bc9934c5-dc6c-45d1-abb7-f0414702e9f7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseLiabilityNoncurrent"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherLiabilitiesNoncurrentAbstract_1c5f4032-0d88-4b5b-81d8-f9ba0d671e43" xlink:to="loc_us-gaap_OperatingLeaseLiabilityNoncurrent_bc9934c5-dc6c-45d1-abb7-f0414702e9f7" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredIncomeTaxLiabilitiesNet_c0a0fd4d-7e87-4640-8e15-edaa4a4faad0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredIncomeTaxLiabilitiesNet"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherLiabilitiesNoncurrentAbstract_1c5f4032-0d88-4b5b-81d8-f9ba0d671e43" xlink:to="loc_us-gaap_DeferredIncomeTaxLiabilitiesNet_c0a0fd4d-7e87-4640-8e15-edaa4a4faad0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_Liabilities_79464d82-8276-4b59-9c24-bab633532d1d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_Liabilities"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_LiabilitiesAndStockholdersEquityAbstract_5dc1fef8-a13b-4f5c-83d9-90141c739021" xlink:to="loc_us-gaap_Liabilities_79464d82-8276-4b59-9c24-bab633532d1d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingencies_7dbfd7e7-1dab-43e1-81bc-aa96dd7fd4b5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingencies"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_LiabilitiesAndStockholdersEquityAbstract_5dc1fef8-a13b-4f5c-83d9-90141c739021" xlink:to="loc_us-gaap_CommitmentsAndContingencies_7dbfd7e7-1dab-43e1-81bc-aa96dd7fd4b5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockholdersEquityAbstract_086f55ba-c2dd-4f70-9bf1-eec11d19ce30" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockholdersEquityAbstract"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_LiabilitiesAndStockholdersEquityAbstract_5dc1fef8-a13b-4f5c-83d9-90141c739021" xlink:to="loc_us-gaap_StockholdersEquityAbstract_086f55ba-c2dd-4f70-9bf1-eec11d19ce30" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PreferredStockValue_f0f07c4a-eab5-4d62-a78e-5357133ef55a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PreferredStockValue"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StockholdersEquityAbstract_086f55ba-c2dd-4f70-9bf1-eec11d19ce30" xlink:to="loc_us-gaap_PreferredStockValue_f0f07c4a-eab5-4d62-a78e-5357133ef55a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockValue_5d4ba10f-0737-4cc4-9173-287f4c654e21" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockValue"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StockholdersEquityAbstract_086f55ba-c2dd-4f70-9bf1-eec11d19ce30" xlink:to="loc_us-gaap_CommonStockValue_5d4ba10f-0737-4cc4-9173-287f4c654e21" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockCommonValue_659ab624-4a76-414f-b4e2-e1c221b3bd8b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockCommonValue"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StockholdersEquityAbstract_086f55ba-c2dd-4f70-9bf1-eec11d19ce30" xlink:to="loc_us-gaap_TreasuryStockCommonValue_659ab624-4a76-414f-b4e2-e1c221b3bd8b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AdditionalPaidInCapitalCommonStock_45e376e1-22a7-418c-b486-c4d148469ea0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AdditionalPaidInCapitalCommonStock"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StockholdersEquityAbstract_086f55ba-c2dd-4f70-9bf1-eec11d19ce30" xlink:to="loc_us-gaap_AdditionalPaidInCapitalCommonStock_45e376e1-22a7-418c-b486-c4d148469ea0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RetainedEarningsAccumulatedDeficit_03fdb755-0737-43eb-9b3f-f77aac1d6926" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RetainedEarningsAccumulatedDeficit"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StockholdersEquityAbstract_086f55ba-c2dd-4f70-9bf1-eec11d19ce30" xlink:to="loc_us-gaap_RetainedEarningsAccumulatedDeficit_03fdb755-0737-43eb-9b3f-f77aac1d6926" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax_cadbc8be-4d3b-44b1-b21c-d775d0073ace" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StockholdersEquityAbstract_086f55ba-c2dd-4f70-9bf1-eec11d19ce30" xlink:to="loc_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax_cadbc8be-4d3b-44b1-b21c-d775d0073ace" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockholdersEquity_c04db982-dc5e-430f-ba57-0d899246a67e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockholdersEquity"/>
    <link:presentationArc order="7" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StockholdersEquityAbstract_086f55ba-c2dd-4f70-9bf1-eec11d19ce30" xlink:to="loc_us-gaap_StockholdersEquity_c04db982-dc5e-430f-ba57-0d899246a67e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LiabilitiesAndStockholdersEquity_ee57b605-a879-4a88-aea6-916a56609b79" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LiabilitiesAndStockholdersEquity"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_LiabilitiesAndStockholdersEquityAbstract_5dc1fef8-a13b-4f5c-83d9-90141c739021" xlink:to="loc_us-gaap_LiabilitiesAndStockholdersEquity_ee57b605-a879-4a88-aea6-916a56609b79" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical" xlink:type="simple" xlink:href="spsc-20230331.xsd#CondensedConsolidatedBalanceSheetsParenthetical"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementOfFinancialPositionAbstract_dab730ef-c140-4d75-9d8e-82271447fa71" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementOfFinancialPositionAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PreferredStockParOrStatedValuePerShare_4dbdc7cc-35e6-4b57-8e4e-0a9278c7bce7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PreferredStockParOrStatedValuePerShare"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfFinancialPositionAbstract_dab730ef-c140-4d75-9d8e-82271447fa71" xlink:to="loc_us-gaap_PreferredStockParOrStatedValuePerShare_4dbdc7cc-35e6-4b57-8e4e-0a9278c7bce7" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PreferredStockSharesAuthorized_16273bec-86f5-499e-8b40-d5bf02a94a1d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PreferredStockSharesAuthorized"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfFinancialPositionAbstract_dab730ef-c140-4d75-9d8e-82271447fa71" xlink:to="loc_us-gaap_PreferredStockSharesAuthorized_16273bec-86f5-499e-8b40-d5bf02a94a1d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PreferredStockSharesIssued_d0ecbf12-904e-4047-9558-64ce3a870795" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PreferredStockSharesIssued"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfFinancialPositionAbstract_dab730ef-c140-4d75-9d8e-82271447fa71" xlink:to="loc_us-gaap_PreferredStockSharesIssued_d0ecbf12-904e-4047-9558-64ce3a870795" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PreferredStockSharesOutstanding_17288476-343f-4f96-9e39-b890e6b498cd" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PreferredStockSharesOutstanding"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfFinancialPositionAbstract_dab730ef-c140-4d75-9d8e-82271447fa71" xlink:to="loc_us-gaap_PreferredStockSharesOutstanding_17288476-343f-4f96-9e39-b890e6b498cd" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockParOrStatedValuePerShare_82d1b021-1912-457c-ab2c-aed0c5dddb0b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockParOrStatedValuePerShare"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfFinancialPositionAbstract_dab730ef-c140-4d75-9d8e-82271447fa71" xlink:to="loc_us-gaap_CommonStockParOrStatedValuePerShare_82d1b021-1912-457c-ab2c-aed0c5dddb0b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockSharesAuthorized_8edf96ea-0f7b-4934-af80-14d804d2eaa6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockSharesAuthorized"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfFinancialPositionAbstract_dab730ef-c140-4d75-9d8e-82271447fa71" xlink:to="loc_us-gaap_CommonStockSharesAuthorized_8edf96ea-0f7b-4934-af80-14d804d2eaa6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockSharesIssued_e4f928a4-00da-481f-b3e0-b7843e9f96f9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockSharesIssued"/>
    <link:presentationArc order="7" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfFinancialPositionAbstract_dab730ef-c140-4d75-9d8e-82271447fa71" xlink:to="loc_us-gaap_CommonStockSharesIssued_e4f928a4-00da-481f-b3e0-b7843e9f96f9" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockSharesOutstanding_2496950b-4124-4a94-8ec5-cd25fa08d2c2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockSharesOutstanding"/>
    <link:presentationArc order="8" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfFinancialPositionAbstract_dab730ef-c140-4d75-9d8e-82271447fa71" xlink:to="loc_us-gaap_CommonStockSharesOutstanding_2496950b-4124-4a94-8ec5-cd25fa08d2c2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockCommonShares_bfde9481-599d-472a-9865-8067c83243ec" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockCommonShares"/>
    <link:presentationArc order="9" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfFinancialPositionAbstract_dab730ef-c140-4d75-9d8e-82271447fa71" xlink:to="loc_us-gaap_TreasuryStockCommonShares_bfde9481-599d-472a-9865-8067c83243ec" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome" xlink:type="simple" xlink:href="spsc-20230331.xsd#CondensedConsolidatedStatementsofComprehensiveIncome"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeStatementAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax_48a7b4c4-c759-4403-a57f-20a6c3e9552b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax_48a7b4c4-c759-4403-a57f-20a6c3e9552b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CostOfRevenue_fea496cf-8fcf-4f85-a0f7-6d880660ea66" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CostOfRevenue"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_CostOfRevenue_fea496cf-8fcf-4f85-a0f7-6d880660ea66" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GrossProfit_cb1131ad-aa55-42a4-8c2b-f3555dbce8a8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GrossProfit"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_GrossProfit_cb1131ad-aa55-42a4-8c2b-f3555dbce8a8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingExpensesAbstract_2064395f-f313-43cc-b640-d8da341811f8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingExpensesAbstract"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_OperatingExpensesAbstract_2064395f-f313-43cc-b640-d8da341811f8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SellingAndMarketingExpense_12aa2301-391d-4c2d-8c91-e75b0d4c03d8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SellingAndMarketingExpense"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OperatingExpensesAbstract_2064395f-f313-43cc-b640-d8da341811f8" xlink:to="loc_us-gaap_SellingAndMarketingExpense_12aa2301-391d-4c2d-8c91-e75b0d4c03d8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ResearchAndDevelopmentExpense_42cc3353-6a9c-4f11-8068-8e2748b913b6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ResearchAndDevelopmentExpense"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OperatingExpensesAbstract_2064395f-f313-43cc-b640-d8da341811f8" xlink:to="loc_us-gaap_ResearchAndDevelopmentExpense_42cc3353-6a9c-4f11-8068-8e2748b913b6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeneralAndAdministrativeExpense_817b152e-6811-4a82-95fc-7f72ee9bd4eb" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeneralAndAdministrativeExpense"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OperatingExpensesAbstract_2064395f-f313-43cc-b640-d8da341811f8" xlink:to="loc_us-gaap_GeneralAndAdministrativeExpense_817b152e-6811-4a82-95fc-7f72ee9bd4eb" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AmortizationOfIntangibleAssets_bf3fb235-da7e-42f3-a145-2d55ae15b4f6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AmortizationOfIntangibleAssets"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OperatingExpensesAbstract_2064395f-f313-43cc-b640-d8da341811f8" xlink:to="loc_us-gaap_AmortizationOfIntangibleAssets_bf3fb235-da7e-42f3-a145-2d55ae15b4f6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingExpenses_8741695a-f711-4a63-a748-2f2c05b274ac" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingExpenses"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OperatingExpensesAbstract_2064395f-f313-43cc-b640-d8da341811f8" xlink:to="loc_us-gaap_OperatingExpenses_8741695a-f711-4a63-a748-2f2c05b274ac" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingIncomeLoss_b5ea6dd4-9338-4292-b6e1-78e9005bf3a8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingIncomeLoss"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_OperatingIncomeLoss_b5ea6dd4-9338-4292-b6e1-78e9005bf3a8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NonoperatingIncomeExpense_643fb6a4-0418-4472-b25c-0bbfb9f1385c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NonoperatingIncomeExpense"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_NonoperatingIncomeExpense_643fb6a4-0418-4472-b25c-0bbfb9f1385c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest_91102ea8-8348-4f34-9008-ada6ebdb3b59" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest"/>
    <link:presentationArc order="7" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest_91102ea8-8348-4f34-9008-ada6ebdb3b59" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeTaxExpenseBenefit_c0e260e1-6670-40c5-b0e3-4de47fcd93a3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeTaxExpenseBenefit"/>
    <link:presentationArc order="8" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_IncomeTaxExpenseBenefit_c0e260e1-6670-40c5-b0e3-4de47fcd93a3" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetIncomeLoss_44278975-7233-40d5-9591-f858b28a61da" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetIncomeLoss"/>
    <link:presentationArc order="9" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_NetIncomeLoss_44278975-7233-40d5-9591-f858b28a61da" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract_0a676ddd-4cde-4ab6-9e34-661e7db2f8ad" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract"/>
    <link:presentationArc order="10" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract_0a676ddd-4cde-4ab6-9e34-661e7db2f8ad" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax_bd6dec39-8216-49c0-98eb-b80aed03b8dd" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract_0a676ddd-4cde-4ab6-9e34-661e7db2f8ad" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax_bd6dec39-8216-49c0-98eb-b80aed03b8dd" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_e118e763-c6e5-4566-a54a-9ad80c884d66" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract_0a676ddd-4cde-4ab6-9e34-661e7db2f8ad" xlink:to="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_e118e763-c6e5-4566-a54a-9ad80c884d66" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_b9654048-757d-4d1b-9519-4e61ce413cac" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract_0a676ddd-4cde-4ab6-9e34-661e7db2f8ad" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_b9654048-757d-4d1b-9519-4e61ce413cac" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent_dc036109-c309-48d7-8aa5-543314770383" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract_0a676ddd-4cde-4ab6-9e34-661e7db2f8ad" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent_dc036109-c309-48d7-8aa5-543314770383" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ComprehensiveIncomeNetOfTax_6edd5a83-f5b9-4dd2-a7f0-f1796891e38e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ComprehensiveIncomeNetOfTax"/>
    <link:presentationArc order="11" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_ComprehensiveIncomeNetOfTax_6edd5a83-f5b9-4dd2-a7f0-f1796891e38e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareAbstract_b8b6e2ed-d66b-4c34-bfd1-435848857043" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareAbstract"/>
    <link:presentationArc order="12" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_EarningsPerShareAbstract_b8b6e2ed-d66b-4c34-bfd1-435848857043" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareBasic_6bab73ba-e628-42bf-ba39-438c40d7d144" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareBasic"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EarningsPerShareAbstract_b8b6e2ed-d66b-4c34-bfd1-435848857043" xlink:to="loc_us-gaap_EarningsPerShareBasic_6bab73ba-e628-42bf-ba39-438c40d7d144" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareDiluted_97e93eeb-0d92-454c-b1a3-29ccebb17e3a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareDiluted"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EarningsPerShareAbstract_b8b6e2ed-d66b-4c34-bfd1-435848857043" xlink:to="loc_us-gaap_EarningsPerShareDiluted_97e93eeb-0d92-454c-b1a3-29ccebb17e3a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_b20fe8a1-d923-4752-a18c-9e28834264e4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract"/>
    <link:presentationArc order="13" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_6ecefe5e-b148-49db-bcf4-8e1e12b2af7c" xlink:to="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_b20fe8a1-d923-4752-a18c-9e28834264e4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic_b6a94b67-48f8-466c-ab24-4a4ac21a0e28" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_WeightedAverageNumberOfSharesOutstandingBasic"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_b20fe8a1-d923-4752-a18c-9e28834264e4" xlink:to="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic_b6a94b67-48f8-466c-ab24-4a4ac21a0e28" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding_7b15457c-8ce9-4a82-8c64-3f823dc7f719" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_b20fe8a1-d923-4752-a18c-9e28834264e4" xlink:to="loc_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding_7b15457c-8ce9-4a82-8c64-3f823dc7f719" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncomeParenthetical" xlink:type="simple" xlink:href="spsc-20230331.xsd#CondensedConsolidatedStatementsofComprehensiveIncomeParenthetical"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncomeParenthetical" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeStatementAbstract_c748556d-9bbf-462e-9dfc-e52cbac0595d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeStatementAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax_144531fd-8d41-425f-959e-45029cafd3a4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_c748556d-9bbf-462e-9dfc-e52cbac0595d" xlink:to="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax_144531fd-8d41-425f-959e-45029cafd3a4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax_520eab77-55c3-409a-b1ed-b8656cb5f3ac" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_c748556d-9bbf-462e-9dfc-e52cbac0595d" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax_520eab77-55c3-409a-b1ed-b8656cb5f3ac" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedTerseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax_dcdb1ccf-cacf-4bea-8bcd-77cc15882be2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_c748556d-9bbf-462e-9dfc-e52cbac0595d" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax_dcdb1ccf-cacf-4bea-8bcd-77cc15882be2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_1a787ffc-7d3b-45ee-ac20-18210d2c3977" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_c748556d-9bbf-462e-9dfc-e52cbac0595d" xlink:to="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_1a787ffc-7d3b-45ee-ac20-18210d2c3977" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_f99f8d5a-320f-4272-96b5-2537c2e535eb" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementAbstract_c748556d-9bbf-462e-9dfc-e52cbac0595d" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_f99f8d5a-320f-4272-96b5-2537c2e535eb" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedTerseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity" xlink:type="simple" xlink:href="spsc-20230331.xsd#CondensedConsolidatedStatementsofStockholdersEquity"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementOfStockholdersEquityAbstract_2ce56267-53b6-4878-9e91-8c369da6a2d4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementOfStockholdersEquityAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementTable_ed8a9808-efde-4114-85c1-1d687c3e79b0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfStockholdersEquityAbstract_2ce56267-53b6-4878-9e91-8c369da6a2d4" xlink:to="loc_us-gaap_StatementTable_ed8a9808-efde-4114-85c1-1d687c3e79b0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementEquityComponentsAxis_1535432b-31f9-4ca5-9648-f3b7c5d53c95" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementEquityComponentsAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementTable_ed8a9808-efde-4114-85c1-1d687c3e79b0" xlink:to="loc_us-gaap_StatementEquityComponentsAxis_1535432b-31f9-4ca5-9648-f3b7c5d53c95" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EquityComponentDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementEquityComponentsAxis_1535432b-31f9-4ca5-9648-f3b7c5d53c95" xlink:to="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockMember_5edb3263-543e-4172-8b59-8c341f15968e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:to="loc_us-gaap_CommonStockMember_5edb3263-543e-4172-8b59-8c341f15968e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockMember_dc4b260d-2bde-4ce1-871e-f61a9fbe7168" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:to="loc_us-gaap_TreasuryStockMember_dc4b260d-2bde-4ce1-871e-f61a9fbe7168" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AdditionalPaidInCapitalMember_a87b02f1-07c0-48eb-a7c1-a4640b2b0f4f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AdditionalPaidInCapitalMember"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:to="loc_us-gaap_AdditionalPaidInCapitalMember_a87b02f1-07c0-48eb-a7c1-a4640b2b0f4f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RetainedEarningsMember_eafc18a6-4240-4cc8-a2d9-7a1911a97778" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RetainedEarningsMember"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:to="loc_us-gaap_RetainedEarningsMember_eafc18a6-4240-4cc8-a2d9-7a1911a97778" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccumulatedOtherComprehensiveIncomeMember_7a3c53e3-d23a-48de-ae1f-4b41b796a9d5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccumulatedOtherComprehensiveIncomeMember"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EquityComponentDomain_4d00e24a-5248-4094-9846-1d9c482c3c85" xlink:to="loc_us-gaap_AccumulatedOtherComprehensiveIncomeMember_7a3c53e3-d23a-48de-ae1f-4b41b796a9d5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementLineItems_d43c6e3b-ff5c-40b1-9c5d-d634fef1bcd8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementLineItems"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementTable_ed8a9808-efde-4114-85c1-1d687c3e79b0" xlink:to="loc_us-gaap_StatementLineItems_d43c6e3b-ff5c-40b1-9c5d-d634fef1bcd8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInStockholdersEquityRollForward"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementLineItems_d43c6e3b-ff5c-40b1-9c5d-d634fef1bcd8" xlink:to="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockSharesOutstanding_98dfbc3a-5180-47b9-ba14-1b4944e5be00" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockSharesOutstanding"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_CommonStockSharesOutstanding_98dfbc3a-5180-47b9-ba14-1b4944e5be00" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodStartLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockholdersEquity_fcab5d41-3b4e-4986-8619-82c151a56158" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockholdersEquity"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_StockholdersEquity_fcab5d41-3b4e-4986-8619-82c151a56158" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodStartLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockCommonShares_66d30a03-cfde-46fe-b5b6-506f1164bb47" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockCommonShares"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_TreasuryStockCommonShares_66d30a03-cfde-46fe-b5b6-506f1164bb47" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodStartLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue_a43305ba-c7d6-4e9e-9e24-e5c87648aec3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue_a43305ba-c7d6-4e9e-9e24-e5c87648aec3" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation_850aeb5c-3d97-4d93-9d35-ab3b9e895c2c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation_850aeb5c-3d97-4d93-9d35-ab3b9e895c2c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation_0d83b8f5-7b42-4f85-ba3d-31557a33739e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation_0d83b8f5-7b42-4f85-ba3d-31557a33739e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans_d84b2ca9-1150-4293-9510-fe170fd8138d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans"/>
    <link:presentationArc order="7" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans_d84b2ca9-1150-4293-9510-fe170fd8138d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan_c3525379-9f45-4b6c-b133-59162536faf2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan"/>
    <link:presentationArc order="8" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan_c3525379-9f45-4b6c-b133-59162536faf2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockSharesAcquired_3f7030a3-803f-4a35-b6aa-369d803dd4d4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockSharesAcquired"/>
    <link:presentationArc order="9" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_TreasuryStockSharesAcquired_3f7030a3-803f-4a35-b6aa-369d803dd4d4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedTerseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockValueAcquiredCostMethod_afd1322b-f2b0-470d-8d4b-43d844a3dae9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockValueAcquiredCostMethod"/>
    <link:presentationArc order="10" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_TreasuryStockValueAcquiredCostMethod_afd1322b-f2b0-470d-8d4b-43d844a3dae9" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetIncomeLoss_c6bf5ec4-b04f-4726-b998-aabf747717e6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetIncomeLoss"/>
    <link:presentationArc order="11" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_NetIncomeLoss_c6bf5ec4-b04f-4726-b998-aabf747717e6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax_eb8e2de9-7d82-4b3f-9816-671b27604600" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax"/>
    <link:presentationArc order="12" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax_eb8e2de9-7d82-4b3f-9816-671b27604600" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_b178afeb-aa6a-4f68-bcc4-449a498195ff" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax"/>
    <link:presentationArc order="13" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax_b178afeb-aa6a-4f68-bcc4-449a498195ff" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/verboseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_355afa31-461d-4c9c-a0f0-ac25052d7ee1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax"/>
    <link:presentationArc order="14" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax_355afa31-461d-4c9c-a0f0-ac25052d7ee1" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedTerseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockSharesOutstanding_d1fbd9d6-3e5e-4fe5-abf1-ef70b9376c2f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockSharesOutstanding"/>
    <link:presentationArc order="15" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_CommonStockSharesOutstanding_d1fbd9d6-3e5e-4fe5-abf1-ef70b9376c2f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodEndLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockholdersEquity_85b7c944-8d46-4630-b0af-92711e15d73c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockholdersEquity"/>
    <link:presentationArc order="16" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_StockholdersEquity_85b7c944-8d46-4630-b0af-92711e15d73c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodEndLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockCommonShares_340e4858-fe54-41c0-9ff5-476fc87f7216" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockCommonShares"/>
    <link:presentationArc order="17" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward_ef34c3ad-008b-415f-89dd-6f269f1e6cf5" xlink:to="loc_us-gaap_TreasuryStockCommonShares_340e4858-fe54-41c0-9ff5-476fc87f7216" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodEndLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows" xlink:type="simple" xlink:href="spsc-20230331.xsd#CondensedConsolidatedStatementsofCashFlows"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementOfCashFlowsAbstract_16e7c6ab-4789-4d73-b8a0-f790c9fc34cf" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementOfCashFlowsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract_6ec3d3e3-9555-4940-928e-0bb658c8a6c0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfCashFlowsAbstract_16e7c6ab-4789-4d73-b8a0-f790c9fc34cf" xlink:to="loc_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract_6ec3d3e3-9555-4940-928e-0bb658c8a6c0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetIncomeLoss_b3190d8b-8c03-4cc1-a925-d763a8606a37" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetIncomeLoss"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract_6ec3d3e3-9555-4940-928e-0bb658c8a6c0" xlink:to="loc_us-gaap_NetIncomeLoss_b3190d8b-8c03-4cc1-a925-d763a8606a37" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract_5789020c-4b0e-452b-a718-02fb26a30e38" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract_6ec3d3e3-9555-4940-928e-0bb658c8a6c0" xlink:to="loc_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract_5789020c-4b0e-452b-a718-02fb26a30e38" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredIncomeTaxExpenseBenefit_7e8f5557-29cd-40e8-8354-53c9e4c114a7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredIncomeTaxExpenseBenefit"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract_5789020c-4b0e-452b-a718-02fb26a30e38" xlink:to="loc_us-gaap_DeferredIncomeTaxExpenseBenefit_7e8f5557-29cd-40e8-8354-53c9e4c114a7" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DepreciationDepletionAndAmortization_3089686f-18ca-48a6-a2c4-df7d3fcc66dd" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DepreciationDepletionAndAmortization"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract_5789020c-4b0e-452b-a718-02fb26a30e38" xlink:to="loc_us-gaap_DepreciationDepletionAndAmortization_3089686f-18ca-48a6-a2c4-df7d3fcc66dd" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AmortizationOfIntangibleAssets_535355aa-e5cf-4381-a9ea-b6b3cbbd6179" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AmortizationOfIntangibleAssets"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract_5789020c-4b0e-452b-a718-02fb26a30e38" xlink:to="loc_us-gaap_AmortizationOfIntangibleAssets_535355aa-e5cf-4381-a9ea-b6b3cbbd6179" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProvisionForDoubtfulAccounts_8df862f7-dc84-41a5-9298-c6e50668c0c2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProvisionForDoubtfulAccounts"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract_5789020c-4b0e-452b-a718-02fb26a30e38" xlink:to="loc_us-gaap_ProvisionForDoubtfulAccounts_8df862f7-dc84-41a5-9298-c6e50668c0c2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensation_56bfb998-689f-49da-ac72-693965a3045e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensation"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract_5789020c-4b0e-452b-a718-02fb26a30e38" xlink:to="loc_us-gaap_ShareBasedCompensation_56bfb998-689f-49da-ac72-693965a3045e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherNoncashIncomeExpense_c60ae038-f2b7-4098-8d65-6766977ae73d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherNoncashIncomeExpense"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract_5789020c-4b0e-452b-a718-02fb26a30e38" xlink:to="loc_us-gaap_OtherNoncashIncomeExpense_c60ae038-f2b7-4098-8d65-6766977ae73d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract_49d82e77-074a-435b-a35e-32a6b72cfd2a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInOperatingCapitalAbstract"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract_6ec3d3e3-9555-4940-928e-0bb658c8a6c0" xlink:to="loc_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract_49d82e77-074a-435b-a35e-32a6b72cfd2a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInAccountsReceivable_bc077740-31b6-4ce0-9701-be9f54a7e251" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInAccountsReceivable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract_49d82e77-074a-435b-a35e-32a6b72cfd2a" xlink:to="loc_us-gaap_IncreaseDecreaseInAccountsReceivable_bc077740-31b6-4ce0-9701-be9f54a7e251" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInDeferredCharges_0b1214e5-b680-47a8-87a9-b4bafde100d0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInDeferredCharges"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract_49d82e77-074a-435b-a35e-32a6b72cfd2a" xlink:to="loc_us-gaap_IncreaseDecreaseInDeferredCharges_0b1214e5-b680-47a8-87a9-b4bafde100d0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInOtherOperatingAssets_c27457c8-c81e-498f-a5bf-b6be1f4294ac" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInOtherOperatingAssets"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract_49d82e77-074a-435b-a35e-32a6b72cfd2a" xlink:to="loc_us-gaap_IncreaseDecreaseInOtherOperatingAssets_c27457c8-c81e-498f-a5bf-b6be1f4294ac" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInAccountsPayable_e46005af-d796-43c5-af29-cb20fc967cac" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInAccountsPayable"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract_49d82e77-074a-435b-a35e-32a6b72cfd2a" xlink:to="loc_us-gaap_IncreaseDecreaseInAccountsPayable_e46005af-d796-43c5-af29-cb20fc967cac" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities_4889ad7b-a33e-46e2-8341-22bc7b94f472" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract_49d82e77-074a-435b-a35e-32a6b72cfd2a" xlink:to="loc_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities_4889ad7b-a33e-46e2-8341-22bc7b94f472" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInAccruedLiabilities_fea9f8bd-391c-49d0-823c-6bd1b31fef3d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInAccruedLiabilities"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract_49d82e77-074a-435b-a35e-32a6b72cfd2a" xlink:to="loc_us-gaap_IncreaseDecreaseInAccruedLiabilities_fea9f8bd-391c-49d0-823c-6bd1b31fef3d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncreaseDecreaseInContractWithCustomerLiability_0969ec14-c421-474b-881b-1ccc0cb19c2a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncreaseDecreaseInContractWithCustomerLiability"/>
    <link:presentationArc order="7" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract_49d82e77-074a-435b-a35e-32a6b72cfd2a" xlink:to="loc_us-gaap_IncreaseDecreaseInContractWithCustomerLiability_0969ec14-c421-474b-881b-1ccc0cb19c2a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_IncreaseDecreaseInOperatingLeases_54c3758e-d66b-4344-90da-47c33bdcd0f0" xlink:href="spsc-20230331.xsd#spsc_IncreaseDecreaseInOperatingLeases"/>
    <link:presentationArc order="8" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract_49d82e77-074a-435b-a35e-32a6b72cfd2a" xlink:to="loc_spsc_IncreaseDecreaseInOperatingLeases_54c3758e-d66b-4344-90da-47c33bdcd0f0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_5c0c0ee4-199b-4776-b917-bbd5292deb8b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInOperatingActivities"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract_6ec3d3e3-9555-4940-928e-0bb658c8a6c0" xlink:to="loc_us-gaap_NetCashProvidedByUsedInOperatingActivities_5c0c0ee4-199b-4776-b917-bbd5292deb8b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract_b60077f4-063a-48b8-8c5a-ad6d30d1612c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfCashFlowsAbstract_16e7c6ab-4789-4d73-b8a0-f790c9fc34cf" xlink:to="loc_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract_b60077f4-063a-48b8-8c5a-ad6d30d1612c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment_15718cdc-3d2b-4341-a2f0-76dfd66c5c88" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PaymentsToAcquirePropertyPlantAndEquipment"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract_b60077f4-063a-48b8-8c5a-ad6d30d1612c" xlink:to="loc_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment_15718cdc-3d2b-4341-a2f0-76dfd66c5c88" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PaymentsToAcquireOtherInvestments_c4bd9b41-6548-4059-809a-2bbafaa43b37" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PaymentsToAcquireOtherInvestments"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract_b60077f4-063a-48b8-8c5a-ad6d30d1612c" xlink:to="loc_us-gaap_PaymentsToAcquireOtherInvestments_c4bd9b41-6548-4059-809a-2bbafaa43b37" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities_814a49a5-fab0-4e02-9dd5-0b45965cf1e1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract_b60077f4-063a-48b8-8c5a-ad6d30d1612c" xlink:to="loc_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities_814a49a5-fab0-4e02-9dd5-0b45965cf1e1" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInInvestingActivities_1e4a1a63-d19b-4319-b194-b2562662e618" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInInvestingActivities"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract_b60077f4-063a-48b8-8c5a-ad6d30d1612c" xlink:to="loc_us-gaap_NetCashProvidedByUsedInInvestingActivities_1e4a1a63-d19b-4319-b194-b2562662e618" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract_d0ccd170-18bf-412f-b15b-b44fd7b452b7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfCashFlowsAbstract_16e7c6ab-4789-4d73-b8a0-f790c9fc34cf" xlink:to="loc_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract_d0ccd170-18bf-412f-b15b-b44fd7b452b7" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PaymentsForRepurchaseOfCommonStock_7b0586a4-6ba2-4579-8a7c-42d5563fc873" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PaymentsForRepurchaseOfCommonStock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract_d0ccd170-18bf-412f-b15b-b44fd7b452b7" xlink:to="loc_us-gaap_PaymentsForRepurchaseOfCommonStock_7b0586a4-6ba2-4579-8a7c-42d5563fc873" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProceedsFromStockOptionsExercised_077d0e81-1e6e-43fb-8f92-c97989d1bace" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProceedsFromStockOptionsExercised"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract_d0ccd170-18bf-412f-b15b-b44fd7b452b7" xlink:to="loc_us-gaap_ProceedsFromStockOptionsExercised_077d0e81-1e6e-43fb-8f92-c97989d1bace" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProceedsFromStockPlans_b8af4743-decd-402b-97d5-034b8f0598f5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProceedsFromStockPlans"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract_d0ccd170-18bf-412f-b15b-b44fd7b452b7" xlink:to="loc_us-gaap_ProceedsFromStockPlans_b8af4743-decd-402b-97d5-034b8f0598f5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetCashProvidedByUsedInFinancingActivities_6c6d03bd-7aff-4ae1-ba30-b9566cce4aba" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetCashProvidedByUsedInFinancingActivities"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract_d0ccd170-18bf-412f-b15b-b44fd7b452b7" xlink:to="loc_us-gaap_NetCashProvidedByUsedInFinancingActivities_6c6d03bd-7aff-4ae1-ba30-b9566cce4aba" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_48c19098-2aa4-4661-8ad5-02abbd547364" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfCashFlowsAbstract_16e7c6ab-4789-4d73-b8a0-f790c9fc34cf" xlink:to="loc_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_48c19098-2aa4-4661-8ad5-02abbd547364" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect_7d3b6c18-778e-4548-97f3-12c1fdc9f21d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfCashFlowsAbstract_16e7c6ab-4789-4d73-b8a0-f790c9fc34cf" xlink:to="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect_7d3b6c18-778e-4548-97f3-12c1fdc9f21d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_9585464b-7c06-4991-89b1-cd09c307b007" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfCashFlowsAbstract_16e7c6ab-4789-4d73-b8a0-f790c9fc34cf" xlink:to="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_9585464b-7c06-4991-89b1-cd09c307b007" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodStartLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_44d2a02d-09ae-4d3e-8313-370049e22475" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations"/>
    <link:presentationArc order="7" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementOfCashFlowsAbstract_16e7c6ab-4789-4d73-b8a0-f790c9fc34cf" xlink:to="loc_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations_44d2a02d-09ae-4d3e-8313-370049e22475" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodEndLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/General" xlink:type="simple" xlink:href="spsc-20230331.xsd#General"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/General" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract_352fa29f-df95-423f-886d-0a5b18188c94" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock_a06e2800-2851-445e-9387-4d0bdb595871" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract_352fa29f-df95-423f-886d-0a5b18188c94" xlink:to="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock_a06e2800-2851-445e-9387-4d0bdb595871" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/BusinessAcquisitions" xlink:type="simple" xlink:href="spsc-20230331.xsd#BusinessAcquisitions"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/BusinessAcquisitions" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessCombinationAndAssetAcquisitionAbstract_41d8f204-5301-4d9b-9fa1-eba66a79c0c9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessCombinationAndAssetAcquisitionAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessCombinationDisclosureTextBlock_57cba961-64d7-42f3-8f93-8e2abbbf5798" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessCombinationDisclosureTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_BusinessCombinationAndAssetAcquisitionAbstract_41d8f204-5301-4d9b-9fa1-eba66a79c0c9" xlink:to="loc_us-gaap_BusinessCombinationDisclosureTextBlock_57cba961-64d7-42f3-8f93-8e2abbbf5798" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/Revenue" xlink:type="simple" xlink:href="spsc-20230331.xsd#Revenue"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/Revenue" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerAbstract_24d896c1-89ac-48fd-a9e4-c499aa7f5b49" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerTextBlock_d579ca0a-c0ba-48b2-a991-905fde982cfd" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerAbstract_24d896c1-89ac-48fd-a9e4-c499aa7f5b49" xlink:to="loc_us-gaap_RevenueFromContractWithCustomerTextBlock_d579ca0a-c0ba-48b2-a991-905fde982cfd" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/DeferredCosts" xlink:type="simple" xlink:href="spsc-20230331.xsd#DeferredCosts"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/DeferredCosts" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCostsAbstract_eb0147b3-2dc2-4937-8885-cbf93a700d68" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCostsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredCostsDisclosureTextBlock_39ca524b-e058-40d2-bc36-993ae038645d" xlink:href="spsc-20230331.xsd#spsc_DeferredCostsDisclosureTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DeferredCostsAbstract_eb0147b3-2dc2-4937-8885-cbf93a700d68" xlink:to="loc_spsc_DeferredCostsDisclosureTextBlock_39ca524b-e058-40d2-bc36-993ae038645d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/FairValueMeasurements" xlink:type="simple" xlink:href="spsc-20230331.xsd#FairValueMeasurements"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/FairValueMeasurements" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FairValueDisclosuresAbstract_56009295-f27a-4f66-8cc4-93d063d387b2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FairValueDisclosuresAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FinancialInstrumentsDisclosureTextBlock_2070e5d0-a61f-4e41-882c-97a80f04966d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FinancialInstrumentsDisclosureTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_FairValueDisclosuresAbstract_56009295-f27a-4f66-8cc4-93d063d387b2" xlink:to="loc_us-gaap_FinancialInstrumentsDisclosureTextBlock_2070e5d0-a61f-4e41-882c-97a80f04966d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/AllowanceforCreditLosses" xlink:type="simple" xlink:href="spsc-20230331.xsd#AllowanceforCreditLosses"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/AllowanceforCreditLosses" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForCreditLossAbstract_13fb3242-24fa-442f-ab1e-d653db71bff3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForCreditLossAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForCreditLossesTextBlock_397b355b-4735-406d-a855-de006c32563b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForCreditLossesTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AllowanceForCreditLossAbstract_13fb3242-24fa-442f-ab1e-d653db71bff3" xlink:to="loc_us-gaap_AllowanceForCreditLossesTextBlock_397b355b-4735-406d-a855-de006c32563b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/PropertyandEquipmentNet" xlink:type="simple" xlink:href="spsc-20230331.xsd#PropertyandEquipmentNet"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/PropertyandEquipmentNet" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentAbstract_6ba2055c-c2f2-484a-8e41-f2151140742c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock_fbb2e102-22c8-49bd-b102-4f9336ecb323" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentAbstract_6ba2055c-c2f2-484a-8e41-f2151140742c" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock_fbb2e102-22c8-49bd-b102-4f9336ecb323" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNet" xlink:type="simple" xlink:href="spsc-20230331.xsd#GoodwillandIntangibleAssetsNet"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNet" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_77cc67b2-a8d3-4ab5-92bd-26e0cee8fef5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock_0429ba42-3236-4abb-be32-f3a0b10576c6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_77cc67b2-a8d3-4ab5-92bd-26e0cee8fef5" xlink:to="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock_0429ba42-3236-4abb-be32-f3a0b10576c6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CommitmentsandContingencies" xlink:type="simple" xlink:href="spsc-20230331.xsd#CommitmentsandContingencies"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CommitmentsandContingencies" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_deca6e6d-af14-4f10-a92d-f5d8c87413e4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingenciesDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingenciesDisclosureTextBlock_a5e6e989-6cbd-4d13-aaf1-c23356ef84a3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingenciesDisclosureTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_deca6e6d-af14-4f10-a92d-f5d8c87413e4" xlink:to="loc_us-gaap_CommitmentsAndContingenciesDisclosureTextBlock_a5e6e989-6cbd-4d13-aaf1-c23356ef84a3" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockholdersEquity" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockholdersEquity"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockholdersEquity" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EquityAbstract_a0016b37-26ab-4899-b865-47aae912cd1f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EquityAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockholdersEquityNoteDisclosureTextBlock_27b75312-2ea3-4c67-bd8e-d9abb38a9a60" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockholdersEquityNoteDisclosureTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EquityAbstract_a0016b37-26ab-4899-b865-47aae912cd1f" xlink:to="loc_us-gaap_StockholdersEquityNoteDisclosureTextBlock_27b75312-2ea3-4c67-bd8e-d9abb38a9a60" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensation" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensation"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensation" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_f7362b09-6fc9-4821-95ca-2a8e23459f51" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock_b0f173e4-205d-4c27-b9d5-c9020b3cbb2b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_f7362b09-6fc9-4821-95ca-2a8e23459f51" xlink:to="loc_us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock_b0f173e4-205d-4c27-b9d5-c9020b3cbb2b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/IncomeTaxes" xlink:type="simple" xlink:href="spsc-20230331.xsd#IncomeTaxes"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/IncomeTaxes" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeTaxDisclosureAbstract_5ff07b21-0390-490c-bf55-82cb8df8352d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeTaxDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeTaxDisclosureTextBlock_75d16024-b802-409a-82d0-b10773466789" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeTaxDisclosureTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeTaxDisclosureAbstract_5ff07b21-0390-490c-bf55-82cb8df8352d" xlink:to="loc_us-gaap_IncomeTaxDisclosureTextBlock_75d16024-b802-409a-82d0-b10773466789" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/OtherIncomeandExpense" xlink:type="simple" xlink:href="spsc-20230331.xsd#OtherIncomeandExpense"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/OtherIncomeandExpense" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherIncomeAndExpensesAbstract_576d655c-5190-40b1-b971-b6f3e77158a9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherIncomeAndExpensesAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock_42f0c1ac-d60d-44d8-b993-e4ff7f541622" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherIncomeAndExpensesAbstract_576d655c-5190-40b1-b971-b6f3e77158a9" xlink:to="loc_us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock_42f0c1ac-d60d-44d8-b993-e4ff7f541622" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/NetIncomePerShare" xlink:type="simple" xlink:href="spsc-20230331.xsd#NetIncomePerShare"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/NetIncomePerShare" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareAbstract_7a0d4bb4-256d-452c-adf0-0b571b31601f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareTextBlock_94184295-0918-452f-8a14-ba9bb116b270" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EarningsPerShareAbstract_7a0d4bb4-256d-452c-adf0-0b571b31601f" xlink:to="loc_us-gaap_EarningsPerShareTextBlock_94184295-0918-452f-8a14-ba9bb116b270" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GeographicInformation" xlink:type="simple" xlink:href="spsc-20230331.xsd#GeographicInformation"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/GeographicInformation" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerAbstract_f92630a1-bc7a-425e-8477-344c30be5561" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_GeographicInformationTextBlock_2abb12c0-909a-40b9-af52-257a74dae1db" xlink:href="spsc-20230331.xsd#spsc_GeographicInformationTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerAbstract_f92630a1-bc7a-425e-8477-344c30be5561" xlink:to="loc_spsc_GeographicInformationTextBlock_2abb12c0-909a-40b9-af52-257a74dae1db" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GeneralPolicies" xlink:type="simple" xlink:href="spsc-20230331.xsd#GeneralPolicies"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/GeneralPolicies" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract_0ce19863-66d3-4057-a9a7-7c00a51a679e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_BusinessDescriptionPolicyPolicyTextBlock_7a349db5-c095-482a-9ec8-68e59cdb5f15" xlink:href="spsc-20230331.xsd#spsc_BusinessDescriptionPolicyPolicyTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract_0ce19863-66d3-4057-a9a7-7c00a51a679e" xlink:to="loc_spsc_BusinessDescriptionPolicyPolicyTextBlock_7a349db5-c095-482a-9ec8-68e59cdb5f15" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BasisOfAccountingPolicyPolicyTextBlock_c3bc25c9-80c3-4961-927f-4f0030baa7c9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BasisOfAccountingPolicyPolicyTextBlock"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract_0ce19863-66d3-4057-a9a7-7c00a51a679e" xlink:to="loc_us-gaap_BasisOfAccountingPolicyPolicyTextBlock_c3bc25c9-80c3-4961-927f-4f0030baa7c9" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_UseOfEstimates_9c14f352-1291-4a65-8b8f-e7a14225e74a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_UseOfEstimates"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract_0ce19863-66d3-4057-a9a7-7c00a51a679e" xlink:to="loc_us-gaap_UseOfEstimates_9c14f352-1291-4a65-8b8f-e7a14225e74a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock_d1e29eca-059d-44fc-97f7-e7867722042f" xlink:href="spsc-20230331.xsd#spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract_0ce19863-66d3-4057-a9a7-7c00a51a679e" xlink:to="loc_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock_d1e29eca-059d-44fc-97f7-e7867722042f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GeneralTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#GeneralTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/GeneralTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract_3119596f-f61f-46ff-b72e-65b420431157" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock_02ed6f2d-2125-41e5-b3c7-7068fe69b66e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract_3119596f-f61f-46ff-b72e-65b420431157" xlink:to="loc_us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock_02ed6f2d-2125-41e5-b3c7-7068fe69b66e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/RevenueTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#RevenueTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/RevenueTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerAbstract_d3367766-5149-4a84-88a9-fbefd01d6190" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisaggregationOfRevenueTableTextBlock_5c17ad68-b328-41e1-bbb9-816ec68e2e96" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisaggregationOfRevenueTableTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerAbstract_d3367766-5149-4a84-88a9-fbefd01d6190" xlink:to="loc_us-gaap_DisaggregationOfRevenueTableTextBlock_5c17ad68-b328-41e1-bbb9-816ec68e2e96" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock_52ea8c29-86e9-4f4d-8443-2eb82d8b475a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerAbstract_d3367766-5149-4a84-88a9-fbefd01d6190" xlink:to="loc_us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock_52ea8c29-86e9-4f4d-8443-2eb82d8b475a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/DeferredCostsTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#DeferredCostsTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/DeferredCostsTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCostsAbstract_3c691946-fae8-4890-b9e0-6af7146cb99d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCostsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredCostsAndAmortizationTableTextBlock_6ec46df4-a4e3-4482-af4c-8fd4c1199a91" xlink:href="spsc-20230331.xsd#spsc_DeferredCostsAndAmortizationTableTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DeferredCostsAbstract_3c691946-fae8-4890-b9e0-6af7146cb99d" xlink:to="loc_spsc_DeferredCostsAndAmortizationTableTextBlock_6ec46df4-a4e3-4482-af4c-8fd4c1199a91" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/FairValueMeasurementsTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#FairValueMeasurementsTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/FairValueMeasurementsTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FairValueDisclosuresAbstract_6adcc6ec-13b5-4505-b4fa-aded49f84baa" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FairValueDisclosuresAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock_55492fe2-6d45-4bba-9ed5-dceffbf07d8b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_FairValueDisclosuresAbstract_6adcc6ec-13b5-4505-b4fa-aded49f84baa" xlink:to="loc_us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock_55492fe2-6d45-4bba-9ed5-dceffbf07d8b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/AllowanceforCreditLossesTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#AllowanceforCreditLossesTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/AllowanceforCreditLossesTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForCreditLossAbstract_9c6e06c4-aa07-4ff8-96d9-d4e285d337a7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForCreditLossAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock_6022ef51-d46b-4b5b-8dad-c16ff7b7a7d9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AllowanceForCreditLossAbstract_9c6e06c4-aa07-4ff8-96d9-d4e285d337a7" xlink:to="loc_us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock_6022ef51-d46b-4b5b-8dad-c16ff7b7a7d9" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/PropertyandEquipmentNetTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#PropertyandEquipmentNetTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/PropertyandEquipmentNetTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentAbstract_06fb493e-862c-42f4-98c5-b6438bfc83df" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentTextBlock_2747b05b-3c3c-4d3a-b193-12230fd5692c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentAbstract_06fb493e-862c-42f4-98c5-b6438bfc83df" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentTextBlock_2747b05b-3c3c-4d3a-b193-12230fd5692c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#GoodwillandIntangibleAssetsNetTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_76db3407-7af6-467a-89ca-f7957339bf23" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfGoodwillTextBlock_4d8c416a-800f-4b9e-bb75-884e274bf056" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfGoodwillTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_76db3407-7af6-467a-89ca-f7957339bf23" xlink:to="loc_us-gaap_ScheduleOfGoodwillTextBlock_4d8c416a-800f-4b9e-bb75-884e274bf056" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock_5bf16c3c-09c2-4996-b8fc-1f3befa66b43" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_76db3407-7af6-467a-89ca-f7957339bf23" xlink:to="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock_5bf16c3c-09c2-4996-b8fc-1f3befa66b43" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock_c6b47213-aee9-4da7-a951-d4dad09fc6cb" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_76db3407-7af6-467a-89ca-f7957339bf23" xlink:to="loc_us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock_c6b47213-aee9-4da7-a951-d4dad09fc6cb" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#CommitmentsandContingenciesTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CommitmentsandContingenciesTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_4e971fc6-0ba8-403a-b7da-9f7aad4c06de" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingenciesDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LeaseCostTableTextBlock_b191aff8-facb-4573-813a-769b570bd8b3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LeaseCostTableTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_4e971fc6-0ba8-403a-b7da-9f7aad4c06de" xlink:to="loc_us-gaap_LeaseCostTableTextBlock_b191aff8-facb-4573-813a-769b570bd8b3" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock_e86ecab5-995a-438f-a4c2-ec8ac4acb760" xlink:href="spsc-20230331.xsd#spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_4e971fc6-0ba8-403a-b7da-9f7aad4c06de" xlink:to="loc_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock_e86ecab5-995a-438f-a4c2-ec8ac4acb760" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock_014f8672-cc0c-4944-b4dc-7ae575ed7550" xlink:href="spsc-20230331.xsd#spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_4e971fc6-0ba8-403a-b7da-9f7aad4c06de" xlink:to="loc_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock_014f8672-cc0c-4944-b4dc-7ae575ed7550" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock_e092af41-ca95-4f96-b5ef-d539b12b1194" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_4e971fc6-0ba8-403a-b7da-9f7aad4c06de" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock_e092af41-ca95-4f96-b5ef-d539b12b1194" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockholdersEquityTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockholdersEquityTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockholdersEquityTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EquityAbstract_580c382a-f33b-4b55-af6a-d64c9ce85cab" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EquityAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfTreasuryStockByClassTextBlock_73a6ec1c-ffc4-4517-9c79-e4faf67db8e8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfTreasuryStockByClassTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EquityAbstract_580c382a-f33b-4b55-af6a-d64c9ce85cab" xlink:to="loc_us-gaap_ScheduleOfTreasuryStockByClassTextBlock_73a6ec1c-ffc4-4517-9c79-e4faf67db8e8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_1921add8-ca93-4753-bf05-d21ee476dbfa" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock_2187292d-4699-46d3-be0b-6a0d8aff629a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_1921add8-ca93-4753-bf05-d21ee476dbfa" xlink:to="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock_2187292d-4699-46d3-be0b-6a0d8aff629a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock_0e970e77-eecd-4d23-b34b-8891a1b54419" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_1921add8-ca93-4753-bf05-d21ee476dbfa" xlink:to="loc_us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock_0e970e77-eecd-4d23-b34b-8891a1b54419" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock_4a1d5d02-be00-47db-8db0-4f6d193a11dc" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_1921add8-ca93-4753-bf05-d21ee476dbfa" xlink:to="loc_us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock_4a1d5d02-be00-47db-8db0-4f6d193a11dc" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock_b8b20cb4-c9ed-4ebf-ae03-a32c6ff48190" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_1921add8-ca93-4753-bf05-d21ee476dbfa" xlink:to="loc_us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock_b8b20cb4-c9ed-4ebf-ae03-a32c6ff48190" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock_37ce8a02-27de-4143-ae7a-a4ddfdc8bb03" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_1921add8-ca93-4753-bf05-d21ee476dbfa" xlink:to="loc_us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock_37ce8a02-27de-4143-ae7a-a4ddfdc8bb03" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock_2d949663-b7ef-4a7a-92a0-3aba639984fa" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_1921add8-ca93-4753-bf05-d21ee476dbfa" xlink:to="loc_us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock_2d949663-b7ef-4a7a-92a0-3aba639984fa" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/OtherIncomeandExpenseTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#OtherIncomeandExpenseTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/OtherIncomeandExpenseTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherIncomeAndExpensesAbstract_74795e80-1c3b-4633-83af-96c300940269" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherIncomeAndExpensesAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock_05d747e6-8d2f-43a3-b526-4fde2f4845f4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherIncomeAndExpensesAbstract_74795e80-1c3b-4633-83af-96c300940269" xlink:to="loc_us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock_05d747e6-8d2f-43a3-b526-4fde2f4845f4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/NetIncomePerShareTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#NetIncomePerShareTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/NetIncomePerShareTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareAbstract_d5b3ab39-eee7-4e17-8b13-3a660421ac62" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock_20743634-6c4b-49bd-be98-ec0604cbb588" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EarningsPerShareAbstract_d5b3ab39-eee7-4e17-8b13-3a660421ac62" xlink:to="loc_us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock_20743634-6c4b-49bd-be98-ec0604cbb588" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock_a8f55bec-d087-43d1-b83c-6427dbb01d9e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EarningsPerShareAbstract_d5b3ab39-eee7-4e17-8b13-3a660421ac62" xlink:to="loc_us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock_a8f55bec-d087-43d1-b83c-6427dbb01d9e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GeographicInformationTables" xlink:type="simple" xlink:href="spsc-20230331.xsd#GeographicInformationTables"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/GeographicInformationTables" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerAbstract_6f53b002-96a2-4d26-8c9c-19d8592b4d5f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfProductInformationTableTextBlock_9185a1e8-051c-4b8b-b763-a12159c744c2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfProductInformationTableTextBlock"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerAbstract_6f53b002-96a2-4d26-8c9c-19d8592b4d5f" xlink:to="loc_us-gaap_ScheduleOfProductInformationTableTextBlock_9185a1e8-051c-4b8b-b763-a12159c744c2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock_6b25c34f-e9c9-486b-9a2d-773b62a85505" xlink:href="spsc-20230331.xsd#spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerAbstract_6f53b002-96a2-4d26-8c9c-19d8592b4d5f" xlink:to="loc_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock_6b25c34f-e9c9-486b-9a2d-773b62a85505" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails" xlink:type="simple" xlink:href="spsc-20230331.xsd#BusinessAcquisitionsNarrativeDetails"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessCombinationAndAssetAcquisitionAbstract_73dd7a1e-b769-458e-8c7e-b25d0db3069e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessCombinationAndAssetAcquisitionAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable_c2a67dbc-0c10-49e5-aef6-8e7586c7b522" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_BusinessCombinationAndAssetAcquisitionAbstract_73dd7a1e-b769-458e-8c7e-b25d0db3069e" xlink:to="loc_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable_c2a67dbc-0c10-49e5-aef6-8e7586c7b522" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessAcquisitionAxis_88cdf2ef-6f4b-41c1-a780-aba7039c4663" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessAcquisitionAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable_c2a67dbc-0c10-49e5-aef6-8e7586c7b522" xlink:to="loc_us-gaap_BusinessAcquisitionAxis_88cdf2ef-6f4b-41c1-a780-aba7039c4663" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessAcquisitionAcquireeDomain_71683429-542b-49b3-ad74-9b19facee79c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessAcquisitionAcquireeDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_BusinessAcquisitionAxis_88cdf2ef-6f4b-41c1-a780-aba7039c4663" xlink:to="loc_us-gaap_BusinessAcquisitionAcquireeDomain_71683429-542b-49b3-ad74-9b19facee79c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_GCommerceIncMember_49c92277-0731-4666-842e-09632fab1916" xlink:href="spsc-20230331.xsd#spsc_GCommerceIncMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_BusinessAcquisitionAcquireeDomain_71683429-542b-49b3-ad74-9b19facee79c" xlink:to="loc_spsc_GCommerceIncMember_49c92277-0731-4666-842e-09632fab1916" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_InterTradeSystemsIncMember_f0958de1-4f97-4dbd-8ee6-96c66dfd59df" xlink:href="spsc-20230331.xsd#spsc_InterTradeSystemsIncMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_BusinessAcquisitionAcquireeDomain_71683429-542b-49b3-ad74-9b19facee79c" xlink:to="loc_spsc_InterTradeSystemsIncMember_f0958de1-4f97-4dbd-8ee6-96c66dfd59df" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessAcquisitionLineItems_0dc8d495-c523-4090-8671-e9790a89ef35" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessAcquisitionLineItems"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable_c2a67dbc-0c10-49e5-aef6-8e7586c7b522" xlink:to="loc_us-gaap_BusinessAcquisitionLineItems_0dc8d495-c523-4090-8671-e9790a89ef35" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessCombinationConsiderationTransferred1_d3959297-74e6-4ee7-8f91-368cb74c3260" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessCombinationConsiderationTransferred1"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_BusinessAcquisitionLineItems_0dc8d495-c523-4090-8671-e9790a89ef35" xlink:to="loc_us-gaap_BusinessCombinationConsiderationTransferred1_d3959297-74e6-4ee7-8f91-368cb74c3260" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_BusinessCombinationMeasurementPeriod_67f5412b-2cae-4e3d-b8c0-753d9750275a" xlink:href="spsc-20230331.xsd#spsc_BusinessCombinationMeasurementPeriod"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_BusinessAcquisitionLineItems_0dc8d495-c523-4090-8671-e9790a89ef35" xlink:to="loc_spsc_BusinessCombinationMeasurementPeriod_67f5412b-2cae-4e3d-b8c0-753d9750275a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred_8d7b631f-9cb0-4207-b5e2-622bc2320f73" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_BusinessAcquisitionLineItems_0dc8d495-c523-4090-8671-e9790a89ef35" xlink:to="loc_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred_8d7b631f-9cb0-4207-b5e2-622bc2320f73" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedTerseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets_7d8a7ca2-fd4f-4eae-982a-ac5cc7d1d532" xlink:href="spsc-20230331.xsd#spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_BusinessAcquisitionLineItems_0dc8d495-c523-4090-8671-e9790a89ef35" xlink:to="loc_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets_7d8a7ca2-fd4f-4eae-982a-ac5cc7d1d532" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedTerseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#RevenueSummaryofRevenuesbyRevenueStreamDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerAbstract_d45dd50e-1676-41ea-bbb1-c0b3cac92c5e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RevenueRecognitionTable_0a38909a-e4ec-4a93-8c6d-d9f5bbc16dc2" xlink:href="spsc-20230331.xsd#spsc_RevenueRecognitionTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerAbstract_d45dd50e-1676-41ea-bbb1-c0b3cac92c5e" xlink:to="loc_spsc_RevenueRecognitionTable_0a38909a-e4ec-4a93-8c6d-d9f5bbc16dc2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_ProductOrServiceAxis_e754fe7f-6c36-4ef4-ab0f-1b1a3941dbb8" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_ProductOrServiceAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_RevenueRecognitionTable_0a38909a-e4ec-4a93-8c6d-d9f5bbc16dc2" xlink:to="loc_srt_ProductOrServiceAxis_e754fe7f-6c36-4ef4-ab0f-1b1a3941dbb8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_ProductsAndServicesDomain_5dab2f4f-319f-4413-ab78-0c43ff558f54" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_ProductsAndServicesDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_srt_ProductOrServiceAxis_e754fe7f-6c36-4ef4-ab0f-1b1a3941dbb8" xlink:to="loc_srt_ProductsAndServicesDomain_5dab2f4f-319f-4413-ab78-0c43ff558f54" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FulfillmentMember_eba13071-3c4a-46b3-a8ca-4029e453e36e" xlink:href="spsc-20230331.xsd#spsc_FulfillmentMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_srt_ProductsAndServicesDomain_5dab2f4f-319f-4413-ab78-0c43ff558f54" xlink:to="loc_spsc_FulfillmentMember_eba13071-3c4a-46b3-a8ca-4029e453e36e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_AnalyticsMember_f38be07d-0804-4494-acaa-2cddf1957a75" xlink:href="spsc-20230331.xsd#spsc_AnalyticsMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_srt_ProductsAndServicesDomain_5dab2f4f-319f-4413-ab78-0c43ff558f54" xlink:to="loc_spsc_AnalyticsMember_f38be07d-0804-4494-acaa-2cddf1957a75" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_OtherMember_f0b52705-9aa7-414a-b82d-73c24965709e" xlink:href="spsc-20230331.xsd#spsc_OtherMember"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_srt_ProductsAndServicesDomain_5dab2f4f-319f-4413-ab78-0c43ff558f54" xlink:to="loc_spsc_OtherMember_f0b52705-9aa7-414a-b82d-73c24965709e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerDurationAxis_9913891f-ecf2-4f59-b999-a842918a3fce" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerDurationAxis"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_RevenueRecognitionTable_0a38909a-e4ec-4a93-8c6d-d9f5bbc16dc2" xlink:to="loc_us-gaap_ContractWithCustomerDurationAxis_9913891f-ecf2-4f59-b999-a842918a3fce" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerDurationDomain_f94e0bda-6635-467a-bbec-b5854573d4b7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerDurationDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ContractWithCustomerDurationAxis_9913891f-ecf2-4f59-b999-a842918a3fce" xlink:to="loc_us-gaap_ContractWithCustomerDurationDomain_f94e0bda-6635-467a-bbec-b5854573d4b7" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RecurringRevenuesMember_496febba-84cf-4834-ba72-2482f4cc6517" xlink:href="spsc-20230331.xsd#spsc_RecurringRevenuesMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ContractWithCustomerDurationDomain_f94e0bda-6635-467a-bbec-b5854573d4b7" xlink:to="loc_spsc_RecurringRevenuesMember_496febba-84cf-4834-ba72-2482f4cc6517" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_OneTimeRevenuesMember_9fad7400-b64f-4f9d-b58f-8e23d11de8d6" xlink:href="spsc-20230331.xsd#spsc_OneTimeRevenuesMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ContractWithCustomerDurationDomain_f94e0bda-6635-467a-bbec-b5854573d4b7" xlink:to="loc_spsc_OneTimeRevenuesMember_9fad7400-b64f-4f9d-b58f-8e23d11de8d6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RevenueRecognitionLineItems_aa6adce3-b9ee-476d-9e15-d7b358d7ea4a" xlink:href="spsc-20230331.xsd#spsc_RevenueRecognitionLineItems"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_RevenueRecognitionTable_0a38909a-e4ec-4a93-8c6d-d9f5bbc16dc2" xlink:to="loc_spsc_RevenueRecognitionLineItems_aa6adce3-b9ee-476d-9e15-d7b358d7ea4a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax_3384332c-cdb2-4a00-b8be-d6c68dc0a38c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_RevenueRecognitionLineItems_aa6adce3-b9ee-476d-9e15-d7b358d7ea4a" xlink:to="loc_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax_3384332c-cdb2-4a00-b8be-d6c68dc0a38c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/RevenueNarrativeDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#RevenueNarrativeDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/RevenueNarrativeDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerAbstract_f4b08de4-f39c-4f6a-84f6-672c433511b2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisaggregationOfRevenueTable_48570de3-6850-430e-a73c-9442633fd6b2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisaggregationOfRevenueTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerAbstract_f4b08de4-f39c-4f6a-84f6-672c433511b2" xlink:to="loc_us-gaap_DisaggregationOfRevenueTable_48570de3-6850-430e-a73c-9442633fd6b2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeAxis_d374891c-36e2-4cd7-891c-4b1529d70bd9" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisaggregationOfRevenueTable_48570de3-6850-430e-a73c-9442633fd6b2" xlink:to="loc_srt_RangeAxis_d374891c-36e2-4cd7-891c-4b1529d70bd9" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeMember_68ddddea-a6f3-445d-8121-dd06dd4fb43d" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_srt_RangeAxis_d374891c-36e2-4cd7-891c-4b1529d70bd9" xlink:to="loc_srt_RangeMember_68ddddea-a6f3-445d-8121-dd06dd4fb43d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_MinimumMember_ffb1eed9-d38a-4443-bd8a-1b23404a4e62" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_MinimumMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_srt_RangeMember_68ddddea-a6f3-445d-8121-dd06dd4fb43d" xlink:to="loc_srt_MinimumMember_ffb1eed9-d38a-4443-bd8a-1b23404a4e62" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_MaximumMember_7990b793-2ec8-49de-aea4-33986f72fa8e" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_MaximumMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_srt_RangeMember_68ddddea-a6f3-445d-8121-dd06dd4fb43d" xlink:to="loc_srt_MaximumMember_7990b793-2ec8-49de-aea4-33986f72fa8e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisaggregationOfRevenueLineItems"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisaggregationOfRevenueTable_48570de3-6850-430e-a73c-9442633fd6b2" xlink:to="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_CustomerContractCancellationPeriod_2c83aa9f-f454-4f61-91fb-c0dcbdc078db" xlink:href="spsc-20230331.xsd#spsc_CustomerContractCancellationPeriod"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:to="loc_spsc_CustomerContractCancellationPeriod_2c83aa9f-f454-4f61-91fb-c0dcbdc078db" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod_1a25ecc7-2a8e-4c84-8204-459c8e4d969c" xlink:href="spsc-20230331.xsd#spsc_RecurringRevenuesTimingOfBillingsLatestPeriod"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:to="loc_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod_1a25ecc7-2a8e-4c84-8204-459c8e4d969c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ContractTermMaximum_6d6dbf76-22e7-4053-bfac-587e899b65ac" xlink:href="spsc-20230331.xsd#spsc_ContractTermMaximum"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:to="loc_spsc_ContractTermMaximum_6d6dbf76-22e7-4053-bfac-587e899b65ac" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_SetUpFeesRecognizedPeriod_1abae4e1-71c3-400e-bed8-1de9fe098a2c" xlink:href="spsc-20230331.xsd#spsc_SetUpFeesRecognizedPeriod"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:to="loc_spsc_SetUpFeesRecognizedPeriod_1abae4e1-71c3-400e-bed8-1de9fe098a2c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee_ff896d89-ccf1-4c5a-b23e-fa1ba655ee6d" xlink:href="spsc-20230331.xsd#spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_5c72f6bc-fbaa-4274-a884-71b7c03217c2" xlink:to="loc_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee_ff896d89-ccf1-4c5a-b23e-fa1ba655ee6d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerAbstract_9709e646-7f79-43cd-939d-95c516eabb70" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredRevenueArrangementByTypeTable_e28017c7-6033-4b8e-8f16-dfa764881459" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredRevenueArrangementByTypeTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerAbstract_9709e646-7f79-43cd-939d-95c516eabb70" xlink:to="loc_us-gaap_DeferredRevenueArrangementByTypeTable_e28017c7-6033-4b8e-8f16-dfa764881459" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TypeOfArrangementAxis_42d3fb88-efd2-40e9-ab93-0cd5cd84abf0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TypeOfArrangementAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DeferredRevenueArrangementByTypeTable_e28017c7-6033-4b8e-8f16-dfa764881459" xlink:to="loc_us-gaap_TypeOfArrangementAxis_42d3fb88-efd2-40e9-ab93-0cd5cd84abf0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ArrangementsAndNonarrangementTransactionsMember_271d32b9-64fd-434f-893e-160b2debc8af" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ArrangementsAndNonarrangementTransactionsMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_TypeOfArrangementAxis_42d3fb88-efd2-40e9-ab93-0cd5cd84abf0" xlink:to="loc_us-gaap_ArrangementsAndNonarrangementTransactionsMember_271d32b9-64fd-434f-893e-160b2debc8af" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_SetUpFeesMember_6bf00126-e1b2-46bc-ade9-322ee5566d34" xlink:href="spsc-20230331.xsd#spsc_SetUpFeesMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ArrangementsAndNonarrangementTransactionsMember_271d32b9-64fd-434f-893e-160b2debc8af" xlink:to="loc_spsc_SetUpFeesMember_6bf00126-e1b2-46bc-ade9-322ee5566d34" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredRevenueArrangementLineItems_11eb1f18-2bfa-49a1-8a3c-af38c659399b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredRevenueArrangementLineItems"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DeferredRevenueArrangementByTypeTable_e28017c7-6033-4b8e-8f16-dfa764881459" xlink:to="loc_us-gaap_DeferredRevenueArrangementLineItems_11eb1f18-2bfa-49a1-8a3c-af38c659399b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredRevenueArrangementRollForward_5b99ae76-3a0f-491a-9346-fe18f4aeb98f" xlink:href="spsc-20230331.xsd#spsc_DeferredRevenueArrangementRollForward"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DeferredRevenueArrangementLineItems_11eb1f18-2bfa-49a1-8a3c-af38c659399b" xlink:to="loc_spsc_DeferredRevenueArrangementRollForward_5b99ae76-3a0f-491a-9346-fe18f4aeb98f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerLiability_763c78c5-ae29-40d3-be5f-6cb31275dbc0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerLiability"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_DeferredRevenueArrangementRollForward_5b99ae76-3a0f-491a-9346-fe18f4aeb98f" xlink:to="loc_us-gaap_ContractWithCustomerLiability_763c78c5-ae29-40d3-be5f-6cb31275dbc0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodStartLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredRevenueInvoicedSetUpFees_29107d85-34aa-4916-a7a4-c82135e3d15e" xlink:href="spsc-20230331.xsd#spsc_DeferredRevenueInvoicedSetUpFees"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_DeferredRevenueArrangementRollForward_5b99ae76-3a0f-491a-9346-fe18f4aeb98f" xlink:to="loc_spsc_DeferredRevenueInvoicedSetUpFees_29107d85-34aa-4916-a7a4-c82135e3d15e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredRevenueAmortizedSetUpFees_ef06e661-c60f-4dd5-b551-6657cc0bf5e2" xlink:href="spsc-20230331.xsd#spsc_DeferredRevenueAmortizedSetUpFees"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_DeferredRevenueArrangementRollForward_5b99ae76-3a0f-491a-9346-fe18f4aeb98f" xlink:to="loc_spsc_DeferredRevenueAmortizedSetUpFees_ef06e661-c60f-4dd5-b551-6657cc0bf5e2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ContractWithCustomerLiability_1911521a-7b44-4631-acfe-7b65a561743a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ContractWithCustomerLiability"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_DeferredRevenueArrangementRollForward_5b99ae76-3a0f-491a-9346-fe18f4aeb98f" xlink:to="loc_us-gaap_ContractWithCustomerLiability_1911521a-7b44-4631-acfe-7b65a561743a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodEndLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/DeferredCostsDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#DeferredCostsDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/DeferredCostsDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCostsAbstract_df6add8f-b7e8-4bae-b347-1ac85671956f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCostsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredCostsRollForward_64e52293-7d5e-4877-a50e-4e0a5b8f3e5c" xlink:href="spsc-20230331.xsd#spsc_DeferredCostsRollForward"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DeferredCostsAbstract_df6add8f-b7e8-4bae-b347-1ac85671956f" xlink:to="loc_spsc_DeferredCostsRollForward_64e52293-7d5e-4877-a50e-4e0a5b8f3e5c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCostsCurrentAndNoncurrent_e6614abd-94f9-4b82-8e09-c35bb04b0175" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCostsCurrentAndNoncurrent"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_DeferredCostsRollForward_64e52293-7d5e-4877-a50e-4e0a5b8f3e5c" xlink:to="loc_us-gaap_DeferredCostsCurrentAndNoncurrent_e6614abd-94f9-4b82-8e09-c35bb04b0175" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodStartLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredCostsIncurred_3c6d037b-749d-4d6f-927c-fe50a2f4f039" xlink:href="spsc-20230331.xsd#spsc_DeferredCostsIncurred"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_DeferredCostsRollForward_64e52293-7d5e-4877-a50e-4e0a5b8f3e5c" xlink:to="loc_spsc_DeferredCostsIncurred_3c6d037b-749d-4d6f-927c-fe50a2f4f039" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_DeferredCostsAmortized_19fc1162-a409-4816-b8d7-f5a458267cbb" xlink:href="spsc-20230331.xsd#spsc_DeferredCostsAmortized"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_DeferredCostsRollForward_64e52293-7d5e-4877-a50e-4e0a5b8f3e5c" xlink:to="loc_spsc_DeferredCostsAmortized_19fc1162-a409-4816-b8d7-f5a458267cbb" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCostsCurrentAndNoncurrent_2b1688aa-f8fe-41c3-a4cf-b7952513fe9b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCostsCurrentAndNoncurrent"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_DeferredCostsRollForward_64e52293-7d5e-4877-a50e-4e0a5b8f3e5c" xlink:to="loc_us-gaap_DeferredCostsCurrentAndNoncurrent_2b1688aa-f8fe-41c3-a4cf-b7952513fe9b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodEndLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FairValueDisclosuresAbstract_7a79308f-41a3-4983-a9b9-1d53ea94ff2c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FairValueDisclosuresAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DebtSecuritiesAvailableForSaleTable_798547ef-5da5-4354-b3ae-a7e10ec170a5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DebtSecuritiesAvailableForSaleTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_FairValueDisclosuresAbstract_7a79308f-41a3-4983-a9b9-1d53ea94ff2c" xlink:to="loc_us-gaap_DebtSecuritiesAvailableForSaleTable_798547ef-5da5-4354-b3ae-a7e10ec170a5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BalanceSheetLocationAxis_9e16cb06-c080-4325-a7e6-8e7718e2089b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BalanceSheetLocationAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DebtSecuritiesAvailableForSaleTable_798547ef-5da5-4354-b3ae-a7e10ec170a5" xlink:to="loc_us-gaap_BalanceSheetLocationAxis_9e16cb06-c080-4325-a7e6-8e7718e2089b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_BalanceSheetLocationDomain_bfcca629-61a6-44cb-9ade-b16e0fbda915" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_BalanceSheetLocationDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_BalanceSheetLocationAxis_9e16cb06-c080-4325-a7e6-8e7718e2089b" xlink:to="loc_us-gaap_BalanceSheetLocationDomain_bfcca629-61a6-44cb-9ade-b16e0fbda915" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CashEquivalentsMember_68914023-3646-4b89-b608-f5fd22c1a570" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CashEquivalentsMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_BalanceSheetLocationDomain_bfcca629-61a6-44cb-9ade-b16e0fbda915" xlink:to="loc_us-gaap_CashEquivalentsMember_68914023-3646-4b89-b608-f5fd22c1a570" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_MarketableSecuritiesMember_9d8c7097-6fe8-47d5-a1c2-fa73ffd79a7e" xlink:href="spsc-20230331.xsd#spsc_MarketableSecuritiesMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_BalanceSheetLocationDomain_bfcca629-61a6-44cb-9ade-b16e0fbda915" xlink:to="loc_spsc_MarketableSecuritiesMember_9d8c7097-6fe8-47d5-a1c2-fa73ffd79a7e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FinancialInstrumentAxis_7c4774a5-e364-4b5a-b40e-8c3374c4d7a6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FinancialInstrumentAxis"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DebtSecuritiesAvailableForSaleTable_798547ef-5da5-4354-b3ae-a7e10ec170a5" xlink:to="loc_us-gaap_FinancialInstrumentAxis_7c4774a5-e364-4b5a-b40e-8c3374c4d7a6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_b64d1acc-a93e-4f71-b3c5-27fd0e5e8d38" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_FinancialInstrumentAxis_7c4774a5-e364-4b5a-b40e-8c3374c4d7a6" xlink:to="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_b64d1acc-a93e-4f71-b3c5-27fd0e5e8d38" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_MoneyMarketFundsMember_b9c28594-92a9-43f4-b215-70c1fefdb5f2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_MoneyMarketFundsMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_b64d1acc-a93e-4f71-b3c5-27fd0e5e8d38" xlink:to="loc_us-gaap_MoneyMarketFundsMember_b9c28594-92a9-43f4-b215-70c1fefdb5f2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CertificatesOfDepositMember_55452760-4a82-4e89-a15d-fc6f67516b53" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CertificatesOfDepositMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_b64d1acc-a93e-4f71-b3c5-27fd0e5e8d38" xlink:to="loc_us-gaap_CertificatesOfDepositMember_55452760-4a82-4e89-a15d-fc6f67516b53" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommercialPaperMember_1e1dee34-5255-485b-b904-a8a1e715d841" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommercialPaperMember"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_b64d1acc-a93e-4f71-b3c5-27fd0e5e8d38" xlink:to="loc_us-gaap_CommercialPaperMember_1e1dee34-5255-485b-b904-a8a1e715d841" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_USTreasurySecuritiesMember_f5659032-673d-4344-9e9c-464b54d6bcb2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_USTreasurySecuritiesMember"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain_b64d1acc-a93e-4f71-b3c5-27fd0e5e8d38" xlink:to="loc_us-gaap_USTreasurySecuritiesMember_f5659032-673d-4344-9e9c-464b54d6bcb2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems_a66119a9-ec9d-4681-b997-e478f8bf4c43" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DebtSecuritiesAvailableForSaleTable_798547ef-5da5-4354-b3ae-a7e10ec170a5" xlink:to="loc_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems_a66119a9-ec9d-4681-b997-e478f8bf4c43" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis_8c225509-753f-474a-8a07-ffa681205d56" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems_a66119a9-ec9d-4681-b997-e478f8bf4c43" xlink:to="loc_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis_8c225509-753f-474a-8a07-ffa681205d56" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax_a0c7dbab-6c27-4c3f-a94b-c74f94c1354c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems_a66119a9-ec9d-4681-b997-e478f8bf4c43" xlink:to="loc_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax_a0c7dbab-6c27-4c3f-a94b-c74f94c1354c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AvailableForSaleSecuritiesDebtSecurities_19a486d7-7756-4334-8dbc-b08c9607368b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AvailableForSaleSecuritiesDebtSecurities"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems_a66119a9-ec9d-4681-b997-e478f8bf4c43" xlink:to="loc_us-gaap_AvailableForSaleSecuritiesDebtSecurities_19a486d7-7756-4334-8dbc-b08c9607368b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/AllowanceforCreditLossesDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#AllowanceforCreditLossesDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/AllowanceforCreditLossesDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForCreditLossAbstract_bb4fbacb-7f0b-41d7-b9d2-32e74f08b23b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForCreditLossAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward_4cc29bbf-84cd-4ad4-b0d2-989995020aa8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AllowanceForCreditLossAbstract_bb4fbacb-7f0b-41d7-b9d2-32e74f08b23b" xlink:to="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward_4cc29bbf-84cd-4ad4-b0d2-989995020aa8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent_13b5ca18-1b80-49a3-b33a-d75f92148411" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward_4cc29bbf-84cd-4ad4-b0d2-989995020aa8" xlink:to="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent_13b5ca18-1b80-49a3-b33a-d75f92148411" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodStartLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ProvisionForDoubtfulAccounts_52008e35-bebe-48e2-9191-5653d55e33ca" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ProvisionForDoubtfulAccounts"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward_4cc29bbf-84cd-4ad4-b0d2-989995020aa8" xlink:to="loc_us-gaap_ProvisionForDoubtfulAccounts_52008e35-bebe-48e2-9191-5653d55e33ca" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs_3668e1c1-ab95-4b9e-b73d-9de54a5ed2d4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward_4cc29bbf-84cd-4ad4-b0d2-989995020aa8" xlink:to="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs_3668e1c1-ab95-4b9e-b73d-9de54a5ed2d4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent_9ac36dce-89b2-4052-92c3-e023c7f545e8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward_4cc29bbf-84cd-4ad4-b0d2-989995020aa8" xlink:to="loc_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent_9ac36dce-89b2-4052-92c3-e023c7f545e8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodEndLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/PropertyandEquipmentNetDetails" xlink:type="simple" xlink:href="spsc-20230331.xsd#PropertyandEquipmentNetDetails"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/PropertyandEquipmentNetDetails" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentAbstract_f17b54cc-943c-4ebe-a510-bfc0614820f2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable_b730cd74-1ee3-46ec-bb47-83be6e41cbe5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfPropertyPlantAndEquipmentTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentAbstract_f17b54cc-943c-4ebe-a510-bfc0614820f2" xlink:to="loc_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable_b730cd74-1ee3-46ec-bb47-83be6e41cbe5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentByTypeAxis_f869a205-4096-4e49-90ea-b4f175bb2f62" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentByTypeAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable_b730cd74-1ee3-46ec-bb47-83be6e41cbe5" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentByTypeAxis_f869a205-4096-4e49-90ea-b4f175bb2f62" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_e5d678c5-ec8f-4dff-b2b8-99287664acb5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentTypeDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentByTypeAxis_f869a205-4096-4e49-90ea-b4f175bb2f62" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_e5d678c5-ec8f-4dff-b2b8-99287664acb5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_InternallyDevelopedSoftwareMember_ac266197-4b52-4003-ae1d-df6695fea43f" xlink:href="spsc-20230331.xsd#spsc_InternallyDevelopedSoftwareMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_e5d678c5-ec8f-4dff-b2b8-99287664acb5" xlink:to="loc_spsc_InternallyDevelopedSoftwareMember_ac266197-4b52-4003-ae1d-df6695fea43f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ComputerEquipmentMember_149d417e-4ecb-4920-8bd6-25470d8c9a76" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ComputerEquipmentMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_e5d678c5-ec8f-4dff-b2b8-99287664acb5" xlink:to="loc_us-gaap_ComputerEquipmentMember_149d417e-4ecb-4920-8bd6-25470d8c9a76" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LeaseholdImprovementsMember_20485dc9-5a86-4133-be3c-ba4d4b12365c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LeaseholdImprovementsMember"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_e5d678c5-ec8f-4dff-b2b8-99287664acb5" xlink:to="loc_us-gaap_LeaseholdImprovementsMember_20485dc9-5a86-4133-be3c-ba4d4b12365c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_OfficeEquipmentAndFurnitureMember_f0982f56-fc36-4d78-8f9c-cfb0e9593829" xlink:href="spsc-20230331.xsd#spsc_OfficeEquipmentAndFurnitureMember"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentTypeDomain_e5d678c5-ec8f-4dff-b2b8-99287664acb5" xlink:to="loc_spsc_OfficeEquipmentAndFurnitureMember_f0982f56-fc36-4d78-8f9c-cfb0e9593829" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentLineItems_7ec1d9f0-1e4b-42d8-bc8d-882d503c0244" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentLineItems"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfPropertyPlantAndEquipmentTable_b730cd74-1ee3-46ec-bb47-83be6e41cbe5" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentLineItems_7ec1d9f0-1e4b-42d8-bc8d-882d503c0244" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentGross_312e06d5-6949-4c31-a922-43b064414f77" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentGross"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentLineItems_7ec1d9f0-1e4b-42d8-bc8d-882d503c0244" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentGross_312e06d5-6949-4c31-a922-43b064414f77" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment_5a8eb7d8-603f-491d-b227-35df2774760f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentLineItems_7ec1d9f0-1e4b-42d8-bc8d-882d503c0244" xlink:to="loc_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment_5a8eb7d8-603f-491d-b227-35df2774760f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedTerseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PropertyPlantAndEquipmentNet_5206d494-87a7-4961-ab3a-81ad8b4ace17" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PropertyPlantAndEquipmentNet"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_PropertyPlantAndEquipmentLineItems_7ec1d9f0-1e4b-42d8-bc8d-882d503c0244" xlink:to="loc_us-gaap_PropertyPlantAndEquipmentNet_5206d494-87a7-4961-ab3a-81ad8b4ace17" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetScheduleofChangesinNetCarryingAmountofGoodwillDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#GoodwillandIntangibleAssetsNetScheduleofChangesinNetCarryingAmountofGoodwillDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetScheduleofChangesinNetCarryingAmountofGoodwillDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_e8f6bd3a-70ec-4dd3-9123-88436bb93cbf" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillRollForward_5d336ea5-bae7-4426-ac79-973cfdc9a951" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillRollForward"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_e8f6bd3a-70ec-4dd3-9123-88436bb93cbf" xlink:to="loc_us-gaap_GoodwillRollForward_5d336ea5-bae7-4426-ac79-973cfdc9a951" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_Goodwill_131d0811-9485-43bf-8e2e-8eca525acced" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_Goodwill"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillRollForward_5d336ea5-bae7-4426-ac79-973cfdc9a951" xlink:to="loc_us-gaap_Goodwill_131d0811-9485-43bf-8e2e-8eca525acced" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodStartLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillForeignCurrencyTranslationGainLoss_2bef6927-1ae7-4442-9ae6-fd9f4b5e2d45" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillForeignCurrencyTranslationGainLoss"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillRollForward_5d336ea5-bae7-4426-ac79-973cfdc9a951" xlink:to="loc_us-gaap_GoodwillForeignCurrencyTranslationGainLoss_2bef6927-1ae7-4442-9ae6-fd9f4b5e2d45" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillPurchaseAccountingAdjustments_6a7a29c8-3cc4-4825-845e-f477e50a718a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillPurchaseAccountingAdjustments"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillRollForward_5d336ea5-bae7-4426-ac79-973cfdc9a951" xlink:to="loc_us-gaap_GoodwillPurchaseAccountingAdjustments_6a7a29c8-3cc4-4825-845e-f477e50a718a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_Goodwill_13a424e8-a9a3-41d3-9fc2-b6ca053308f4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_Goodwill"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillRollForward_5d336ea5-bae7-4426-ac79-973cfdc9a951" xlink:to="loc_us-gaap_Goodwill_13a424e8-a9a3-41d3-9fc2-b6ca053308f4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodEndLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_15c4c2d7-2ec5-4a95-bd80-4200c0f3c011" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable_f7445e3b-7939-459d-ab6c-4fb5e9596cb3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_15c4c2d7-2ec5-4a95-bd80-4200c0f3c011" xlink:to="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable_f7445e3b-7939-459d-ab6c-4fb5e9596cb3" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis_1bf2c829-853d-4abb-b5e3-1dcb6e60b1bd" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable_f7445e3b-7939-459d-ab6c-4fb5e9596cb3" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis_1bf2c829-853d-4abb-b5e3-1dcb6e60b1bd" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain_ca32002a-2e46-48cc-8320-5cd3e20413d5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis_1bf2c829-853d-4abb-b5e3-1dcb6e60b1bd" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain_ca32002a-2e46-48cc-8320-5cd3e20413d5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CustomerRelationshipsMember_88edbc9f-dbfe-4442-b59c-1a3a78a83f6c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CustomerRelationshipsMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain_ca32002a-2e46-48cc-8320-5cd3e20413d5" xlink:to="loc_us-gaap_CustomerRelationshipsMember_88edbc9f-dbfe-4442-b59c-1a3a78a83f6c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TechnologyBasedIntangibleAssetsMember_100fba85-9eec-4294-8c22-f6ebc0ddad59" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TechnologyBasedIntangibleAssetsMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain_ca32002a-2e46-48cc-8320-5cd3e20413d5" xlink:to="loc_us-gaap_TechnologyBasedIntangibleAssetsMember_100fba85-9eec-4294-8c22-f6ebc0ddad59" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsLineItems"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable_f7445e3b-7939-459d-ab6c-4fb5e9596cb3" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsGross_c622dca7-ae59-496a-9c30-9d1ab49ebfa1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsGross"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsGross_c622dca7-ae59-496a-9c30-9d1ab49ebfa1" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization_0d3262a2-9935-400d-9837-ab0c1ce25eb0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization_0d3262a2-9935-400d-9837-ab0c1ce25eb0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss_b072e8ef-c592-495c-90e4-7dab4e9f0cb5" xlink:href="spsc-20230331.xsd#spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:to="loc_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss_b072e8ef-c592-495c-90e4-7dab4e9f0cb5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsNet_b39c0f61-f307-4374-93d7-633c2e7c887d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsNet"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsNet_b39c0f61-f307-4374-93d7-633c2e7c887d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1_9c3dbf79-ebde-4399-a5c8-b06d78f7d4e5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_FiniteLivedIntangibleAssetsLineItems_771bae4a-32ed-440e-b6f8-db81de2464d5" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1_9c3dbf79-ebde-4399-a5c8-b06d78f7d4e5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_e40f0a32-5c97-41a8-9759-77f8080ebc0c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear_61ed32d1-e110-424b-a787-d081978c2561" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_e40f0a32-5c97-41a8-9759-77f8080ebc0c" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear_61ed32d1-e110-424b-a787-d081978c2561" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths_55cc1b70-9fd0-41fe-b064-87a738596341" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_e40f0a32-5c97-41a8-9759-77f8080ebc0c" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths_55cc1b70-9fd0-41fe-b064-87a738596341" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo_9f509377-9935-4c12-ae0a-7c9770d307ea" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_e40f0a32-5c97-41a8-9759-77f8080ebc0c" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo_9f509377-9935-4c12-ae0a-7c9770d307ea" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree_096d5188-534d-4d4d-8cc0-d21981e64a18" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_e40f0a32-5c97-41a8-9759-77f8080ebc0c" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree_096d5188-534d-4d4d-8cc0-d21981e64a18" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour_3717aec6-b63c-4ca4-8da1-bddd8d81fcd8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_e40f0a32-5c97-41a8-9759-77f8080ebc0c" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour_3717aec6-b63c-4ca4-8da1-bddd8d81fcd8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour_e685f139-9cbf-46ba-b3cb-3b7b83b61751" xlink:href="spsc-20230331.xsd#spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_e40f0a32-5c97-41a8-9759-77f8080ebc0c" xlink:to="loc_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour_e685f139-9cbf-46ba-b3cb-3b7b83b61751" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_FiniteLivedIntangibleAssetsNet_d89de4ad-e9c3-4f00-88fc-ca29d3071b36" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_FiniteLivedIntangibleAssetsNet"/>
    <link:presentationArc order="7" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract_e40f0a32-5c97-41a8-9759-77f8080ebc0c" xlink:to="loc_us-gaap_FiniteLivedIntangibleAssetsNet_d89de4ad-e9c3-4f00-88fc-ca29d3071b36" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#CommitmentsandContingenciesComponentsofLeaseExpenseDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_6eca62a7-8ab5-4858-8f24-106885e6d0ff" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingenciesDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseCost_c06edf2d-dcd5-4c35-ba6a-6586a5b25541" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseCost"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_6eca62a7-8ab5-4858-8f24-106885e6d0ff" xlink:to="loc_us-gaap_OperatingLeaseCost_c06edf2d-dcd5-4c35-ba6a-6586a5b25541" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_VariableLeaseCost_853dec7c-6058-45b8-8667-6cdc26cfe0e8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_VariableLeaseCost"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_6eca62a7-8ab5-4858-8f24-106885e6d0ff" xlink:to="loc_us-gaap_VariableLeaseCost_853dec7c-6058-45b8-8667-6cdc26cfe0e8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LeaseCost_0f91aca7-3094-45fa-8742-f1a9b053663b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LeaseCost"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_6eca62a7-8ab5-4858-8f24-106885e6d0ff" xlink:to="loc_us-gaap_LeaseCost_0f91aca7-3094-45fa-8742-f1a9b053663b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalCashFlowInformationRelatedtoLeasesDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#CommitmentsandContingenciesScheduleofSupplementalCashFlowInformationRelatedtoLeasesDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalCashFlowInformationRelatedtoLeasesDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_6c7b2e21-a2c3-4b86-94ee-cbc9d2d8ab0d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingenciesDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract_10d938c6-17e5-4520-b30f-2a3578e49ebd" xlink:href="spsc-20230331.xsd#spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_6c7b2e21-a2c3-4b86-94ee-cbc9d2d8ab0d" xlink:to="loc_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract_10d938c6-17e5-4520-b30f-2a3578e49ebd" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeasePayments_13dab18d-0d77-4622-ac54-a7e4a28a803e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeasePayments"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract_10d938c6-17e5-4520-b30f-2a3578e49ebd" xlink:to="loc_us-gaap_OperatingLeasePayments_13dab18d-0d77-4622-ac54-a7e4a28a803e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalBalanceSheetInformationRelatedtoLeasesDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#CommitmentsandContingenciesScheduleofSupplementalBalanceSheetInformationRelatedtoLeasesDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalBalanceSheetInformationRelatedtoLeasesDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_b7c77d55-651e-4f1a-a4c2-d5f7f5622f6c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingenciesDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1_2be6f4c8-ad79-4ffe-9ac9-887b530decb3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_b7c77d55-651e-4f1a-a4c2-d5f7f5622f6c" xlink:to="loc_us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1_2be6f4c8-ad79-4ffe-9ac9-887b530decb3" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent_6fd030c2-5996-4f15-b1f2-4afc0c2e7a3f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_b7c77d55-651e-4f1a-a4c2-d5f7f5622f6c" xlink:to="loc_us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent_6fd030c2-5996-4f15-b1f2-4afc0c2e7a3f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_10af41dc-8ef0-4426-8764-bc5683798ecc" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingenciesDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear_5f598e13-ecef-4407-8848-91d3cc755a5c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_10af41dc-8ef0-4426-8764-bc5683798ecc" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear_5f598e13-ecef-4407-8848-91d3cc755a5c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths_d87e1544-1f7f-4b08-96c8-5866f42204b3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_10af41dc-8ef0-4426-8764-bc5683798ecc" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths_d87e1544-1f7f-4b08-96c8-5866f42204b3" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo_5aa666fc-99c0-427a-9c43-f98483103332" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_10af41dc-8ef0-4426-8764-bc5683798ecc" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo_5aa666fc-99c0-427a-9c43-f98483103332" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree_7c284d51-03c8-4b78-bb04-9c45ee99d8db" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_10af41dc-8ef0-4426-8764-bc5683798ecc" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree_7c284d51-03c8-4b78-bb04-9c45ee99d8db" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour_9b8ef69f-5418-4993-99fb-3717a70381f9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_10af41dc-8ef0-4426-8764-bc5683798ecc" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour_9b8ef69f-5418-4993-99fb-3717a70381f9" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_124951ed-e8a3-4e8f-a927-a42ca4a3270e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_10af41dc-8ef0-4426-8764-bc5683798ecc" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue_124951ed-e8a3-4e8f-a927-a42ca4a3270e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount_eae643b5-44ee-43c2-b103-95ca4e2c9816" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount"/>
    <link:presentationArc order="7" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_10af41dc-8ef0-4426-8764-bc5683798ecc" xlink:to="loc_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount_eae643b5-44ee-43c2-b103-95ca4e2c9816" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OperatingLeaseLiability_8e24d5ca-06bb-4b72-bd02-6ff4e0152a60" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OperatingLeaseLiability"/>
    <link:presentationArc order="8" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_10af41dc-8ef0-4426-8764-bc5683798ecc" xlink:to="loc_us-gaap_OperatingLeaseLiability_8e24d5ca-06bb-4b72-bd02-6ff4e0152a60" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1" xlink:type="simple" xlink:href="spsc-20230331.xsd#CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1" xlink:type="extended"/>
  <link:roleRef roleURI="http://www.spscommerce.com/role/CommitmentsandContingenciesNarrativeDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#CommitmentsandContingenciesNarrativeDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/CommitmentsandContingenciesNarrativeDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_14e2d16c-4182-44a6-a8b3-d3b4b543a07f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommitmentsAndContingenciesDisclosureAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted_c428afc1-8dd1-4a79-b3fc-73e0ab795d57" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_CommitmentsAndContingenciesDisclosureAbstract_14e2d16c-4182-44a6-a8b3-d3b4b543a07f" xlink:to="loc_us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted_c428afc1-8dd1-4a79-b3fc-73e0ab795d57" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockholdersEquityShareRepurchasePlanDetails"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EquityAbstract_9f63bf4a-0faf-4bc1-bf49-a3f893f4836a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EquityAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ScheduleOfStockholdersEquityTable_f68db2eb-a8a3-4ffa-adf1-ce381893c8d4" xlink:href="spsc-20230331.xsd#spsc_ScheduleOfStockholdersEquityTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EquityAbstract_9f63bf4a-0faf-4bc1-bf49-a3f893f4836a" xlink:to="loc_spsc_ScheduleOfStockholdersEquityTable_f68db2eb-a8a3-4ffa-adf1-ce381893c8d4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StatementEquityComponentsAxis_aa742721-31ad-4021-9dc6-7330bc7d7bd0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StatementEquityComponentsAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_ScheduleOfStockholdersEquityTable_f68db2eb-a8a3-4ffa-adf1-ce381893c8d4" xlink:to="loc_us-gaap_StatementEquityComponentsAxis_aa742721-31ad-4021-9dc6-7330bc7d7bd0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EquityComponentDomain_f8af2cf4-9650-41ec-959b-841b0d16cf99" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EquityComponentDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_StatementEquityComponentsAxis_aa742721-31ad-4021-9dc6-7330bc7d7bd0" xlink:to="loc_us-gaap_EquityComponentDomain_f8af2cf4-9650-41ec-959b-841b0d16cf99" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CommonStockMember_aa8ecf51-6726-408e-a072-706f62b2c44a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CommonStockMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EquityComponentDomain_f8af2cf4-9650-41ec-959b-841b0d16cf99" xlink:to="loc_us-gaap_CommonStockMember_aa8ecf51-6726-408e-a072-706f62b2c44a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareRepurchaseProgramAxis_1f3b8fa0-7a10-4e36-876e-3fad90574bc5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareRepurchaseProgramAxis"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_ScheduleOfStockholdersEquityTable_f68db2eb-a8a3-4ffa-adf1-ce381893c8d4" xlink:to="loc_us-gaap_ShareRepurchaseProgramAxis_1f3b8fa0-7a10-4e36-876e-3fad90574bc5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareRepurchaseProgramDomain_c0262ddd-74aa-4db1-996a-6df7c16ee346" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareRepurchaseProgramDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareRepurchaseProgramAxis_1f3b8fa0-7a10-4e36-876e-3fad90574bc5" xlink:to="loc_us-gaap_ShareRepurchaseProgramDomain_c0262ddd-74aa-4db1-996a-6df7c16ee346" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_A2021StockRepurchaseProgramMember_86fa7f13-5941-4364-a5f6-685ad4696b42" xlink:href="spsc-20230331.xsd#spsc_A2021StockRepurchaseProgramMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareRepurchaseProgramDomain_c0262ddd-74aa-4db1-996a-6df7c16ee346" xlink:to="loc_spsc_A2021StockRepurchaseProgramMember_86fa7f13-5941-4364-a5f6-685ad4696b42" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_A2022StockRepurchaseProgramMember_50a08ea5-8bf9-4113-8333-72bf6c410d7d" xlink:href="spsc-20230331.xsd#spsc_A2022StockRepurchaseProgramMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareRepurchaseProgramDomain_c0262ddd-74aa-4db1-996a-6df7c16ee346" xlink:to="loc_spsc_A2022StockRepurchaseProgramMember_50a08ea5-8bf9-4113-8333-72bf6c410d7d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ScheduleOfStockholdersEquityLineItems_b73ccf79-3227-406d-81be-419e4740a587" xlink:href="spsc-20230331.xsd#spsc_ScheduleOfStockholdersEquityLineItems"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_ScheduleOfStockholdersEquityTable_f68db2eb-a8a3-4ffa-adf1-ce381893c8d4" xlink:to="loc_spsc_ScheduleOfStockholdersEquityLineItems_b73ccf79-3227-406d-81be-419e4740a587" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockRepurchaseProgramAuthorizedAmount1_28c607fa-f1bd-4826-bcc9-5a1e9b5cc8e7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockRepurchaseProgramAuthorizedAmount1"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_ScheduleOfStockholdersEquityLineItems_b73ccf79-3227-406d-81be-419e4740a587" xlink:to="loc_us-gaap_StockRepurchaseProgramAuthorizedAmount1_28c607fa-f1bd-4826-bcc9-5a1e9b5cc8e7" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockCommonValue_6d37bbc5-3077-4700-a96e-96d892fbc880" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockCommonValue"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_ScheduleOfStockholdersEquityLineItems_b73ccf79-3227-406d-81be-419e4740a587" xlink:to="loc_us-gaap_TreasuryStockCommonValue_6d37bbc5-3077-4700-a96e-96d892fbc880" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue_6b6477dc-e114-4b9d-bdda-5b425b21a52b" xlink:href="spsc-20230331.xsd#spsc_TreasuryStockUnusedAndExpiredRepurchaseValue"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_ScheduleOfStockholdersEquityLineItems_b73ccf79-3227-406d-81be-419e4740a587" xlink:to="loc_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue_6b6477dc-e114-4b9d-bdda-5b425b21a52b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1_d9743253-8cf5-49cc-81b6-569bf7d78a51" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_ScheduleOfStockholdersEquityLineItems_b73ccf79-3227-406d-81be-419e4740a587" xlink:to="loc_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1_d9743253-8cf5-49cc-81b6-569bf7d78a51" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockholdersEquityStockRepurchaseActivityDetails" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockholdersEquityStockRepurchaseActivityDetails"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockholdersEquityStockRepurchaseActivityDetails" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EquityAbstract_590a5f7e-38fb-47b1-ab24-a9cd364704ab" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EquityAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockSharesAcquired_c321aec1-9f40-440f-ba02-0870a9680991" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockSharesAcquired"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EquityAbstract_590a5f7e-38fb-47b1-ab24-a9cd364704ab" xlink:to="loc_us-gaap_TreasuryStockSharesAcquired_c321aec1-9f40-440f-ba02-0870a9680991" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/verboseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockValueAcquiredCostMethod_2bbd0f84-b45c-4def-9549-8bad16573d9b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockValueAcquiredCostMethod"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EquityAbstract_590a5f7e-38fb-47b1-ab24-a9cd364704ab" xlink:to="loc_us-gaap_TreasuryStockValueAcquiredCostMethod_2bbd0f84-b45c-4def-9549-8bad16573d9b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/verboseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_TreasuryStockAcquiredAverageCostPerShare_7aaf6670-7262-4821-a5bb-65ac185af502" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_TreasuryStockAcquiredAverageCostPerShare"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EquityAbstract_590a5f7e-38fb-47b1-ab24-a9cd364704ab" xlink:to="loc_us-gaap_TreasuryStockAcquiredAverageCostPerShare_7aaf6670-7262-4821-a5bb-65ac185af502" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationNarrativeDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_f532779f-5608-4d6d-b3dc-ea1e5c5e06bf" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_1407fa95-da98-4749-bc42-358a9a3d87ef" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_f532779f-5608-4d6d-b3dc-ea1e5c5e06bf" xlink:to="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_1407fa95-da98-4749-bc42-358a9a3d87ef" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AwardTypeAxis_9f4aee91-461d-42e5-a0fc-e5b9e8740016" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AwardTypeAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_1407fa95-da98-4749-bc42-358a9a3d87ef" xlink:to="loc_us-gaap_AwardTypeAxis_9f4aee91-461d-42e5-a0fc-e5b9e8740016" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_0819e138-3e82-40a4-94d2-e3da96a433c8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AwardTypeAxis_9f4aee91-461d-42e5-a0fc-e5b9e8740016" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_0819e138-3e82-40a4-94d2-e3da96a433c8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockOptionMember_947d2f97-8d17-4035-8517-3efffbef5f29" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockOptionMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_0819e138-3e82-40a4-94d2-e3da96a433c8" xlink:to="loc_us-gaap_EmployeeStockOptionMember_947d2f97-8d17-4035-8517-3efffbef5f29" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PerformanceSharesMember_eb33e216-3ee4-46b9-9040-930c4d6ab1e6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PerformanceSharesMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_0819e138-3e82-40a4-94d2-e3da96a433c8" xlink:to="loc_us-gaap_PerformanceSharesMember_eb33e216-3ee4-46b9-9040-930c4d6ab1e6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember_d61ed5a8-d7e9-4e40-9b8b-86f62937f036" xlink:href="spsc-20230331.xsd#spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_0819e138-3e82-40a4-94d2-e3da96a433c8" xlink:to="loc_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember_d61ed5a8-d7e9-4e40-9b8b-86f62937f036" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SubsidiarySaleOfStockAxis_3f9c1703-9a9f-483e-902b-ee2e2f1b6eb9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SubsidiarySaleOfStockAxis"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_1407fa95-da98-4749-bc42-358a9a3d87ef" xlink:to="loc_us-gaap_SubsidiarySaleOfStockAxis_3f9c1703-9a9f-483e-902b-ee2e2f1b6eb9" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SaleOfStockNameOfTransactionDomain_41af7e84-ff75-4f0e-aa76-fbac17d328a4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SaleOfStockNameOfTransactionDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_SubsidiarySaleOfStockAxis_3f9c1703-9a9f-483e-902b-ee2e2f1b6eb9" xlink:to="loc_us-gaap_SaleOfStockNameOfTransactionDomain_41af7e84-ff75-4f0e-aa76-fbac17d328a4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockMember_7b56ecd1-24a7-4d31-8644-c771a6d80d00" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_SaleOfStockNameOfTransactionDomain_41af7e84-ff75-4f0e-aa76-fbac17d328a4" xlink:to="loc_us-gaap_EmployeeStockMember_7b56ecd1-24a7-4d31-8644-c771a6d80d00" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeAxis_b2f8aaa9-7ab4-44f7-8b33-ad32227b3d68" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeAxis"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_1407fa95-da98-4749-bc42-358a9a3d87ef" xlink:to="loc_srt_RangeAxis_b2f8aaa9-7ab4-44f7-8b33-ad32227b3d68" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeMember_ae148c02-524e-4f15-a1c7-0826d23508f8" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_srt_RangeAxis_b2f8aaa9-7ab4-44f7-8b33-ad32227b3d68" xlink:to="loc_srt_RangeMember_ae148c02-524e-4f15-a1c7-0826d23508f8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_MaximumMember_7a0abfdf-91d8-407d-9228-f46dcf648bd4" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_MaximumMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_srt_RangeMember_ae148c02-524e-4f15-a1c7-0826d23508f8" xlink:to="loc_srt_MaximumMember_7a0abfdf-91d8-407d-9228-f46dcf648bd4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_1407fa95-da98-4749-bc42-358a9a3d87ef" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant_18bbdab5-f3e7-4943-b532-29d0b5066a18" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant_18bbdab5-f3e7-4943-b532-29d0b5066a18" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized_4e00e2d2-f7cc-459c-8b9f-da77bf518eaf" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized_4e00e2d2-f7cc-459c-8b9f-da77bf518eaf" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1_f4329ddd-e98f-42f2-b967-18a29bd0cca6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1_f4329ddd-e98f-42f2-b967-18a29bd0cca6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber_0c3c66cf-f495-4dff-a99b-2465759a2af9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber_0c3c66cf-f495-4dff-a99b-2465759a2af9" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice_ab279faf-8dfe-4415-8a18-406cf4507f96" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice_ab279faf-8dfe-4415-8a18-406cf4507f96" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2_52995e42-9059-4a73-a9ea-a69e687d4c20" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2_52995e42-9059-4a73-a9ea-a69e687d4c20" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue_d7ed1955-827a-491f-8434-41019906d473" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue"/>
    <link:presentationArc order="7" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue_d7ed1955-827a-491f-8434-41019906d473" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1_55b3fa16-e011-4cd7-9c60-6ff2aac05c3a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1"/>
    <link:presentationArc order="8" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1_55b3fa16-e011-4cd7-9c60-6ff2aac05c3a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod_6a9636ab-9489-41f1-b398-f2c064e87d93" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod"/>
    <link:presentationArc order="9" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod_6a9636ab-9489-41f1-b398-f2c064e87d93" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd_354b2dd9-698d-4d33-8663-27fc47eb03bd" xlink:href="spsc-20230331.xsd#spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd"/>
    <link:presentationArc order="10" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd_354b2dd9-698d-4d33-8663-27fc47eb03bd" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance_91e49a1c-c5ae-4cbe-bc54-3109b00a6d15" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance"/>
    <link:presentationArc order="11" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_c2c99520-5e88-4ee0-81f8-204b905c8b7a" xlink:to="loc_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance_91e49a1c-c5ae-4cbe-bc54-3109b00a6d15" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationStockBasedCompensationExpenseDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_72bd6cd8-390c-4e8e-b4fc-a66836cea970" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable_b358f252-14c2-417c-8f9b-8be34622250d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_72bd6cd8-390c-4e8e-b4fc-a66836cea970" xlink:to="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable_b358f252-14c2-417c-8f9b-8be34622250d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeStatementLocationAxis_cb4c63ff-9025-4fae-9bb8-c8f30e14b82f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeStatementLocationAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable_b358f252-14c2-417c-8f9b-8be34622250d" xlink:to="loc_us-gaap_IncomeStatementLocationAxis_cb4c63ff-9025-4fae-9bb8-c8f30e14b82f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncomeStatementLocationDomain_d09c87be-b375-4b0b-b4c3-0d7f646f8026" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncomeStatementLocationDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementLocationAxis_cb4c63ff-9025-4fae-9bb8-c8f30e14b82f" xlink:to="loc_us-gaap_IncomeStatementLocationDomain_d09c87be-b375-4b0b-b4c3-0d7f646f8026" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_CostOfSalesMember_3b872e4f-9155-4ede-af22-85cba38c43c6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_CostOfSalesMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementLocationDomain_d09c87be-b375-4b0b-b4c3-0d7f646f8026" xlink:to="loc_us-gaap_CostOfSalesMember_3b872e4f-9155-4ede-af22-85cba38c43c6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SellingAndMarketingExpenseMember_ff7271fd-73b1-42c1-99e0-03fce45433c4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SellingAndMarketingExpenseMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementLocationDomain_d09c87be-b375-4b0b-b4c3-0d7f646f8026" xlink:to="loc_us-gaap_SellingAndMarketingExpenseMember_ff7271fd-73b1-42c1-99e0-03fce45433c4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ResearchAndDevelopmentExpenseMember_2e5e279e-7a50-4f7d-ac6c-95ff4bc53625" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ResearchAndDevelopmentExpenseMember"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementLocationDomain_d09c87be-b375-4b0b-b4c3-0d7f646f8026" xlink:to="loc_us-gaap_ResearchAndDevelopmentExpenseMember_2e5e279e-7a50-4f7d-ac6c-95ff4bc53625" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeneralAndAdministrativeExpenseMember_8bdd7bb7-1194-4880-8f8c-89c4ffb5f5f7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeneralAndAdministrativeExpenseMember"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_IncomeStatementLocationDomain_d09c87be-b375-4b0b-b4c3-0d7f646f8026" xlink:to="loc_us-gaap_GeneralAndAdministrativeExpenseMember_8bdd7bb7-1194-4880-8f8c-89c4ffb5f5f7" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AwardTypeAxis_a3f67bb2-c895-4346-80b3-7a03a2b2fbcd" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AwardTypeAxis"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable_b358f252-14c2-417c-8f9b-8be34622250d" xlink:to="loc_us-gaap_AwardTypeAxis_a3f67bb2-c895-4346-80b3-7a03a2b2fbcd" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AwardTypeAxis_a3f67bb2-c895-4346-80b3-7a03a2b2fbcd" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockOptionMember_29d99ba6-03e2-4f13-8a32-e5529a31ff7a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockOptionMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:to="loc_us-gaap_EmployeeStockOptionMember_29d99ba6-03e2-4f13-8a32-e5529a31ff7a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_PerformanceSharesMember_8ce119a4-8a99-48f8-a308-e54a8b1b9ab0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_PerformanceSharesMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:to="loc_us-gaap_PerformanceSharesMember_8ce119a4-8a99-48f8-a308-e54a8b1b9ab0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/verboseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RestrictedStockUnitsRSUMember_84ac40ae-8637-42ba-a864-529801fcda45" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RestrictedStockUnitsRSUMember"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:to="loc_us-gaap_RestrictedStockUnitsRSUMember_84ac40ae-8637-42ba-a864-529801fcda45" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/verboseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember_b5894695-b5e3-4485-8256-361e60de8c56" xlink:href="spsc-20230331.xsd#spsc_RestrictedStockUnitsAndDeferredStockUnitsMember"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:to="loc_spsc_RestrictedStockUnitsAndDeferredStockUnitsMember_b5894695-b5e3-4485-8256-361e60de8c56" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_EmployeeStockPurchasePlanMember_b92089b4-0e6b-4369-9275-943b446dba7e" xlink:href="spsc-20230331.xsd#spsc_EmployeeStockPurchasePlanMember"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:to="loc_spsc_EmployeeStockPurchasePlanMember_b92089b4-0e6b-4369-9275-943b446dba7e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/verboseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_FourZeroOneKStockMatchMember_3736ec3f-137e-4800-a8f0-56a3fe46a462" xlink:href="spsc-20230331.xsd#spsc_FourZeroOneKStockMatchMember"/>
    <link:presentationArc order="6" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_9a7b530b-a9be-41e5-890f-5cf05b0e6bea" xlink:to="loc_spsc_FourZeroOneKStockMatchMember_3736ec3f-137e-4800-a8f0-56a3fe46a462" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems_fe0b3892-8143-4a97-97de-8eae68287061" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable_b358f252-14c2-417c-8f9b-8be34622250d" xlink:to="loc_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems_fe0b3892-8143-4a97-97de-8eae68287061" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AllocatedShareBasedCompensationExpense_1a3a5d07-ec22-4f53-bd86-56d209836091" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AllocatedShareBasedCompensationExpense"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems_fe0b3892-8143-4a97-97de-8eae68287061" xlink:to="loc_us-gaap_AllocatedShareBasedCompensationExpense_1a3a5d07-ec22-4f53-bd86-56d209836091" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationStockOptionActivityDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_fd32417b-8079-4c0c-8552-e6945f67f754" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward_081752f1-1348-4157-b111-936b911903ad" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_fd32417b-8079-4c0c-8552-e6945f67f754" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward_081752f1-1348-4157-b111-936b911903ad" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber_8d144c64-673d-4610-8edb-1c91675b589e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward_081752f1-1348-4157-b111-936b911903ad" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber_8d144c64-673d-4610-8edb-1c91675b589e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodStartLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross_68536881-e475-41f8-97dd-68ff440c792d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward_081752f1-1348-4157-b111-936b911903ad" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross_68536881-e475-41f8-97dd-68ff440c792d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised_978da578-252a-463c-856a-e84759c21f89" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward_081752f1-1348-4157-b111-936b911903ad" xlink:to="loc_us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised_978da578-252a-463c-856a-e84759c21f89" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod_a16592cf-47f2-491a-be41-325ef19ea5a3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward_081752f1-1348-4157-b111-936b911903ad" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod_a16592cf-47f2-491a-be41-325ef19ea5a3" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber_78c261a0-b502-4005-b991-a08caea6b629" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward_081752f1-1348-4157-b111-936b911903ad" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber_78c261a0-b502-4005-b991-a08caea6b629" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodEndLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward_bfc8fd79-e553-43f3-8078-c6f970d2370f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_fd32417b-8079-4c0c-8552-e6945f67f754" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward_bfc8fd79-e553-43f3-8078-c6f970d2370f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice_b259a1be-ad94-4d52-a264-d4d1a6dda2f2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward_bfc8fd79-e553-43f3-8078-c6f970d2370f" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice_b259a1be-ad94-4d52-a264-d4d1a6dda2f2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodStartLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice_d6613bfe-7e46-405d-b5db-38d07f643b49" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward_bfc8fd79-e553-43f3-8078-c6f970d2370f" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice_d6613bfe-7e46-405d-b5db-38d07f643b49" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice_0e1f2f2d-eeec-4ddd-9f11-3c518ee8fbc0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward_bfc8fd79-e553-43f3-8078-c6f970d2370f" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice_0e1f2f2d-eeec-4ddd-9f11-3c518ee8fbc0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice_b6ec55c9-082b-4a14-97f1-dcd0459b8fb4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward_bfc8fd79-e553-43f3-8078-c6f970d2370f" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice_b6ec55c9-082b-4a14-97f1-dcd0459b8fb4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice_c3c0e3e6-57fb-41c2-9360-c23b7f9849e8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward_bfc8fd79-e553-43f3-8078-c6f970d2370f" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice_c3c0e3e6-57fb-41c2-9360-c23b7f9849e8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodEndLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber_c63e8715-f016-4423-8731-79282e4bcd28" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_fd32417b-8079-4c0c-8552-e6945f67f754" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber_c63e8715-f016-4423-8731-79282e4bcd28" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2_8ff726d2-d7d1-488e-a212-79d78f1b8f67" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_fd32417b-8079-4c0c-8552-e6945f67f754" xlink:to="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2_8ff726d2-d7d1-488e-a212-79d78f1b8f67" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_b4eb1395-ada7-459f-8409-014ed39dd1f9" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_6f2d4d81-eac9-49c2-aa23-8068e24d54e6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_b4eb1395-ada7-459f-8409-014ed39dd1f9" xlink:to="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_6f2d4d81-eac9-49c2-aa23-8068e24d54e6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AwardTypeAxis_edc931ad-1a96-4421-b6f5-d34ae9d9a538" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AwardTypeAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_6f2d4d81-eac9-49c2-aa23-8068e24d54e6" xlink:to="loc_us-gaap_AwardTypeAxis_edc931ad-1a96-4421-b6f5-d34ae9d9a538" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_6a9a93d4-1fd1-4065-9da2-2fd7fd963e19" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AwardTypeAxis_edc931ad-1a96-4421-b6f5-d34ae9d9a538" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_6a9a93d4-1fd1-4065-9da2-2fd7fd963e19" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockOptionMember_8064b087-6004-4f14-aa67-26ace155985f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockOptionMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_6a9a93d4-1fd1-4065-9da2-2fd7fd963e19" xlink:to="loc_us-gaap_EmployeeStockOptionMember_8064b087-6004-4f14-aa67-26ace155985f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_12e2d29b-c026-45bf-b424-c8ad44321ecb" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_6f2d4d81-eac9-49c2-aa23-8068e24d54e6" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_12e2d29b-c026-45bf-b424-c8ad44321ecb" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1_5be16d78-55de-4dfb-be3f-ed219e03af1d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_12e2d29b-c026-45bf-b424-c8ad44321ecb" xlink:to="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1_5be16d78-55de-4dfb-be3f-ed219e03af1d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate_572037a5-7a7e-4dba-920e-926b6d044ad8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_12e2d29b-c026-45bf-b424-c8ad44321ecb" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate_572037a5-7a7e-4dba-920e-926b6d044ad8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate_8e501678-e917-4fa9-9766-d330a65d2cf7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_12e2d29b-c026-45bf-b424-c8ad44321ecb" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate_8e501678-e917-4fa9-9766-d330a65d2cf7" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate_3dfcd0c6-f57b-4170-a9c3-21e71b719f5f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_12e2d29b-c026-45bf-b424-c8ad44321ecb" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate_3dfcd0c6-f57b-4170-a9c3-21e71b719f5f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationPSURSURSAandDSUDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_132946ea-f8b4-4196-9e4e-774ca1f05e56" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_23bd1a16-2ffe-4898-8094-3e392230a357" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_132946ea-f8b4-4196-9e4e-774ca1f05e56" xlink:to="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_23bd1a16-2ffe-4898-8094-3e392230a357" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AwardTypeAxis_58584e30-f1e0-41fd-9ece-19618aedcd2b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AwardTypeAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_23bd1a16-2ffe-4898-8094-3e392230a357" xlink:to="loc_us-gaap_AwardTypeAxis_58584e30-f1e0-41fd-9ece-19618aedcd2b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_6d49b574-e9f3-4f35-99f1-2b08efef6582" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_AwardTypeAxis_58584e30-f1e0-41fd-9ece-19618aedcd2b" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_6d49b574-e9f3-4f35-99f1-2b08efef6582" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember_638d5860-071d-458e-9ce4-fc28a61d806e" xlink:href="spsc-20230331.xsd#spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain_6d49b574-e9f3-4f35-99f1-2b08efef6582" xlink:to="loc_spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember_638d5860-071d-458e-9ce4-fc28a61d806e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/verboseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeAxis_75d3a938-418b-4bdc-a1de-df3369dc19ef" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeAxis"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_23bd1a16-2ffe-4898-8094-3e392230a357" xlink:to="loc_srt_RangeAxis_75d3a938-418b-4bdc-a1de-df3369dc19ef" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_RangeMember_c0b938ec-e076-4078-86e6-0627be46a972" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_RangeMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_srt_RangeAxis_75d3a938-418b-4bdc-a1de-df3369dc19ef" xlink:to="loc_srt_RangeMember_c0b938ec-e076-4078-86e6-0627be46a972" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_srt_MaximumMember_30cde468-e179-414c-a1cd-2c6eaef62493" xlink:href="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd#srt_MaximumMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_srt_RangeMember_c0b938ec-e076-4078-86e6-0627be46a972" xlink:to="loc_srt_MaximumMember_30cde468-e179-414c-a1cd-2c6eaef62493" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_30d842e7-021f-4919-b2e3-422bc3ca1816" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_23bd1a16-2ffe-4898-8094-3e392230a357" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_30d842e7-021f-4919-b2e3-422bc3ca1816" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_30d842e7-021f-4919-b2e3-422bc3ca1816" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber_0f3a1312-3060-4412-9769-f795e8fd2dbf" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber_0f3a1312-3060-4412-9769-f795e8fd2dbf" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodStartLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod_71c3a406-9ffe-49ac-9683-9d12499d2a60" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod_71c3a406-9ffe-49ac-9683-9d12499d2a60" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod_0fac64aa-9fcd-43a8-b134-04b0e8cd9c89" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod_0fac64aa-9fcd-43a8-b134-04b0e8cd9c89" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod_db8de851-0dc2-4791-bafb-e394a021af89" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod_db8de851-0dc2-4791-bafb-e394a021af89" xlink:type="arc" preferredLabel="http://www.xbrl.org/2009/role/negatedLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber_f3ed4337-6c0b-4a04-8d0e-8e8578a9250f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward_182dec18-67c5-4ba4-9f69-786c94921d77" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber_f3ed4337-6c0b-4a04-8d0e-8e8578a9250f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodEndLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_30d842e7-021f-4919-b2e3-422bc3ca1816" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue_8f6bef5e-1be1-429d-9f67-fd7b647dd06e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue_8f6bef5e-1be1-429d-9f67-fd7b647dd06e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodStartLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue_97c16c0d-d23c-4602-a77a-a114092c286e" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue_97c16c0d-d23c-4602-a77a-a114092c286e" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue_a89b2264-fc41-4e13-b0ce-c046783aa5e3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue_a89b2264-fc41-4e13-b0ce-c046783aa5e3" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue_16a80043-0675-42c6-ad98-fe3cbdd1a8d7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue_16a80043-0675-42c6-ad98-fe3cbdd1a8d7" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue_172fe4ed-991b-4320-8e95-06f24bcd24d7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue"/>
    <link:presentationArc order="5" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward_7fd14592-1a94-4bc2-aaef-7b80b748139d" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue_172fe4ed-991b-4320-8e95-06f24bcd24d7" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/periodEndLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationSummaryofESPPActivityDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_a33657d2-ba4a-469b-b373-95288aeed895" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_66f74980-bfdd-4ce0-ba9f-7c7247a647e7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_a33657d2-ba4a-469b-b373-95288aeed895" xlink:to="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_66f74980-bfdd-4ce0-ba9f-7c7247a647e7" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SubsidiarySaleOfStockAxis_79bc8903-ed08-4730-bc9f-ff32e2ac7971" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SubsidiarySaleOfStockAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_66f74980-bfdd-4ce0-ba9f-7c7247a647e7" xlink:to="loc_us-gaap_SubsidiarySaleOfStockAxis_79bc8903-ed08-4730-bc9f-ff32e2ac7971" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SaleOfStockNameOfTransactionDomain_1f36bed9-97cd-43f7-8f14-c656723be987" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SaleOfStockNameOfTransactionDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_SubsidiarySaleOfStockAxis_79bc8903-ed08-4730-bc9f-ff32e2ac7971" xlink:to="loc_us-gaap_SaleOfStockNameOfTransactionDomain_1f36bed9-97cd-43f7-8f14-c656723be987" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockMember_c05ef9ec-7af9-4af8-b265-39cfb2f97bec" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_SaleOfStockNameOfTransactionDomain_1f36bed9-97cd-43f7-8f14-c656723be987" xlink:to="loc_us-gaap_EmployeeStockMember_c05ef9ec-7af9-4af8-b265-39cfb2f97bec" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_11a87adb-8c76-4854-9f46-c4d8cc7468a8" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_66f74980-bfdd-4ce0-ba9f-7c7247a647e7" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_11a87adb-8c76-4854-9f46-c4d8cc7468a8" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward_9aa96908-d0d9-4067-a699-356e7d2bd2d5" xlink:href="spsc-20230331.xsd#spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_11a87adb-8c76-4854-9f46-c4d8cc7468a8" xlink:to="loc_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward_9aa96908-d0d9-4067-a699-356e7d2bd2d5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward_fab8c751-5acd-4ad4-ad30-2ce6d2f334c2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_11a87adb-8c76-4854-9f46-c4d8cc7468a8" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward_fab8c751-5acd-4ad4-ad30-2ce6d2f334c2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance_9af9bca0-78b4-4327-8a01-a40837a0bb08" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_11a87adb-8c76-4854-9f46-c4d8cc7468a8" xlink:to="loc_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance_9af9bca0-78b4-4327-8a01-a40837a0bb08" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_666f0ef1-ae14-4f88-93c7-972df640af35" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_a32408bc-4396-47b3-b7ca-41cf902fface" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract_666f0ef1-ae14-4f88-93c7-972df640af35" xlink:to="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_a32408bc-4396-47b3-b7ca-41cf902fface" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SubsidiarySaleOfStockAxis_7502177e-a7d6-4af9-a279-47bd5baaad85" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SubsidiarySaleOfStockAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_a32408bc-4396-47b3-b7ca-41cf902fface" xlink:to="loc_us-gaap_SubsidiarySaleOfStockAxis_7502177e-a7d6-4af9-a279-47bd5baaad85" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SaleOfStockNameOfTransactionDomain_712848aa-559f-4c33-8dc8-16e6cd861f82" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SaleOfStockNameOfTransactionDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_SubsidiarySaleOfStockAxis_7502177e-a7d6-4af9-a279-47bd5baaad85" xlink:to="loc_us-gaap_SaleOfStockNameOfTransactionDomain_712848aa-559f-4c33-8dc8-16e6cd861f82" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EmployeeStockMember_b10c881a-094b-4eea-9701-25bd188dae84" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EmployeeStockMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_SaleOfStockNameOfTransactionDomain_712848aa-559f-4c33-8dc8-16e6cd861f82" xlink:to="loc_us-gaap_EmployeeStockMember_b10c881a-094b-4eea-9701-25bd188dae84" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_10ebdfa0-fff4-416f-833a-a635b7a31571" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable_a32408bc-4396-47b3-b7ca-41cf902fface" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_10ebdfa0-fff4-416f-833a-a635b7a31571" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1_f2e39f79-9e79-4c6c-8ff1-2075ad8948d0" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_10ebdfa0-fff4-416f-833a-a635b7a31571" xlink:to="loc_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1_f2e39f79-9e79-4c6c-8ff1-2075ad8948d0" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate_5ecef928-ed2f-4122-af70-192178ce1d27" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_10ebdfa0-fff4-416f-833a-a635b7a31571" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate_5ecef928-ed2f-4122-af70-192178ce1d27" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate_20c1ed73-ca61-4281-9778-5013d49286fb" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_10ebdfa0-fff4-416f-833a-a635b7a31571" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate_20c1ed73-ca61-4281-9778-5013d49286fb" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate_3e23ca96-11b9-472c-a493-7b6a3dddfbb3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems_10ebdfa0-fff4-416f-833a-a635b7a31571" xlink:to="loc_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate_3e23ca96-11b9-472c-a493-7b6a3dddfbb3" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/OtherIncomeandExpenseDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#OtherIncomeandExpenseDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/OtherIncomeandExpenseDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherIncomeAndExpensesAbstract_013fce20-c2d8-415d-9756-e23efe4705b7" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherIncomeAndExpensesAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_InvestmentIncomeNet_56725404-fb57-4022-8012-41451285d009" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_InvestmentIncomeNet"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherIncomeAndExpensesAbstract_013fce20-c2d8-415d-9756-e23efe4705b7" xlink:to="loc_us-gaap_InvestmentIncomeNet_56725404-fb57-4022-8012-41451285d009" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax_12869cf4-c3ab-4ce9-80c9-7abe105e08c2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ForeignCurrencyTransactionGainLossBeforeTax"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherIncomeAndExpensesAbstract_013fce20-c2d8-415d-9756-e23efe4705b7" xlink:to="loc_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax_12869cf4-c3ab-4ce9-80c9-7abe105e08c2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_OtherNonoperatingIncomeExpense_0b50656d-1d8a-4d65-90c4-f03eadbbb4d1" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_OtherNonoperatingIncomeExpense"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherIncomeAndExpensesAbstract_013fce20-c2d8-415d-9756-e23efe4705b7" xlink:to="loc_us-gaap_OtherNonoperatingIncomeExpense_0b50656d-1d8a-4d65-90c4-f03eadbbb4d1" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NonoperatingIncomeExpense_e9b0b02a-c1a5-4902-acb0-025bd8e56271" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NonoperatingIncomeExpense"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_OtherIncomeAndExpensesAbstract_013fce20-c2d8-415d-9756-e23efe4705b7" xlink:to="loc_us-gaap_NonoperatingIncomeExpense_e9b0b02a-c1a5-4902-acb0-025bd8e56271" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareAbstract_b66e1dd8-a653-4f24-961a-b4c23e8e67fc" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetIncomeLossAbstract_caae6a66-3b67-450f-9b9b-509089350972" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetIncomeLossAbstract"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EarningsPerShareAbstract_b66e1dd8-a653-4f24-961a-b4c23e8e67fc" xlink:to="loc_us-gaap_NetIncomeLossAbstract_caae6a66-3b67-450f-9b9b-509089350972" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_NetIncomeLoss_59770f25-eac8-4d1a-896f-bf11168cb0fc" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_NetIncomeLoss"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_NetIncomeLossAbstract_caae6a66-3b67-450f-9b9b-509089350972" xlink:to="loc_us-gaap_NetIncomeLoss_59770f25-eac8-4d1a-896f-bf11168cb0fc" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/verboseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_23d96a9a-6eaa-4ed8-b190-5978fef87e5a" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EarningsPerShareAbstract_b66e1dd8-a653-4f24-961a-b4c23e8e67fc" xlink:to="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_23d96a9a-6eaa-4ed8-b190-5978fef87e5a" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/verboseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic_c5279f84-b5af-4758-97bc-33b83a876fa2" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_WeightedAverageNumberOfSharesOutstandingBasic"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_23d96a9a-6eaa-4ed8-b190-5978fef87e5a" xlink:to="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic_c5279f84-b5af-4758-97bc-33b83a876fa2" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/verboseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements_1dfafb9c-ae2b-4c8e-8bda-e7ee0e562138" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_23d96a9a-6eaa-4ed8-b190-5978fef87e5a" xlink:to="loc_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements_1dfafb9c-ae2b-4c8e-8bda-e7ee0e562138" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares_7437fc90-6c18-4c48-9064-6b5952f5fc29" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_23d96a9a-6eaa-4ed8-b190-5978fef87e5a" xlink:to="loc_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares_7437fc90-6c18-4c48-9064-6b5952f5fc29" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding_e10e4f10-6019-4006-bab0-a5f0b1b3bb09" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract_23d96a9a-6eaa-4ed8-b190-5978fef87e5a" xlink:to="loc_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding_e10e4f10-6019-4006-bab0-a5f0b1b3bb09" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/totalLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_spsc_EarningsPerShareBasicAndDilutedEPSAbstract_83f25610-7bee-4048-a291-1c1f487de7ff" xlink:href="spsc-20230331.xsd#spsc_EarningsPerShareBasicAndDilutedEPSAbstract"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EarningsPerShareAbstract_b66e1dd8-a653-4f24-961a-b4c23e8e67fc" xlink:to="loc_spsc_EarningsPerShareBasicAndDilutedEPSAbstract_83f25610-7bee-4048-a291-1c1f487de7ff" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareBasic_ec4cc43e-6a51-4f62-905f-3945f634fa5f" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareBasic"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_EarningsPerShareBasicAndDilutedEPSAbstract_83f25610-7bee-4048-a291-1c1f487de7ff" xlink:to="loc_us-gaap_EarningsPerShareBasic_ec4cc43e-6a51-4f62-905f-3945f634fa5f" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareDiluted_21d3dff7-c91c-468d-8f28-9abe91f08010" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareDiluted"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_spsc_EarningsPerShareBasicAndDilutedEPSAbstract_83f25610-7bee-4048-a291-1c1f487de7ff" xlink:to="loc_us-gaap_EarningsPerShareDiluted_21d3dff7-c91c-468d-8f28-9abe91f08010" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/NetIncomePerShareScheduleofAntidilutiveCommonSharesExcludedfromCalculationofDilutedNetIncomePerShareDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#NetIncomePerShareScheduleofAntidilutiveCommonSharesExcludedfromCalculationofDilutedNetIncomePerShareDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/NetIncomePerShareScheduleofAntidilutiveCommonSharesExcludedfromCalculationofDilutedNetIncomePerShareDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_EarningsPerShareAbstract_6a36f504-ec72-4c7b-8b66-31df61fb2937" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_EarningsPerShareAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount_862d4a38-7d4a-4aa5-8b97-8d78bb686a28" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_EarningsPerShareAbstract_6a36f504-ec72-4c7b-8b66-31df61fb2937" xlink:to="loc_us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount_862d4a38-7d4a-4aa5-8b97-8d78bb686a28" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
  <link:roleRef roleURI="http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail" xlink:type="simple" xlink:href="spsc-20230331.xsd#GeographicInformationSummaryofDomesticRevenueDetail"/>
  <link:presentationLink xlink:role="http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail" xlink:type="extended">
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_RevenueFromContractWithCustomerAbstract_bb3f82e9-c8c6-4120-806e-e107d2830acf" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_RevenueFromContractWithCustomerAbstract"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisaggregationOfRevenueTable_928023df-e210-44c1-824e-3a7e7926737b" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisaggregationOfRevenueTable"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_RevenueFromContractWithCustomerAbstract_bb3f82e9-c8c6-4120-806e-e107d2830acf" xlink:to="loc_us-gaap_DisaggregationOfRevenueTable_928023df-e210-44c1-824e-3a7e7926737b" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskByBenchmarkAxis_eedb3343-ca32-44d1-af12-7a0d6f7e30fc" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskByBenchmarkAxis"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisaggregationOfRevenueTable_928023df-e210-44c1-824e-3a7e7926737b" xlink:to="loc_us-gaap_ConcentrationRiskByBenchmarkAxis_eedb3343-ca32-44d1-af12-7a0d6f7e30fc" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskBenchmarkDomain_e303fe2b-f70c-42bf-8fbd-f9f168d1aa95" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskBenchmarkDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ConcentrationRiskByBenchmarkAxis_eedb3343-ca32-44d1-af12-7a0d6f7e30fc" xlink:to="loc_us-gaap_ConcentrationRiskBenchmarkDomain_e303fe2b-f70c-42bf-8fbd-f9f168d1aa95" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_SalesRevenueNetMember_953020a4-7d43-4d42-983e-5e52abc06746" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_SalesRevenueNetMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ConcentrationRiskBenchmarkDomain_e303fe2b-f70c-42bf-8fbd-f9f168d1aa95" xlink:to="loc_us-gaap_SalesRevenueNetMember_953020a4-7d43-4d42-983e-5e52abc06746" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskByTypeAxis_f3c5690f-ecc6-499c-9c98-b67d170018fc" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskByTypeAxis"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisaggregationOfRevenueTable_928023df-e210-44c1-824e-3a7e7926737b" xlink:to="loc_us-gaap_ConcentrationRiskByTypeAxis_f3c5690f-ecc6-499c-9c98-b67d170018fc" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskTypeDomain_4d299c96-0862-4de5-9f6f-839f330959e6" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskTypeDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ConcentrationRiskByTypeAxis_f3c5690f-ecc6-499c-9c98-b67d170018fc" xlink:to="loc_us-gaap_ConcentrationRiskTypeDomain_4d299c96-0862-4de5-9f6f-839f330959e6" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicConcentrationRiskMember_8f9f6a6a-768a-4a8f-a393-d51c7059ee38" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicConcentrationRiskMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_ConcentrationRiskTypeDomain_4d299c96-0862-4de5-9f6f-839f330959e6" xlink:to="loc_us-gaap_GeographicConcentrationRiskMember_8f9f6a6a-768a-4a8f-a393-d51c7059ee38" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionAxis_8577926e-360c-4383-8a12-ab0778f435e4" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionAxis"/>
    <link:presentationArc order="3" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisaggregationOfRevenueTable_928023df-e210-44c1-824e-3a7e7926737b" xlink:to="loc_us-gaap_GeographicDistributionAxis_8577926e-360c-4383-8a12-ab0778f435e4" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionDomain_a1cfacbb-f04d-4394-aa5f-6eb4bd8680ca" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionDomain"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GeographicDistributionAxis_8577926e-360c-4383-8a12-ab0778f435e4" xlink:to="loc_us-gaap_GeographicDistributionDomain_a1cfacbb-f04d-4394-aa5f-6eb4bd8680ca" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionDomesticMember_63b8d919-b1cf-4dc2-a4e1-bbe17e8199f5" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionDomesticMember"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GeographicDistributionDomain_a1cfacbb-f04d-4394-aa5f-6eb4bd8680ca" xlink:to="loc_us-gaap_GeographicDistributionDomesticMember_63b8d919-b1cf-4dc2-a4e1-bbe17e8199f5" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_GeographicDistributionForeignMember_8491ee28-1166-46c2-94bf-9ec374032997" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_GeographicDistributionForeignMember"/>
    <link:presentationArc order="2" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_GeographicDistributionDomain_a1cfacbb-f04d-4394-aa5f-6eb4bd8680ca" xlink:to="loc_us-gaap_GeographicDistributionForeignMember_8491ee28-1166-46c2-94bf-9ec374032997" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_DisaggregationOfRevenueLineItems_1b5d5276-d497-44a3-ab0d-33fded68ad8c" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_DisaggregationOfRevenueLineItems"/>
    <link:presentationArc order="4" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisaggregationOfRevenueTable_928023df-e210-44c1-824e-3a7e7926737b" xlink:to="loc_us-gaap_DisaggregationOfRevenueLineItems_1b5d5276-d497-44a3-ab0d-33fded68ad8c" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
    <link:loc xlink:type="locator" xlink:label="loc_us-gaap_ConcentrationRiskPercentage1_ee5820fe-07b1-4176-99ae-5178918142c3" xlink:href="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd#us-gaap_ConcentrationRiskPercentage1"/>
    <link:presentationArc order="1" xlink:arcrole="http://www.xbrl.org/2003/arcrole/parent-child" xlink:from="loc_us-gaap_DisaggregationOfRevenueLineItems_1b5d5276-d497-44a3-ab0d-33fded68ad8c" xlink:to="loc_us-gaap_ConcentrationRiskPercentage1_ee5820fe-07b1-4176-99ae-5178918142c3" xlink:type="arc" preferredLabel="http://www.xbrl.org/2003/role/terseLabel"/>
  </link:presentationLink>
</link:linkbase>
</XBRL>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>GRAPHIC
<SEQUENCE>10
<FILENAME>spsc-20230331_g1.jpg
<TEXT>
begin 644 spsc-20230331_g1.jpg
M_]C_X  02D9)1@ ! 0$ 8 !@  #_VP!#  @&!@<&!0@'!P<)"0@*#!0-# L+
M#!D2$P\4'1H?'AT:'!P@)"XG("(L(QP<*#<I+# Q-#0T'R<Y/3@R/"XS-#+_
MVP!# 0D)"0P+#!@-#1@R(1PA,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R
M,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C+_P  1" !D &0# 2(  A$! Q$!_\0
M'P   04! 0$! 0$           $" P0%!@<("0H+_\0 M1   @$# P($ P4%
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
MM#LK0C#10J&'^UC)_7-%<U>?/5E)=6=F$@Z="$'T2,;QYHYU/0O/B7,]F3(
M.I3^(?R/X5R/@37UTO46LKEPMK=$88\!'['Z'I^5>L$9X->3^,O"CZ5.]_91
MDV$ARP _U)ST_P!WT->A@JL*E-X:IUV/(S.A4HU8XVBM5O\ U^#/6:*\N\-^
M/9+")+/5%>>!>$F7EU'H?4?K]:[>#Q7H,\>]-4MU'H[;#^1KEK8.M2E9JZ[G
MH8;,</7C=22?9G/_ !$BN;Q--L;2"29WD:0JBD] !_6MCPAH#Z#I)2?'VJ9O
M,E .0OHOX5'=^.] M,A;IKAAV@0M^O _6N?N_B:Y!%CIP'HTSY_0?XUT1IXF
MI15&,+(XIUL%1Q,L1.I>71+6WW'HU4;^'370/J,=J57HUP%P/Q->37GC77KU
ML?;3 I_A@4)^O7]:J0Z-KFL/YB6MW<$_\M),X_[Z:KAELH^]4FE_7R,ZF=PJ
M>Y2IN7]?,]"U/Q=H.E6,L-AY,TK*56*! $S[GIBN-\$Z-)J>O0SE/]&M&$LC
M8XS_  C\_P!*T=,^'&H3.&U&>.VC[K&=[G^@_6O1-.TZUTJS2TLXA'"GYL?4
M^IISK4</3<*+O)]14L-B,95C5Q,>6,=D3W$\5K;23S.$BC4NS'L!7EF@6\GB
MOQK)?S!O(CD\]P>P'W%_0?D:T_&>O2:K=IX>TG,I9PLQ3^-L_=^@ZD_X&NL\
M-Z'%H&E):J0TS_/,_P#>;_ =!64/]FH.3^*6WDC>K_MV)4(_!#5^;[&U1117
MG'LA4;(KH490RL,$$9!J2B@#B-8^'5E=N9M.E^QN>3&1N0G^8KFY?AWKB/A/
MLT@_O"3'\Q7K=%=M/,*\%:]_4\NMD^%JRYK6]#R^U^&FHR;3=7EO .X0%S_0
M5OV?PYT>  W#W%RW^TVT?D/\:[&BE/'XB?VK>A5+*<)3^Q?UU_X!G6>B:9I_
M_'I86\1'\00;OS/-:-9^IWL]A;K);V$]Z[-MV1$ CCJ<]JQ)+_Q=>Y6UTFVL
M%/1[B8.1^ _PK&-.=3WF_O?],Z)5:='W(Q?HD_\ ACI+BX@M86FN)4BB7J[M
M@"N%U;Q3>Z_.VD^&HI&#<27(!''M_='N:OKX)GU"83^(-6FO&!R(H_E0?Y]@
M*Z>RT^TTZW$%G;QP1C^%!C/U]?QK:+HT=5[TOP_X)A..)Q/NOW(_^3/]$8WA
MCPI;^'X/,<B:]<8>7'"CT7V_G6A?Z3'?3>8VP$Q^63MYQN!Z]>@(_&M2BL)5
MIRGSMZG5##4H4U2BM"C8V8L$E02M())#)N=OFY SG\J*O45FW=W9M&*BK(**
=**0PHHHH **** "BBB@ HHHH **** "BBB@#_]D!

end
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>GRAPHIC
<SEQUENCE>11
<FILENAME>spsc-20230331_g2.jpg
<TEXT>
begin 644 spsc-20230331_g2.jpg
M_]C_X  02D9)1@ ! 0$ 8 !@  #_X1#T17AI9@  34T *@    @ ! $[  (
M   .   (2H=I  0    !   (6)R=  $    <   0T.H<  <   @,    /@
M   <Z@    @
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M                                                 %-A=&AY82!3
M:79A:FD   60 P "    %   $*:0!  "    %   $+J2D0 "     SDW  "2
MD@ "     SDW  #J'  '   (#   ")H     '.H    (
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M                       R,#(R.C V.C W(#$U.C(U.C,Y #(P,C(Z,#8Z
M,#<@,34Z,C4Z,SD   !3 &$ = !H 'D 80 @ %, :0!V &$ :@!I    _^$+
M(&AT=' Z+R]N<RYA9&]B92YC;VTO>&%P+S$N,"\ /#]X<&%C:V5T(&)E9VEN
M/2?ON[\G(&ED/2=7-4TP37!#96AI2'IR95-Z3E1C>FMC.60G/SX-"CQX.GAM
M<&UE=&$@>&UL;G,Z>#TB861O8F4Z;G,Z;65T82\B/CQR9&8Z4D1&('AM;&YS
M.G)D9CTB:'1T<#HO+W=W=RYW,RYO<F<O,3DY.2\P,B\R,BUR9&8M<WEN=&%X
M+6YS(R(^/')D9CI$97-C<FEP=&EO;B!R9&8Z86)O=70](G5U:60Z9F%F-6)D
M9#4M8F$S9"TQ,61A+6%D,S$M9#,S9#<U,3@R9C%B(B!X;6QN<SID8STB:'1T
M<#HO+W!U<FPN;W)G+V1C+V5L96UE;G1S+S$N,2\B+SX\<F1F.D1E<V-R:7!T
M:6]N(')D9CIA8F]U=#TB=75I9#IF868U8F1D-2UB83-D+3$Q9&$M860S,2UD
M,S-D-S4Q.#)F,6(B('AM;&YS.GAM<#TB:'1T<#HO+VYS+F%D;V)E+F-O;2]X
M87 O,2XP+R(^/'AM<#I#<F5A=&5$871E/C(P,C(M,#8M,#=4,34Z,C4Z,SDN
M.3<T/"]X;7 Z0W)E871E1&%T93X\+W)D9CI$97-C<FEP=&EO;CX\<F1F.D1E
M<V-R:7!T:6]N(')D9CIA8F]U=#TB=75I9#IF868U8F1D-2UB83-D+3$Q9&$M
M860S,2UD,S-D-S4Q.#)F,6(B('AM;&YS.F1C/2)H='1P.B\O<'5R;"YO<F<O
M9&,O96QE;65N=',O,2XQ+R(^/&1C.F-R96%T;W(^/')D9CI397$@>&UL;G,Z
M<F1F/2)H='1P.B\O=W=W+G<S+F]R9R\Q.3DY+S R+S(R+7)D9BUS>6YT87@M
M;G,C(CX\<F1F.FQI/E-A=&AY82!3:79A:FD\+W)D9CIL:3X\+W)D9CI397$^
M#0H)"0D\+V1C.F-R96%T;W(^/"]R9&8Z1&5S8W)I<'1I;VX^/"]R9&8Z4D1&
M/CPO>#IX;7!M971A/@T*(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @( H@(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @"B @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" *(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @( H@(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @"B @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" *(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M( H@(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @"B @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" *(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @( H@(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M"B @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" *(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @( H@(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @"B @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" *
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @( H@(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @"B @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" *(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @( H@
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @"B @(" @(" @(" @(" @(" @(" @(" @(" @(" \/WAP86-K
M970@96YD/2=W)S\^_]L 0P '!04&!00'!@4&" <'" H1"PH)"0H5#Q ,$1@5
M&AD8%1@7&QXG(1L=)1T7&"(N(B4H*2LL*QH@+S,O*C(G*BLJ_]L 0P$'" @*
M"0H4"PL4*AP8'"HJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ_\  $0@ )0 H P$B  (1 0,1 ?_$ !\   $% 0$!
M 0$!           ! @,$!08'" D*"__$ +40  (! P,"! ,%!00$   !?0$"
M P $$042(3%!!A-180<B<10R@9&A""-"L<$54M'P)#-B<H()"A87&!D:)28G
M*"DJ-#4V-S@Y.D-$149'2$E*4U155E=865IC9&5F9VAI:G-T=79W>'EZ@X2%
MAH>(B8J2DY25EI>8F9JBHZ2EIJ>HJ:JRL[2UMK>XN;K"P\3%QL?(R<K2T]35
MUM?8V=KAXN/DY>;GZ.GJ\?+S]/7V]_CY^O_$ !\!  ,! 0$! 0$! 0$
M   ! @,$!08'" D*"__$ +41  (! @0$ P0'!00$  $"=P ! @,1! 4A,082
M05$'87$3(C*!"!1"D:&QP0DC,U+P%6)RT0H6)#3A)?$7&!D:)B<H*2HU-C<X
M.3I#1$5&1TA)2E-455976%E:8V1E9F=H:6IS='5V=WAY>H*#A(6&AXB)BI*3
ME)66EYB9FJ*CI*6FIZBIJK*SM+6VM[BYNL+#Q,7&Q\C)RM+3U-76U]C9VN+C
MY.7FY^CIZO+S]/7V]_CY^O_:  P# 0 "$0,1 #\ ^D20!DG %8PU:XU!9&TH
M0QVJ$C[=<9*,1UVJ"-P_VL@>F:B\5RR26]EI<3%#J5R()&!P5CP6?'N0,?C7
M,^,K.]34FDN-(%[H=I; Q1"Z$$49'4D#!)XP!^5=E"BIVYGO_7=79YN+Q,J:
M?*M%:^_7T3:26[2ZHZ2Y\8Z)ID:1WFK07$YXQ;*7)/T7./QJ73/%NE:K>?9+
M>9HKG&1#/&8V8>V>OX5RMCXNM+"SM+ZQ\)BVTZ1UB>[38I#'@@ #+8(/)(SC
MM6IXCNM%\0VKVVG7L4VJVZ-/:R6Y+-&R#/WEX /3D]QWQ6TL-%.SB_6Z=O5+
M_,YH8V<H\T)Q=NEFF_1MZWZ.QV-%9^A:@VJZ!97S@!YX59PO0-CG]<T5Y\HN
M,G%]#V834XJ2V9D>-'>R&E:NJ%HK"\#3X_AC8%2?U'YU7U7PKIDUAJ&K3-/J
M=PT4D\!EE+JORDJ$4<$=,#FNLGACN8'AG19(Y%*NC#(8'J#7,+X*EM2(=+U[
M4;*RS_Q[(X;;ST5CRH_.NNC62BES<K7XK>VFIYN(P[<Y2Y.9/IIH[6OKIM]U
MCF9O!>IQ^$]/%UJ43K ZR_8+H^3"@.2RL1R6R>O'>M70=76W\-ZS<26.GPQ6
MA,44FGH1'.V.@)Y;D@9[YK0?P7I$$_VBYL[S6;DC[]S-O/\ X\0M7;?1'N9(
M'OHH;:VM2&M;&W'R1-_?8XP6&>!C ]SS734Q,*D+2=];[6^Y7_%G'1P52E4O
M!6=K;WZ6U;6ENR?EL7/#MA)IGANPLY@!+# JN <X;'/ZT5H1*R1JKNTA'5F
B!/Y<45Y<I.4G)]3W:<5""BMDAU%%%26%%%% !1110!__V0$!

end
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>12
<FILENAME>R1.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825810080">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Cover - shares<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
<th class="th" colspan="1"></th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Apr. 19, 2023</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_CoverAbstract', window );"><strong>Cover [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_DocumentType', window );">Document Type</a></td>
<td class="text">10-Q<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_DocumentQuarterlyReport', window );">Document Quarterly Report</a></td>
<td class="text">true<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_DocumentPeriodEndDate', window );">Document Period End Date</a></td>
<td class="text">Mar. 31,  2023<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_DocumentTransitionReport', window );">Document Transition Report</a></td>
<td class="text">false<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityFileNumber', window );">Entity File Number</a></td>
<td class="text">001-34702<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityRegistrantName', window );">Entity Registrant Name</a></td>
<td class="text">SPS COMMERCE, INC.<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityIncorporationStateCountryCode', window );">Entity Incorporation, State or Country Code</a></td>
<td class="text">DE<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityTaxIdentificationNumber', window );">Entity Tax Identification Number</a></td>
<td class="text">41-2015127<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityAddressAddressLine1', window );">Entity Address, Address Line One</a></td>
<td class="text">333 South Seventh Street<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityAddressAddressLine2', window );">Entity Address, Address Line Two</a></td>
<td class="text">Suite 1000<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityAddressCityOrTown', window );">Entity Address, City or Town</a></td>
<td class="text">Minneapolis<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityAddressStateOrProvince', window );">Entity Address, State or Province</a></td>
<td class="text">MN<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityAddressPostalZipCode', window );">Entity Address, Postal Zip Code</a></td>
<td class="text">55402<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_CityAreaCode', window );">City Area Code</a></td>
<td class="text">612<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_LocalPhoneNumber', window );">Local Phone Number</a></td>
<td class="text">435-9400<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_Security12bTitle', window );">Title of 12(b) Security</a></td>
<td class="text">Common Stock, par value $0.001 per share<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_TradingSymbol', window );">Trading Symbol</a></td>
<td class="text">SPSC<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_SecurityExchangeName', window );">Security Exchange Name</a></td>
<td class="text">NASDAQ<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityCurrentReportingStatus', window );">Entity Current Reporting Status</a></td>
<td class="text">Yes<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityInteractiveDataCurrent', window );">Entity Interactive Data Current</a></td>
<td class="text">Yes<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityFilerCategory', window );">Entity Filer Category</a></td>
<td class="text">Large Accelerated Filer<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntitySmallBusiness', window );">Entity Small Business</a></td>
<td class="text">false<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityEmergingGrowthCompany', window );">Entity Emerging Growth Company</a></td>
<td class="text">false<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityShellCompany', window );">Entity Shell Company</a></td>
<td class="text">false<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityCommonStockSharesOutstanding', window );">Entity Common Stock, Shares Outstanding</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">36,532,756<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_EntityCentralIndexKey', window );">Entity Central Index Key</a></td>
<td class="text">0001092699<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_CurrentFiscalYearEndDate', window );">Current Fiscal Year End Date</a></td>
<td class="text">--12-31<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_DocumentFiscalYearFocus', window );">Document Fiscal Year Focus</a></td>
<td class="text">2023<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_DocumentFiscalPeriodFocus', window );">Document Fiscal Period Focus</a></td>
<td class="text">Q1<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_dei_AmendmentFlag', window );">Amendment Flag</a></td>
<td class="text">false<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_AmendmentFlag">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Boolean flag that is true when the XBRL content amends previously-filed or accepted submission.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_AmendmentFlag</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:booleanItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_CityAreaCode">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Area code of city</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_CityAreaCode</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:normalizedStringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_CoverAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Cover page.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_CoverAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_CurrentFiscalYearEndDate">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>End date of current fiscal year in the format --MM-DD.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_CurrentFiscalYearEndDate</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:gMonthDayItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_DocumentFiscalPeriodFocus">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Fiscal period values are FY, Q1, Q2, and Q3.  1st, 2nd and 3rd quarter 10-Q or 10-QT statements have value Q1, Q2, and Q3 respectively, with 10-K, 10-KT or other fiscal year statements having FY.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_DocumentFiscalPeriodFocus</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:fiscalPeriodItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_DocumentFiscalYearFocus">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>This is focus fiscal year of the document report in YYYY format. For a 2006 annual report, which may also provide financial information from prior periods, fiscal 2006 should be given as the fiscal year focus. Example: 2006.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_DocumentFiscalYearFocus</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:gYearItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_DocumentPeriodEndDate">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>For the EDGAR submission types of Form 8-K: the date of the report, the date of the earliest event reported; for the EDGAR submission types of Form N-1A: the filing date; for all other submission types: the end of the reporting or transition period.  The format of the date is YYYY-MM-DD.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_DocumentPeriodEndDate</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:dateItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_DocumentQuarterlyReport">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Boolean flag that is true only for a form used as an quarterly report.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/presentationRef<br> -Publisher SEC<br> -Name Form 10-Q<br> -Number 240<br> -Section 308<br> -Subsection a<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_DocumentQuarterlyReport</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:booleanItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_DocumentTransitionReport">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Boolean flag that is true only for a form used as a transition report.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/presentationRef<br> -Publisher SEC<br> -Name Forms 10-K, 10-Q, 20-F<br> -Number 240<br> -Section 13<br> -Subsection a-1<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_DocumentTransitionReport</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:booleanItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_DocumentType">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The type of document being provided (such as 10-K, 10-Q, 485BPOS, etc). The document type is limited to the same value as the supporting SEC submission type, or the word 'Other'.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_DocumentType</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:submissionTypeItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityAddressAddressLine1">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Address Line 1 such as Attn, Building Name, Street Name</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityAddressAddressLine1</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:normalizedStringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityAddressAddressLine2">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Address Line 2 such as Street or Suite number</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityAddressAddressLine2</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:normalizedStringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityAddressCityOrTown">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Name of the City or Town</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityAddressCityOrTown</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:normalizedStringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityAddressPostalZipCode">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Code for the postal or zip code</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityAddressPostalZipCode</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:normalizedStringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityAddressStateOrProvince">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Name of the state or province.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityAddressStateOrProvince</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:stateOrProvinceItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityCentralIndexKey">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>A unique 10-digit SEC-issued value to identify entities that have filed disclosures with the SEC. It is commonly abbreviated as CIK.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/presentationRef<br> -Publisher SEC<br> -Name Exchange Act<br> -Number 240<br> -Section 12<br> -Subsection b-2<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityCentralIndexKey</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:centralIndexKeyItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityCommonStockSharesOutstanding">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Indicate number of shares or other units outstanding of each of registrant's classes of capital or common stock or other ownership interests, if and as stated on cover of related periodic report. Where multiple classes or units exist define each class/interest by adding class of stock items such as Common Class A [Member], Common Class B [Member] or Partnership Interest [Member] onto the Instrument [Domain] of the Entity Listings, Instrument.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityCommonStockSharesOutstanding</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityCurrentReportingStatus">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Indicate 'Yes' or 'No' whether registrants (1) have filed all reports required to be filed by Section 13 or 15(d) of the Securities Exchange Act of 1934 during the preceding 12 months (or for such shorter period that registrants were required to file such reports), and (2) have been subject to such filing requirements for the past 90 days. This information should be based on the registrant's current or most recent filing containing the related disclosure.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityCurrentReportingStatus</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:yesNoItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityEmergingGrowthCompany">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Indicate if registrant meets the emerging growth company criteria.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/presentationRef<br> -Publisher SEC<br> -Name Exchange Act<br> -Number 240<br> -Section 12<br> -Subsection b-2<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityEmergingGrowthCompany</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:booleanItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityFileNumber">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Commission file number. The field allows up to 17 characters. The prefix may contain 1-3 digits, the sequence number may contain 1-8 digits, the optional suffix may contain 1-4 characters, and the fields are separated with a hyphen.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityFileNumber</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:fileNumberItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityFilerCategory">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Indicate whether the registrant is one of the following: Large Accelerated Filer, Accelerated Filer, Non-accelerated Filer. Definitions of these categories are stated in Rule 12b-2 of the Exchange Act. This information should be based on the registrant's current or most recent filing containing the related disclosure.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/presentationRef<br> -Publisher SEC<br> -Name Exchange Act<br> -Number 240<br> -Section 12<br> -Subsection b-2<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityFilerCategory</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:filerCategoryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityIncorporationStateCountryCode">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Two-character EDGAR code representing the state or country of incorporation.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityIncorporationStateCountryCode</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:edgarStateCountryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityInteractiveDataCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Boolean flag that is true when the registrant has submitted electronically every Interactive Data File required to be submitted pursuant to Rule 405 of Regulation S-T during the preceding 12 months (or for such shorter period that the registrant was required to submit such files).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/presentationRef<br> -Publisher SEC<br> -Name Regulation S-T<br> -Number 232<br> -Section 405<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityInteractiveDataCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:yesNoItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityRegistrantName">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The exact name of the entity filing the report as specified in its charter, which is required by forms filed with the SEC.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/presentationRef<br> -Publisher SEC<br> -Name Exchange Act<br> -Number 240<br> -Section 12<br> -Subsection b-2<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityRegistrantName</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:normalizedStringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityShellCompany">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Boolean flag that is true when the registrant is a shell company as defined in Rule 12b-2 of the Exchange Act.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/presentationRef<br> -Publisher SEC<br> -Name Exchange Act<br> -Number 240<br> -Section 12<br> -Subsection b-2<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityShellCompany</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:booleanItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntitySmallBusiness">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Indicates that the company is a Smaller Reporting Company (SRC).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/presentationRef<br> -Publisher SEC<br> -Name Exchange Act<br> -Number 240<br> -Section 12<br> -Subsection b-2<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntitySmallBusiness</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:booleanItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_EntityTaxIdentificationNumber">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The Tax Identification Number (TIN), also known as an Employer Identification Number (EIN), is a unique 9-digit value assigned by the IRS.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/presentationRef<br> -Publisher SEC<br> -Name Exchange Act<br> -Number 240<br> -Section 12<br> -Subsection b-2<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_EntityTaxIdentificationNumber</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:employerIdItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_LocalPhoneNumber">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Local phone number for entity.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_LocalPhoneNumber</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:normalizedStringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_Security12bTitle">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Title of a 12(b) registered security.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/presentationRef<br> -Publisher SEC<br> -Name Exchange Act<br> -Number 240<br> -Section 12<br> -Subsection b<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_Security12bTitle</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:securityTitleItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_SecurityExchangeName">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Name of the Exchange on which a security is registered.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/presentationRef<br> -Publisher SEC<br> -Name Exchange Act<br> -Number 240<br> -Section 12<br> -Subsection d1-1<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_SecurityExchangeName</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:edgarExchangeCodeItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_dei_TradingSymbol">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Trading symbol of an instrument as listed on an exchange.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">dei_TradingSymbol</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>dei_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dei:tradingSymbolItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>13
<FILENAME>R2.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824407904">
<tr>
<th class="tl" colspan="1" rowspan="1"><div style="width: 200px;"><strong>Condensed Consolidated Balance Sheets - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Dec. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AssetsCurrentAbstract', window );"><strong>Current assets</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CashAndCashEquivalentsAtCarryingValue', window );">Cash and cash equivalents</a></td>
<td class="nump">$ 182,304<span></span>
</td>
<td class="nump">$ 162,893<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShortTermInvestments', window );">Short-term investments</a></td>
<td class="nump">51,146<span></span>
</td>
<td class="nump">51,412<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AccountsReceivableGrossCurrent', window );">Accounts receivable</a></td>
<td class="nump">46,654<span></span>
</td>
<td class="nump">42,501<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent', window );">Allowance for credit losses</a></td>
<td class="num">(3,217)<span></span>
</td>
<td class="num">(3,066)<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AccountsReceivableNetCurrent', window );">Accounts receivable, net</a></td>
<td class="nump">43,437<span></span>
</td>
<td class="nump">39,435<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DeferredCostsCurrent', window );">Deferred costs</a></td>
<td class="nump">53,844<span></span>
</td>
<td class="nump">52,755<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherAssetsCurrent', window );">Other assets</a></td>
<td class="nump">15,651<span></span>
</td>
<td class="nump">16,319<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AssetsCurrent', window );">Total current assets</a></td>
<td class="nump">346,382<span></span>
</td>
<td class="nump">322,814<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentNet', window );">Property and equipment, net</a></td>
<td class="nump">35,078<span></span>
</td>
<td class="nump">35,458<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OperatingLeaseRightOfUseAsset', window );">Operating lease right-of-use assets</a></td>
<td class="nump">8,451<span></span>
</td>
<td class="nump">9,170<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_Goodwill', window );">Goodwill</a></td>
<td class="nump">199,001<span></span>
</td>
<td class="nump">197,284<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsNet', window );">Intangible assets, net</a></td>
<td class="nump">84,536<span></span>
</td>
<td class="nump">88,352<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherAssetsNoncurrentAbstract', window );"><strong>Other assets</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DeferredCosts', window );">Deferred costs, non-current</a></td>
<td class="nump">17,965<span></span>
</td>
<td class="nump">17,424<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DeferredIncomeTaxAssetsNet', window );">Deferred income tax assets</a></td>
<td class="nump">3,365<span></span>
</td>
<td class="nump">227<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherAssetsNoncurrent', window );">Other assets, non-current</a></td>
<td class="nump">2,149<span></span>
</td>
<td class="nump">2,185<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_Assets', window );">Total assets</a></td>
<td class="nump">696,927<span></span>
</td>
<td class="nump">672,914<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LiabilitiesCurrentAbstract', window );"><strong>Current liabilities</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AccountsPayableCurrent', window );">Accounts payable</a></td>
<td class="nump">5,339<span></span>
</td>
<td class="nump">11,256<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeRelatedLiabilitiesCurrent', window );">Accrued compensation</a></td>
<td class="nump">26,431<span></span>
</td>
<td class="nump">30,235<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AccruedLiabilitiesCurrent', window );">Accrued expenses</a></td>
<td class="nump">8,163<span></span>
</td>
<td class="nump">7,451<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ContractWithCustomerLiabilityCurrent', window );">Deferred revenue</a></td>
<td class="nump">62,907<span></span>
</td>
<td class="nump">57,423<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OperatingLeaseLiabilityCurrent', window );">Operating lease liabilities</a></td>
<td class="nump">4,121<span></span>
</td>
<td class="nump">4,277<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LiabilitiesCurrent', window );">Total current liabilities</a></td>
<td class="nump">106,961<span></span>
</td>
<td class="nump">110,642<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherLiabilitiesNoncurrentAbstract', window );"><strong>Other liabilities</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ContractWithCustomerLiabilityNoncurrent', window );">Deferred revenue, non-current</a></td>
<td class="nump">5,105<span></span>
</td>
<td class="nump">4,771<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OperatingLeaseLiabilityNoncurrent', window );">Operating lease liabilities, non-current</a></td>
<td class="nump">11,994<span></span>
</td>
<td class="nump">13,009<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DeferredIncomeTaxLiabilitiesNet', window );">Deferred income tax liabilities</a></td>
<td class="nump">6,977<span></span>
</td>
<td class="nump">7,419<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_Liabilities', window );">Total liabilities</a></td>
<td class="nump">131,037<span></span>
</td>
<td class="nump">135,841<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommitmentsAndContingencies', window );">Commitments and contingencies</a></td>
<td class="text"> <span></span>
</td>
<td class="text"> <span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockholdersEquityAbstract', window );"><strong>Stockholders' equity</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PreferredStockValue', window );">Preferred stock, $0.001 par value; 5,000,000 shares authorized; 0 shares issued and outstanding</a></td>
<td class="nump">0<span></span>
</td>
<td class="nump">0<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommonStockValue', window );">Common stock, $0.001 par value; 110,000,000 shares authorized; 38,683,854 and 38,309,144 shares issued; and 36,532,756 and 36,158,046 shares outstanding, respectively</a></td>
<td class="nump">39<span></span>
</td>
<td class="nump">38<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockCommonValue', window );">Treasury Stock, at cost; 2,151,098 shares</a></td>
<td class="num">(128,892)<span></span>
</td>
<td class="num">(128,892)<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AdditionalPaidInCapitalCommonStock', window );">Additional paid-in capital</a></td>
<td class="nump">489,716<span></span>
</td>
<td class="nump">476,117<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RetainedEarningsAccumulatedDeficit', window );">Retained earnings</a></td>
<td class="nump">208,510<span></span>
</td>
<td class="nump">193,221<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax', window );">Accumulated other comprehensive loss</a></td>
<td class="num">(3,483)<span></span>
</td>
<td class="num">(3,411)<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockholdersEquity', window );">Total stockholders&#8217; equity</a></td>
<td class="nump">565,890<span></span>
</td>
<td class="nump">537,073<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LiabilitiesAndStockholdersEquity', window );">Total liabilities and stockholders&#8217; equity</a></td>
<td class="nump">$ 696,927<span></span>
</td>
<td class="nump">$ 672,914<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AccountsPayableCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Carrying value as of the balance sheet date of liabilities incurred (and for which invoices have typically been received) and payable to vendors for goods and services received that are used in an entity's business. Used to reflect the current portion of the liabilities (due within one year or within the normal operating cycle if longer).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02.19(a))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AccountsPayableCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AccountsReceivableGrossCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount, before allowance for credit loss, of right to consideration from customer for product sold and service rendered in normal course of business, classified as current.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 310<br> -SubTopic 10<br> -Section 45<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=124259787&amp;loc=d3e4428-111522<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=124098289&amp;loc=d3e6676-107765<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 310<br> -SubTopic 10<br> -Section 45<br> -Paragraph 9<br> -URI https://asc.fasb.org/extlink&amp;oid=124259787&amp;loc=d3e4531-111522<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(3)(a)(1))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AccountsReceivableGrossCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AccountsReceivableNetCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount, after allowance for credit loss, of right to consideration from customer for product sold and service rendered in normal course of business, classified as current.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 310<br> -SubTopic 10<br> -Section 45<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=124259787&amp;loc=d3e4428-111522<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 310<br> -SubTopic 10<br> -Section 45<br> -Paragraph 9<br> -URI https://asc.fasb.org/extlink&amp;oid=124259787&amp;loc=d3e4531-111522<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AccountsReceivableNetCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AccruedLiabilitiesCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Carrying value as of the balance sheet date of obligations incurred and payable, pertaining to costs that are statutory in nature, are incurred on contractual obligations, or accumulate over time and for which invoices have not yet been received or will not be rendered. Examples include taxes, interest, rent and utilities. Used to reflect the current portion of the liabilities (due within one year or within the normal operating cycle if longer).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02.20)<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AccruedLiabilitiesCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Accumulated change in equity from transactions and other events and circumstances from non-owner sources, net of tax effect, at period end. Excludes Net Income (Loss), and accumulated changes in equity from transactions resulting from investments by owners and distributions to owners. Includes foreign currency translation items, certain pension adjustments, unrealized gains and losses on certain investments in debt and equity securities, other than temporary impairment (OTTI) losses related to factors other than credit losses on available-for-sale and held-to-maturity debt securities that an entity does not intend to sell and it is not more likely than not that the entity will be required to sell before recovery of the amortized cost basis, as well as changes in the fair value of derivatives related to the effective portion of a designated cash flow hedge.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(30)(a)(4))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e637-108580<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-03(a)(23)(a)(3))<br> -URI https://asc.fasb.org/extlink&amp;oid=126734703&amp;loc=d3e572229-122910<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 14A<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669686-108580<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 40<br> -Section 65<br> -Paragraph 2<br> -Subparagraph (h)(2)<br> -URI https://asc.fasb.org/extlink&amp;oid=124501264&amp;loc=SL117420844-207641<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 40<br> -Section 65<br> -Paragraph 2<br> -Subparagraph (g)(2)(ii)<br> -URI https://asc.fasb.org/extlink&amp;oid=124501264&amp;loc=SL117420844-207641<br><br>Reference 7: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 14<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e681-108580<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AdditionalPaidInCapitalCommonStock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Value received from shareholders in common stock-related transactions that are in excess of par value or stated value and amounts received from other stock-related transactions. Includes only common stock transactions (excludes preferred stock transactions). May be called contributed capital, capital in excess of par, capital surplus, or paid-in capital.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(30)(a)(1))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AdditionalPaidInCapitalCommonStock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of allowance for credit loss on accounts receivable, classified as current.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 310<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=123577603&amp;loc=d3e5074-111524<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 326<br> -SubTopic 20<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=124255206&amp;loc=SL82895884-210446<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(4))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_Assets">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Sum of the carrying amounts as of the balance sheet date of all assets that are recognized. Assets are probable future economic benefits obtained or controlled by an entity as a result of past transactions or events.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-03(11))<br> -URI https://asc.fasb.org/extlink&amp;oid=126897435&amp;loc=d3e534808-122878<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 6: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-03(a)(12))<br> -URI https://asc.fasb.org/extlink&amp;oid=126734703&amp;loc=d3e572229-122910<br><br>Reference 7: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 50<br> -Paragraph 7<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124433192&amp;loc=SL2890621-112765<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 9: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 14: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iii))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(B))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 17: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (bb)<br> -URI https://asc.fasb.org/extlink&amp;oid=123419778&amp;loc=d3e5710-111685<br><br>Reference 18: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 19: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 20: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 45<br> -Paragraph 25<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=116870748&amp;loc=SL6758485-165988<br><br>Reference 21: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 22: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(18))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 23: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br><br>Reference 24: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 30<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8906-108599<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_Assets</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AssetsCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Sum of the carrying amounts as of the balance sheet date of all assets that are expected to be realized in cash, sold, or consumed within one year (or the normal operating cycle, if longer). Assets are probable future economic benefits obtained or controlled by an entity as a result of past transactions or events.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=124098289&amp;loc=d3e6676-107765<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br><br>Reference 3: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 50<br> -Paragraph 7<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124433192&amp;loc=SL2890621-112765<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 7: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iii))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br><br>Reference 9: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 45<br> -Paragraph 25<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=116870748&amp;loc=SL6758485-165988<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(B))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br><br>Reference 14: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (bb)<br> -URI https://asc.fasb.org/extlink&amp;oid=123419778&amp;loc=d3e5710-111685<br><br>Reference 17: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 18: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(9))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 19: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 20: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AssetsCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AssetsCurrentAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AssetsCurrentAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CashAndCashEquivalentsAtCarryingValue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of currency on hand as well as demand deposits with banks or financial institutions. Includes other kinds of accounts that have the general characteristics of demand deposits. Also includes short-term, highly liquid investments that are both readily convertible to known amounts of cash and so near their maturity that they present insignificant risk of changes in value because of changes in interest rates. Excludes cash and cash equivalents within disposal group and discontinued operation.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3044-108585<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124098289&amp;loc=d3e6676-107765<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(1))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CashAndCashEquivalentsAtCarryingValue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommitmentsAndContingencies">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Represents the caption on the face of the balance sheet to indicate that the entity has entered into (1) purchase or supply arrangements that will require expending a portion of its resources to meet the terms thereof, and (2) is exposed to potential losses or, less frequently, gains, arising from (a) possible claims against a company's resources due to future performance under contract terms, and (b) possible losses or likely gains from uncertainties that will ultimately be resolved when one or more future events that are deemed likely to occur do occur or fail to occur.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02.25)<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-03.(a),19)<br> -URI https://asc.fasb.org/extlink&amp;oid=126734703&amp;loc=d3e572229-122910<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-03.17)<br> -URI https://asc.fasb.org/extlink&amp;oid=126897435&amp;loc=d3e534808-122878<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommitmentsAndContingencies</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommonStockValue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Aggregate par or stated value of issued nonredeemable common stock (or common stock redeemable solely at the option of the issuer). This item includes treasury stock repurchased by the entity. Note: elements for number of nonredeemable common shares, par value and other disclosure concepts are in another section within stockholders' equity.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommonStockValue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ContractWithCustomerLiabilityCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of obligation to transfer good or service to customer for which consideration has been received or is receivable, classified as current.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=126919976&amp;loc=SL49130531-203044<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 45<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126919976&amp;loc=SL49130532-203044<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 8<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130549-203045<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ContractWithCustomerLiabilityCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ContractWithCustomerLiabilityNoncurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of obligation to transfer good or service to customer for which consideration has been received or is receivable, classified as noncurrent.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 45<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126919976&amp;loc=SL49130532-203044<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=126919976&amp;loc=SL49130531-203044<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 8<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130549-203045<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ContractWithCustomerLiabilityNoncurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DeferredCosts">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of deferred cost, excluding capitalized cost related to contract with customer; classified as noncurrent.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-03(10))<br> -URI https://asc.fasb.org/extlink&amp;oid=126897435&amp;loc=d3e534808-122878<br><br>Reference 2: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(17))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-03(a)(10))<br> -URI https://asc.fasb.org/extlink&amp;oid=126734703&amp;loc=d3e572229-122910<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DeferredCosts</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DeferredCostsCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Sum of the carrying amounts as of the balance sheet date of deferred costs capitalized at the end of the reporting period that are expected to be charged against earnings within one year or the normal operating cycle, if longer.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(8))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DeferredCostsCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DeferredIncomeTaxAssetsNet">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount, after allocation of valuation allowances and deferred tax liability, of deferred tax asset attributable to deductible differences and carryforwards, with jurisdictional netting.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section 45<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=123427490&amp;loc=d3e31931-109318<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section 45<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=123427490&amp;loc=d3e31917-109318<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DeferredIncomeTaxAssetsNet</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DeferredIncomeTaxLiabilitiesNet">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount, after deferred tax asset, of deferred tax liability attributable to taxable differences with jurisdictional netting.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section 45<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=123427490&amp;loc=d3e31931-109318<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section 45<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=123427490&amp;loc=d3e31917-109318<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DeferredIncomeTaxLiabilitiesNet</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EmployeeRelatedLiabilitiesCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Total of the carrying values as of the balance sheet date of obligations incurred through that date and payable for obligations related to services received from employees, such as accrued salaries and bonuses, payroll taxes and fringe benefits. Used to reflect the current portion of the liabilities (due within one year or within the normal operating cycle if longer).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02.20)<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EmployeeRelatedLiabilitiesCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsNet">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after amortization of assets, excluding financial assets and goodwill, lacking physical substance with a finite life.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 926<br> -SubTopic 20<br> -Section 50<br> -Paragraph 5<br> -URI https://asc.fasb.org/extlink&amp;oid=120154696&amp;loc=d3e54445-107959<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsNet</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_Goodwill">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after accumulated impairment loss of an asset representing future economic benefits arising from other assets acquired in a business combination that are not individually identified and separately recognized.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-03(10)(1))<br> -URI https://asc.fasb.org/extlink&amp;oid=126897435&amp;loc=d3e534808-122878<br><br>Reference 3: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (h)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 4: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 55<br> -Paragraph 24<br> -URI https://asc.fasb.org/extlink&amp;oid=122137925&amp;loc=d3e14258-109268<br><br>Reference 5: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=99380562&amp;loc=d3e13770-109266<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(15))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_Goodwill</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_Liabilities">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Sum of the carrying amounts as of the balance sheet date of all liabilities that are recognized. Liabilities are probable future sacrifices of economic benefits arising from present obligations of an entity to transfer assets or provide services to other entities in the future.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02.19-26)<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 2: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 50<br> -Paragraph 7<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124433192&amp;loc=SL2890621-112765<br><br>Reference 3: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 30<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8906-108599<br><br>Reference 4: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 50<br> -Paragraph 7<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124433192&amp;loc=SL2890621-112765<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 45<br> -Paragraph 25<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=116870748&amp;loc=SL6758485-165988<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 9: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (bb)<br> -URI https://asc.fasb.org/extlink&amp;oid=123419778&amp;loc=d3e5710-111685<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(B))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=123419778&amp;loc=d3e5710-111685<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 17: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 18: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 19: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 20: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_Liabilities</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LiabilitiesAndStockholdersEquity">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of liabilities and equity items, including the portion of equity attributable to noncontrolling interests, if any.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-03(23))<br> -URI https://asc.fasb.org/extlink&amp;oid=126897435&amp;loc=d3e534808-122878<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-03(a)(25))<br> -URI https://asc.fasb.org/extlink&amp;oid=126734703&amp;loc=d3e572229-122910<br><br>Reference 5: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 6: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(32))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 7: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LiabilitiesAndStockholdersEquity</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LiabilitiesCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Total obligations incurred as part of normal operations that are expected to be paid during the following twelve months or within one business cycle, if longer.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br><br>Reference 2: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 50<br> -Paragraph 7<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124433192&amp;loc=SL2890621-112765<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 4: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 50<br> -Paragraph 7<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124433192&amp;loc=SL2890621-112765<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 45<br> -Paragraph 25<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=116870748&amp;loc=SL6758485-165988<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 7: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 9: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=123419778&amp;loc=d3e5710-111685<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(B))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (bb)<br> -URI https://asc.fasb.org/extlink&amp;oid=123419778&amp;loc=d3e5710-111685<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 17: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 18: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 19: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br><br>Reference 20: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section 45<br> -Paragraph 5<br> -URI https://asc.fasb.org/extlink&amp;oid=124098289&amp;loc=d3e6904-107765<br><br>Reference 21: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02.21)<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LiabilitiesCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LiabilitiesCurrentAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LiabilitiesCurrentAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OperatingLeaseLiabilityCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Present value of lessee's discounted obligation for lease payments from operating lease, classified as current.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 45<br> -Paragraph 1<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=123391704&amp;loc=SL77918627-209977<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OperatingLeaseLiabilityCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OperatingLeaseLiabilityNoncurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Present value of lessee's discounted obligation for lease payments from operating lease, classified as noncurrent.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 45<br> -Paragraph 1<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=123391704&amp;loc=SL77918627-209977<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OperatingLeaseLiabilityNoncurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OperatingLeaseRightOfUseAsset">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of lessee's right to use underlying asset under operating lease.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 45<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=123391704&amp;loc=SL77918627-209977<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OperatingLeaseRightOfUseAsset</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherAssetsCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of current assets classified as other.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(8))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherAssetsCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherAssetsNoncurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of noncurrent assets classified as other.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(17))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherAssetsNoncurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherAssetsNoncurrentAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherAssetsNoncurrentAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherLiabilitiesNoncurrentAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherLiabilitiesNoncurrentAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PreferredStockValue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Aggregate par or stated value of issued nonredeemable preferred stock (or preferred stock redeemable solely at the option of the issuer). This item includes treasury stock repurchased by the entity. Note: elements for number of nonredeemable preferred shares, par value and other disclosure concepts are in another section within stockholders' equity.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(28))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PreferredStockValue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PropertyPlantAndEquipmentNet">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after accumulated depreciation, depletion and amortization of physical assets used in the normal conduct of business to produce goods and services and not intended for resale. Examples include, but are not limited to, land, buildings, machinery and equipment, office equipment, and furniture and fixtures.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 360<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6391035&amp;loc=d3e2868-110229<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-03(a)(8))<br> -URI https://asc.fasb.org/extlink&amp;oid=126734703&amp;loc=d3e572229-122910<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 360<br> -Section 50<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=124429447&amp;loc=SL124453093-239630<br><br>Reference 4: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PropertyPlantAndEquipmentNet</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_RetainedEarningsAccumulatedDeficit">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The cumulative amount of the reporting entity's undistributed earnings or deficit.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(30)(a)(3))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-03(a)(23)(a)(4))<br> -URI https://asc.fasb.org/extlink&amp;oid=126734703&amp;loc=d3e572229-122910<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 40<br> -Section 65<br> -Paragraph 2<br> -Subparagraph (h)(2)<br> -URI https://asc.fasb.org/extlink&amp;oid=124501264&amp;loc=SL117420844-207641<br><br>Reference 5: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.3-04)<br> -URI https://asc.fasb.org/extlink&amp;oid=120397183&amp;loc=d3e187085-122770<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 40<br> -Section 65<br> -Paragraph 2<br> -Subparagraph (g)(2)(i)<br> -URI https://asc.fasb.org/extlink&amp;oid=124501264&amp;loc=SL117420844-207641<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_RetainedEarningsAccumulatedDeficit</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShortTermInvestments">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of investments including trading securities, available-for-sale securities, held-to-maturity securities, and short-term investments classified as other and current.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-03(4))<br> -URI https://asc.fasb.org/extlink&amp;oid=126897435&amp;loc=d3e534808-122878<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-03(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126897435&amp;loc=d3e534808-122878<br><br>Reference 3: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(8))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-03(a)(1)(g))<br> -URI https://asc.fasb.org/extlink&amp;oid=126734703&amp;loc=d3e572229-122910<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShortTermInvestments</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StockholdersEquity">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Total of all stockholders' equity (deficit) items, net of receivables from officers, directors, owners, and affiliates of the entity which are attributable to the parent. The amount of the economic entity's stockholders' equity attributable to the parent excludes the amount of stockholders' equity which is allocable to that ownership interest in subsidiary equity which is not attributable to the parent (noncontrolling interest, minority interest). This excludes temporary equity and is sometimes called permanent equity.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 310<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SAB Topic 4.E)<br> -URI https://asc.fasb.org/extlink&amp;oid=122038336&amp;loc=d3e74512-122707<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(31))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 5: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 6: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(30))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 7: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br><br>Reference 8: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StockholdersEquity</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StockholdersEquityAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StockholdersEquityAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_TreasuryStockCommonValue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount allocated to previously issued common shares repurchased by the issuing entity and held in treasury.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6405813&amp;loc=d3e23239-112655<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=6405834&amp;loc=d3e23315-112656<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02.30)<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_TreasuryStockCommonValue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>14
<FILENAME>R3.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825789648">
<tr>
<th class="tl" colspan="1" rowspan="1"><div style="width: 200px;"><strong>Condensed Consolidated Balance Sheets (Parenthetical) - $ / shares<br></strong></div></th>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Dec. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StatementOfFinancialPositionAbstract', window );"><strong>Statement of Financial Position [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PreferredStockParOrStatedValuePerShare', window );">Preferred stock, par value (in dollars per share)</a></td>
<td class="nump">$ 0.001<span></span>
</td>
<td class="nump">$ 0.001<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PreferredStockSharesAuthorized', window );">Preferred stock, shares authorized (in shares)</a></td>
<td class="nump">5,000,000<span></span>
</td>
<td class="nump">5,000,000<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PreferredStockSharesIssued', window );">Preferred stock, shares issued (in shares)</a></td>
<td class="nump">0<span></span>
</td>
<td class="nump">0<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PreferredStockSharesOutstanding', window );">Preferred stock, shares outstanding (in shares)</a></td>
<td class="nump">0<span></span>
</td>
<td class="nump">0<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommonStockParOrStatedValuePerShare', window );">Common stock, par value (in dollars per share)</a></td>
<td class="nump">$ 0.001<span></span>
</td>
<td class="nump">$ 0.001<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommonStockSharesAuthorized', window );">Common stock, shares authorized (in shares)</a></td>
<td class="nump">110,000,000<span></span>
</td>
<td class="nump">110,000,000<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommonStockSharesIssued', window );">Common stock, shares issued (in shares)</a></td>
<td class="nump">38,683,854<span></span>
</td>
<td class="nump">38,309,144<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommonStockSharesOutstanding', window );">Common stock, shares outstanding (in shares)</a></td>
<td class="nump">36,532,756<span></span>
</td>
<td class="nump">36,158,046<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockCommonShares', window );">Treasury stock, shares (in shares)</a></td>
<td class="nump">2,151,098<span></span>
</td>
<td class="nump">2,151,098<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommonStockParOrStatedValuePerShare">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Face amount or stated value per share of common stock.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommonStockParOrStatedValuePerShare</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommonStockSharesAuthorized">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The maximum number of common shares permitted to be issued by an entity's charter and bylaws.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommonStockSharesAuthorized</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommonStockSharesIssued">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Total number of common shares of an entity that have been sold or granted to shareholders (includes common shares that were issued, repurchased and remain in the treasury). These shares represent capital invested by the firm's shareholders and owners, and may be all or only a portion of the number of shares authorized. Shares issued include shares outstanding and shares held in the treasury.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommonStockSharesIssued</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommonStockSharesOutstanding">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of shares of common stock outstanding. Common stock represent the ownership interest in a corporation.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=d3e21463-112644<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommonStockSharesOutstanding</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PreferredStockParOrStatedValuePerShare">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Face amount or stated value per share of preferred stock nonredeemable or redeemable solely at the option of the issuer.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(28))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 13<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496158-112644<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PreferredStockParOrStatedValuePerShare</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PreferredStockSharesAuthorized">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The maximum number of nonredeemable preferred shares (or preferred stock redeemable solely at the option of the issuer) permitted to be issued by an entity's charter and bylaws.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(28))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PreferredStockSharesAuthorized</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PreferredStockSharesIssued">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Total number of nonredeemable preferred shares (or preferred stock redeemable solely at the option of the issuer) issued to shareholders (includes related preferred shares that were issued, repurchased, and remain in the treasury). May be all or portion of the number of preferred shares authorized. Excludes preferred shares that are classified as debt.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(28))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 13<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496158-112644<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PreferredStockSharesIssued</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PreferredStockSharesOutstanding">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Aggregate share number for all nonredeemable preferred stock (or preferred stock redeemable solely at the option of the issuer) held by stockholders. Does not include preferred shares that have been repurchased.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(28))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PreferredStockSharesOutstanding</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StatementOfFinancialPositionAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StatementOfFinancialPositionAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_TreasuryStockCommonShares">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of previously issued common shares repurchased by the issuing entity and held in treasury.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6405813&amp;loc=d3e23239-112655<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_TreasuryStockCommonShares</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>15
<FILENAME>R4.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825673936">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Condensed Consolidated Statements of Comprehensive Income - USD ($)<br> shares in Thousands, $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncomeStatementAbstract', window );"><strong>Income Statement [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax', window );">Revenues</a></td>
<td class="nump">$ 125,868<span></span>
</td>
<td class="nump">$ 105,193<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CostOfRevenue', window );">Cost of revenues</a></td>
<td class="nump">42,964<span></span>
</td>
<td class="nump">35,389<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_GrossProfit', window );">Gross profit</a></td>
<td class="nump">82,904<span></span>
</td>
<td class="nump">69,804<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OperatingExpensesAbstract', window );"><strong>Operating expenses</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_SellingAndMarketingExpense', window );">Sales and marketing</a></td>
<td class="nump">29,083<span></span>
</td>
<td class="nump">24,655<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ResearchAndDevelopmentExpense', window );">Research and development</a></td>
<td class="nump">12,563<span></span>
</td>
<td class="nump">10,701<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_GeneralAndAdministrativeExpense', window );">General and administrative</a></td>
<td class="nump">20,677<span></span>
</td>
<td class="nump">15,468<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AmortizationOfIntangibleAssets', window );">Amortization of intangible assets</a></td>
<td class="nump">3,851<span></span>
</td>
<td class="nump">2,470<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OperatingExpenses', window );">Total operating expenses</a></td>
<td class="nump">66,174<span></span>
</td>
<td class="nump">53,294<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OperatingIncomeLoss', window );">Income from operations</a></td>
<td class="nump">16,730<span></span>
</td>
<td class="nump">16,510<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NonoperatingIncomeExpense', window );">Other income, net</a></td>
<td class="nump">1,276<span></span>
</td>
<td class="nump">423<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest', window );">Income before income taxes</a></td>
<td class="nump">18,006<span></span>
</td>
<td class="nump">16,933<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncomeTaxExpenseBenefit', window );">Income tax expense</a></td>
<td class="nump">2,717<span></span>
</td>
<td class="nump">4,330<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NetIncomeLoss', window );">Net income</a></td>
<td class="nump">15,289<span></span>
</td>
<td class="nump">12,603<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract', window );"><strong>Other comprehensive income (expense)</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax', window );">Foreign currency translation adjustments</a></td>
<td class="num">(95)<span></span>
</td>
<td class="nump">730<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax', window );">Unrealized gain (loss) on investments, net of tax of $133 and ($1), respectively</a></td>
<td class="nump">399<span></span>
</td>
<td class="num">(3)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax', window );">Reclassification of (gain) loss on investments into earnings, net of tax of ($125) and $4, respectively</a></td>
<td class="num">(376)<span></span>
</td>
<td class="nump">11<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent', window );">Total other comprehensive income (expense)</a></td>
<td class="num">(72)<span></span>
</td>
<td class="nump">738<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ComprehensiveIncomeNetOfTax', window );">Comprehensive income</a></td>
<td class="nump">$ 15,217<span></span>
</td>
<td class="nump">$ 13,341<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EarningsPerShareAbstract', window );"><strong>Net income per share</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EarningsPerShareBasic', window );">Basic (in dollars per share)</a></td>
<td class="nump">$ 0.42<span></span>
</td>
<td class="nump">$ 0.35<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EarningsPerShareDiluted', window );">Diluted (in dollars per share)</a></td>
<td class="nump">$ 0.41<span></span>
</td>
<td class="nump">$ 0.34<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract', window );"><strong>Weighted average common shares used to compute net income per share</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic', window );">Basic (in shares)</a></td>
<td class="nump">36,427<span></span>
</td>
<td class="nump">36,136<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding', window );">Diluted (in shares)</a></td>
<td class="nump">37,155<span></span>
</td>
<td class="nump">36,989<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AmortizationOfIntangibleAssets">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The aggregate expense charged against earnings to allocate the cost of intangible assets (nonphysical assets not used in production) in a systematic and rational manner to the periods expected to benefit from such assets. As a noncash expense, this element is added back to net income when calculating cash provided by or used in operations using the indirect method.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(2)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 45<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=6388964&amp;loc=d3e16225-109274<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AmortizationOfIntangibleAssets</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ComprehensiveIncomeNetOfTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after tax of increase (decrease) in equity from transactions and other events and circumstances from net income and other comprehensive income, attributable to parent entity. Excludes changes in equity resulting from investments by owners and distributions to owners.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-04(22))<br> -URI https://asc.fasb.org/extlink&amp;oid=120400993&amp;loc=SL114874131-224263<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(24))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 5<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e557-108580<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-04(26))<br> -URI https://asc.fasb.org/extlink&amp;oid=120399700&amp;loc=SL114874048-224260<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1B<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669625-108580<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1A<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669619-108580<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ComprehensiveIncomeNetOfTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CostOfRevenue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The aggregate cost of goods produced and sold and services rendered during the reporting period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 5: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03.2)<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 9: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(B))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 13: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CostOfRevenue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EarningsPerShareAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EarningsPerShareAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EarningsPerShareBasic">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The amount of net income (loss) for the period per each share of common stock or unit outstanding during the reporting period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 65<br> -Paragraph 1<br> -Subparagraph (e)(4)<br> -URI https://asc.fasb.org/extlink&amp;oid=126732423&amp;loc=SL123482106-238011<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22583-107794<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1448-109256<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22595-107794<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 7<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1337-109256<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 65<br> -Paragraph 1<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126732423&amp;loc=SL123482106-238011<br><br>Reference 9: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 55<br> -Paragraph 52<br> -URI https://asc.fasb.org/extlink&amp;oid=128363288&amp;loc=d3e4984-109258<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-04(23))<br> -URI https://asc.fasb.org/extlink&amp;oid=120400993&amp;loc=SL114874131-224263<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 55<br> -Paragraph 15<br> -URI https://asc.fasb.org/extlink&amp;oid=128363288&amp;loc=d3e3842-109258<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 7<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22644-107794<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(25))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1252-109256<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 60B<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=SL5780133-109256<br><br>Reference 17: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-04(27))<br> -URI https://asc.fasb.org/extlink&amp;oid=120399700&amp;loc=SL114874048-224260<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EarningsPerShareBasic</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EarningsPerShareDiluted">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The amount of net income (loss) for the period available to each share of common stock or common unit outstanding during the reporting period and to each share or unit that would have been outstanding assuming the issuance of common shares or units for all dilutive potential common shares or units outstanding during the reporting period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 55<br> -Paragraph 52<br> -URI https://asc.fasb.org/extlink&amp;oid=128363288&amp;loc=d3e4984-109258<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 7<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22644-107794<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 55<br> -Paragraph 15<br> -URI https://asc.fasb.org/extlink&amp;oid=128363288&amp;loc=d3e3842-109258<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1252-109256<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22595-107794<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22583-107794<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 60B<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=SL5780133-109256<br><br>Reference 9: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 65<br> -Paragraph 1<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126732423&amp;loc=SL123482106-238011<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-04(27))<br> -URI https://asc.fasb.org/extlink&amp;oid=120399700&amp;loc=SL114874048-224260<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-04(23))<br> -URI https://asc.fasb.org/extlink&amp;oid=120400993&amp;loc=SL114874131-224263<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 7<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1337-109256<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 65<br> -Paragraph 1<br> -Subparagraph (e)(4)<br> -URI https://asc.fasb.org/extlink&amp;oid=126732423&amp;loc=SL123482106-238011<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(25))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EarningsPerShareDiluted</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_GeneralAndAdministrativeExpense">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The aggregate total of expenses of managing and administering the affairs of an entity, including affiliates of the reporting entity, which are not directly or indirectly associated with the manufacture, sale or creation of a product or product line.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03.4)<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_GeneralAndAdministrativeExpense</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_GrossProfit">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Aggregate revenue less cost of goods and services sold or operating expenses directly attributable to the revenue generation activity.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 31<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8924-108599<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 30<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8906-108599<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(B))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 9: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 17: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 18: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03.1,2)<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br><br>Reference 19: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_GrossProfit</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of income (loss) from continuing operations, including income (loss) from equity method investments, before deduction of income tax expense (benefit), and income (loss) attributable to noncontrolling interest.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 30<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8906-108599<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 940<br> -SubTopic 20<br> -Section 25<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=126941158&amp;loc=d3e41242-110953<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 6: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(10))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br><br>Reference 7: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-04(8))<br> -URI https://asc.fasb.org/extlink&amp;oid=120400993&amp;loc=SL114874131-224263<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 235<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-05(b)(2))<br> -URI https://asc.fasb.org/extlink&amp;oid=120399901&amp;loc=d3e537907-122884<br><br>Reference 9: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 31<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8924-108599<br><br>Reference 10: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-04(15))<br> -URI https://asc.fasb.org/extlink&amp;oid=120399700&amp;loc=SL114874048-224260<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncomeStatementAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncomeStatementAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncomeTaxExpenseBenefit">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of current income tax expense (benefit) and deferred income tax expense (benefit) pertaining to continuing operations.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SAB TOPIC 6.I.7)<br> -URI https://asc.fasb.org/extlink&amp;oid=122134291&amp;loc=d3e330036-122817<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section 50<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=121826272&amp;loc=d3e32672-109319<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -Subparagraph (h)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(h))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 9<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22663-107794<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 20<br> -Section 45<br> -Paragraph 2<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=123586238&amp;loc=d3e38679-109324<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-04(9))<br> -URI https://asc.fasb.org/extlink&amp;oid=120400993&amp;loc=SL114874131-224263<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 8<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22658-107794<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncomeTaxExpenseBenefit</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NetIncomeLoss">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The portion of profit or loss for the period, net of income taxes, which is attributable to the parent.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-04(22))<br> -URI https://asc.fasb.org/extlink&amp;oid=120399700&amp;loc=SL114874048-224260<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22595-107794<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-04(18))<br> -URI https://asc.fasb.org/extlink&amp;oid=120400993&amp;loc=SL114874131-224263<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 65<br> -Paragraph 1<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126732423&amp;loc=SL123482106-238011<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=124431353&amp;loc=SL124452729-227067<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 8: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(20))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br><br>Reference 9: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (b)(2)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22499-107794<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 9<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22663-107794<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 17: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 18: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br><br>Reference 19: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22583-107794<br><br>Reference 20: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 21: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 60B<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=SL5780133-109256<br><br>Reference 22: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br><br>Reference 23: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 8<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22658-107794<br><br>Reference 24: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1A<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669619-108580<br><br>Reference 25: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 31<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8924-108599<br><br>Reference 26: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 27: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 28: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 205<br> -SubTopic 20<br> -Section 50<br> -Paragraph 7<br> -URI https://asc.fasb.org/extlink&amp;oid=109222650&amp;loc=SL51721683-107760<br><br>Reference 29: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1B<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669625-108580<br><br>Reference 30: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 31: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 32: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(B))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 33: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 34: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 30<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8906-108599<br><br>Reference 35: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NetIncomeLoss</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NonoperatingIncomeExpense">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The aggregate amount of income or expense from ancillary business-related activities (that is to say, excluding major activities considered part of the normal operations of the business).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03.7)<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NonoperatingIncomeExpense</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OperatingExpenses">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Generally recurring costs associated with normal operations except for the portion of these expenses which can be clearly related to production and included in cost of sales or services. Includes selling, general and administrative expense.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OperatingExpenses</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OperatingExpensesAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OperatingExpensesAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OperatingIncomeLoss">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The net result for the period of deducting operating expenses from operating revenues.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 31<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8924-108599<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 30<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8906-108599<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OperatingIncomeLoss</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount before tax, after reclassification adjustments of gain (loss) on foreign currency translation adjustments, foreign currency transactions designated and effective as economic hedges of a net investment in a foreign entity and intra-entity foreign currency transactions that are of a long-term-investment nature.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 10A<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669646-108580<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e637-108580<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after tax of other comprehensive income (loss) attributable to parent entity.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1B<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669625-108580<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1A<br> -Subparagraph (c)(3)<br> -URI https://asc.fasb.org/extlink&amp;oid=109239629&amp;loc=SL4573702-111684<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 45<br> -Paragraph 20<br> -URI https://asc.fasb.org/extlink&amp;oid=126929396&amp;loc=SL4569643-111683<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1A<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669619-108580<br><br>Reference 5: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -SubTopic 10<br> -Section 45<br> -Paragraph 19<br> -URI https://asc.fasb.org/extlink&amp;oid=126929396&amp;loc=SL4569616-111683<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after tax of reclassification adjustment from accumulated other comprehensive income for unrealized gain (loss) realized upon the sale of available-for-sale securities.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 15<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e689-108580<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e637-108580<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 320<br> -SubTopic 10<br> -Section 50<br> -Paragraph 9<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126970911&amp;loc=d3e27357-111563<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 17A<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL34724391-108580<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount, after tax and before adjustment, of unrealized holding gain (loss) on investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale). Excludes unrealized gain (loss) on investment in debt security measured at amortized cost (held-to-maturity) from transfer to available-for-sale.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 10A<br> -Subparagraph (e)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669646-108580<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e637-108580<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ResearchAndDevelopmentExpense">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The aggregate costs incurred (1) in a planned search or critical investigation aimed at discovery of new knowledge with the hope that such knowledge will be useful in developing a new product or service, a new process or technique, or in bringing about a significant improvement to an existing product or process; or (2) to translate research findings or other knowledge into a plan or design for a new product or process or for a significant improvement to an existing product or process whether intended for sale or the entity's use, during the reporting period charged to research and development projects, including the costs of developing computer software up to the point in time of achieving technological feasibility, and costs allocated in accounting for a business combination to in-process projects deemed to have no alternative future use.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 912<br> -SubTopic 730<br> -Section 25<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6472174&amp;loc=d3e58812-109433<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 985<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6501960&amp;loc=d3e128462-111756<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 730<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6420194&amp;loc=d3e21568-108373<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ResearchAndDevelopmentExpense</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount, excluding tax collected from customer, of revenue from satisfaction of performance obligation by transferring promised good or service to customer. Tax collected from customer is tax assessed by governmental authority that is both imposed on and concurrent with specific revenue-producing transaction, including, but not limited to, sales, use, value added and excise.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 30<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8906-108599<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 40<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e9031-108599<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 41<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e9038-108599<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130543-203045<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 9: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 42<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e9054-108599<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 5<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130545-203045<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 924<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SAB Topic 11.L)<br> -URI https://asc.fasb.org/extlink&amp;oid=6472922&amp;loc=d3e499488-122856<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_SellingAndMarketingExpense">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The aggregate total amount of expenses directly related to the marketing or selling of products or services.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_SellingAndMarketingExpense</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The average number of shares or units issued and outstanding that are used in calculating diluted EPS or earnings per unit (EPU), determined based on the timing of issuance of shares or units in the period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 16<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1505-109256<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of [basic] shares or units, after adjustment for contingently issuable shares or units and other shares or units not deemed outstanding, determined by relating the portion of time within a reporting period that common shares or units have been outstanding to the total time in that period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1448-109256<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_WeightedAverageNumberOfSharesOutstandingBasic</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>16
<FILENAME>R5.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082826476704">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Condensed Consolidated Statements of Comprehensive Income (Parenthetical) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncomeStatementAbstract', window );"><strong>Income Statement [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax', window );">Unrealized gain (loss) on investments, tax</a></td>
<td class="nump">$ 133<span></span>
</td>
<td class="num">$ (1)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax', window );">Reclassification of (gain) loss on investments into earnings, tax</a></td>
<td class="num">(125)<span></span>
</td>
<td class="nump">4<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax', window );">Foreign currency translation adjustments</a></td>
<td class="num">(95)<span></span>
</td>
<td class="nump">730<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax', window );">Unrealized gain (loss) on investments, net of tax of $133 and ($1), respectively</a></td>
<td class="nump">399<span></span>
</td>
<td class="num">(3)<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax', window );">Reclassification of (gain) loss on investments into earnings, net of tax</a></td>
<td class="num">$ (376)<span></span>
</td>
<td class="nump">$ 11<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncomeStatementAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncomeStatementAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount before tax, after reclassification adjustments of gain (loss) on foreign currency translation adjustments, foreign currency transactions designated and effective as economic hedges of a net investment in a foreign entity and intra-entity foreign currency transactions that are of a long-term-investment nature.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 10A<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669646-108580<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e637-108580<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after tax of reclassification adjustment from accumulated other comprehensive income for unrealized gain (loss) realized upon the sale of available-for-sale securities.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 15<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e689-108580<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e637-108580<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 320<br> -SubTopic 10<br> -Section 50<br> -Paragraph 9<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126970911&amp;loc=d3e27357-111563<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 17A<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL34724391-108580<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of tax expense (benefit) of reclassification adjustment from accumulated other comprehensive income for unrealized gain (loss) realized upon the sale of available-for-sale securities.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 12<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e640-108580<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 320<br> -SubTopic 10<br> -Section 50<br> -Paragraph 9<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126970911&amp;loc=d3e27357-111563<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount, after tax and before adjustment, of unrealized holding gain (loss) on investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale). Excludes unrealized gain (loss) on investment in debt security measured at amortized cost (held-to-maturity) from transfer to available-for-sale.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 10A<br> -Subparagraph (e)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669646-108580<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e637-108580<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount, before adjustment, of tax expense (benefit) for unrealized holding gain (loss) on investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale). Excludes tax expense (benefit) for unrealized gain (loss) on investment in debt security measured at amortized cost (held-to-maturity) from transfer to available-for-sale.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 12<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e640-108580<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 10A<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669646-108580<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>17
<FILENAME>R6.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824127280">
<tr>
<th class="tl" colspan="1" rowspan="1"><div style="width: 200px;"><strong>Condensed Consolidated Statements of Stockholders' Equity - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th"><div>Total</div></th>
<th class="th"><div>Common Stock</div></th>
<th class="th"><div>Treasury Stock</div></th>
<th class="th"><div>Additional Paid-in Capital</div></th>
<th class="th"><div>Retained Earnings</div></th>
<th class="th"><div>Accumulated Other Comprehensive Loss</div></th>
</tr>
<tr class="rc">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommonStockSharesOutstanding', window );">Beginning balance (in shares) at Dec. 31, 2021</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">36,009,257<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rc">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockholdersEquity', window );">Beginning balance at Dec. 31, 2021</a></td>
<td class="nump">$ 484,259<span></span>
</td>
<td class="nump">$ 38<span></span>
</td>
<td class="num">$ (85,677)<span></span>
</td>
<td class="nump">$ 433,258<span></span>
</td>
<td class="nump">$ 138,087<span></span>
</td>
<td class="num">$ (1,447)<span></span>
</td>
</tr>
<tr class="rc">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockCommonShares', window );">Beginning balance (in shares) at Dec. 31, 2021</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">1,789,353<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward', window );"><strong>Increase (Decrease) in Stockholders' Equity [Roll Forward]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue', window );">Stock-based compensation</a></td>
<td class="nump">8,496<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">8,496<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation', window );">Shares issued pursuant to stock awards (in shares)</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">231,107<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation', window );">Shares issued pursuant to stock awards</a></td>
<td class="nump">504<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">504<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans', window );">Employee stock purchase plan activity (in shares)</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">1,698<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan', window );">Employee stock purchase plan activity</a></td>
<td class="nump">$ 147<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">147<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockSharesAcquired', window );">Repurchases of common stock (in shares)</a></td>
<td class="num">(121,544)<span></span>
</td>
<td class="num">(121,544)<span></span>
</td>
<td class="num">(121,544)<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockValueAcquiredCostMethod', window );">Repurchases of common stock</a></td>
<td class="num">$ (15,226)<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="num">$ (15,226)<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NetIncomeLoss', window );">Net income</a></td>
<td class="nump">12,603<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">12,603<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax', window );">Foreign currency translation adjustments</a></td>
<td class="nump">730<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">730<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax', window );">Unrealized gain (loss) on investments, net of tax</a></td>
<td class="num">(3)<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="num">(3)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax', window );">Reclassification of (gain) loss on investments into earnings, net of tax</a></td>
<td class="nump">11<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">11<span></span>
</td>
</tr>
<tr class="rc">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommonStockSharesOutstanding', window );">Ending balance (in shares) at Mar. 31, 2022</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">36,120,518<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rc">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockholdersEquity', window );">Ending balance at Mar. 31, 2022</a></td>
<td class="nump">$ 491,521<span></span>
</td>
<td class="nump">$ 38<span></span>
</td>
<td class="num">$ (100,903)<span></span>
</td>
<td class="nump">442,405<span></span>
</td>
<td class="nump">150,690<span></span>
</td>
<td class="num">(709)<span></span>
</td>
</tr>
<tr class="rc">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockCommonShares', window );">Ending balance (in shares) at Mar. 31, 2022</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">1,910,897<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rc">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommonStockSharesOutstanding', window );">Beginning balance (in shares) at Dec. 31, 2022</a></td>
<td class="nump">36,158,046<span></span>
</td>
<td class="nump">36,158,046<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rc">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockholdersEquity', window );">Beginning balance at Dec. 31, 2022</a></td>
<td class="nump">$ 537,073<span></span>
</td>
<td class="nump">$ 38<span></span>
</td>
<td class="num">$ (128,892)<span></span>
</td>
<td class="nump">476,117<span></span>
</td>
<td class="nump">193,221<span></span>
</td>
<td class="num">(3,411)<span></span>
</td>
</tr>
<tr class="rc">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockCommonShares', window );">Beginning balance (in shares) at Dec. 31, 2022</a></td>
<td class="nump">2,151,098<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">2,151,098<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward', window );"><strong>Increase (Decrease) in Stockholders' Equity [Roll Forward]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue', window );">Stock-based compensation</a></td>
<td class="nump">$ 11,175<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">11,175<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation', window );">Shares issued pursuant to stock awards (in shares)</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">372,161<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation', window );">Shares issued pursuant to stock awards</a></td>
<td class="nump">2,184<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">2,183<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan', window );">Employee stock purchase plan activity</a></td>
<td class="nump">$ 241<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">241<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockSharesAcquired', window );">Repurchases of common stock (in shares)</a></td>
<td class="nump">0<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockValueAcquiredCostMethod', window );">Repurchases of common stock</a></td>
<td class="nump">$ 0<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NetIncomeLoss', window );">Net income</a></td>
<td class="nump">15,289<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">15,289<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax', window );">Foreign currency translation adjustments</a></td>
<td class="num">(95)<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="num">(95)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax', window );">Unrealized gain (loss) on investments, net of tax</a></td>
<td class="nump">399<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">399<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax', window );">Reclassification of (gain) loss on investments into earnings, net of tax</a></td>
<td class="num">$ (376)<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="num">(376)<span></span>
</td>
</tr>
<tr class="rc">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommonStockSharesOutstanding', window );">Ending balance (in shares) at Mar. 31, 2023</a></td>
<td class="nump">36,532,756<span></span>
</td>
<td class="nump">36,532,756<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rc">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockholdersEquity', window );">Ending balance at Mar. 31, 2023</a></td>
<td class="nump">$ 565,890<span></span>
</td>
<td class="nump">$ 39<span></span>
</td>
<td class="num">$ (128,892)<span></span>
</td>
<td class="nump">$ 489,716<span></span>
</td>
<td class="nump">$ 208,510<span></span>
</td>
<td class="num">$ (3,483)<span></span>
</td>
</tr>
<tr class="rc">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockCommonShares', window );">Ending balance (in shares) at Mar. 31, 2023</a></td>
<td class="nump">2,151,098<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">2,151,098<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of increase to additional paid-in capital (APIC) for recognition of cost for award under share-based payment arrangement.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 20<br> -Section 55<br> -Paragraph 12<br> -URI https://asc.fasb.org/extlink&amp;oid=126964447&amp;loc=d3e11149-113907<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 20<br> -Section 55<br> -Paragraph 13<br> -URI https://asc.fasb.org/extlink&amp;oid=126964447&amp;loc=d3e11178-113907<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 35<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126961718&amp;loc=d3e4534-113899<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommonStockSharesOutstanding">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of shares of common stock outstanding. Common stock represent the ownership interest in a corporation.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=d3e21463-112644<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommonStockSharesOutstanding</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncreaseDecreaseInStockholdersEquityRollForward">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>A roll forward is a reconciliation of a concept from the beginning of a period to the end of a period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncreaseDecreaseInStockholdersEquityRollForward</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NetIncomeLoss">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The portion of profit or loss for the period, net of income taxes, which is attributable to the parent.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-04(22))<br> -URI https://asc.fasb.org/extlink&amp;oid=120399700&amp;loc=SL114874048-224260<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22595-107794<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-04(18))<br> -URI https://asc.fasb.org/extlink&amp;oid=120400993&amp;loc=SL114874131-224263<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 65<br> -Paragraph 1<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126732423&amp;loc=SL123482106-238011<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=124431353&amp;loc=SL124452729-227067<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 8: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(20))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br><br>Reference 9: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (b)(2)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22499-107794<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 9<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22663-107794<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 17: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 18: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br><br>Reference 19: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22583-107794<br><br>Reference 20: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 21: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 60B<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=SL5780133-109256<br><br>Reference 22: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br><br>Reference 23: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 8<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22658-107794<br><br>Reference 24: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1A<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669619-108580<br><br>Reference 25: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 31<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8924-108599<br><br>Reference 26: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 27: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 28: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 205<br> -SubTopic 20<br> -Section 50<br> -Paragraph 7<br> -URI https://asc.fasb.org/extlink&amp;oid=109222650&amp;loc=SL51721683-107760<br><br>Reference 29: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1B<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669625-108580<br><br>Reference 30: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 31: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 32: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(B))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 33: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 34: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 30<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8906-108599<br><br>Reference 35: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NetIncomeLoss</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount before tax, after reclassification adjustments of gain (loss) on foreign currency translation adjustments, foreign currency transactions designated and effective as economic hedges of a net investment in a foreign entity and intra-entity foreign currency transactions that are of a long-term-investment nature.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 10A<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669646-108580<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e637-108580<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after tax of reclassification adjustment from accumulated other comprehensive income for unrealized gain (loss) realized upon the sale of available-for-sale securities.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 15<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e689-108580<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e637-108580<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 320<br> -SubTopic 10<br> -Section 50<br> -Paragraph 9<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126970911&amp;loc=d3e27357-111563<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 17A<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL34724391-108580<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount, after tax and before adjustment, of unrealized holding gain (loss) on investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale). Excludes unrealized gain (loss) on investment in debt security measured at amortized cost (held-to-maturity) from transfer to available-for-sale.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 10A<br> -Subparagraph (e)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669646-108580<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=d3e637-108580<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of shares issued during the period as a result of an employee stock purchase plan.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=d3e21463-112644<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.3-04)<br> -URI https://asc.fasb.org/extlink&amp;oid=120397183&amp;loc=d3e187085-122770<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(28))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number, after forfeiture, of shares or units issued under share-based payment arrangement. Excludes shares or units issued under employee stock ownership plan (ESOP).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=d3e21463-112644<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.3-04)<br> -URI https://asc.fasb.org/extlink&amp;oid=120397183&amp;loc=d3e187085-122770<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(28))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Aggregate change in value for stock issued during the period as a result of employee stock purchase plan.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.3-04)<br> -URI https://asc.fasb.org/extlink&amp;oid=120397183&amp;loc=d3e187085-122770<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(28))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=d3e21463-112644<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Value, after forfeiture, of shares issued under share-based payment arrangement. Excludes employee stock ownership plan (ESOP).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.3-04)<br> -URI https://asc.fasb.org/extlink&amp;oid=120397183&amp;loc=d3e187085-122770<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(28))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (d)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StockholdersEquity">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Total of all stockholders' equity (deficit) items, net of receivables from officers, directors, owners, and affiliates of the entity which are attributable to the parent. The amount of the economic entity's stockholders' equity attributable to the parent excludes the amount of stockholders' equity which is allocable to that ownership interest in subsidiary equity which is not attributable to the parent (noncontrolling interest, minority interest). This excludes temporary equity and is sometimes called permanent equity.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 310<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SAB Topic 4.E)<br> -URI https://asc.fasb.org/extlink&amp;oid=122038336&amp;loc=d3e74512-122707<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(31))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 5: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 6: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(30))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 7: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br><br>Reference 8: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StockholdersEquity</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_TreasuryStockCommonShares">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of previously issued common shares repurchased by the issuing entity and held in treasury.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6405813&amp;loc=d3e23239-112655<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_TreasuryStockCommonShares</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_TreasuryStockSharesAcquired">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of shares that have been repurchased during the period and are being held in treasury.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=d3e21463-112644<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.3-04)<br> -URI https://asc.fasb.org/extlink&amp;oid=120397183&amp;loc=d3e187085-122770<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_TreasuryStockSharesAcquired</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_TreasuryStockValueAcquiredCostMethod">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Equity impact of the cost of common and preferred stock that were repurchased during the period. Recorded using the cost method.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=d3e21463-112644<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6405813&amp;loc=d3e23239-112655<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.3-04)<br> -URI https://asc.fasb.org/extlink&amp;oid=120397183&amp;loc=d3e187085-122770<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_TreasuryStockValueAcquiredCostMethod</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>18
<FILENAME>R7.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824384208">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Condensed Consolidated Statements of Cash Flows<br> $ in Thousands</strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th">
<div>Mar. 31, 2023 </div>
<div>USD ($)</div>
</th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract', window );"><strong>Cash flows from operating activities</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NetIncomeLoss', window );">Net income</a></td>
<td class="nump">$ 15,289<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract', window );"><strong>Reconciliation of net income to net cash provided by operating activities</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DeferredIncomeTaxExpenseBenefit', window );">Deferred income taxes</a></td>
<td class="num">(5,147)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DepreciationDepletionAndAmortization', window );">Depreciation and amortization of property and equipment</a></td>
<td class="nump">4,626<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AmortizationOfIntangibleAssets', window );">Amortization of intangible assets</a></td>
<td class="nump">3,851<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ProvisionForDoubtfulAccounts', window );">Provision for credit losses</a></td>
<td class="nump">1,206<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensation', window );">Stock-based compensation</a></td>
<td class="nump">11,780<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherNoncashIncomeExpense', window );">Other, net</a></td>
<td class="nump">502<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract', window );"><strong>Changes in assets and liabilities</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncreaseDecreaseInAccountsReceivable', window );">Accounts receivable</a></td>
<td class="num">(6,220)<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncreaseDecreaseInDeferredCharges', window );">Deferred costs</a></td>
<td class="num">(1,679)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncreaseDecreaseInOtherOperatingAssets', window );">Other current and non-current assets</a></td>
<td class="nump">602<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncreaseDecreaseInAccountsPayable', window );">Accounts payable</a></td>
<td class="num">(4,849)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities', window );">Accrued compensation</a></td>
<td class="num">(4,417)<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncreaseDecreaseInAccruedLiabilities', window );">Accrued expenses</a></td>
<td class="nump">721<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncreaseDecreaseInContractWithCustomerLiability', window );">Deferred revenue</a></td>
<td class="nump">5,818<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_IncreaseDecreaseInOperatingLeases', window );">Operating leases</a></td>
<td class="num">(452)<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NetCashProvidedByUsedInOperatingActivities', window );">Net cash provided by operating activities</a></td>
<td class="nump">21,631<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract', window );"><strong>Cash flows from investing activities</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment', window );">Purchases of property and equipment</a></td>
<td class="num">(5,261)<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PaymentsToAcquireOtherInvestments', window );">Purchases of investments</a></td>
<td class="num">(34,329)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities', window );">Maturities of investments</a></td>
<td class="nump">35,000<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NetCashProvidedByUsedInInvestingActivities', window );">Net cash provided by (used in) investing activities</a></td>
<td class="num">(4,590)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract', window );"><strong>Cash flows from financing activities</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PaymentsForRepurchaseOfCommonStock', window );">Repurchases of common stock</a></td>
<td class="nump">0<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ProceedsFromStockOptionsExercised', window );">Net proceeds from exercise of options to purchase common stock</a></td>
<td class="nump">2,184<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ProceedsFromStockPlans', window );">Net proceeds from employee stock purchase plan activity</a></td>
<td class="nump">241<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NetCashProvidedByUsedInFinancingActivities', window );">Net cash provided by (used in) financing activities</a></td>
<td class="nump">2,425<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations', window );">Effect of foreign currency exchange rate changes</a></td>
<td class="num">(55)<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect', window );">Net increase (decrease) in cash and cash equivalents</a></td>
<td class="nump">19,411<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations', window );">Cash and cash equivalents at beginning of period</a></td>
<td class="nump">162,893<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations', window );">Cash and cash equivalents at end of period</a></td>
<td class="nump">$ 182,304<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_IncreaseDecreaseInOperatingLeases">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Increase decrease in operating leases.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_IncreaseDecreaseInOperatingLeases</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AmortizationOfIntangibleAssets">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The aggregate expense charged against earnings to allocate the cost of intangible assets (nonphysical assets not used in production) in a systematic and rational manner to the periods expected to benefit from such assets. As a noncash expense, this element is added back to net income when calculating cash provided by or used in operations using the indirect method.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(2)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 45<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=6388964&amp;loc=d3e16225-109274<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AmortizationOfIntangibleAssets</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of cash and cash equivalents, and cash and cash equivalents restricted to withdrawal or usage; including, but not limited to, disposal group and discontinued operations. Cash includes, but is not limited to, currency on hand, demand deposits with banks or financial institutions, and other accounts with general characteristics of demand deposits. Cash equivalents include, but are not limited to, short-term, highly liquid investments that are both readily convertible to known amounts of cash and so near their maturity that they present insignificant risk of changes in value because of changes in interest rates.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 50<br> -Paragraph 8<br> -URI https://asc.fasb.org/extlink&amp;oid=126999549&amp;loc=SL98516268-108586<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 24<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3521-108585<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3044-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of increase (decrease) in cash, cash equivalents, and cash and cash equivalents restricted to withdrawal or usage; including effect from exchange rate change. Cash includes, but is not limited to, currency on hand, demand deposits with banks or financial institutions, and other accounts with general characteristics of demand deposits. Cash equivalents include, but are not limited to, short-term, highly liquid investments that are both readily convertible to known amounts of cash and so near their maturity that they present insignificant risk of changes in value because of changes in interest rates.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 830<br> -SubTopic 230<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=123444420&amp;loc=d3e33268-110906<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 24<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3521-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DeferredIncomeTaxExpenseBenefit">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of deferred income tax expense (benefit) pertaining to income (loss) from continuing operations.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SAB Topic 6.I.7)<br> -URI https://asc.fasb.org/extlink&amp;oid=122134291&amp;loc=d3e330036-122817<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SAB Topic 6.I.Fact.1)<br> -URI https://asc.fasb.org/extlink&amp;oid=122134291&amp;loc=d3e330036-122817<br><br>Reference 3: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(h)(1)(Note 1))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SAB Topic 6.I.Fact.2)<br> -URI https://asc.fasb.org/extlink&amp;oid=122134291&amp;loc=d3e330036-122817<br><br>Reference 5: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section 50<br> -Paragraph 9<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=121826272&amp;loc=d3e32639-109319<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DeferredIncomeTaxExpenseBenefit</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DepreciationDepletionAndAmortization">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The aggregate expense recognized in the current period that allocates the cost of tangible assets, intangible assets, or depleting assets to periods that benefit from use of the assets.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -Subparagraph (e)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DepreciationDepletionAndAmortization</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of increase (decrease) from effect of exchange rate changes on cash and cash equivalents, and cash and cash equivalents restricted to withdrawal or usage; held in foreign currencies; including, but not limited to, disposal group and discontinued operations. Cash includes, but is not limited to, currency on hand, demand deposits with banks or financial institutions, and other accounts with general characteristics of demand deposits. Cash equivalents include, but are not limited to, short-term, highly liquid investments that are both readily convertible to known amounts of cash and so near their maturity that they present insignificant risk of changes in value because of changes in interest rates.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 830<br> -SubTopic 230<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=123444420&amp;loc=d3e33268-110906<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncreaseDecreaseInAccountsPayable">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The increase (decrease) during the reporting period in the aggregate amount of liabilities incurred (and for which invoices have typically been received) and payable to vendors for goods and services received that are used in an entity's business.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncreaseDecreaseInAccountsPayable</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncreaseDecreaseInAccountsReceivable">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The increase (decrease) during the reporting period in amount due within one year (or one business cycle) from customers for the credit sale of goods and services.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncreaseDecreaseInAccountsReceivable</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncreaseDecreaseInAccruedLiabilities">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The increase (decrease) during the reporting period in the aggregate amount of expenses incurred but not yet paid.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncreaseDecreaseInAccruedLiabilities</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncreaseDecreaseInContractWithCustomerLiability">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of increase (decrease) in obligation to transfer good or service to customer for which consideration has been received or is receivable.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 912<br> -SubTopic 310<br> -Section 45<br> -Paragraph 11<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126938201&amp;loc=d3e55415-109406<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncreaseDecreaseInContractWithCustomerLiability</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncreaseDecreaseInDeferredCharges">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The increase (decrease) during the reporting period in the value of expenditures made during the current reporting period for benefits that will be received over a period of years. Deferred charges differ from prepaid expenses in that they usually extend over a long period of time and may or may not be regularly recurring costs of operation.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncreaseDecreaseInDeferredCharges</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The increase (decrease) during the reporting period in the aggregate amount of obligations related to services received from employees, such as accrued salaries and bonuses, payroll taxes and fringe benefits.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncreaseDecreaseInOperatingCapitalAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncreaseDecreaseInOperatingCapitalAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncreaseDecreaseInOtherOperatingAssets">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of increase (decrease) in operating assets classified as other.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncreaseDecreaseInOtherOperatingAssets</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NetCashProvidedByUsedInFinancingActivities">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of cash inflow (outflow) from financing activities, including discontinued operations. Financing activity cash flows include obtaining resources from owners and providing them with a return on, and a return of, their investment; borrowing money and repaying amounts borrowed, or settling the obligation; and obtaining and paying for other resources obtained from creditors on long-term credit.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 24<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3521-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NetCashProvidedByUsedInFinancingActivities</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NetCashProvidedByUsedInInvestingActivities">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of cash inflow (outflow) from investing activities, including discontinued operations. Investing activity cash flows include making and collecting loans and acquiring and disposing of debt or equity instruments and property, plant, and equipment and other productive assets.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 24<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3521-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NetCashProvidedByUsedInInvestingActivities</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NetCashProvidedByUsedInOperatingActivities">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of cash inflow (outflow) from operating activities, including discontinued operations. Operating activity cash flows include transactions, adjustments, and changes in value not defined as investing or financing activities.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 25<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3536-108585<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 24<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3521-108585<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NetCashProvidedByUsedInOperatingActivities</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NetIncomeLoss">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The portion of profit or loss for the period, net of income taxes, which is attributable to the parent.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-04(22))<br> -URI https://asc.fasb.org/extlink&amp;oid=120399700&amp;loc=SL114874048-224260<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22595-107794<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-04(18))<br> -URI https://asc.fasb.org/extlink&amp;oid=120400993&amp;loc=SL114874131-224263<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 65<br> -Paragraph 1<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126732423&amp;loc=SL123482106-238011<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=124431353&amp;loc=SL124452729-227067<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 8: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(20))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br><br>Reference 9: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (b)(2)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22499-107794<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 9<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22663-107794<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 17: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 18: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br><br>Reference 19: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22583-107794<br><br>Reference 20: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 21: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 60B<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=SL5780133-109256<br><br>Reference 22: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br><br>Reference 23: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 8<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22658-107794<br><br>Reference 24: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1A<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669619-108580<br><br>Reference 25: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 31<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8924-108599<br><br>Reference 26: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 27: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 28: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 205<br> -SubTopic 20<br> -Section 50<br> -Paragraph 7<br> -URI https://asc.fasb.org/extlink&amp;oid=109222650&amp;loc=SL51721683-107760<br><br>Reference 29: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1B<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669625-108580<br><br>Reference 30: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 31: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 32: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(B))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 33: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 34: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 30<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8906-108599<br><br>Reference 35: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NetIncomeLoss</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherNoncashIncomeExpense">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of income (expense) included in net income that results in no cash inflow (outflow), classified as other.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherNoncashIncomeExpense</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PaymentsForRepurchaseOfCommonStock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The cash outflow to reacquire common stock during the period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 15<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3291-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PaymentsForRepurchaseOfCommonStock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PaymentsToAcquireOtherInvestments">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of cash outflow to acquire investments classified as other.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 13<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3213-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PaymentsToAcquireOtherInvestments</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PaymentsToAcquirePropertyPlantAndEquipment">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The cash outflow associated with the acquisition of long-lived, physical assets that are used in the normal conduct of business to produce goods and services and not intended for resale; includes cash outflows to pay for construction of self-constructed assets.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 13<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3213-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PaymentsToAcquirePropertyPlantAndEquipment</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of cash inflow from sale, maturity, prepayment and call of investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3151-108585<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 12<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3179-108585<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 320<br> -SubTopic 10<br> -Section 45<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=124260329&amp;loc=d3e26853-111562<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ProceedsFromStockOptionsExercised">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of cash inflow from exercise of option under share-based payment arrangement.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2A<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=SL79508275-113901<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 14<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3255-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ProceedsFromStockOptionsExercised</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ProceedsFromStockPlans">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The cash inflow associated with the amount received from the stock plan during the period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 14<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3255-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ProceedsFromStockPlans</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ProvisionForDoubtfulAccounts">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of expense (reversal of expense) for expected credit loss on accounts receivable.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 326<br> -SubTopic 20<br> -Section 50<br> -Paragraph 13<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124255953&amp;loc=SL82919249-210447<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ProvisionForDoubtfulAccounts</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensation">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of noncash expense for share-based payment arrangement.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensation</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>19
<FILENAME>R8.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824173168">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>General<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract', window );"><strong>Organization, Consolidation and Presentation of Financial Statements [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock', window );">General</a></td>
<td class="text">General<div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Business Description</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">SPS Commerce is a leading provider of cloud-based supply chain management services across our global retail network. Our products make it easier for retailers, grocers, distributors, suppliers, and logistics firms to communicate and collaborate by simplifying how they manage and share item, inventory, order and sales data across omnichannel retail channels. We deliver our products using a full-service model, which includes industry-leading technology and a team of experts that optimize, update, and operate the technology on customers' behalf.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our products enable customers to increase supply chain performance, optimize inventory levels and sell-through, reduce operational costs, improve order visibility, and satisfy consumer demands for a seamless omnichannel experience.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Basis of Presentation</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The accompanying unaudited condensed consolidated financial statements have been prepared in conformity with accounting principles generally accepted in the United States of America (&#8220;GAAP&#8221;) and include the accounts of SPS Commerce, Inc. and its subsidiaries. All intercompany accounts and transactions have been eliminated in the condensed consolidated financial statements. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">This interim financial information has been prepared under the instructions to Form 10-Q and Rule 10-01 of Regulation S-X. Accordingly, these condensed consolidated financial statements do not include all of the information and notes required by GAAP. Therefore, these condensed consolidated financial statements should be read in conjunction with the consolidated financial statements and notes included in our Annual Report on Form 10-K for the year ended December&#160;31, 2022, as filed with the Securities and Exchange Commission (&#8220;SEC&#8221;). We have included all normal recurring adjustments considered necessary to provide a fair presentation of our financial position, results of operations, stockholders&#8217; equity, and cash flows for the interim periods presented. Operating results for these interim periods are not necessarily indicative of the results to be expected for the full year.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Use of Estimates</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Preparing financial statements in conformity with GAAP requires management to make estimates, judgments, and assumptions that affect the reported amounts of assets and liabilities, disclosure of contingent assets and liabilities at the date of the financial statements, and the reported amounts of revenues and expenses during the reporting periods. Actual results could differ from those estimates.</span></div><div style="margin-top:12pt"><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Significant Accounting Policies</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">There were no material changes in our significant accounting policies during the three months ended March&#160;31, 2023. See Note A to the consolidated financial statements included in our Annual Report on Form 10-K for the year ended </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">December&#160;31, 2022</span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">, as filed with the SEC, for additional information regarding our significant accounting policies.</span></div><div style="margin-top:12pt"><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Accounting Pronouncements Recently Adopted</span><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:20.566%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:11.172%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:29.960%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.384%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:20.418%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Standard</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Date of Issuance</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Description</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Date of Adoption</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Effect on the Financial Statements</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:top"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:115%">ASU 2021-08, </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%">Business Combinations (Topic 805) - Accounting for Contract Assets and Contract Liabilities from Contracts with Customers</span></div></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">October 2021</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">This amendment requires that an acquirer recognize and measure contract assets and contract liabilities acquired in a business combination in accordance with Topic 606, effective for all business combinations in the year of adoption and thereafter.<br/></span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">January 2023</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">The adoption of this standard may have a material impact on the purchase accounting for future business combinations depending on the specific amount of contract assets and liabilities being acquired.</span></td></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure for organization, consolidation and basis of presentation of financial statements disclosure.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 205<br> -URI https://asc.fasb.org/topic&amp;trid=2122149<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 810<br> -URI https://asc.fasb.org/topic&amp;trid=2197479<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>20
<FILENAME>R9.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824450624">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Business Acquisitions<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BusinessCombinationAndAssetAcquisitionAbstract', window );"><strong>Business Combination and Asset Acquisition [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BusinessCombinationDisclosureTextBlock', window );">Business Acquisitions</a></td>
<td class="text">Business Acquisitions<div style="margin-top:12pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%;text-decoration:underline">GCommerce</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Effective July 19, 2022, we acquired all of the outstanding equity ownership interests of GCommerce, Inc. ("GCommerce"), a leading EDI provider within the automotive aftermarket industry. Pursuant to the definitive agreement, the purchase price was $45.1&#160;million, including post-closing adjustments. The purchase accounting for the acquisition has not been finalized as of March 31, 2023 due primarily to provisional tax components and corresponding impacts to other items, including intangible assets. We expect to finalize the allocation of the purchase price within the one-year measurement period following the acquisition. During the quarter ended March 31, 2023, provisional amounts were adjusted by $1.6&#160;million, primarily relating to a $1.5&#160;million decrease in the estimated value of deferred income tax assets, with the corresponding offset to goodwill. </span></div><div style="margin-top:12pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%;text-decoration:underline">InterTrade</span></div><div style="margin-top:12pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Effective October 4, 2022, we acquired all of the outstanding equity ownership interests of Canadian based InterTrade Systems Inc. ("InterTrade"), a leading EDI provider within the apparel and general merchandising markets. Pursuant to the definitive agreement, the purchase price was $49.1&#160;million, including estimated post-closing adjustments. The purchase accounting for the acquisition has not been finalized as of March 31, 2023 due to various items including valuation modeling completion; provisional amounts are primarily related to intangible assets. We expect to finalize the allocation of the purchase price within the one-year measurement period following the acquisition. During the quarter ended March 31, 2023, there were no material changes to the provisional amounts.</span></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_BusinessCombinationAndAssetAcquisitionAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_BusinessCombinationAndAssetAcquisitionAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_BusinessCombinationDisclosureTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure for a business combination (or series of individually immaterial business combinations) completed during the period, including background, timing, and recognized assets and liabilities. The disclosure may include leverage buyout transactions (as applicable).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 805<br> -URI https://asc.fasb.org/topic&amp;trid=2303972<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 805<br> -SubTopic 20<br> -Section 50<br> -Paragraph 5<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=128092470&amp;loc=d3e4946-128472<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_BusinessCombinationDisclosureTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>21
<FILENAME>R10.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082827442192">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Revenue<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerAbstract', window );"><strong>Revenue from Contract with Customer [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerTextBlock', window );">Revenue</a></td>
<td class="text">Revenue <div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We derive our revenues from the following revenue streams:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.545%"><tr><td style="width:1.0%"/><td style="width:71.807%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.142%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.408%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.143%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Recurring revenues:</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Fulfillment</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">101,668&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">84,731&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Analytics</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,370&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">11,296&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Other</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,263&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,540&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Recurring revenues</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">117,301&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">97,567&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">One-time revenues</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">8,567&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">7,626&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total revenue</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">125,868&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">105,193&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Revenues are the amount that reflects the consideration we are contractually and legally entitled to, as well as the amount we expect to collect, in exchange for those services.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Recurring Revenues</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Recurring revenues consist of recurring subscriptions from customers that utilize our Fulfillment, Analytics, and Other supply chain management products. Revenue for these products is generally recognized on a ratable basis over the contract term beginning on the date that our service is made available to the customer. Our contracts with our recurring revenue customers are recurring in nature, generally ranging from monthly to annual, and generally allow the customer to cancel the contract for any reason with 30 to 90 days&#8217; notice. Timing of billings varies by customer and by contract type and generally are either in advance or within 30 days of the service being performed.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Given that the recurring revenue contracts are for one year or less, we have applied the optional exemption to not disclose information about the remaining performance obligations for recurring revenue contracts.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">One-time Revenues</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">One-time revenues consist of set-up fees and miscellaneous fees from customers.</span></div><div style="margin-top:9pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">Set-up revenues</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Set-up fees are specific for each connection a customer has with a trading partner. These nonrefundable fees are necessary for our customers to utilize our services and do not provide any standalone value. Many of our customers have connections with numerous trading partners.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Set-up fees constitute a material renewal option right that provide customers a significant future incentive that would not be otherwise available to that customer unless they entered into the contract, as the set-up fees will not be incurred again upon contract renewal. As such, set-up fees and related costs are deferred and recognized ratably over two years which is the estimated period for which a material right is present for our customers.</span></div><div style="margin-top:6pt;padding-left:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The table below presents the activity of the portion of the deferred revenue liability relating to set-up fees: </span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.090%"><tr><td style="width:1.0%"/><td style="width:71.682%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.202%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.411%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.205%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, beginning of period</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">14,999&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">14,459&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Invoiced set-up fees</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,251&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,003&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Recognized set-up fees</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(3,963)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(3,524)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, end of period</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">15,287&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">14,938&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The entire balance of deferred set-up fees will be recognized within two years. Those that will be recognized within the next year are classified as current, whereas the remainder are classified as non-current.</span></div><div style="margin-top:9pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%">Miscellaneous one-time revenues</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Miscellaneous one-time fees consist of professional services and testing and certification. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The contract period for these one-time fees is for one year or less and recognized at the time service is provided. We have applied the optional exemption to not disclose information about the remaining performance obligations for miscellaneous one-time fee contracts since they have original durations of one year or less.</span></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_RevenueFromContractWithCustomerAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_RevenueFromContractWithCustomerAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_RevenueFromContractWithCustomerTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure of revenue from contract with customer to transfer good or service and to transfer nonfinancial asset. Includes, but is not limited to, disaggregation of revenue, credit loss recognized from contract with customer, judgment and change in judgment related to contract with customer, and asset recognized from cost incurred to obtain or fulfill contract with customer. Excludes insurance and lease contracts.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -URI https://asc.fasb.org/topic&amp;trid=49130388<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130551-203045<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 13<br> -Subparagraph (b)(2)<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130556-203045<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 12<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130554-203045<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 9<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130550-203045<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 12<br> -Subparagraph (e)<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130554-203045<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 12<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130554-203045<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 12<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130554-203045<br><br>Reference 9: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 15<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130558-203045<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 12<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130554-203045<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_RevenueFromContractWithCustomerTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>22
<FILENAME>R11.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082827288768">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Deferred Costs<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DeferredCostsAbstract', window );"><strong>Deferred Costs [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_DeferredCostsDisclosureTextBlock', window );">Deferred Costs</a></td>
<td class="text">Deferred Costs<div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The deferred costs activity was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.696%"><tr><td style="width:1.0%"/><td style="width:71.848%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.121%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.407%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.124%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, beginning of period</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">70,179&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">59,720&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Incurred deferred costs</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">18,234&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">17,781&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Amortized deferred costs</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(16,604)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(14,891)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, end of period</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">71,809&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">62,610&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_DeferredCostsDisclosureTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Deferred costs.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_DeferredCostsDisclosureTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DeferredCostsAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DeferredCostsAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>23
<FILENAME>R12.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082826120000">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Fair Value Measurements<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FairValueDisclosuresAbstract', window );"><strong>Fair Value Disclosures [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FinancialInstrumentsDisclosureTextBlock', window );">Fair Value Measurements</a></td>
<td class="text">Fair Value Measurements<div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Cash Equivalents and Investments</span></div><div style="margin-top:6pt;text-indent:27pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Cash equivalents and investments, as measured at fair value on a recurring basis, consisted of the following:</span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:25.869%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:6.778%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:9.051%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:9.051%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:9.051%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:9.051%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:9.051%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:9.056%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31, 2023</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="padding:0 1pt 0 13pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Fair Value Level</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Amortized Cost</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Unrealized Gains (Losses), net</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Fair Value</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Amortized Cost</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Unrealized Gains (Losses), net</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Fair Value</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">(in thousands)</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%">Cash equivalents:</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Money market funds</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Level 1</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">94,284&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">94,284&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">73,368&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">73,368&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%">Investments:</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Certificates of deposit</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Level 1</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">6,687&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">6,687&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">6,813&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6,813&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Marketable securities:</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Commercial paper</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Level 2</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">34,228&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">353&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">34,581&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">44,224&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">375&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">44,599&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">U.S. treasury securities</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Level 2</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">9,827&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">51&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">9,878&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:0 1pt 0 13pt"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">145,026&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">404&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">145,430&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">124,405&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">375&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">124,780&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FairValueDisclosuresAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FairValueDisclosuresAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FinancialInstrumentsDisclosureTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure for financial instruments. This disclosure includes, but is not limited to, fair value measurements of short and long term marketable securities, international currencies forward contracts, and auction rate securities. Financial instruments may include hedging and non-hedging currency exchange instruments, derivatives, securitizations and securities available for sale at fair value. Also included are investment results, realized and unrealized gains and losses as well as impairments and risk management disclosures.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FinancialInstrumentsDisclosureTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>24
<FILENAME>R13.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082827288768">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Allowance for Credit Losses<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllowanceForCreditLossAbstract', window );"><strong>Allowance for Credit Loss [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllowanceForCreditLossesTextBlock', window );">Allowance for Credit Losses</a></td>
<td class="text">Allowance for Credit Losses<div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The allowance for credit losses activity, included in accounts receivable, net, was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, beginning of period</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,066&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,249&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Provision for credit losses</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,206&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,144&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Write-offs, net of recoveries</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(1,055)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(1,106)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, end of period</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,217&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,287&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AllowanceForCreditLossAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AllowanceForCreditLossAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AllowanceForCreditLossesTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure for allowance for credit losses.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 310<br> -URI https://asc.fasb.org/topic&amp;trid=2196771<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AllowanceForCreditLossesTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>25
<FILENAME>R14.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082829448480">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Property and Equipment, Net<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentAbstract', window );"><strong>Property, Plant and Equipment [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock', window );">Property and Equipment, Net</a></td>
<td class="text">Property and Equipment, Net<span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Property and equipment, net consisted of the following:</span><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:72.384%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.557%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:11.475%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:11.478%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31,<br/>2023</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Internally developed software</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">53,530&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">49,994&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Computer equipment</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">30,601&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">30,310&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Leasehold improvements</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">16,603&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">16,531&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Office equipment and furniture</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">11,113&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">10,981&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Property and equipment, cost</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">111,847&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">107,816&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Less: accumulated depreciation and amortization</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(76,769)</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(72,358)</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total property and equipment, net</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">35,078&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">35,458&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PropertyPlantAndEquipmentAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PropertyPlantAndEquipmentAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure for long-lived, physical asset used in normal conduct of business and not intended for resale. Includes, but is not limited to, work of art, historical treasure, and similar asset classified as collections.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 958<br> -SubTopic 360<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=126982197&amp;loc=d3e99893-112916<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 360<br> -URI https://asc.fasb.org/topic&amp;trid=2155823<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 958<br> -SubTopic 360<br> -Section 50<br> -Paragraph 7<br> -URI https://asc.fasb.org/extlink&amp;oid=126982197&amp;loc=SL120174063-112916<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 958<br> -SubTopic 360<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126982197&amp;loc=d3e99779-112916<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>26
<FILENAME>R15.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082826120000">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Goodwill and Intangible Assets, Net<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract', window );"><strong>Goodwill and Intangible Assets Disclosure [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock', window );">Goodwill and Intangible Assets, Net</a></td>
<td class="text">Goodwill and Intangible Assets, Net<div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Goodwill</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The activity in goodwill was as follows:</span><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:85.718%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.082%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, beginning of period</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">197,284&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Foreign currency translation</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(71)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Remeasurement from provisional purchase accounting amount</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,788&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, end of period</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">199,001&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Intangible Assets</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Intangible assets, net consisted of the following:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:30.566%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.086%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31, 2023</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">($ in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Gross<br/>Carrying<br/>Amount</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Accumulated <br/>Amortization </span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Foreign<br/>Currency <br/>Translation</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Net</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Weighted Average Remaining Amortization Period</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Subscriber relationships</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">79,385&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(24,205)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">29&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">55,209&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6.6 years</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Acquired technology</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">40,612&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(11,292)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">7&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">29,327&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">5.5 years</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">119,997&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(35,497)</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">84,536&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6.2 years</span></td></tr></table></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:30.566%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.086%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">($ in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Gross<br/>Carrying<br/>Amount</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Accumulated <br/>Amortization </span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Foreign<br/>Currency <br/>Translation</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Net</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Weighted Average Remaining Amortization Period</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Subscriber relationships</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">80,101&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(22,255)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(171)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">57,675&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6.8 years</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Acquired technology</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">40,610&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(9,934)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">30,677&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">5.7 years</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">120,711&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(32,189)</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(170)</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">88,352&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6.4 years</span></td></tr></table></div><div><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:3pt;font-weight:700;line-height:120%"> </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The estimated future annual amortization expense related to intangible assets is as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:85.718%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.082%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Remainder of 2023</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">11,450&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2024</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">14,102&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2025</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">13,964&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2026</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,960&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2027</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,497&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Thereafter</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">19,563&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total future amortization</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">84,536&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure for goodwill and intangible assets.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -URI https://asc.fasb.org/topic&amp;trid=2144416<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>27
<FILENAME>R16.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082826008608">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Commitments and Contingencies<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommitmentsAndContingenciesDisclosureAbstract', window );"><strong>Commitments and Contingencies Disclosure [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommitmentsAndContingenciesDisclosureTextBlock', window );">Commitments and Contingencies</a></td>
<td class="text">Commitments and Contingencies<div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Leases</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The components of lease expense were as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:98.181%"><tr><td style="width:1.0%"/><td style="width:71.430%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.325%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.417%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.328%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating lease cost</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">798&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">759&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Variable lease cost</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">928&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">793&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,726&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,552&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Supplemental cash flow information related to leases was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cash paid for amounts included in the measurement of lease liabilities</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating cash flows from operating leases</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,247&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,095&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Supplemental balance sheet information related to operating leases was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31,<br/>2023</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted-average remaining lease term</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3.8 years</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3.9 years</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted-average discount rate</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4.0&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4.0&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">At March&#160;31, 2023, our future minimum payments under operating leases were as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:85.718%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.082%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="padding:0 1pt"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Remainder of 2023</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,847&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2024</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,471&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2025</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,081&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2026</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,763&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2027</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,266&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total future gross payments</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">17,428&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Less: imputed interest</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(1,313)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total operating lease liabilities</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">16,115&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Purchase Commitments</span></div>We have entered into separate noncancelable agreements with computing infrastructure, customer relationship management, and performance and security data analytics vendors for services through 2025. At March&#160;31, 2023, the total remaining purchase commitments were $4.3 million<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommitmentsAndContingenciesDisclosureAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommitmentsAndContingenciesDisclosureAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommitmentsAndContingenciesDisclosureTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure for commitments and contingencies.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 440<br> -URI https://asc.fasb.org/topic&amp;trid=2144648<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 954<br> -SubTopic 440<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=6491277&amp;loc=d3e6429-115629<br><br>Reference 3: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 450<br> -URI https://asc.fasb.org/topic&amp;trid=2127136<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 440<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=123406679&amp;loc=d3e25336-109308<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 440<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=123406679&amp;loc=d3e25336-109308<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommitmentsAndContingenciesDisclosureTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>28
<FILENAME>R17.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825840512">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stockholders' Equity<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EquityAbstract', window );"><strong>Equity [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockholdersEquityNoteDisclosureTextBlock', window );">Stockholders' Equity</a></td>
<td class="text">Stockholders&#8217; Equity<div style="margin-top:12pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Share</span><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"> Repurchase Programs</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our board of directors has authorized multiple non-concurrent programs to repurchase our common stock. Details of the programs and activity thereunder through </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023 were as follows:</span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:13.293%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:13.142%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.839%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.839%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.839%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.843%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Effective Date</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Expiration Date</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Share Value Authorized for Repurchase</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Share Value Repurchased</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Unused &amp; Expired Share Repurchase Value</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Share Value Available for Future Repurchase</span></td></tr><tr><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2021 Program</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">November 2021</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">August 2022</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">50,000</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">49,992&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">8&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">N/A</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2022 Program</span></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">August 2022</span></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">July 2024</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">50,000</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,992&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">N/A</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">47,008&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="background-color:#ffffff;color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">share</span><span style="background-color:#ffffff;color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">repurchase activity by period was as follows:</span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:69.354%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:13.900%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.840%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except shares and per share amounts)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Number of shares repurchased</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">121,544&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Shares repurchased cost</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">15,226&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Average price per repurchased share</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">125.27&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EquityAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EquityAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StockholdersEquityNoteDisclosureTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure for shareholders' equity comprised of portions attributable to the parent entity and noncontrolling interest, including other comprehensive income. Includes, but is not limited to, balances of common stock, preferred stock, additional paid-in capital, other capital and retained earnings, accumulated balance for each classification of other comprehensive income and amount of comprehensive income.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -URI https://asc.fasb.org/topic&amp;trid=2208762<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 13<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496158-112644<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 13<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496158-112644<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 14<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496171-112644<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 14<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496171-112644<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.3-04)<br> -URI https://asc.fasb.org/extlink&amp;oid=120397183&amp;loc=d3e187085-122770<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 18<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496189-112644<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 13<br> -Subparagraph (g)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496158-112644<br><br>Reference 9: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 18<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496189-112644<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 13<br> -Subparagraph (h)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496158-112644<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 14<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496171-112644<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 18<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496189-112644<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 16<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496180-112644<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 13<br> -Subparagraph (i)<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=SL123496158-112644<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(e)(1))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 50<br> -Paragraph 6<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126731327&amp;loc=SL126733271-114008<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StockholdersEquityNoteDisclosureTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>29
<FILENAME>R18.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825688912">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stock-Based Compensation<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract', window );"><strong>Share-Based Payment Arrangement [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock', window );">Stock-Based Compensation</a></td>
<td class="text">Stock-Based Compensation<div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our equity compensation plans provide for the grant of incentive and nonqualified stock options, as well as other stock-based awards including performance share units (&#8220;PSUs&#8221;), restricted stock awards (&#8220;RSAs&#8221;), restricted stock units (&#8220;RSUs&#8221;), and deferred stock units (&#8220;DSUs&#8221;), to employees, non-employee directors and other consultants who provide services to us. We also provide an employee stock purchase plan (&#8220;ESPP&#8221;) and 401(k) match to eligible participants. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We recognize stock-based compensation expense based on grant date award fair value. This cost is recognized over the period for which the employee is required to provide service in exchange for the award or the award performance period, except for expenses relating to retirement-eligible employees that have not given their required notice, which is recognized on a pro-rata basis over the notice period prior to retirement. At </span><span style="color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">, there were 12.8 million shares available for grant under approved equity compensation plans.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Stock-based compensation expense was allocated in the condensed consolidated statements of comprehensive income as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.090%"><tr><td style="width:1.0%"/><td style="width:71.682%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.202%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.411%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.205%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cost of revenues</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,503&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,179&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating expenses</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Sales and marketing</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,423&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,032&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Research and development</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,777&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,474&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">General and administrative</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">5,077&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,330&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">11,780&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">9,015&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Stock-based compensation expense by grant type or plan was as follows:</span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Stock options</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">490&#160;</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">477&#160;</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">PSUs</span></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,926&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,699&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">RSUs</span></td><td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6,062&#160;</span></td><td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/><td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,638&#160;</span></td><td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">RSAs &amp; DSUs</span></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">108&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">108&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">ESPP</span></td><td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">589&#160;</span></td><td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/><td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">574&#160;</span></td><td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">401(k) stock match</span></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">605&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">519&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">11,780&#160;</span></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">9,015&#160;</span></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">As of March&#160;31, 2023, there was $63.8 million of unrecognized stock-based compensation expense under our equity compensation plans, which is expected to be recognized on a primarily straight-line basis over a weighted average period of 2.6 years.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Stock Options</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our stock option activity was as follows:</span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31, 2023</span></td></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Options (#) </span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Weighted Average<br/>Exercise Price <br/>($/share)</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Outstanding, beginning of period</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">562,697&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">56.24&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Granted</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">30,148&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">150.76&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Exercised</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(68,088)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">32.06&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Forfeited</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(1,916)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">123.49&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Outstanding, end of period</span></td><td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">522,841&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">64.60&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Of the total outstanding options at March&#160;31, 2023, 0.4 million were exercisable. The outstanding and exercisable options had a weighted average exercise price of $53.22 per share and a weighted average remaining contractual life of 3.0 years.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The weighted average grant date fair value of options granted during the three months ended March&#160;31, 2023 was $54.53 per share. This was estimated on the date of grant using the Black-Scholes option pricing model with the following weighted-average assumptions:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:85.718%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.082%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Life (in years)</span></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3.9</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Volatility</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">39.7&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">%</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Dividend yield</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Risk-free interest rate</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">4.2&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">%</span></td></tr></table></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Performance Share Units, Restricted Stock Units and Awards, and Deferred Stock Units</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">In each of the quarters ended March 31, 2023, 2022, 2021, and 2020 we granted PSU awards with a target performance level. </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">These awards are earned based upon our Company&#8217;s total shareholder return as compared to an indexed total shareholder return over the course of a fiscal based three-year performance period, starting in the year of grant. Earned awards vest in the quarter following the conclusion of the performance period. In the three months ended March 31, </span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">2023</span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">, PSU awards granted in 2019 vested at the maximum performance level and 0.1&#160;million shares of common stock were issued.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Activity for our PSUs, RSUs, RSAs, and DSUs in aggregate was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31, 2023</span></td></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">#</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Weighted Average Grant<br/>Date Fair Value <br/>($/share)</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Outstanding, beginning of period</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">712,158&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">103.93&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Granted</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">304,635&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">163.06&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Vested and common stock issued</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(305,123)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">74.70&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Forfeited</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(3,798)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">112.93&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Outstanding, end of period</span></td><td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">707,872&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">141.92&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The number of PSUs, RSUs, RSAs, and DSUs outstanding at March&#160;31, 2023 included less than 0.1&#160;million units that have vested, but the shares of common stock have not yet been issued, pursuant to the terms of the underlying agreements.</span></div><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Employee Stock Purchase Plan</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our ESPP activity was as follows:</span></div><div style="margin-top:6pt;text-indent:36pt"><span><br/></span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except shares)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Amounts for shares purchased</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">241&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">147&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Shares purchased</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,549&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,698&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">A total of 1.7&#160;million shares of common stock are reserved for issuance under the ESPP as of March&#160;31, 2023.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The fair value was estimated based on the market price of our common stock at the beginning of the offering period using the following assumptions:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:85.718%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.082%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Life (in years)</span></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.5</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Volatility</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">46.4&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Dividend yield</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Risk-free interest rate</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2.5&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure for share-based payment arrangement.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -URI https://asc.fasb.org/topic&amp;trid=2228938<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (l)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br><br>Reference 4: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (h)(2)(i)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (h)(2)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>30
<FILENAME>R19.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825781488">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Income Taxes<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncomeTaxDisclosureAbstract', window );"><strong>Income Tax Disclosure [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncomeTaxDisclosureTextBlock', window );">Income Taxes</a></td>
<td class="text">Income TaxesWe record our interim provision for income taxes by applying our estimated annual effective tax rate to our year-to-date pre-tax income and adjust the provision for discrete tax items recorded in the period. Our provisions for income taxes includes current federal, state, and foreign income tax expense, as well as deferred tax expense.Differences between our effective tax rate and statutory tax rates are primarily due to the impact of permanently non-deductible expenses partially offset by the federal research and development credits and tax benefits associated with foreign-derived intangible income. Additionally, excess tax benefits generated upon settlement or exercise of stock awards are recognized as a reduction to income tax expense as a discrete tax item in the quarter that the event occurs, creating potentially significant fluctuation in tax expense by quarter and by year.<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncomeTaxDisclosureAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncomeTaxDisclosureAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncomeTaxDisclosureTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure for income taxes. Disclosures may include net deferred tax liability or asset recognized in an enterprise's statement of financial position, net change during the year in the total valuation allowance, approximate tax effect of each type of temporary difference and carryforward that gives rise to a significant portion of deferred tax liabilities and deferred tax assets, utilization of a tax carryback, and tax uncertainties information.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section 50<br> -Paragraph 21<br> -URI https://asc.fasb.org/extlink&amp;oid=121826272&amp;loc=d3e32857-109319<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SAB Topic 11.C)<br> -URI https://asc.fasb.org/extlink&amp;oid=122134291&amp;loc=d3e330215-122817<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section 50<br> -Paragraph 17<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=121826272&amp;loc=d3e32809-109319<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SAB TOPIC 6.I.5.Q1)<br> -URI https://asc.fasb.org/extlink&amp;oid=122134291&amp;loc=d3e330036-122817<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 10<br> -Section 50<br> -Paragraph 14<br> -URI https://asc.fasb.org/extlink&amp;oid=121826272&amp;loc=d3e32705-109319<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 270<br> -Section 50<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6424409&amp;loc=d3e44925-109338<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -URI https://asc.fasb.org/topic&amp;trid=2144680<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 740<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=6424122&amp;loc=d3e41874-109331<br><br>Reference 9: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(h)(2))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncomeTaxDisclosureTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>31
<FILENAME>R20.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825904752">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Other Income and Expense<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherIncomeAndExpensesAbstract', window );"><strong>Other Income and Expenses [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock', window );">Other Income and Expense</a></td>
<td class="text">Other Income and Expense<div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Other income, net included the following: </span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.696%"><tr><td style="width:1.0%"/><td style="width:72.152%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:11.969%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.407%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:11.972%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Investment income</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,127&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">48&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Realized gain from foreign currency on cash and investments held</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">137&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">468&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Other income (expense), net</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(93)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total other income, net</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,276&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">423&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherIncomeAndExpensesAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherIncomeAndExpensesAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure for the components of non-operating income or non-operating expense, including, but not limited to, amounts earned from dividends, interest on securities, gain (loss) on securities sold, equity earnings of unconsolidated affiliates, gain (loss) on sales of business, interest expense and other miscellaneous income or expense items.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(7))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(9))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>32
<FILENAME>R21.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825993296">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Net Income Per Share<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EarningsPerShareAbstract', window );"><strong>Earnings Per Share [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EarningsPerShareTextBlock', window );">Net Income Per Share</a></td>
<td class="text">Net Income Per Share<div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The components and computation of basic and diluted net income per share were as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.848%"><tr><td style="width:1.0%"/><td style="width:71.889%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.101%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.104%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except per share amounts)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%">Numerator</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net income</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">15,289&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,603&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%">Denominator</span></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted average common shares outstanding, basic</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36,427&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36,136&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Options to purchase common stock</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">307&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">419&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">PSUs, RSUs, RSAs, and DSUs</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">421&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">434&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted average common shares outstanding, diluted</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">37,155&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36,989&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%">Net income per share</span></td><td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Basic</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.42&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.35&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Diluted</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.41&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.34&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The number of outstanding potential common shares that were excluded from the calculation of diluted net income per share as they were anti-dilutive was as follows:</span></div><div style="margin-top:6pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.545%"><tr><td style="width:1.0%"/><td style="width:71.807%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.142%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.408%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.143%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Anti-dilutive shares</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">108&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">151&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EarningsPerShareAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EarningsPerShareAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EarningsPerShareTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure for earnings per share.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -URI https://asc.fasb.org/extlink&amp;oid=109243012&amp;loc=SL65017193-207537<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -URI https://asc.fasb.org/topic&amp;trid=2144383<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3630-109257<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EarningsPerShareTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>33
<FILENAME>R22.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825926544">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Geographic Information<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerAbstract', window );"><strong>Revenue from Contract with Customer [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_GeographicInformationTextBlock', window );">Geographic Information</a></td>
<td class="text">Geographic Information<div style="margin-top:6pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Revenue</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Domestic revenue, which we define as revenue that was attributable to customers based within the U.S., was as follows:</span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Domestic revenue</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">84&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">84&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><div style="margin-top:3pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">No single jurisdiction outside of the U.S. had revenues in excess of 10%. </span></div><div style="margin-top:6pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Property and Equipment</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Property and equipment, net located at subsidiary and office locations outside of the U.S. was as follows:</span></div><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31,<br/>2023</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">International property and equipment</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">14&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">13&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_GeographicInformationTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The entire disclosure of geographic information.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_GeographicInformationTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_RevenueFromContractWithCustomerAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_RevenueFromContractWithCustomerAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>34
<FILENAME>R23.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825569984">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>General (Policies)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract', window );"><strong>Organization, Consolidation and Presentation of Financial Statements [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_BusinessDescriptionPolicyPolicyTextBlock', window );">Business Description</a></td>
<td class="text"><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Business Description</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">SPS Commerce is a leading provider of cloud-based supply chain management services across our global retail network. Our products make it easier for retailers, grocers, distributors, suppliers, and logistics firms to communicate and collaborate by simplifying how they manage and share item, inventory, order and sales data across omnichannel retail channels. We deliver our products using a full-service model, which includes industry-leading technology and a team of experts that optimize, update, and operate the technology on customers' behalf.</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our products enable customers to increase supply chain performance, optimize inventory levels and sell-through, reduce operational costs, improve order visibility, and satisfy consumer demands for a seamless omnichannel experience.</span></div><span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BasisOfAccountingPolicyPolicyTextBlock', window );">Basis of Presentation</a></td>
<td class="text"><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Basis of Presentation</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The accompanying unaudited condensed consolidated financial statements have been prepared in conformity with accounting principles generally accepted in the United States of America (&#8220;GAAP&#8221;) and include the accounts of SPS Commerce, Inc. and its subsidiaries. All intercompany accounts and transactions have been eliminated in the condensed consolidated financial statements. </span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">This interim financial information has been prepared under the instructions to Form 10-Q and Rule 10-01 of Regulation S-X. Accordingly, these condensed consolidated financial statements do not include all of the information and notes required by GAAP. Therefore, these condensed consolidated financial statements should be read in conjunction with the consolidated financial statements and notes included in our Annual Report on Form 10-K for the year ended December&#160;31, 2022, as filed with the Securities and Exchange Commission (&#8220;SEC&#8221;). We have included all normal recurring adjustments considered necessary to provide a fair presentation of our financial position, results of operations, stockholders&#8217; equity, and cash flows for the interim periods presented. Operating results for these interim periods are not necessarily indicative of the results to be expected for the full year.</span></div><span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_UseOfEstimates', window );">Use of Estimates</a></td>
<td class="text"><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Use of Estimates</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Preparing financial statements in conformity with GAAP requires management to make estimates, judgments, and assumptions that affect the reported amounts of assets and liabilities, disclosure of contingent assets and liabilities at the date of the financial statements, and the reported amounts of revenues and expenses during the reporting periods. Actual results could differ from those estimates.</span></div><span></span>
</td>
</tr>
<tr class="re">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock', window );">Significant Accounting Policies</a></td>
<td class="text"><div style="margin-top:12pt"><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Significant Accounting Policies</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">There were no material changes in our significant accounting policies during the three months ended March&#160;31, 2023. See Note A to the consolidated financial statements included in our Annual Report on Form 10-K for the year ended </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">December&#160;31, 2022</span><span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">, as filed with the SEC, for additional information regarding our significant accounting policies.</span></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_BusinessDescriptionPolicyPolicyTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Business description policy.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_BusinessDescriptionPolicyPolicyTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Significant accounting policies.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_BasisOfAccountingPolicyPolicyTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Disclosure of accounting policy for basis of accounting, or basis of presentation, used to prepare the financial statements (for example, US Generally Accepted Accounting Principles, Other Comprehensive Basis of Accounting, IFRS).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_BasisOfAccountingPolicyPolicyTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_UseOfEstimates">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Disclosure of accounting policy for the use of estimates in the preparation of financial statements in conformity with generally accepted accounting principles.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 275<br> -SubTopic 10<br> -Section 50<br> -Paragraph 12<br> -URI https://asc.fasb.org/extlink&amp;oid=99393423&amp;loc=d3e6191-108592<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 275<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -URI https://asc.fasb.org/extlink&amp;oid=99393423&amp;loc=d3e6161-108592<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 275<br> -SubTopic 10<br> -Section 50<br> -Paragraph 9<br> -URI https://asc.fasb.org/extlink&amp;oid=99393423&amp;loc=d3e6143-108592<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 275<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=99393423&amp;loc=d3e5967-108592<br><br>Reference 5: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 275<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=99393423&amp;loc=d3e6061-108592<br><br>Reference 6: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 275<br> -SubTopic 10<br> -Section 50<br> -Paragraph 8<br> -URI https://asc.fasb.org/extlink&amp;oid=99393423&amp;loc=d3e6132-108592<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 275<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=99393423&amp;loc=d3e5967-108592<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_UseOfEstimates</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>35
<FILENAME>R24.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825926544">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>General (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract', window );"><strong>Organization, Consolidation and Presentation of Financial Statements [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock', window );">Accounting Pronouncements Note Yet Adopted</a></td>
<td class="text"><span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Accounting Pronouncements Recently Adopted</span><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:20.566%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:11.172%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:29.960%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.384%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:20.418%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Standard</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Date of Issuance</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Description</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Date of Adoption</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Effect on the Financial Statements</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:top"><div style="text-align:center"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:115%">ASU 2021-08, </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%">Business Combinations (Topic 805) - Accounting for Contract Assets and Contract Liabilities from Contracts with Customers</span></div></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">October 2021</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">This amendment requires that an acquirer recognize and measure contract assets and contract liabilities acquired in a business combination in accordance with Topic 606, effective for all business combinations in the year of adoption and thereafter.<br/></span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">January 2023</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">The adoption of this standard may have a material impact on the purchase accounting for future business combinations depending on the specific amount of contract assets and liabilities being acquired.</span></td></tr></table><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of changes in accounting principles, including adoption of new accounting pronouncements, that describes the new methods, amount and effects on financial statement line items.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22499-107794<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 270<br> -SubTopic 10<br> -Section 45<br> -Paragraph 13<br> -URI https://asc.fasb.org/extlink&amp;oid=126900757&amp;loc=d3e765-108305<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 270<br> -SubTopic 10<br> -Section 45<br> -Paragraph 12<br> -URI https://asc.fasb.org/extlink&amp;oid=126900757&amp;loc=d3e725-108305<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22583-107794<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>36
<FILENAME>R25.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082826011248">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Revenue (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerAbstract', window );"><strong>Revenue from Contract with Customer [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DisaggregationOfRevenueTableTextBlock', window );">Summary of Revenues by Revenue Stream</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">We derive our revenues from the following revenue streams:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.545%"><tr><td style="width:1.0%"/><td style="width:71.807%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.142%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.408%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.143%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Recurring revenues:</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Fulfillment</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">101,668&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">84,731&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Analytics</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,370&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">11,296&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Other</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,263&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,540&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Recurring revenues</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">117,301&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">97,567&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">One-time revenues</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">8,567&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">7,626&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total revenue</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">125,868&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">105,193&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock', window );">Summary of Deferred Revenue Liability Relating to Set-Up Fees</a></td>
<td class="text"><div style="margin-top:6pt;padding-left:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The table below presents the activity of the portion of the deferred revenue liability relating to set-up fees: </span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.090%"><tr><td style="width:1.0%"/><td style="width:71.682%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.202%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.411%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.205%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, beginning of period</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">14,999&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">14,459&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Invoiced set-up fees</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,251&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,003&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Recognized set-up fees</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(3,963)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(3,524)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, end of period</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">15,287&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">14,938&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of receivable, contract asset, and contract liability from contract with customer. Includes, but is not limited to, change in contract asset and contract liability.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130551-203045<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DisaggregationOfRevenueTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of disaggregation of revenue into categories depicting how nature, amount, timing, and uncertainty of revenue and cash flows are affected by economic factor.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 5<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130545-203045<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DisaggregationOfRevenueTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_RevenueFromContractWithCustomerAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_RevenueFromContractWithCustomerAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>37
<FILENAME>R26.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825986032">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Deferred Costs (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DeferredCostsAbstract', window );"><strong>Deferred Costs [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_DeferredCostsAndAmortizationTableTextBlock', window );">Summary of Deferred Costs and Amortization of Deferred Costs</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The deferred costs activity was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.696%"><tr><td style="width:1.0%"/><td style="width:71.848%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.121%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.407%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.124%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, beginning of period</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">70,179&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">59,720&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Incurred deferred costs</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">18,234&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">17,781&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Amortized deferred costs</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(16,604)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(14,891)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, end of period</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">71,809&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">62,610&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_DeferredCostsAndAmortizationTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Deferred costs and amortization.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_DeferredCostsAndAmortizationTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DeferredCostsAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DeferredCostsAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>38
<FILENAME>R27.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825937136">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Fair Value Measurements (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FairValueDisclosuresAbstract', window );"><strong>Fair Value Disclosures [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock', window );">Summary of Cash Equivalents and Investments</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:27pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Cash equivalents and investments, as measured at fair value on a recurring basis, consisted of the following:</span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:25.869%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:6.778%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:9.051%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:9.051%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:9.051%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:9.051%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:9.051%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:9.056%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31, 2023</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="padding:0 1pt 0 13pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Fair Value Level</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Amortized Cost</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Unrealized Gains (Losses), net</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Fair Value</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Amortized Cost</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Unrealized Gains (Losses), net</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">Fair Value</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%">(in thousands)</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%">Cash equivalents:</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Money market funds</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Level 1</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">94,284&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">94,284&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">73,368&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">73,368&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%">Investments:</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Certificates of deposit</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Level 1</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">6,687&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">6,687&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">6,813&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6,813&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Marketable securities:</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Commercial paper</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Level 2</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">34,228&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">353&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">34,581&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">44,224&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">375&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">44,599&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">U.S. treasury securities</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Level 2</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">9,827&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">51&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">9,878&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:0 1pt 0 13pt"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">145,026&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">404&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">145,430&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">124,405&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">375&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">124,780&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FairValueDisclosuresAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FairValueDisclosuresAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of the components of cash, cash equivalents, and investments.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>39
<FILENAME>R28.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825910608">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Allowance for Credit Losses (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllowanceForCreditLossAbstract', window );"><strong>Allowance for Credit Loss [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock', window );">Schedule of Allowance for Credit Losses Activity Included in Accounts Receivable Net</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The allowance for credit losses activity, included in accounts receivable, net, was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, beginning of period</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,066&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,249&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Provision for credit losses</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,206&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,144&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Write-offs, net of recoveries</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(1,055)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(1,106)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, end of period</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,217&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,287&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AllowanceForCreditLossAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AllowanceForCreditLossAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of allowance for credit loss on financing receivable.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 310<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11B<br> -URI https://asc.fasb.org/extlink&amp;oid=123577603&amp;loc=SL6953423-111524<br><br>Reference 2: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 326<br> -SubTopic 20<br> -Section 50<br> -Paragraph 13<br> -URI https://asc.fasb.org/extlink&amp;oid=124255953&amp;loc=SL82919249-210447<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>40
<FILENAME>R29.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825846000">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Property and Equipment, Net (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentAbstract', window );"><strong>Property, Plant and Equipment [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentTextBlock', window );">Property, Plant and Equipment</a></td>
<td class="text"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Property and equipment, net consisted of the following:</span><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:72.384%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.557%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:11.475%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:11.478%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31,<br/>2023</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Internally developed software</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">53,530&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">49,994&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Computer equipment</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">30,601&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">30,310&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Leasehold improvements</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">16,603&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">16,531&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Office equipment and furniture</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">11,113&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">10,981&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Property and equipment, cost</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">111,847&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">107,816&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Less: accumulated depreciation and amortization</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(76,769)</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(72,358)</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total property and equipment, net</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">35,078&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">35,458&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PropertyPlantAndEquipmentAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PropertyPlantAndEquipmentAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PropertyPlantAndEquipmentTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of physical assets used in the normal conduct of business and not intended for resale. Includes, but is not limited to, balances by class of assets, depreciation and depletion expense and method used, including composite depreciation, and accumulated deprecation.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 360<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6391035&amp;loc=d3e2868-110229<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PropertyPlantAndEquipmentTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>41
<FILENAME>R30.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825810128">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Goodwill and Intangible Assets, Net (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract', window );"><strong>Goodwill and Intangible Assets Disclosure [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfGoodwillTextBlock', window );">Schedule of Changes in Net Carrying Amount of Goodwill</a></td>
<td class="text"><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Goodwill</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The activity in goodwill was as follows:</span><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:85.718%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.082%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, beginning of period</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">197,284&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Foreign currency translation</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(71)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Remeasurement from provisional purchase accounting amount</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,788&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Balance, end of period</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">199,001&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock', window );">Intangible Assets</a></td>
<td class="text"><div style="margin-top:12pt"><span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%">Intangible Assets</span></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Intangible assets, net consisted of the following:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:30.566%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.086%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31, 2023</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">($ in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Gross<br/>Carrying<br/>Amount</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Accumulated <br/>Amortization </span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Foreign<br/>Currency <br/>Translation</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Net</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Weighted Average Remaining Amortization Period</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Subscriber relationships</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">79,385&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(24,205)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">29&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">55,209&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6.6 years</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Acquired technology</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">40,612&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(11,292)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">7&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">29,327&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">5.5 years</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">119,997&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(35,497)</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">84,536&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6.2 years</span></td></tr></table></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:30.566%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.086%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">($ in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Gross<br/>Carrying<br/>Amount</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Accumulated <br/>Amortization </span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Foreign<br/>Currency <br/>Translation</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Net</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Weighted Average Remaining Amortization Period</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Subscriber relationships</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">80,101&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(22,255)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(171)</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">57,675&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6.8 years</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Acquired technology</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">40,610&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(9,934)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">30,677&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">5.7 years</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">120,711&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(32,189)</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(170)</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">88,352&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6.4 years</span></td></tr></table></div><span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock', window );">Estimated Future Annual Amortization Expense Related to Intangible Assets Subject to Amortization</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The estimated future annual amortization expense related to intangible assets is as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:85.718%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.082%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Remainder of 2023</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">11,450&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2024</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">14,102&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2025</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">13,964&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2026</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,960&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2027</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,497&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Thereafter</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">19,563&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total future amortization</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">84,536&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of assets, excluding financial assets and goodwill, lacking physical substance with a finite life, by either major class or business segment.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16265-109275<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfGoodwillTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of goodwill by reportable segment and in total which includes a rollforward schedule.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (h)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 2: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 3: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (g)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 4: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 5: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (e)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 6: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 7: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1A<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=SL108378252-109267<br><br>Reference 8: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 9: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 10: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13854-109267<br><br>Reference 11: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 55<br> -Paragraph 24<br> -URI https://asc.fasb.org/extlink&amp;oid=122137925&amp;loc=d3e14258-109268<br><br>Reference 12: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfGoodwillTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of the amount of amortization expense expected to be recorded in succeeding fiscal years for finite-lived intangible assets.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>42
<FILENAME>R31.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824124608">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Commitments and Contingencies (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommitmentsAndContingenciesDisclosureAbstract', window );"><strong>Commitments and Contingencies Disclosure [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LeaseCostTableTextBlock', window );">Components of Lease Expense</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The components of lease expense were as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:98.181%"><tr><td style="width:1.0%"/><td style="width:71.430%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.325%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.417%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.328%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating lease cost</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">798&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">759&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Variable lease cost</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">928&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">793&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,726&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,552&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
<tr class="re">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock', window );">Schedule of Supplemental Cash Flow Information Related to Leases</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Supplemental cash flow information related to leases was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cash paid for amounts included in the measurement of lease liabilities</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating cash flows from operating leases</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,247&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,095&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock', window );">Schedule of Supplemental Balance Sheet Information Related to Leases</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Supplemental balance sheet information related to operating leases was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31,<br/>2023</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted-average remaining lease term</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3.8 years</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3.9 years</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted-average discount rate</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4.0&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4.0&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr></table></div><span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock', window );">Schedule of Future Minimum Payments Under Operating Leases</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">At March&#160;31, 2023, our future minimum payments under operating leases were as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:85.718%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.082%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="padding:0 1pt"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Remainder of 2023</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,847&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2024</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,471&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2025</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,081&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2026</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,763&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2027</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,266&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total future gross payments</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">17,428&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Less: imputed interest</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(1,313)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total operating lease liabilities</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">16,115&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Schedule of supplemental balance sheet information related to leases.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Schedule of supplemental cash flow information related to leases.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommitmentsAndContingenciesDisclosureAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommitmentsAndContingenciesDisclosureAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LeaseCostTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of lessee's lease cost. Includes, but is not limited to, interest expense for finance lease, amortization of right-of-use asset for finance lease, operating lease cost, short-term lease cost, variable lease cost and sublease income.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918686-209980<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LeaseCostTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of undiscounted cash flows of lessee's operating lease liability. Includes, but is not limited to, reconciliation of undiscounted cash flows to operating lease liability recognized in statement of financial position.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918701-209980<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>43
<FILENAME>R32.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825926544">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stockholders' Equity (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EquityAbstract', window );"><strong>Equity [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfTreasuryStockByClassTextBlock', window );">Stock Repurchase Activity</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our board of directors has authorized multiple non-concurrent programs to repurchase our common stock. Details of the programs and activity thereunder through </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">March&#160;31, 2023 were as follows:</span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:13.293%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:13.142%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.839%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.839%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.839%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.843%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Effective Date</span></td><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Expiration Date</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Share Value Authorized for Repurchase</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Share Value Repurchased</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Unused &amp; Expired Share Repurchase Value</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Share Value Available for Future Repurchase</span></td></tr><tr><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2021 Program</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">November 2021</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">August 2022</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">50,000</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">49,992&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">8&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">N/A</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2022 Program</span></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">August 2022</span></td><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">July 2024</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">50,000</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,992&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">N/A</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">47,008&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="background-color:#ffffff;color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">share</span><span style="background-color:#ffffff;color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"> </span><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">repurchase activity by period was as follows:</span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:69.354%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:13.900%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.840%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except shares and per share amounts)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Number of shares repurchased</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">121,544&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Shares repurchased cost</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">15,226&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Average price per repurchased share</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">125.27&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EquityAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EquityAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfTreasuryStockByClassTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of treasury stock, including, but not limited to, average cost per share, description of share repurchase program, shares repurchased, shares held for each class of treasury stock.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 50<br> -Paragraph 3<br> -URI https://asc.fasb.org/extlink&amp;oid=6405834&amp;loc=d3e23309-112656<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6405813&amp;loc=d3e23239-112655<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=6405834&amp;loc=d3e23315-112656<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=6405834&amp;loc=d3e23285-112656<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfTreasuryStockByClassTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>44
<FILENAME>R33.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825730896">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stock-Based Compensation (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract', window );"><strong>Share-Based Payment Arrangement [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock', window );">Stock-Based Compensation Expense</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Stock-based compensation expense was allocated in the condensed consolidated statements of comprehensive income as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.090%"><tr><td style="width:1.0%"/><td style="width:71.682%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.202%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.411%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.205%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Cost of revenues</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,503&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,179&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Operating expenses</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Sales and marketing</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,423&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,032&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Research and development</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,777&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,474&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">General and administrative</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">5,077&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,330&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">11,780&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">9,015&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Stock-based compensation expense by grant type or plan was as follows:</span></div><div style="margin-top:12pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Stock options</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">490&#160;</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">477&#160;</span></td><td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">PSUs</span></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3,926&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,699&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">RSUs</span></td><td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">6,062&#160;</span></td><td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/><td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">4,638&#160;</span></td><td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">RSAs &amp; DSUs</span></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">108&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">108&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">ESPP</span></td><td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">589&#160;</span></td><td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/><td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">574&#160;</span></td><td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">401(k) stock match</span></td><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">605&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="padding:0 1pt"/><td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">519&#160;</span></td><td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">11,780&#160;</span></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">9,015&#160;</span></td><td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock', window );">Stock Option Activity</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our stock option activity was as follows:</span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31, 2023</span></td></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Options (#) </span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Weighted Average<br/>Exercise Price <br/>($/share)</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Outstanding, beginning of period</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">562,697&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">56.24&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Granted</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">30,148&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">150.76&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Exercised</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(68,088)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">32.06&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Forfeited</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(1,916)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">123.49&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Outstanding, end of period</span></td><td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">522,841&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">64.60&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table></div><span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock', window );">Weighted Average Grant Date Fair Value of Options Granted, Assumptions</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The weighted average grant date fair value of options granted during the three months ended March&#160;31, 2023 was $54.53 per share. This was estimated on the date of grant using the Black-Scholes option pricing model with the following weighted-average assumptions:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:85.718%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.082%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Life (in years)</span></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">3.9</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Volatility</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">39.7&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">%</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Dividend yield</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">Risk-free interest rate</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">4.2&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%">%</span></td></tr></table></div><span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock', window );">PSU, RSU, RSA, and DSU</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Activity for our PSUs, RSUs, RSAs, and DSUs in aggregate was as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31, 2023</span></td></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">#</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Weighted Average Grant<br/>Date Fair Value <br/>($/share)</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Outstanding, beginning of period</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">712,158&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">103.93&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Granted</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">304,635&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">163.06&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Vested and common stock issued</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(305,123)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">74.70&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Forfeited</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(3,798)</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">112.93&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Outstanding, end of period</span></td><td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">707,872&#160;</span></td><td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">141.92&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr></table></div><span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock', window );">Summary of ESPP Activity</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Our ESPP activity was as follows:</span></div><div style="margin-top:6pt;text-indent:36pt"><span><br/></span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except shares)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Amounts for shares purchased</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">241&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">147&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Shares purchased</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2,549&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,698&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock', window );">Fair Value Estimation of Common Stock Using Black-Scholes Option Pricing Model, Assumptions</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The fair value was estimated based on the market price of our common stock at the beginning of the offering period using the following assumptions:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:85.718%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.082%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Life (in years)</span></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.5</span></td></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Volatility</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">46.4&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Dividend yield</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#8212;&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Risk-free interest rate</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">2.5&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of allocation of amount expensed and capitalized for award under share-based payment arrangement to statement of income or comprehensive income and statement of financial position. Includes, but is not limited to, corresponding line item in financial statement.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (h)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of employee stock purchase plan activity.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (g)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure for stock option plans. Includes, but is not limited to, outstanding awards at beginning and end of year, grants, exercises, forfeitures, and weighted-average grant date fair value.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (e)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of the significant assumptions used during the year to estimate the fair value of employee stock purchase plans, including, but not limited to: (a) expected term, (b) expected volatility of the entity's shares, (c) expected dividends, (d) risk-free rate(s), and (e) discount for post-vesting restrictions.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (f)(2)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of the significant assumptions used during the year to estimate the fair value of stock options, including, but not limited to: (a) expected term of share options and similar instruments, (b) expected volatility of the entity's shares, (c) expected dividends, (d) risk-free rate(s), and (e) discount for post-vesting restrictions.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (f)(2)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Disclosure of the number and weighted-average grant date fair value for restricted stock and restricted stock units that were outstanding at the beginning and end of the year, and the number of restricted stock and restricted stock units that were granted, vested, or forfeited during the year.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>45
<FILENAME>R34.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825951632">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Other Income and Expense (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherIncomeAndExpensesAbstract', window );"><strong>Other Income and Expenses [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock', window );">Summary of Other Income (Expense), Net</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Other income, net included the following: </span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.696%"><tr><td style="width:1.0%"/><td style="width:72.152%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:11.969%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.407%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:11.972%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Investment income</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,127&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">48&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Realized gain from foreign currency on cash and investments held</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">137&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">468&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Other income (expense), net</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">(93)</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Total other income, net</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">1,276&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">423&#160;</span></td><td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherIncomeAndExpensesAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherIncomeAndExpensesAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of the components of non-operating income or non-operating expense that may include amounts earned from dividends, interest on securities, gains (losses) on securities sold, equity earnings of unconsolidated affiliates, net gain (loss) on sales of business, interest expense and other miscellaneous income or expense items.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>46
<FILENAME>R35.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824412784">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Net Income Per Share (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EarningsPerShareAbstract', window );"><strong>Earnings Per Share [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock', window );">Components and Computation of Basic and Diluted Net Income Per Share</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The components and computation of basic and diluted net income per share were as follows:</span></div><div style="margin-top:12pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.848%"><tr><td style="width:1.0%"/><td style="width:71.889%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.101%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.104%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands, except per share amounts)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%">Numerator</span></td><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Net income</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">15,289&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">12,603&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%">Denominator</span></td><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted average common shares outstanding, basic</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36,427&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36,136&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Options to purchase common stock</span></td><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">307&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">419&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">PSUs, RSUs, RSAs, and DSUs</span></td><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">421&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">434&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Weighted average common shares outstanding, diluted</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">37,155&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">36,989&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%">Net income per share</span></td><td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">&#160;</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Basic</span></td><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.42&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.35&#160;</span></td><td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Diluted</span></td><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.41&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">$</span></td><td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">0.34&#160;</span></td><td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock', window );">Schedule of Anti-dilutive Common Shares Excluded from Calculation of Diluted Net Income Per Share</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">The number of outstanding potential common shares that were excluded from the calculation of diluted net income per share as they were anti-dilutive was as follows:</span></div><div style="margin-top:6pt;text-align:center"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.545%"><tr><td style="width:1.0%"/><td style="width:71.807%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.142%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.408%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.143%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">(in thousands)</span></td><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Anti-dilutive shares</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">108&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">151&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EarningsPerShareAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EarningsPerShareAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of securities (including those issuable pursuant to contingent stock agreements) that could potentially dilute basic earnings per share (EPS) in the future that were not included in the computation of diluted EPS because to do so would increase EPS amounts or decrease loss per share amounts for the period presented, by antidilutive securities.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of an entity's basic and diluted earnings per share calculations, including a reconciliation of numerators and denominators of the basic and diluted per-share computations for income from continuing operations.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>47
<FILENAME>R36.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824371136">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Geographic Information (Tables)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerAbstract', window );"><strong>Revenue from Contract with Customer [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfProductInformationTableTextBlock', window );">Summary of Domestic Revenue</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Domestic revenue, which we define as revenue that was attributable to customers based within the U.S., was as follows:</span></div><div style="margin-top:6pt"><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">Three Months Ended<br/>March 31,</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2023</span></td><td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/><td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">2022</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">Domestic revenue</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">84&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">84&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/><td colspan="3" style="display:none"/></tr></table></div><span></span>
</td>
</tr>
<tr class="re">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock', window );">Schedule Of Percentage Of Property And Equipment Net</a></td>
<td class="text"><div style="margin-top:6pt;text-indent:36pt"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%">Property and equipment, net located at subsidiary and office locations outside of the U.S. was as follows:</span></div><div><table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"><tr><td style="width:1.0%"/><td style="width:71.930%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.081%"/><td style="width:0.1%"/><td style="width:0.1%"/><td style="width:0.406%"/><td style="width:0.1%"/><td style="width:1.0%"/><td style="width:12.083%"/><td style="width:0.1%"/></tr><tr><td colspan="3" style="background-color:#ffffff;padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">March 31,<br/>2023</span></td><td colspan="3" style="padding:0 1pt"/><td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%">December 31, 2022</span></td></tr><tr><td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">International property and equipment</span></td><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">14&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td><td colspan="3" style="background-color:#cceeff;padding:0 1pt"/><td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">13&#160;</span></td><td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"><span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%">%</span></td></tr></table></div><span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Schedule Of Percentage Of Property And Equipment Net</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_RevenueFromContractWithCustomerAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_RevenueFromContractWithCustomerAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfProductInformationTableTextBlock">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Tabular disclosure of product information that are included in the discussion of the nature of an entity's operations.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfProductInformationTableTextBlock</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:textBlockItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>48
<FILENAME>R37.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082820483008">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Business Acquisitions - Narrative (Details) - USD ($)<br> $ in Millions</strong></div></th>
<th class="th" colspan="1"></th>
<th class="th" colspan="1"></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Oct. 04, 2022</div></th>
<th class="th"><div>Jul. 19, 2022</div></th>
<th class="th"><div>Mar. 31, 2023</div></th>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BusinessAcquisitionAxis=spsc_GCommerceIncMember', window );">GCommerce Inc</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BusinessAcquisitionLineItems', window );"><strong>Business Acquisition [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BusinessCombinationConsiderationTransferred1', window );">Purchase price</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">$ 45.1<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_BusinessCombinationMeasurementPeriod', window );">Measurement period</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">1 year<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred', window );">Decrease in purchase price due to measurement period adjustment</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">$ 1.6<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets', window );">Decrease in estimated value of deferred income tax assets</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">$ 1.5<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BusinessAcquisitionAxis=spsc_InterTradeSystemsIncMember', window );">InterTrade Systems Inc.</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BusinessAcquisitionLineItems', window );"><strong>Business Acquisition [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BusinessCombinationConsiderationTransferred1', window );">Purchase price</a></td>
<td class="nump">$ 49.1<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_BusinessCombinationMeasurementPeriod', window );">Measurement period</a></td>
<td class="text">1 year<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_BusinessCombinationMeasurementPeriod">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Business Combination, Measurement Period</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_BusinessCombinationMeasurementPeriod</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Business Combination, Provisional Information, Initial Accounting Incomplete, Adjustment, Deferred Income Tax Assets</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_BusinessAcquisitionLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_BusinessAcquisitionLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_BusinessCombinationConsiderationTransferred1">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of consideration transferred, consisting of acquisition-date fair value of assets transferred by the acquirer, liabilities incurred by the acquirer, and equity interest issued by the acquirer.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 805<br> -SubTopic 30<br> -Section 30<br> -Paragraph 8<br> -URI https://asc.fasb.org/extlink&amp;oid=126966197&amp;loc=d3e6613-128477<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 805<br> -SubTopic 30<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126975305&amp;loc=d3e6927-128479<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 805<br> -SubTopic 30<br> -Section 30<br> -Paragraph 7<br> -URI https://asc.fasb.org/extlink&amp;oid=126966197&amp;loc=d3e6578-128477<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_BusinessCombinationConsiderationTransferred1</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>This element represents the amount of any measurement period adjustment (as defined) realized during the reporting period to items of consideration transferred in connection with a business combination for which the initial accounting was incomplete.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 805<br> -SubTopic 20<br> -Section 50<br> -Paragraph 4A<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=128092470&amp;loc=SL65897772-128472<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_BusinessAcquisitionAxis=spsc_GCommerceIncMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_BusinessAcquisitionAxis=spsc_GCommerceIncMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_BusinessAcquisitionAxis=spsc_InterTradeSystemsIncMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_BusinessAcquisitionAxis=spsc_InterTradeSystemsIncMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>49
<FILENAME>R38.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824151296">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Revenue - Summary of Revenues by Revenue Stream (Detail) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_RevenueRecognitionLineItems', window );"><strong>Revenue Recognition [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax', window );">Revenues</a></td>
<td class="nump">$ 125,868<span></span>
</td>
<td class="nump">$ 105,193<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ContractWithCustomerDurationAxis=spsc_RecurringRevenuesMember', window );">Recurring revenues</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_RevenueRecognitionLineItems', window );"><strong>Revenue Recognition [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax', window );">Revenues</a></td>
<td class="nump">117,301<span></span>
</td>
<td class="nump">97,567<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ContractWithCustomerDurationAxis=spsc_OneTimeRevenuesMember', window );">One-time revenues</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_RevenueRecognitionLineItems', window );"><strong>Revenue Recognition [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax', window );">Revenues</a></td>
<td class="nump">8,567<span></span>
</td>
<td class="nump">7,626<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_srt_ProductOrServiceAxis=spsc_FulfillmentMember', window );">Fulfillment | Recurring revenues</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_RevenueRecognitionLineItems', window );"><strong>Revenue Recognition [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax', window );">Revenues</a></td>
<td class="nump">101,668<span></span>
</td>
<td class="nump">84,731<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_srt_ProductOrServiceAxis=spsc_AnalyticsMember', window );">Analytics | Recurring revenues</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_RevenueRecognitionLineItems', window );"><strong>Revenue Recognition [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax', window );">Revenues</a></td>
<td class="nump">12,370<span></span>
</td>
<td class="nump">11,296<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_srt_ProductOrServiceAxis=spsc_OtherMember', window );">Other | Recurring revenues</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_RevenueRecognitionLineItems', window );"><strong>Revenue Recognition [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax', window );">Revenues</a></td>
<td class="nump">$ 3,263<span></span>
</td>
<td class="nump">$ 1,540<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_RevenueRecognitionLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Revenue recognition.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_RevenueRecognitionLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount, excluding tax collected from customer, of revenue from satisfaction of performance obligation by transferring promised good or service to customer. Tax collected from customer is tax assessed by governmental authority that is both imposed on and concurrent with specific revenue-producing transaction, including, but not limited to, sales, use, value added and excise.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 30<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8906-108599<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 40<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e9031-108599<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 41<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e9038-108599<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130543-203045<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 9: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 42<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e9054-108599<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 5<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130545-203045<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 924<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SAB Topic 11.L)<br> -URI https://asc.fasb.org/extlink&amp;oid=6472922&amp;loc=d3e499488-122856<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ContractWithCustomerDurationAxis=spsc_RecurringRevenuesMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ContractWithCustomerDurationAxis=spsc_RecurringRevenuesMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ContractWithCustomerDurationAxis=spsc_OneTimeRevenuesMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ContractWithCustomerDurationAxis=spsc_OneTimeRevenuesMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_srt_ProductOrServiceAxis=spsc_FulfillmentMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">srt_ProductOrServiceAxis=spsc_FulfillmentMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_srt_ProductOrServiceAxis=spsc_AnalyticsMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">srt_ProductOrServiceAxis=spsc_AnalyticsMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_srt_ProductOrServiceAxis=spsc_OtherMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">srt_ProductOrServiceAxis=spsc_OtherMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>50
<FILENAME>R39.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082818658560">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Revenue - Narrative (Detail)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DisaggregationOfRevenueLineItems', window );"><strong>Disaggregation Of Revenue [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod', window );">Latest timing of billings</a></td>
<td class="text">30 days<span></span>
</td>
</tr>
<tr class="re">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_ContractTermMaximum', window );">Contract term maximum</a></td>
<td class="text">1 year<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_SetUpFeesRecognizedPeriod', window );">Set up fees recognized period</a></td>
<td class="text">2 years<span></span>
</td>
</tr>
<tr class="re">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee', window );">Maximum recognition period for miscellaneous one-time fee</a></td>
<td class="text">1 year<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_srt_RangeAxis=srt_MinimumMember', window );">Minimum</a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DisaggregationOfRevenueLineItems', window );"><strong>Disaggregation Of Revenue [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_CustomerContractCancellationPeriod', window );">Customer contract cancellation period</a></td>
<td class="text">30 days<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_srt_RangeAxis=srt_MaximumMember', window );">Maximum</a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DisaggregationOfRevenueLineItems', window );"><strong>Disaggregation Of Revenue [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_CustomerContractCancellationPeriod', window );">Customer contract cancellation period</a></td>
<td class="text">90 days<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_ContractTermMaximum">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Contract Term Maximum</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_ContractTermMaximum</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_CustomerContractCancellationPeriod">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Customer contract cancellation period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_CustomerContractCancellationPeriod</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Maximum recognition period for miscellaneous one-time fee.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_RecurringRevenuesTimingOfBillingsLatestPeriod">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Recurring revenues timing of billings latest period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_RecurringRevenuesTimingOfBillingsLatestPeriod</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_SetUpFeesRecognizedPeriod">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Set up fees recognized period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_SetUpFeesRecognizedPeriod</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DisaggregationOfRevenueLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DisaggregationOfRevenueLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_srt_RangeAxis=srt_MinimumMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">srt_RangeAxis=srt_MinimumMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_srt_RangeAxis=srt_MaximumMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">srt_RangeAxis=srt_MaximumMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>51
<FILENAME>R40.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825722992">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Revenue - Summary of Deferred Revenue Liability Relating to Set-Up Fees (Detail) - Set-Up Fees - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_DeferredRevenueArrangementRollForward', window );"><strong>Deferred Revenue Arrangement [Roll Forward]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ContractWithCustomerLiability', window );">Balance, beginning of period</a></td>
<td class="nump">$ 14,999<span></span>
</td>
<td class="nump">$ 14,459<span></span>
</td>
</tr>
<tr class="re">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_DeferredRevenueInvoicedSetUpFees', window );">Invoiced set-up fees</a></td>
<td class="nump">4,251<span></span>
</td>
<td class="nump">4,003<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_DeferredRevenueAmortizedSetUpFees', window );">Recognized set-up fees</a></td>
<td class="num">(3,963)<span></span>
</td>
<td class="num">(3,524)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ContractWithCustomerLiability', window );">Balance, end of period</a></td>
<td class="nump">$ 15,287<span></span>
</td>
<td class="nump">$ 14,938<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_DeferredRevenueAmortizedSetUpFees">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Deferred revenue amortized set up fees.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_DeferredRevenueAmortizedSetUpFees</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_DeferredRevenueArrangementRollForward">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Deferred Revenue Arrangement</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_DeferredRevenueArrangementRollForward</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_DeferredRevenueInvoicedSetUpFees">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Deferred revenue Invoiced set up fees.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_DeferredRevenueInvoicedSetUpFees</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ContractWithCustomerLiability">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of obligation to transfer good or service to customer for which consideration has been received or is receivable.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=126919976&amp;loc=SL49130531-203044<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 50<br> -Paragraph 8<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126920106&amp;loc=SL49130549-203045<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 606<br> -SubTopic 10<br> -Section 45<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126919976&amp;loc=SL49130532-203044<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ContractWithCustomerLiability</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_TypeOfArrangementAxis=spsc_SetUpFeesMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_TypeOfArrangementAxis=spsc_SetUpFeesMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>52
<FILENAME>R41.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082820423552">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Deferred Costs (Detail) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_DeferredCostsRollForward', window );"><strong>Deferred Costs [Roll Forward]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DeferredCostsCurrentAndNoncurrent', window );">Balance, beginning of period</a></td>
<td class="nump">$ 70,179<span></span>
</td>
<td class="nump">$ 59,720<span></span>
</td>
</tr>
<tr class="re">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_DeferredCostsIncurred', window );">Incurred deferred costs</a></td>
<td class="nump">18,234<span></span>
</td>
<td class="nump">17,781<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_DeferredCostsAmortized', window );">Amortized deferred costs</a></td>
<td class="num">(16,604)<span></span>
</td>
<td class="num">(14,891)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DeferredCostsCurrentAndNoncurrent', window );">Balance, end of period</a></td>
<td class="nump">$ 71,809<span></span>
</td>
<td class="nump">$ 62,610<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_DeferredCostsAmortized">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Deferred costs amortized.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_DeferredCostsAmortized</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_DeferredCostsIncurred">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Deferred costs incurred.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_DeferredCostsIncurred</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_DeferredCostsRollForward">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Deferred Costs</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_DeferredCostsRollForward</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DeferredCostsCurrentAndNoncurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The carrying amount of deferred costs.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DeferredCostsCurrentAndNoncurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>53
<FILENAME>R42.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082823836608">
<tr>
<th class="tl" colspan="1" rowspan="1"><div style="width: 200px;"><strong>Fair Value Measurements - Summary of Cash Equivalents and Investments (Detail) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Dec. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems', window );"><strong>Schedule of Financial Instruments [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis', window );">Amortized Cost</a></td>
<td class="nump">$ 145,026<span></span>
</td>
<td class="nump">$ 124,405<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax', window );">Unrealized Gains (Losses), net</a></td>
<td class="nump">404<span></span>
</td>
<td class="nump">375<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AvailableForSaleSecuritiesDebtSecurities', window );">Fair Value</a></td>
<td class="nump">145,430<span></span>
</td>
<td class="nump">124,780<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FinancialInstrumentAxis=us-gaap_CertificatesOfDepositMember', window );">Investments:</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems', window );"><strong>Schedule of Financial Instruments [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis', window );">Amortized Cost</a></td>
<td class="nump">6,687<span></span>
</td>
<td class="nump">6,813<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax', window );">Unrealized Gains (Losses), net</a></td>
<td class="nump">0<span></span>
</td>
<td class="nump">0<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AvailableForSaleSecuritiesDebtSecurities', window );">Fair Value</a></td>
<td class="nump">6,687<span></span>
</td>
<td class="nump">6,813<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BalanceSheetLocationAxis=us-gaap_CashEquivalentsMember', window );">Cash Equivalents | Money market funds</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems', window );"><strong>Schedule of Financial Instruments [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis', window );">Amortized Cost</a></td>
<td class="nump">94,284<span></span>
</td>
<td class="nump">73,368<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax', window );">Unrealized Gains (Losses), net</a></td>
<td class="nump">0<span></span>
</td>
<td class="nump">0<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AvailableForSaleSecuritiesDebtSecurities', window );">Fair Value</a></td>
<td class="nump">94,284<span></span>
</td>
<td class="nump">73,368<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BalanceSheetLocationAxis=spsc_MarketableSecuritiesMember', window );">Marketable Securities | Commercial paper</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems', window );"><strong>Schedule of Financial Instruments [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis', window );">Amortized Cost</a></td>
<td class="nump">34,228<span></span>
</td>
<td class="nump">44,224<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax', window );">Unrealized Gains (Losses), net</a></td>
<td class="nump">353<span></span>
</td>
<td class="nump">375<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AvailableForSaleSecuritiesDebtSecurities', window );">Fair Value</a></td>
<td class="nump">34,581<span></span>
</td>
<td class="nump">44,599<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_BalanceSheetLocationAxis=spsc_MarketableSecuritiesMember', window );">Marketable Securities | U.S. treasury securities</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems', window );"><strong>Schedule of Financial Instruments [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis', window );">Amortized Cost</a></td>
<td class="nump">9,827<span></span>
</td>
<td class="nump">0<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax', window );">Unrealized Gains (Losses), net</a></td>
<td class="nump">51<span></span>
</td>
<td class="nump">0<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AvailableForSaleSecuritiesDebtSecurities', window );">Fair Value</a></td>
<td class="nump">$ 9,878<span></span>
</td>
<td class="nump">$ 0<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amortized cost of investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 320<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126970911&amp;loc=d3e27161-111563<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 326<br> -SubTopic 30<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=124258926&amp;loc=SL82898722-210454<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AvailableForSaleSecuritiesDebtSecurities">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-03(6))<br> -URI https://asc.fasb.org/extlink&amp;oid=126897435&amp;loc=d3e534808-122878<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 326<br> -SubTopic 30<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=124258926&amp;loc=SL82898722-210454<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 320<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124260329&amp;loc=d3e26610-111562<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 320<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (aa)<br> -URI https://asc.fasb.org/extlink&amp;oid=126970911&amp;loc=d3e27161-111563<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AvailableForSaleSecuritiesDebtSecurities</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount, before tax, of unrealized gain (loss) in accumulated other comprehensive income (AOCI) on investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FinancialInstrumentAxis=us-gaap_CertificatesOfDepositMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FinancialInstrumentAxis=us-gaap_CertificatesOfDepositMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_BalanceSheetLocationAxis=us-gaap_CashEquivalentsMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_BalanceSheetLocationAxis=us-gaap_CashEquivalentsMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FinancialInstrumentAxis=us-gaap_MoneyMarketFundsMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FinancialInstrumentAxis=us-gaap_MoneyMarketFundsMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_BalanceSheetLocationAxis=spsc_MarketableSecuritiesMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_BalanceSheetLocationAxis=spsc_MarketableSecuritiesMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FinancialInstrumentAxis=us-gaap_CommercialPaperMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FinancialInstrumentAxis=us-gaap_CommercialPaperMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FinancialInstrumentAxis=us-gaap_USTreasurySecuritiesMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FinancialInstrumentAxis=us-gaap_USTreasurySecuritiesMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>54
<FILENAME>R43.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825656592">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Allowance for Credit Losses (Detail) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward', window );"><strong>Accounts Receivable, Allowance for Credit Loss [Roll Forward]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent', window );">Balance, beginning of period</a></td>
<td class="nump">$ 3,066<span></span>
</td>
<td class="nump">$ 4,249<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ProvisionForDoubtfulAccounts', window );">Provision for credit losses</a></td>
<td class="nump">1,206<span></span>
</td>
<td class="nump">1,144<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs', window );">Write-offs, net of recoveries</a></td>
<td class="num">(1,055)<span></span>
</td>
<td class="num">(1,106)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent', window );">Balance, end of period</a></td>
<td class="nump">$ 3,217<span></span>
</td>
<td class="nump">$ 4,287<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of allowance for credit loss on accounts receivable, classified as current.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 310<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=123577603&amp;loc=d3e5074-111524<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 326<br> -SubTopic 20<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=124255206&amp;loc=SL82895884-210446<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(4))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>A roll forward is a reconciliation of a concept from the beginning of a period to the end of a period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of direct write-downs of accounts receivable charged against the allowance.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 326<br> -SubTopic 20<br> -Section 50<br> -Paragraph 13<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=124255953&amp;loc=SL82919249-210447<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ProvisionForDoubtfulAccounts">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of expense (reversal of expense) for expected credit loss on accounts receivable.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 326<br> -SubTopic 20<br> -Section 50<br> -Paragraph 13<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124255953&amp;loc=SL82919249-210447<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ProvisionForDoubtfulAccounts</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>55
<FILENAME>R44.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824017760">
<tr>
<th class="tl" colspan="1" rowspan="1"><div style="width: 200px;"><strong>Property and Equipment, Net (Details) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Dec. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentLineItems', window );"><strong>Property, Plant and Equipment [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentGross', window );">Property and equipment, cost</a></td>
<td class="nump">$ 111,847<span></span>
</td>
<td class="nump">$ 107,816<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment', window );">Less: accumulated depreciation and amortization</a></td>
<td class="num">(76,769)<span></span>
</td>
<td class="num">(72,358)<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentNet', window );">Property and equipment, net</a></td>
<td class="nump">35,078<span></span>
</td>
<td class="nump">35,458<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentByTypeAxis=spsc_InternallyDevelopedSoftwareMember', window );">Internally developed software</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentLineItems', window );"><strong>Property, Plant and Equipment [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentGross', window );">Property and equipment, cost</a></td>
<td class="nump">53,530<span></span>
</td>
<td class="nump">49,994<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentByTypeAxis=us-gaap_ComputerEquipmentMember', window );">Computer equipment</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentLineItems', window );"><strong>Property, Plant and Equipment [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentGross', window );">Property and equipment, cost</a></td>
<td class="nump">30,601<span></span>
</td>
<td class="nump">30,310<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentByTypeAxis=us-gaap_LeaseholdImprovementsMember', window );">Leasehold improvements</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentLineItems', window );"><strong>Property, Plant and Equipment [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentGross', window );">Property and equipment, cost</a></td>
<td class="nump">16,603<span></span>
</td>
<td class="nump">16,531<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentByTypeAxis=spsc_OfficeEquipmentAndFurnitureMember', window );">Office equipment and furniture</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentLineItems', window );"><strong>Property, Plant and Equipment [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PropertyPlantAndEquipmentGross', window );">Property and equipment, cost</a></td>
<td class="nump">$ 11,113<span></span>
</td>
<td class="nump">$ 10,981<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of accumulated depreciation, depletion and amortization for physical assets used in the normal conduct of business to produce goods and services.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 360<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=6391035&amp;loc=d3e2868-110229<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(14))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PropertyPlantAndEquipmentGross">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount before accumulated depreciation, depletion and amortization of physical assets used in the normal conduct of business and not intended for resale. Examples include, but are not limited to, land, buildings, machinery and equipment, office equipment, and furniture and fixtures.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(13))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 360<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=6391035&amp;loc=d3e2868-110229<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PropertyPlantAndEquipmentGross</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PropertyPlantAndEquipmentLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PropertyPlantAndEquipmentLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PropertyPlantAndEquipmentNet">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after accumulated depreciation, depletion and amortization of physical assets used in the normal conduct of business to produce goods and services and not intended for resale. Examples include, but are not limited to, land, buildings, machinery and equipment, office equipment, and furniture and fixtures.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 360<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6391035&amp;loc=d3e2868-110229<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-03(a)(8))<br> -URI https://asc.fasb.org/extlink&amp;oid=126734703&amp;loc=d3e572229-122910<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 360<br> -Section 50<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=124429447&amp;loc=SL124453093-239630<br><br>Reference 4: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PropertyPlantAndEquipmentNet</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PropertyPlantAndEquipmentByTypeAxis=spsc_InternallyDevelopedSoftwareMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PropertyPlantAndEquipmentByTypeAxis=spsc_InternallyDevelopedSoftwareMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PropertyPlantAndEquipmentByTypeAxis=us-gaap_ComputerEquipmentMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PropertyPlantAndEquipmentByTypeAxis=us-gaap_ComputerEquipmentMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PropertyPlantAndEquipmentByTypeAxis=us-gaap_LeaseholdImprovementsMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PropertyPlantAndEquipmentByTypeAxis=us-gaap_LeaseholdImprovementsMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PropertyPlantAndEquipmentByTypeAxis=spsc_OfficeEquipmentAndFurnitureMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PropertyPlantAndEquipmentByTypeAxis=spsc_OfficeEquipmentAndFurnitureMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>56
<FILENAME>R45.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825571520">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Goodwill and Intangible Assets, Net - Schedule of Changes in Net Carrying Amount of Goodwill (Detail)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th">
<div>Mar. 31, 2023 </div>
<div>USD ($)</div>
</th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_GoodwillRollForward', window );"><strong>Goodwill [Roll Forward]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_Goodwill', window );">Balance, beginning of period</a></td>
<td class="nump">$ 197,284<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_GoodwillForeignCurrencyTranslationGainLoss', window );">Foreign currency translation</a></td>
<td class="num">(71)<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_GoodwillPurchaseAccountingAdjustments', window );">Remeasurement from provisional purchase accounting amount</a></td>
<td class="nump">1,788<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_Goodwill', window );">Balance, end of period</a></td>
<td class="nump">$ 199,001<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_Goodwill">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after accumulated impairment loss of an asset representing future economic benefits arising from other assets acquired in a business combination that are not individually identified and separately recognized.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-03(10)(1))<br> -URI https://asc.fasb.org/extlink&amp;oid=126897435&amp;loc=d3e534808-122878<br><br>Reference 3: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (h)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 4: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 55<br> -Paragraph 24<br> -URI https://asc.fasb.org/extlink&amp;oid=122137925&amp;loc=d3e14258-109268<br><br>Reference 5: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 852<br> -SubTopic 10<br> -Section 55<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=84165509&amp;loc=d3e56426-112766<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=99380562&amp;loc=d3e13770-109266<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(15))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_Goodwill</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_GoodwillForeignCurrencyTranslationGainLoss">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of foreign currency translation gain (loss) which increases (decreases) an asset representing future economic benefits from other assets acquired in a business combination that are not individually identified and separately recognized.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_GoodwillForeignCurrencyTranslationGainLoss</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_GoodwillPurchaseAccountingAdjustments">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of increase (decrease) from adjustments after acquisition date under purchase accounting of an asset representing the future economic benefits arising from other assets acquired in a business combination that are not individually identified and separately recognized.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (g)<br> -URI https://asc.fasb.org/extlink&amp;oid=121556970&amp;loc=d3e13816-109267<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 805<br> -SubTopic 10<br> -Section 25<br> -Paragraph 16<br> -URI https://asc.fasb.org/extlink&amp;oid=123586518&amp;loc=d3e961-128460<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_GoodwillPurchaseAccountingAdjustments</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_GoodwillRollForward">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>A roll forward is a reconciliation of a concept from the beginning of a period to the end of a period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_GoodwillRollForward</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>57
<FILENAME>R46.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082823777552">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Goodwill and Intangible Assets, Net - Intangible Assets (Detail) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
<th class="th" colspan="1">12 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Dec. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsLineItems', window );"><strong>Finite-Lived Intangible Assets [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsGross', window );">Gross Carrying Amount</a></td>
<td class="nump">$ 119,997<span></span>
</td>
<td class="nump">$ 120,711<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization', window );">Accumulated Amortization</a></td>
<td class="num">(35,497)<span></span>
</td>
<td class="num">(32,189)<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss', window );">Foreign Currency Translation</a></td>
<td class="nump">36<span></span>
</td>
<td class="num">(170)<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsNet', window );">Net</a></td>
<td class="nump">$ 84,536<span></span>
</td>
<td class="nump">$ 88,352<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1', window );">Weighted Average Remaining Amortization Period</a></td>
<td class="text">6 years 2 months 12 days<span></span>
</td>
<td class="text">6 years 4 months 24 days<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis=us-gaap_CustomerRelationshipsMember', window );">Subscriber relationships</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsLineItems', window );"><strong>Finite-Lived Intangible Assets [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsGross', window );">Gross Carrying Amount</a></td>
<td class="nump">$ 79,385<span></span>
</td>
<td class="nump">$ 80,101<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization', window );">Accumulated Amortization</a></td>
<td class="num">(24,205)<span></span>
</td>
<td class="num">(22,255)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss', window );">Foreign Currency Translation</a></td>
<td class="nump">29<span></span>
</td>
<td class="num">(171)<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsNet', window );">Net</a></td>
<td class="nump">$ 55,209<span></span>
</td>
<td class="nump">$ 57,675<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1', window );">Weighted Average Remaining Amortization Period</a></td>
<td class="text">6 years 7 months 6 days<span></span>
</td>
<td class="text">6 years 9 months 18 days<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis=us-gaap_TechnologyBasedIntangibleAssetsMember', window );">Acquired technology</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsLineItems', window );"><strong>Finite-Lived Intangible Assets [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsGross', window );">Gross Carrying Amount</a></td>
<td class="nump">$ 40,612<span></span>
</td>
<td class="nump">$ 40,610<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization', window );">Accumulated Amortization</a></td>
<td class="num">(11,292)<span></span>
</td>
<td class="num">(9,934)<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss', window );">Foreign Currency Translation</a></td>
<td class="nump">7<span></span>
</td>
<td class="nump">1<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsNet', window );">Net</a></td>
<td class="nump">$ 29,327<span></span>
</td>
<td class="nump">$ 30,677<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1', window );">Weighted Average Remaining Amortization Period</a></td>
<td class="text">5 years 6 months<span></span>
</td>
<td class="text">5 years 8 months 12 days<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Finite lived intangible assets accumulated foreign currency translation gain (loss).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Accumulated amount of amortization of assets, excluding financial assets and goodwill, lacking physical substance with a finite life.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(16))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsGross">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount before amortization of assets, excluding financial assets and goodwill, lacking physical substance with a finite life.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 928<br> -SubTopic 340<br> -Section 50<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6473545&amp;loc=d3e61844-108004<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsGross</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsNet">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after amortization of assets, excluding financial assets and goodwill, lacking physical substance with a finite life.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 926<br> -SubTopic 20<br> -Section 50<br> -Paragraph 5<br> -URI https://asc.fasb.org/extlink&amp;oid=120154696&amp;loc=d3e54445-107959<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsNet</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Remaining amortization period of finite-lived intangible assets, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents the reported fact of one year, five months, and thirteen days.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 926<br> -SubTopic 20<br> -Section 50<br> -Paragraph 5<br> -URI https://asc.fasb.org/extlink&amp;oid=120154696&amp;loc=d3e54445-107959<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis=us-gaap_CustomerRelationshipsMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis=us-gaap_CustomerRelationshipsMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis=us-gaap_TechnologyBasedIntangibleAssetsMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis=us-gaap_TechnologyBasedIntangibleAssetsMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>58
<FILENAME>R47.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824383232">
<tr>
<th class="tl" colspan="1" rowspan="1"><div style="width: 200px;"><strong>Goodwill and Intangible Assets, Net - Estimated Future Annual Amortization Expense Related to Intangible Assets Subject to Amortization (Detail) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Dec. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract', window );"><strong>Goodwill and Intangible Assets Disclosure [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear', window );">Remainder of 2023</a></td>
<td class="nump">$ 11,450<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths', window );">2024</a></td>
<td class="nump">14,102<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo', window );">2025</a></td>
<td class="nump">13,964<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree', window );">2026</a></td>
<td class="nump">12,960<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour', window );">2027</a></td>
<td class="nump">12,497<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour', window );">Thereafter</a></td>
<td class="nump">19,563<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_FiniteLivedIntangibleAssetsNet', window );">Net</a></td>
<td class="nump">$ 84,536<span></span>
</td>
<td class="nump">$ 88,352<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Finite lived intangible assets, amortization expense after year four.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of amortization for assets, excluding financial assets and goodwill, lacking physical substance with finite life expected to be recognized in next fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(3)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of amortization for assets, excluding financial assets and goodwill, lacking physical substance with finite life expected to be recognized in remainder of current fiscal year.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of amortization for assets, excluding financial assets and goodwill, lacking physical substance with finite life expected to be recognized in fourth fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(3)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of amortization for assets, excluding financial assets and goodwill, lacking physical substance with finite life expected to be recognized in third fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(3)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of amortization for assets, excluding financial assets and goodwill, lacking physical substance with finite life expected to be recognized in second fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(3)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_FiniteLivedIntangibleAssetsNet">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after amortization of assets, excluding financial assets and goodwill, lacking physical substance with a finite life.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 926<br> -SubTopic 20<br> -Section 50<br> -Paragraph 5<br> -URI https://asc.fasb.org/extlink&amp;oid=120154696&amp;loc=d3e54445-107959<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 350<br> -SubTopic 30<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=66006027&amp;loc=d3e16323-109275<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_FiniteLivedIntangibleAssetsNet</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>59
<FILENAME>R48.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825775568">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Commitments and Contingencies - Components of Lease Expense (Detail) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommitmentsAndContingenciesDisclosureAbstract', window );"><strong>Commitments and Contingencies Disclosure [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OperatingLeaseCost', window );">Operating lease cost</a></td>
<td class="nump">$ 798<span></span>
</td>
<td class="nump">$ 759<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_VariableLeaseCost', window );">Variable lease cost</a></td>
<td class="nump">928<span></span>
</td>
<td class="nump">793<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LeaseCost', window );">Lease expense</a></td>
<td class="nump">$ 1,726<span></span>
</td>
<td class="nump">$ 1,552<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommitmentsAndContingenciesDisclosureAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommitmentsAndContingenciesDisclosureAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LeaseCost">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of lease cost recognized by lessee for lease contract.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918686-209980<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 55<br> -Paragraph 53<br> -URI https://asc.fasb.org/extlink&amp;oid=123414884&amp;loc=SL77918982-209971<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LeaseCost</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OperatingLeaseCost">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of single lease cost, calculated by allocation of remaining cost of lease over remaining lease term. Includes, but is not limited to, single lease cost, after impairment of right-of-use asset, calculated by amortization of remaining right-of-use asset and accretion of lease liability.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 55<br> -Paragraph 53<br> -URI https://asc.fasb.org/extlink&amp;oid=123414884&amp;loc=SL77918982-209971<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 4<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918686-209980<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OperatingLeaseCost</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_VariableLeaseCost">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of variable lease cost, excluded from lease liability, recognized when obligation for payment is incurred for finance and operating leases.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 4<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918686-209980<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 55<br> -Paragraph 53<br> -URI https://asc.fasb.org/extlink&amp;oid=123414884&amp;loc=SL77918982-209971<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_VariableLeaseCost</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>60
<FILENAME>R49.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082818646208">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Commitments and Contingencies - Schedule of Supplemental Cash Flow Information Related to Leases (Detail) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract', window );"><strong>Cash paid for amounts included in the measurement of lease liabilities</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OperatingLeasePayments', window );">Operating cash flows from operating leases</a></td>
<td class="nump">$ 1,247<span></span>
</td>
<td class="nump">$ 1,095<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Cash paid for amounts included in the measurement of lease liabilities.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OperatingLeasePayments">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of cash outflow from operating lease, excluding payments to bring another asset to condition and location necessary for its intended use.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 45<br> -Paragraph 5<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=123391704&amp;loc=SL77918643-209977<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 4<br> -Subparagraph (g)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918686-209980<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OperatingLeasePayments</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>61
<FILENAME>R50.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824339680">
<tr>
<th class="tl" colspan="1" rowspan="1"><div style="width: 200px;"><strong>Commitments and Contingencies - Schedule of Supplemental Balance Sheet Information Related to Leases (Detail)<br></strong></div></th>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Dec. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommitmentsAndContingenciesDisclosureAbstract', window );"><strong>Commitments and Contingencies Disclosure [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1', window );">Weighted-average remaining lease term</a></td>
<td class="text">3 years 9 months 18 days<span></span>
</td>
<td class="text">3 years 10 months 24 days<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent', window );">Weighted-average discount rate</a></td>
<td class="nump">4.00%<span></span>
</td>
<td class="nump">4.00%<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommitmentsAndContingenciesDisclosureAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommitmentsAndContingenciesDisclosureAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Weighted average discount rate for operating lease calculated at point in time.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 4<br> -Subparagraph (g)(4)<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918686-209980<br><br>Reference 2: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 55<br> -Paragraph 53<br> -URI https://asc.fasb.org/extlink&amp;oid=123414884&amp;loc=SL77918982-209971<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:percentItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Weighted average remaining lease term for operating lease, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents reported fact of one year, five months, and thirteen days.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 55<br> -Paragraph 53<br> -URI https://asc.fasb.org/extlink&amp;oid=123414884&amp;loc=SL77918982-209971<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 4<br> -Subparagraph (g)(3)<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918686-209980<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>62
<FILENAME>R51.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824145344">
<tr>
<th class="tl" colspan="1" rowspan="1"><div style="width: 200px;"><strong>Commitments and Contingencies - Schedule of Future Minimum Payments Under Operating Leases (Detail)<br> $ in Thousands</strong></div></th>
<th class="th">
<div>Mar. 31, 2023 </div>
<div>USD ($)</div>
</th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommitmentsAndContingenciesDisclosureAbstract', window );"><strong>Commitments and Contingencies Disclosure [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear', window );">Remainder of 2023</a></td>
<td class="nump">$ 3,847<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths', window );">2024</a></td>
<td class="nump">4,471<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo', window );">2025</a></td>
<td class="nump">4,081<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree', window );">2026</a></td>
<td class="nump">3,763<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour', window );">2027</a></td>
<td class="nump">1,266<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue', window );">Total future gross payments</a></td>
<td class="nump">17,428<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount', window );">Less: imputed interest</a></td>
<td class="num">(1,313)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OperatingLeaseLiability', window );">Total operating lease liabilities</a></td>
<td class="nump">$ 16,115<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommitmentsAndContingenciesDisclosureAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommitmentsAndContingenciesDisclosureAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of lessee's undiscounted obligation for lease payment for operating lease.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918701-209980<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of lessee's undiscounted obligation for lease payment for operating lease to be paid in next fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918701-209980<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of lessee's undiscounted obligation for lease payment for operating lease to be paid in fourth fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918701-209980<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of lessee's undiscounted obligation for lease payment for operating lease to be paid in third fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918701-209980<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of lessee's undiscounted obligation for lease payment for operating lease to be paid in second fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918701-209980<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of lessee's undiscounted obligation for lease payment for operating lease having initial or remaining lease term in excess of one year to be paid in remainder of current fiscal year.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918701-209980<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of lessee's undiscounted obligation for lease payments in excess of discounted obligation for lease payments for operating lease.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=128292326&amp;loc=SL77918701-209980<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OperatingLeaseLiability">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Present value of lessee's discounted obligation for lease payments from operating lease.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 842<br> -SubTopic 20<br> -Section 45<br> -Paragraph 1<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=123391704&amp;loc=SL77918627-209977<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OperatingLeaseLiability</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>63
<FILENAME>R52.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082827456016">
<tr>
<th class="tl" colspan="1" rowspan="1"><div style="width: 200px;"><strong>Commitments and Contingencies - Narrative (Detail)<br> $ in Millions</strong></div></th>
<th class="th">
<div>Mar. 31, 2023 </div>
<div>USD ($)</div>
</th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_CommitmentsAndContingenciesDisclosureAbstract', window );"><strong>Commitments and Contingencies Disclosure [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted', window );">Remaining purchase commitment</a></td>
<td class="nump">$ 4.3<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_CommitmentsAndContingenciesDisclosureAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_CommitmentsAndContingenciesDisclosureAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Minimum amount to be expended to satisfy the terms of arrangements in which the entity has agreed to expend funds to procure goods or services, excluding long-term purchase commitments or unconditional purchase obligations.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-03(17))<br> -URI https://asc.fasb.org/extlink&amp;oid=126897435&amp;loc=d3e534808-122878<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 210<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-03(a)(19))<br> -URI https://asc.fasb.org/extlink&amp;oid=126734703&amp;loc=d3e572229-122910<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(25))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>64
<FILENAME>R53.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082823718576">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stockholders' Equity - Share Repurchase Plan (Details) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
<th class="th" colspan="1"></th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Dec. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_ScheduleOfStockholdersEquityLineItems', window );"><strong>Schedule Of Stockholders Equity [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockCommonValue', window );">Share Value Repurchased</a></td>
<td class="nump">$ 128,892<span></span>
</td>
<td class="nump">$ 128,892<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StatementEquityComponentsAxis=us-gaap_CommonStockMember', window );">Common Stock | 2021 Share Repurchase Program</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_ScheduleOfStockholdersEquityLineItems', window );"><strong>Schedule Of Stockholders Equity [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockRepurchaseProgramAuthorizedAmount1', window );">Share Value Authorized for Repurchase</a></td>
<td class="nump">50,000<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockCommonValue', window );">Share Value Repurchased</a></td>
<td class="nump">49,992<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue', window );">Unused &amp; Expired Share Repurchase Value</a></td>
<td class="nump">8<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StatementEquityComponentsAxis=us-gaap_CommonStockMember', window );">Common Stock | 2022 Stock Repurchase Program</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_ScheduleOfStockholdersEquityLineItems', window );"><strong>Schedule Of Stockholders Equity [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockRepurchaseProgramAuthorizedAmount1', window );">Share Value Authorized for Repurchase</a></td>
<td class="nump">50,000<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockCommonValue', window );">Share Value Repurchased</a></td>
<td class="nump">2,992<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1', window );">Share Value Available for Future Repurchase</a></td>
<td class="nump">$ 47,008<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_ScheduleOfStockholdersEquityLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Schedule of stockholders equity.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_ScheduleOfStockholdersEquityLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_TreasuryStockUnusedAndExpiredRepurchaseValue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Treasury Stock, Unused and Expired Repurchase Value</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_TreasuryStockUnusedAndExpiredRepurchaseValue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StockRepurchaseProgramAuthorizedAmount1">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of stock repurchase plan authorized.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StockRepurchaseProgramAuthorizedAmount1</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount remaining of a stock repurchase plan authorized.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_TreasuryStockCommonValue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount allocated to previously issued common shares repurchased by the issuing entity and held in treasury.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6405813&amp;loc=d3e23239-112655<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=6405834&amp;loc=d3e23315-112656<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02.30)<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_TreasuryStockCommonValue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StatementEquityComponentsAxis=us-gaap_CommonStockMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StatementEquityComponentsAxis=us-gaap_CommonStockMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareRepurchaseProgramAxis=spsc_A2021StockRepurchaseProgramMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareRepurchaseProgramAxis=spsc_A2021StockRepurchaseProgramMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareRepurchaseProgramAxis=spsc_A2022StockRepurchaseProgramMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareRepurchaseProgramAxis=spsc_A2022StockRepurchaseProgramMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>65
<FILENAME>R54.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825578640">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stockholders' Equity - Stock Repurchase Activity (Details) - USD ($)<br> $ / shares in Units, $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EquityAbstract', window );"><strong>Equity [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockSharesAcquired', window );">Number of shares repurchased (in shares)</a></td>
<td class="nump">0<span></span>
</td>
<td class="nump">121,544<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockValueAcquiredCostMethod', window );">Shares repurchased cost</a></td>
<td class="nump">$ 0<span></span>
</td>
<td class="nump">$ 15,226<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_TreasuryStockAcquiredAverageCostPerShare', window );">Average price per repurchased share (in dollars per share)</a></td>
<td class="nump">$ 0<span></span>
</td>
<td class="nump">$ 125.27<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EquityAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EquityAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_TreasuryStockAcquiredAverageCostPerShare">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Total cost of shares repurchased divided by the total number of shares repurchased.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6405813&amp;loc=d3e23239-112655<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_TreasuryStockAcquiredAverageCostPerShare</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_TreasuryStockSharesAcquired">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of shares that have been repurchased during the period and are being held in treasury.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=d3e21463-112644<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.3-04)<br> -URI https://asc.fasb.org/extlink&amp;oid=120397183&amp;loc=d3e187085-122770<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_TreasuryStockSharesAcquired</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_TreasuryStockValueAcquiredCostMethod">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Equity impact of the cost of common and preferred stock that were repurchased during the period. Recorded using the cost method.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=d3e21463-112644<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 30<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=6405813&amp;loc=d3e23239-112655<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.3-04)<br> -URI https://asc.fasb.org/extlink&amp;oid=120397183&amp;loc=d3e187085-122770<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_TreasuryStockValueAcquiredCostMethod</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>66
<FILENAME>R55.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082823389136">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stock-Based Compensation - Narrative (Detail) - USD ($)<br> $ / shares in Units, $ in Millions</strong></div></th>
<th class="th" colspan="4">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
<th class="th"><div>Mar. 31, 2021</div></th>
<th class="th"><div>Mar. 31, 2020</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant', window );">Shares available for grant (in shares)</a></td>
<td class="nump">12,800,000<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized', window );">Unrecognized stock-based compensation expense</a></td>
<td class="nump">$ 63.8<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1', window );">Unrecognized stock-based compensation, expected to be recognized, weighted average period</a></td>
<td class="text">2 years 7 months 6 days<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_SubsidiarySaleOfStockAxis=us-gaap_EmployeeStockMember', window );">Employee Stock Purchase Plan</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance', window );">Common stock reserved for future issuance (in shares)</a></td>
<td class="nump">1,700,000<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AwardTypeAxis=us-gaap_EmployeeStockOptionMember', window );">Stock options</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber', window );">Outstanding and exercisable options (in shares)</a></td>
<td class="nump">400,000<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice', window );">Weighted average exercise price (in dollars per share)</a></td>
<td class="nump">$ 53.22<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2', window );">Weighted average remaining contractual life</a></td>
<td class="text">3 years<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue', window );">Weighted average fair value per share of options granted (in dollars per share)</a></td>
<td class="nump">$ 54.53<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AwardTypeAxis=us-gaap_PerformanceSharesMember', window );">Performance Share Unit</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1', window );">Vesting period</a></td>
<td class="text">3 years<span></span>
</td>
<td class="text">3 years<span></span>
</td>
<td class="text">3 years<span></span>
</td>
<td class="text">3 years<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AwardTypeAxis=us-gaap_PerformanceSharesMember', window );">Performance Share Unit | Maximum</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod', window );">Shares issued (in shares)</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">100,000<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AwardTypeAxis=spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember', window );">PSU, RSU, RSA, and DSU | Maximum</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd', window );">Vested at period end (in shares)</a></td>
<td class="nump">100,000<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Share-Based Compensation Arrangement By Share-Based Payment Award, Equity Instruments Other Than Options, Vested At Period End</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of common shares reserved for future issuance related to deferred compensation arrangements with individuals.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of cost not yet recognized for nonvested award under share-based payment arrangement.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (i)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Weighted-average period over which cost not yet recognized is expected to be recognized for award under share-based payment arrangement, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents reported fact of one year, five months, and thirteen days.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (i)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Period over which grantee's right to exercise award under share-based payment arrangement is no longer contingent on satisfaction of service or performance condition, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents reported fact of one year, five months, and thirteen days. Includes, but is not limited to, combination of market, performance or service condition.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (a)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The difference between the maximum number of shares (or other type of equity) authorized for issuance under the plan (including the effects of amendments and adjustments), and the sum of: 1) the number of shares (or other type of equity) already issued upon exercise of options or other equity-based awards under the plan; and 2) shares (or other type of equity) reserved for issuance on granting of outstanding awards, net of cancellations and forfeitures, if applicable.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The number of shares into which fully or partially vested stock options outstanding as of the balance sheet date can be currently converted under the option plan.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)(iii)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The weighted-average price as of the balance sheet date at which grantees can acquire the shares reserved for issuance on vested portions of options outstanding and currently exercisable under the stock option plan.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)(iii)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The weighted average grant-date fair value of options granted during the reporting period as calculated by applying the disclosed option pricing methodology.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (d)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of shares issued under share-based payment arrangement.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Weighted average remaining contractual term for option awards outstanding, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents the reported fact of one year, five months, and thirteen days.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (e)(1)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_SubsidiarySaleOfStockAxis=us-gaap_EmployeeStockMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_SubsidiarySaleOfStockAxis=us-gaap_EmployeeStockMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AwardTypeAxis=us-gaap_EmployeeStockOptionMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AwardTypeAxis=us-gaap_EmployeeStockOptionMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AwardTypeAxis=us-gaap_PerformanceSharesMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AwardTypeAxis=us-gaap_PerformanceSharesMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_srt_RangeAxis=srt_MaximumMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">srt_RangeAxis=srt_MaximumMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AwardTypeAxis=spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AwardTypeAxis=spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>67
<FILENAME>R56.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082818687216">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stock-Based Compensation - Stock-Based Compensation Expense (Detail) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllocatedShareBasedCompensationExpense', window );">Stock-based compensation expense</a></td>
<td class="nump">$ 11,780<span></span>
</td>
<td class="nump">$ 9,015<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AwardTypeAxis=us-gaap_EmployeeStockOptionMember', window );">Stock options</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllocatedShareBasedCompensationExpense', window );">Stock-based compensation expense</a></td>
<td class="nump">490<span></span>
</td>
<td class="nump">477<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AwardTypeAxis=us-gaap_PerformanceSharesMember', window );">PSUs</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllocatedShareBasedCompensationExpense', window );">Stock-based compensation expense</a></td>
<td class="nump">3,926<span></span>
</td>
<td class="nump">2,699<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AwardTypeAxis=us-gaap_RestrictedStockUnitsRSUMember', window );">RSUs</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllocatedShareBasedCompensationExpense', window );">Stock-based compensation expense</a></td>
<td class="nump">6,062<span></span>
</td>
<td class="nump">4,638<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AwardTypeAxis=spsc_RestrictedStockUnitsAndDeferredStockUnitsMember', window );">RSAs &amp; DSUs</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllocatedShareBasedCompensationExpense', window );">Stock-based compensation expense</a></td>
<td class="nump">108<span></span>
</td>
<td class="nump">108<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AwardTypeAxis=spsc_EmployeeStockPurchasePlanMember', window );">ESPP</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllocatedShareBasedCompensationExpense', window );">Stock-based compensation expense</a></td>
<td class="nump">589<span></span>
</td>
<td class="nump">574<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AwardTypeAxis=spsc_FourZeroOneKStockMatchMember', window );">401(k) stock match</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllocatedShareBasedCompensationExpense', window );">Stock-based compensation expense</a></td>
<td class="nump">605<span></span>
</td>
<td class="nump">519<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncomeStatementLocationAxis=us-gaap_CostOfSalesMember', window );">Cost of revenues</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllocatedShareBasedCompensationExpense', window );">Stock-based compensation expense</a></td>
<td class="nump">2,503<span></span>
</td>
<td class="nump">2,179<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncomeStatementLocationAxis=us-gaap_SellingAndMarketingExpenseMember', window );">Sales and marketing</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllocatedShareBasedCompensationExpense', window );">Stock-based compensation expense</a></td>
<td class="nump">2,423<span></span>
</td>
<td class="nump">2,032<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncomeStatementLocationAxis=us-gaap_ResearchAndDevelopmentExpenseMember', window );">Research and development</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllocatedShareBasedCompensationExpense', window );">Stock-based compensation expense</a></td>
<td class="nump">1,777<span></span>
</td>
<td class="nump">1,474<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncomeStatementLocationAxis=us-gaap_GeneralAndAdministrativeExpenseMember', window );">General and administrative</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AllocatedShareBasedCompensationExpense', window );">Stock-based compensation expense</a></td>
<td class="nump">$ 5,077<span></span>
</td>
<td class="nump">$ 3,330<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AllocatedShareBasedCompensationExpense">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of expense for award under share-based payment arrangement. Excludes amount capitalized.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (h)(1)(i)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AllocatedShareBasedCompensationExpense</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AwardTypeAxis=us-gaap_EmployeeStockOptionMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AwardTypeAxis=us-gaap_EmployeeStockOptionMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AwardTypeAxis=us-gaap_PerformanceSharesMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AwardTypeAxis=us-gaap_PerformanceSharesMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AwardTypeAxis=us-gaap_RestrictedStockUnitsRSUMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AwardTypeAxis=us-gaap_RestrictedStockUnitsRSUMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AwardTypeAxis=spsc_RestrictedStockUnitsAndDeferredStockUnitsMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AwardTypeAxis=spsc_RestrictedStockUnitsAndDeferredStockUnitsMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AwardTypeAxis=spsc_EmployeeStockPurchasePlanMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AwardTypeAxis=spsc_EmployeeStockPurchasePlanMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AwardTypeAxis=spsc_FourZeroOneKStockMatchMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AwardTypeAxis=spsc_FourZeroOneKStockMatchMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncomeStatementLocationAxis=us-gaap_CostOfSalesMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncomeStatementLocationAxis=us-gaap_CostOfSalesMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncomeStatementLocationAxis=us-gaap_SellingAndMarketingExpenseMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncomeStatementLocationAxis=us-gaap_SellingAndMarketingExpenseMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncomeStatementLocationAxis=us-gaap_ResearchAndDevelopmentExpenseMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncomeStatementLocationAxis=us-gaap_ResearchAndDevelopmentExpenseMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncomeStatementLocationAxis=us-gaap_GeneralAndAdministrativeExpenseMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncomeStatementLocationAxis=us-gaap_GeneralAndAdministrativeExpenseMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>68
<FILENAME>R57.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824289088">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stock-Based Compensation - Stock Option Activity (Detail)<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th">
<div>Mar. 31, 2023 </div>
<div>$ / shares </div>
<div>shares</div>
</th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward', window );"><strong>Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding [Roll Forward]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber', window );">Outstanding, beginning of period (in shares) | shares</a></td>
<td class="nump">562,697<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross', window );">Granted (in shares) | shares</a></td>
<td class="nump">30,148<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised', window );">Exercised (in shares) | shares</a></td>
<td class="num">(68,088)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod', window );">Forfeited (in shares) | shares</a></td>
<td class="num">(1,916)<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber', window );">Outstanding, end of period (in shares) | shares</a></td>
<td class="nump">522,841<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward', window );"><strong>Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding, Weighted Average Exercise Price [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice', window );">Outstanding, beginning of period (in dollars per share) | $ / shares</a></td>
<td class="nump">$ 56.24<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice', window );">Granted (in dollars per share) | $ / shares</a></td>
<td class="nump">150.76<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice', window );">Exercised (in dollars per share) | $ / shares</a></td>
<td class="nump">32.06<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice', window );">Forfeited (in dollars per share) | $ / shares</a></td>
<td class="nump">123.49<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice', window );">Outstanding, end of period (in dollars per share) | $ / shares</a></td>
<td class="nump">$ 64.60<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The number of shares under options that were cancelled during the reporting period as a result of occurrence of a terminating event specified in contractual agreements pertaining to the stock option plan.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)(iv)(03)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Gross number of share options (or share units) granted during the period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)(iv)(01)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of options outstanding, including both vested and non-vested options.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)(ii)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)(i)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>A roll forward is a reconciliation of a concept from the beginning of a period to the end of a period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Weighted average price at which grantees can acquire the shares reserved for issuance under the stock option plan.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)(ii)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)(i)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Weighted average price at which option holders acquired shares when converting their stock options into shares.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)(iv)(02)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Weighted average price at which grantees could have acquired the underlying shares with respect to stock options that were terminated.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)(iv)(03)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Weighted average per share amount at which grantees can acquire shares of common stock by exercise of options.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)(iv)(01)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of share options (or share units) exercised during the current period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(1)(iv)(02)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.3-04)<br> -URI https://asc.fasb.org/extlink&amp;oid=120397183&amp;loc=d3e187085-122770<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(28))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 210<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.5-02(29))<br> -URI https://asc.fasb.org/extlink&amp;oid=120391452&amp;loc=d3e13212-122682<br><br>Reference 5: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 505<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126973232&amp;loc=d3e21463-112644<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>69
<FILENAME>R58.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082820387152">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stock-Based Compensation - Weighted Average Grant Date Fair Value of Options Granted, Assumptions (Detail) - Stock options<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1', window );">Life (in years)</a></td>
<td class="text">3 years 10 months 24 days<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate', window );">Volatility</a></td>
<td class="nump">39.70%<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate', window );">Dividend yield</a></td>
<td class="nump">0.00%<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate', window );">Risk-free interest rate</a></td>
<td class="nump">4.20%<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The estimated dividend rate (a percentage of the share price) to be paid (expected dividends) to holders of the underlying shares over the option's term.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (f)(2)(iii)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:percentItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The risk-free interest rate assumption that is used in valuing an option on its own shares.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (f)(2)(iv)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:percentItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Rate of weighted-average expected volatility for award under share-based payment arrangement.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (f)(2)(ii)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:percentItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Expected term of award under share-based payment arrangement, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents reported fact of one year, five months, and thirteen days.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (f)(2)(i)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AwardTypeAxis=us-gaap_EmployeeStockOptionMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AwardTypeAxis=us-gaap_EmployeeStockOptionMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>70
<FILENAME>R59.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824284864">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stock-Based Compensation - PSU, RSU, RSA, and DSU (Detail) - PSU, RSU, RSA, and DSU<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th">
<div>Mar. 31, 2023 </div>
<div>$ / shares </div>
<div>shares</div>
</th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward', window );"><strong>#</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber', window );">Outstanding, beginning of period (in shares) | shares</a></td>
<td class="nump">712,158<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod', window );">Granted (in shares) | shares</a></td>
<td class="nump">304,635<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod', window );">Vested and common stock issued (in shares) | shares</a></td>
<td class="num">(305,123)<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod', window );">Forfeited (in shares) | shares</a></td>
<td class="num">(3,798)<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber', window );">Outstanding, end of period (in shares) | shares</a></td>
<td class="nump">707,872<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward', window );"><strong>Weighted Average Grant Date Fair Value ($/share)</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue', window );">Outstanding, beginning of period (in dollars per share) | $ / shares</a></td>
<td class="nump">$ 103.93<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue', window );">Granted (in dollars per share) | $ / shares</a></td>
<td class="nump">163.06<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue', window );">Vested and common stock issued (in dollars per share) | $ / shares</a></td>
<td class="nump">74.70<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue', window );">Forfeited (in dollars per share) | $ / shares</a></td>
<td class="nump">112.93<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue', window );">Outstanding, end of period (in dollars per share) | $ / shares</a></td>
<td class="nump">$ 141.92<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The number of equity-based payment instruments, excluding stock (or unit) options, that were forfeited during the reporting period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(2)(iii)(03)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Weighted average fair value as of the grant date of equity-based award plans other than stock (unit) option plans that were not exercised or put into effect as a result of the occurrence of a terminating event.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(2)(iii)(03)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The number of grants made during the period on other than stock (or unit) option plans (for example, phantom stock or unit plan, stock or unit appreciation rights plan, performance target plan).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(2)(iii)(01)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The weighted average fair value at grant date for nonvested equity-based awards issued during the period on other than stock (or unit) option plans (for example, phantom stock or unit plan, stock or unit appreciation rights plan, performance target plan).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(2)(iii)(01)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The number of non-vested equity-based payment instruments, excluding stock (or unit) options, that validly exist and are outstanding as of the balance sheet date.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(2)(ii)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(2)(i)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>A roll forward is a reconciliation of a concept from the beginning of a period to the end of a period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Per share or unit weighted-average fair value of nonvested award under share-based payment arrangement. Excludes share and unit options.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(2)(i)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(2)(ii)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The number of equity-based payment instruments, excluding stock (or unit) options, that vested during the reporting period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(2)(iii)(02)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The weighted average fair value as of grant date pertaining to an equity-based award plan other than a stock (or unit) option plan for which the grantee gained the right during the reporting period, by satisfying service and performance requirements, to receive or retain shares or units, other instruments, or cash in accordance with the terms of the arrangement.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (c)(2)(iii)(02)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AwardTypeAxis=spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AwardTypeAxis=spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>71
<FILENAME>R60.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082825571520">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stock-Based Compensation - Summary of ESPP Activity (Detail) - Employee Stock Purchase Plan - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl custom" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward', window );">Share Based Compensation Arrangement By Share Based Payment Award Value Purchased For Award</a></td>
<td class="nump">$ 241<span></span>
</td>
<td class="nump">$ 147<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward', window );">Share-Based Compensation Arrangement by Share-Based Payment Award, Shares Purchased for Award</a></td>
<td class="nump">2,549<span></span>
</td>
<td class="nump">1,698<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance', window );">Common stock reserved for future issuance (in shares)</a></td>
<td class="nump">1,700,000<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Share-based compensation arrangement by share-based payment award value purchased for award.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>debit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of common shares reserved for future issuance related to deferred compensation arrangements with individuals.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>instant</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of shares purchased for issuance under share-based payment arrangement.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (l)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_SubsidiarySaleOfStockAxis=us-gaap_EmployeeStockMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_SubsidiarySaleOfStockAxis=us-gaap_EmployeeStockMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>72
<FILENAME>R61.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824053472">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Stock-Based Compensation - Fair Value Estimation of Common Stock Using Black-Scholes Option Pricing Model, Assumptions (Detail) - Employee Stock Purchase Plan<br></strong></div></th>
<th class="th" colspan="1">3 Months Ended</th>
</tr>
<tr><th class="th"><div>Mar. 31, 2023</div></th></tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems', window );"><strong>Share-based Compensation Arrangement by Share-based Payment Award [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1', window );">Life (in years)</a></td>
<td class="text">6 months<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate', window );">Volatility</a></td>
<td class="nump">46.40%<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate', window );">Dividend yield</a></td>
<td class="nump">0.00%<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate', window );">Risk-free interest rate</a></td>
<td class="nump">2.50%<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The estimated dividend rate (a percentage of the share price) to be paid (expected dividends) to holders of the underlying shares over the option's term.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (f)(2)(iii)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:percentItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The estimated measure of the percentage by which a share price is expected to fluctuate during a period. Volatility also may be defined as a probability-weighted measure of the dispersion of returns about the mean. The volatility of a share price is the standard deviation of the continuously compounded rates of return on the share over a specified period. That is the same as the standard deviation of the differences in the natural logarithms of the stock prices plus dividends, if any, over the period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (f)(2)(ii)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:percentItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The risk-free interest rate assumption that is used in valuing an option on its own shares.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (f)(2)(iv)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:percentItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Expected term of award under share-based payment arrangement, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents reported fact of one year, five months, and thirteen days.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 50<br> -Paragraph 2<br> -Subparagraph (f)(2)(i)<br> -URI https://asc.fasb.org/extlink&amp;oid=128089324&amp;loc=d3e5070-113901<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:durationItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_SubsidiarySaleOfStockAxis=us-gaap_EmployeeStockMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_SubsidiarySaleOfStockAxis=us-gaap_EmployeeStockMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>73
<FILENAME>R62.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824040368">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Other Income and Expense (Detail) - USD ($)<br> $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherIncomeAndExpensesAbstract', window );"><strong>Other Income and Expenses [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_InvestmentIncomeNet', window );">Investment income</a></td>
<td class="nump">$ 1,127<span></span>
</td>
<td class="nump">$ 48<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax', window );">Realized gain from foreign currency on cash and investments held</a></td>
<td class="nump">137<span></span>
</td>
<td class="nump">468<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_OtherNonoperatingIncomeExpense', window );">Other income (expense), net</a></td>
<td class="nump">12<span></span>
</td>
<td class="num">(93)<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NonoperatingIncomeExpense', window );">Total other income, net</a></td>
<td class="nump">$ 1,276<span></span>
</td>
<td class="nump">$ 423<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ForeignCurrencyTransactionGainLossBeforeTax">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount before tax of foreign currency transaction realized and unrealized gain (loss) recognized in the income statement.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 830<br> -SubTopic 20<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=125521441&amp;loc=d3e30690-110894<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 830<br> -SubTopic 20<br> -Section 35<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=123602790&amp;loc=d3e30226-110892<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 830<br> -SubTopic 10<br> -Section 45<br> -Paragraph 17<br> -URI https://asc.fasb.org/extlink&amp;oid=126980362&amp;loc=d3e28228-110885<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 830<br> -SubTopic 20<br> -Section 50<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=124440516&amp;loc=d3e30840-110895<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ForeignCurrencyTransactionGainLossBeforeTax</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_InvestmentIncomeNet">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount after accretion (amortization) of discount (premium), and investment expense, of interest income and dividend income on nonoperating securities.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03.7(a),(b))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03.8)<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_InvestmentIncomeNet</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NonoperatingIncomeExpense">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The aggregate amount of income or expense from ancillary business-related activities (that is to say, excluding major activities considered part of the normal operations of the business).</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03.7)<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NonoperatingIncomeExpense</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherIncomeAndExpensesAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherIncomeAndExpensesAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_OtherNonoperatingIncomeExpense">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Amount of income (expense) related to nonoperating activities, classified as other.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03.9)<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_OtherNonoperatingIncomeExpense</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>74
<FILENAME>R63.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082824037424">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Net Income Per Share - Components and Computation of Basic and Diluted Net Income Per Share (Detail) - USD ($)<br> $ / shares in Units, shares in Thousands, $ in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NetIncomeLossAbstract', window );"><strong>Numerator</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_NetIncomeLoss', window );">Net income</a></td>
<td class="nump">$ 15,289<span></span>
</td>
<td class="nump">$ 12,603<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract', window );"><strong>Denominator</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic', window );">Weighted average common shares outstanding, basic (in shares)</a></td>
<td class="nump">36,427<span></span>
</td>
<td class="nump">36,136<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements', window );">Options to purchase common stock (in shares)</a></td>
<td class="nump">307<span></span>
</td>
<td class="nump">419<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares', window );">PSUs, RSUs, RSAs, and DSUs (in shares)</a></td>
<td class="nump">421<span></span>
</td>
<td class="nump">434<span></span>
</td>
</tr>
<tr class="reu">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding', window );">Weighted average common shares outstanding, diluted (in shares)</a></td>
<td class="nump">37,155<span></span>
</td>
<td class="nump">36,989<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_spsc_EarningsPerShareBasicAndDilutedEPSAbstract', window );"><strong>Net income per share</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EarningsPerShareBasic', window );">Basic (in dollars per share)</a></td>
<td class="nump">$ 0.42<span></span>
</td>
<td class="nump">$ 0.35<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EarningsPerShareDiluted', window );">Diluted (in dollars per share)</a></td>
<td class="nump">$ 0.41<span></span>
</td>
<td class="nump">$ 0.34<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_spsc_EarningsPerShareBasicAndDilutedEPSAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Earnings Per Share, Basic And Diluted EPS</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">spsc_EarningsPerShareBasicAndDilutedEPSAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>spsc_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EarningsPerShareBasic">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The amount of net income (loss) for the period per each share of common stock or unit outstanding during the reporting period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 65<br> -Paragraph 1<br> -Subparagraph (e)(4)<br> -URI https://asc.fasb.org/extlink&amp;oid=126732423&amp;loc=SL123482106-238011<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22583-107794<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1448-109256<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22595-107794<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 7<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1337-109256<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 65<br> -Paragraph 1<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126732423&amp;loc=SL123482106-238011<br><br>Reference 9: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 55<br> -Paragraph 52<br> -URI https://asc.fasb.org/extlink&amp;oid=128363288&amp;loc=d3e4984-109258<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-04(23))<br> -URI https://asc.fasb.org/extlink&amp;oid=120400993&amp;loc=SL114874131-224263<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 55<br> -Paragraph 15<br> -URI https://asc.fasb.org/extlink&amp;oid=128363288&amp;loc=d3e3842-109258<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 7<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22644-107794<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(25))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1252-109256<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 60B<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=SL5780133-109256<br><br>Reference 17: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-04(27))<br> -URI https://asc.fasb.org/extlink&amp;oid=120399700&amp;loc=SL114874048-224260<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EarningsPerShareBasic</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EarningsPerShareDiluted">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The amount of net income (loss) for the period available to each share of common stock or common unit outstanding during the reporting period and to each share or unit that would have been outstanding assuming the issuance of common shares or units for all dilutive potential common shares or units outstanding during the reporting period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 55<br> -Paragraph 52<br> -URI https://asc.fasb.org/extlink&amp;oid=128363288&amp;loc=d3e4984-109258<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 7<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22644-107794<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 55<br> -Paragraph 15<br> -URI https://asc.fasb.org/extlink&amp;oid=128363288&amp;loc=d3e3842-109258<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 2<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1252-109256<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22595-107794<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22583-107794<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 60B<br> -Subparagraph (d)<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=SL5780133-109256<br><br>Reference 9: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 65<br> -Paragraph 1<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126732423&amp;loc=SL123482106-238011<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-04(27))<br> -URI https://asc.fasb.org/extlink&amp;oid=120399700&amp;loc=SL114874048-224260<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-04(23))<br> -URI https://asc.fasb.org/extlink&amp;oid=120400993&amp;loc=SL114874131-224263<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 7<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1337-109256<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 65<br> -Paragraph 1<br> -Subparagraph (e)(4)<br> -URI https://asc.fasb.org/extlink&amp;oid=126732423&amp;loc=SL123482106-238011<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(25))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EarningsPerShareDiluted</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:perShareItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Additional shares included in the calculation of diluted EPS as a result of the potentially dilutive effect of contingently issuable shares. Contingently issuable shares are those shares that are issuable for little or no cash contingent on certain conditions being met.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 54<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e2603-109256<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 44<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e2062-109256<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 26<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1828-109256<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 53<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e2600-109256<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 52<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e2597-109256<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 48<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e2538-109256<br><br>Reference 8: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 48<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e2538-109256<br><br>Reference 9: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 23<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1757-109256<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 51<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e2574-109256<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Additional shares included in the calculation of diluted EPS as a result of the potentially dilutive effect of share based payment arrangements using the treasury stock method.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 718<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1<br> -URI https://asc.fasb.org/extlink&amp;oid=126962052&amp;loc=d3e4991-113900<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 22<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1707-109256<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br><br>Reference 4: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28A<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1500-109256<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 23<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1757-109256<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NetIncomeLoss">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The portion of profit or loss for the period, net of income taxes, which is attributable to the parent.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 942<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.9-04(22))<br> -URI https://asc.fasb.org/extlink&amp;oid=120399700&amp;loc=SL114874048-224260<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br><br>Reference 3: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 4<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22595-107794<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 944<br> -SubTopic 220<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.7-04(18))<br> -URI https://asc.fasb.org/extlink&amp;oid=120400993&amp;loc=SL114874131-224263<br><br>Reference 5: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 815<br> -SubTopic 40<br> -Section 65<br> -Paragraph 1<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=126732423&amp;loc=SL123482106-238011<br><br>Reference 6: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 50<br> -Paragraph 6<br> -URI https://asc.fasb.org/extlink&amp;oid=124431353&amp;loc=SL124452729-227067<br><br>Reference 7: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 8: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section S99<br> -Paragraph 2<br> -Subparagraph (SX 210.5-03(20))<br> -URI https://asc.fasb.org/extlink&amp;oid=126953954&amp;loc=SL114868664-224227<br><br>Reference 9: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 230<br> -SubTopic 10<br> -Section 45<br> -Paragraph 28<br> -URI https://asc.fasb.org/extlink&amp;oid=126954810&amp;loc=d3e3602-108585<br><br>Reference 10: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (b)(2)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22499-107794<br><br>Reference 11: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 12: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 13: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 14: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(i))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 15: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 9<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22663-107794<br><br>Reference 16: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iv))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 17: http://www.xbrl.org/2009/role/commonPracticeRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(4)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 18: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 28<br> -Subparagraph (f)<br> -URI https://asc.fasb.org/extlink&amp;oid=123596393&amp;loc=d3e14064-108612<br><br>Reference 19: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22583-107794<br><br>Reference 20: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 235<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1<br> -Subparagraph (SX 210.4-08(g)(1)(ii))<br> -URI https://asc.fasb.org/extlink&amp;oid=120395691&amp;loc=d3e23780-122690<br><br>Reference 21: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 60B<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=SL5780133-109256<br><br>Reference 22: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 323<br> -SubTopic 10<br> -Section 50<br> -Paragraph 3<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=114001798&amp;loc=d3e33918-111571<br><br>Reference 23: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 8<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22658-107794<br><br>Reference 24: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1A<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669619-108580<br><br>Reference 25: http://www.xbrl.org/2003/role/exampleRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 31<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8924-108599<br><br>Reference 26: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 27: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 250<br> -SubTopic 10<br> -Section 50<br> -Paragraph 11<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124431687&amp;loc=d3e22694-107794<br><br>Reference 28: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 205<br> -SubTopic 20<br> -Section 50<br> -Paragraph 7<br> -URI https://asc.fasb.org/extlink&amp;oid=109222650&amp;loc=SL51721683-107760<br><br>Reference 29: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 220<br> -SubTopic 10<br> -Section 45<br> -Paragraph 1B<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=126968391&amp;loc=SL7669625-108580<br><br>Reference 30: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 22<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8736-108599<br><br>Reference 31: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1A<br> -Subparagraph (SX 210.13-01(a)(5))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442526-122756<br><br>Reference 32: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(B))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 33: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 470<br> -SubTopic 10<br> -Section S99<br> -Paragraph 1B<br> -Subparagraph (SX 210.13-02(a)(4)(iii)(A))<br> -URI https://asc.fasb.org/extlink&amp;oid=126975872&amp;loc=SL124442552-122756<br><br>Reference 34: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 30<br> -Subparagraph (b)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8906-108599<br><br>Reference 35: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 32<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e8933-108599<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NetIncomeLoss</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:monetaryItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>credit</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_NetIncomeLossAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_NetIncomeLossAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>The average number of shares or units issued and outstanding that are used in calculating diluted EPS or earnings per unit (EPU), determined based on the timing of issuance of shares or units in the period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 16<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1505-109256<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_WeightedAverageNumberOfSharesOutstandingBasic">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Number of [basic] shares or units, after adjustment for contingently issuable shares or units and other shares or units not deemed outstanding, determined by relating the portion of time within a reporting period that common shares or units have been outstanding to the total time in that period.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br><br>Reference 2: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 45<br> -Paragraph 10<br> -URI https://asc.fasb.org/extlink&amp;oid=126958026&amp;loc=d3e1448-109256<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_WeightedAverageNumberOfSharesOutstandingBasic</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>75
<FILENAME>R64.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082827442192">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Net Income Per Share - Schedule of Anti-dilutive Common Shares Excluded from Calculation of Diluted Net Income Per Share (Detail) - shares<br> shares in Thousands</strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_EarningsPerShareAbstract', window );"><strong>Earnings Per Share [Abstract]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount', window );">Antidilutive shares (in shares)</a></td>
<td class="nump">108<span></span>
</td>
<td class="nump">151<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Securities (including those issuable pursuant to contingent stock agreements) that could potentially dilute basic earnings per share (EPS) or earnings per unit (EPU) in the future that were not included in the computation of diluted EPS or EPU because to do so would increase EPS or EPU amounts or decrease loss per share or unit amounts for the period presented.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 260<br> -SubTopic 10<br> -Section 50<br> -Paragraph 1<br> -Subparagraph (c)<br> -URI https://asc.fasb.org/extlink&amp;oid=124432515&amp;loc=d3e3550-109257<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:sharesItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_EarningsPerShareAbstract">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- References</a><div><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_EarningsPerShareAbstract</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>76
<FILENAME>R65.htm
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="include/report.css">
<script type="text/javascript" src="Show.js">/* Do Not Remove This Comment */</script><script type="text/javascript">
							function toggleNextSibling (e) {
							if (e.nextSibling.style.display=='none') {
							e.nextSibling.style.display='block';
							} else { e.nextSibling.style.display='none'; }
							}</script>
</head>
<body>
<span style="display: none;">v3.23.1</span><table class="report" border="0" cellspacing="2" id="idm140082831383888">
<tr>
<th class="tl" colspan="1" rowspan="2"><div style="width: 200px;"><strong>Geographic Information - Summary of Domestic Revenue (Detail) - Revenue Benchmark - Geographic Concentration Risk<br></strong></div></th>
<th class="th" colspan="2">3 Months Ended</th>
<th class="th" colspan="1">12 Months Ended</th>
</tr>
<tr>
<th class="th"><div>Mar. 31, 2023</div></th>
<th class="th"><div>Mar. 31, 2022</div></th>
<th class="th"><div>Dec. 31, 2022</div></th>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ConcentrationRiskByBenchmarkAxis=us-gaap_SalesRevenueNetMember', window );">Domestic Revenue</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DisaggregationOfRevenueLineItems', window );"><strong>Disaggregation Of Revenue [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ConcentrationRiskPercentage1', window );">Concentration risk, percentage</a></td>
<td class="nump">84.00%<span></span>
</td>
<td class="nump">84.00%<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="rh">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ConcentrationRiskByBenchmarkAxis=us-gaap_SalesRevenueNetMember', window );">Foreign</a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="re">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_DisaggregationOfRevenueLineItems', window );"><strong>Disaggregation Of Revenue [Line Items]</strong></a></td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
</tr>
<tr class="ro">
<td class="pl" style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="Show.showAR( this, 'defref_us-gaap_ConcentrationRiskPercentage1', window );">Concentration risk, percentage</a></td>
<td class="nump">14.00%<span></span>
</td>
<td class="text">&#160;<span></span>
</td>
<td class="nump">13.00%<span></span>
</td>
</tr>
</table>
<div style="display: none;">
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ConcentrationRiskPercentage1">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>For an entity that discloses a concentration risk in relation to quantitative amount, which serves as the "benchmark" (or denominator) in the equation, this concept represents the concentration percentage derived from the division.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>Reference 1: http://www.xbrl.org/2003/role/disclosureRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 280<br> -SubTopic 10<br> -Section 50<br> -Paragraph 42<br> -URI https://asc.fasb.org/extlink&amp;oid=126901519&amp;loc=d3e9054-108599<br><br>Reference 2: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 275<br> -SubTopic 10<br> -Section 50<br> -Paragraph 18<br> -URI https://asc.fasb.org/extlink&amp;oid=99393423&amp;loc=d3e6351-108592<br><br>Reference 3: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 20<br> -URI https://asc.fasb.org/extlink&amp;oid=123594938&amp;loc=d3e13531-108611<br><br>Reference 4: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 825<br> -SubTopic 10<br> -Section 50<br> -Paragraph 21<br> -Subparagraph (a)<br> -URI https://asc.fasb.org/extlink&amp;oid=123594938&amp;loc=d3e13537-108611<br><br>Reference 5: http://fasb.org/us-gaap/role/ref/legacyRef<br> -Publisher FASB<br> -Name Accounting Standards Codification<br> -Topic 275<br> -SubTopic 10<br> -Section 50<br> -Paragraph 20<br> -URI https://asc.fasb.org/extlink&amp;oid=99393423&amp;loc=d3e6404-108592<br></p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ConcentrationRiskPercentage1</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>dtr-types:percentItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_DisaggregationOfRevenueLineItems">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Definition</a><div><p>Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ References</a><div style="display: none;"><p>No definition available.</p></div>
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">+ Details</a><div style="display: none;"><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_DisaggregationOfRevenueLineItems</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td>us-gaap_</td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>xbrli:stringItemType</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td>duration</td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ConcentrationRiskByBenchmarkAxis=us-gaap_SalesRevenueNetMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ConcentrationRiskByBenchmarkAxis=us-gaap_SalesRevenueNetMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_ConcentrationRiskByTypeAxis=us-gaap_GeographicConcentrationRiskMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_ConcentrationRiskByTypeAxis=us-gaap_GeographicConcentrationRiskMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_GeographicDistributionAxis=us-gaap_GeographicDistributionDomesticMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_GeographicDistributionAxis=us-gaap_GeographicDistributionDomesticMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="authRefData" style="display: none;" id="defref_us-gaap_GeographicDistributionAxis=us-gaap_GeographicDistributionForeignMember">
<tr><td class="hide"><a style="color: white;" href="javascript:void(0);" onclick="Show.hideAR();">X</a></td></tr>
<tr><td><div class="body" style="padding: 2px;">
<a href="javascript:void(0);" onclick="Show.toggleNext( this );">- Details</a><div><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><strong> Name:</strong></td>
<td style="white-space:nowrap;">us-gaap_GeographicDistributionAxis=us-gaap_GeographicDistributionForeignMember</td>
</tr>
<tr>
<td style="padding-right: 4px;white-space:nowrap;"><strong> Namespace Prefix:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Data Type:</strong></td>
<td>na</td>
</tr>
<tr>
<td><strong> Balance Type:</strong></td>
<td></td>
</tr>
<tr>
<td><strong> Period Type:</strong></td>
<td></td>
</tr>
</table></div>
</div></td></tr>
</table>
</div>
</body>
</html>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>77
<FILENAME>spsc-20230331_htm.xml
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<XML>
<?xml version="1.0" encoding="utf-8"?>
<xbrl
  xml:lang="en-US"
  xmlns="http://www.xbrl.org/2003/instance"
  xmlns:dei="http://xbrl.sec.gov/dei/2022"
  xmlns:iso4217="http://www.xbrl.org/2003/iso4217"
  xmlns:link="http://www.xbrl.org/2003/linkbase"
  xmlns:spsc="http://www.spscommerce.com/20230331"
  xmlns:srt="http://fasb.org/srt/2022"
  xmlns:us-gaap="http://fasb.org/us-gaap/2022"
  xmlns:xbrldi="http://xbrl.org/2006/xbrldi"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <link:schemaRef xlink:href="spsc-20230331.xsd" xlink:type="simple"/>
    <context id="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i37551c7b2ead4393b6dfecd64cebfbe2_I20230419">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <instant>2023-04-19</instant>
        </period>
    </context>
    <context id="i3c3314e4b6ab4b059373b9922fd89803_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i074918b0d14149a8b0f12b21ce312a7c_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i0fb6c4ac52bb4e62922d66b045aa21d1_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i6c4d0a1e68ca4de9a8b11e4ce719a889_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i711912af9a734238a854043c07d37223_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="id39e6985d7b2436da2d47a1c0785aa39_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="ia7960d706d64455a9dcc2a1cb1cc072b_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i6f9600d5b58b4add81e29b168a498238_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="id23181cd6ae24a028a249a4d25818065_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i1fc9801726514305b4f9b2bdf7d77387_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="idd114f039c2f4f8abd444d113432aef1_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="ie7c55ab2807f4502a58026a33c40c206_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i7b9811e5d915467c97be523960c15694_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i75d8049bb9b74cb18a2bc589da52a8fa_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i8124e569001b4e4b82731473fb5747be_I20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-03-31</instant>
        </period>
    </context>
    <context id="ibfcbe17b3dac42f7abe430e868e4f22b_I20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-03-31</instant>
        </period>
    </context>
    <context id="if778689a912e42d6b2037b7a25101d96_I20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-03-31</instant>
        </period>
    </context>
    <context id="iea4c199918fe4c558f469af3807faa16_I20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-03-31</instant>
        </period>
    </context>
    <context id="i55d085d612994f239183415316aadc58_I20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-03-31</instant>
        </period>
    </context>
    <context id="iea65401e964c4d079f6a7764673f9d3e_I20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <instant>2022-03-31</instant>
        </period>
    </context>
    <context id="i8af1540ceff142b6a0d5b42e48a50184_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i6414f87f71f94519989c31299a6bdc50_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i816385f2c35a409ab40061bbedc4ce46_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i4efe2f28c7954c8a8aba61558e2a21d5_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="idd022eaf6b814505b1ba92ba75ab3173_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i1eab60dc7b84487ca4d1c577cde5b045_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:SubsidiarySaleOfStockAxis">us-gaap:EmployeeStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="ia18cb472d37847b4ae4f0e7c9fcc2093_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="ibfb2f662a68c47be9ba841e369ff84b6_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i12ac53a6dd6f4f92b7a17ef4b5ebd28a_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i4911634e78ad4b7eb05c009b2036124f_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i7a0dda8262a5406492187cabbd51d4c6_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i15c6e19508144394b19c34d4451703e8_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AccumulatedOtherComprehensiveIncomeMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i494bbf45b93640b8b137b284e56fea8c_D20220719-20220719">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-07-19</startDate>
            <endDate>2022-07-19</endDate>
        </period>
    </context>
    <context id="i0548f3e001a74dfe9ff742bd06bf5d1d_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:GCommerceIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="ibeb5587d4f8d49878baf94f9edca4f5c_D20221004-20221004">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BusinessAcquisitionAxis">spsc:InterTradeSystemsIncMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-10-04</startDate>
            <endDate>2022-10-04</endDate>
        </period>
    </context>
    <context id="i5e5f3e01a4554a07ace384858fe9fe50_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:FulfillmentMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="ic23344cee2e746358b8076d9aa27eb34_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:FulfillmentMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="ie322d516768a46d3840f582881367ef1_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:AnalyticsMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i66eb5ae5d9f648d1be790070d3eb42fb_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:AnalyticsMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i430fe804c8354c35acdbac54c1a8103f_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:OtherMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i483819e474e64d97b8cae765a6e4a1fc_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:ProductOrServiceAxis">spsc:OtherMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="ic7f5ba10540447178ab71b4bb94aec7a_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i466b3e33d52b4738bb24fb4712caadf1_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:RecurringRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="if42252827934498bbe58d7c7792a6ce5_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:OneTimeRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i1bd93224c1834afcaecf43afdfecbc56_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ContractWithCustomerDurationAxis">spsc:OneTimeRevenuesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i492ea2be0bc2406a877c7ea5f708a619_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MinimumMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i62d7c092a8b141fc9e9a77bf6fd97969_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MaximumMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i33903016b04043ff8f3b903207f93675_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i0727a052638340d28c42291a37278daf_I20211231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2021-12-31</instant>
        </period>
    </context>
    <context id="i7c34593b80204d5f877eca45dd51d401_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i88aef2c21a2d44408cff8c9801e859c8_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i8f43e591125d49a89354fae41f4ec9e1_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="iee085911fef74ba4bab1072985c39349_I20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:TypeOfArrangementAxis">spsc:SetUpFeesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-03-31</instant>
        </period>
    </context>
    <context id="ib95cb9989143445f9a7e651950c32288_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BalanceSheetLocationAxis">us-gaap:CashEquivalentsMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:MoneyMarketFundsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i1b7e5436e1104d35b4b017c4042ef741_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BalanceSheetLocationAxis">us-gaap:CashEquivalentsMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:MoneyMarketFundsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i06db95e3caa74fd69f6bf699dc8553ac_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:CertificatesOfDepositMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i9978aeb34edf49fdb2b635d1da947f0f_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:CertificatesOfDepositMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i3d24870a54cb4537b1c2ea12039f0869_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BalanceSheetLocationAxis">spsc:MarketableSecuritiesMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:CommercialPaperMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i3938b8743ba341c6b9496d0431a386f7_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BalanceSheetLocationAxis">spsc:MarketableSecuritiesMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:CommercialPaperMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i27fdedb4de714a9fbe01d6729cbbec8e_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BalanceSheetLocationAxis">spsc:MarketableSecuritiesMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:USTreasurySecuritiesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i0fbb80009f17498db74b94eaf27cb4fe_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:BalanceSheetLocationAxis">spsc:MarketableSecuritiesMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:FinancialInstrumentAxis">us-gaap:USTreasurySecuritiesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i5a75bb88debd45d6977bc1802be484e8_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:InternallyDevelopedSoftwareMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="if36c1fbf7d614e4c996719209cbd2203_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:InternallyDevelopedSoftwareMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i386c273d4ce1474b8fe0376f049c4026_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:ComputerEquipmentMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i044036208ec345ceb8743ee4003b4012_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:ComputerEquipmentMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i7fdb034bc95a4b0392b1bc5c4e517c57_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:LeaseholdImprovementsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i3f4882303fd44f25b34a7e397c10779f_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:LeaseholdImprovementsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="if15e5b2451054b38881f736fe9625cc2_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:OfficeEquipmentAndFurnitureMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i534eee2a26b2444ebe09cb50ac751aff_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">spsc:OfficeEquipmentAndFurnitureMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="idfbc23a59140439a8615288bcb3f78ef_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="ic91aaccdeb714bfc8f0dce202e196a66_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i42612c0ae9fd49b38cbc84eb2d0083e6_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i4e6aa02ec2b74ba69310d3ad612c9cda_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="iaf6b0a0eb5b3448ebe65047605d7d317_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="ic65167d9de1f4e50805056a53d766244_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:CustomerRelationshipsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ibef612a6a2494f51809d078779233bed_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="i2139ddbdb599478c96f7dbd3221493e7_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FiniteLivedIntangibleAssetsByMajorClassAxis">us-gaap:TechnologyBasedIntangibleAssetsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ie8eb7dd105294462b8565005c929635e_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <context id="ic66b2fe6cc7a4bf9b038a88eb9c4f953_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareRepurchaseProgramAxis">spsc:A2021StockRepurchaseProgramMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i3cf98a1bfcce425bb63813ffc2c3e964_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareRepurchaseProgramAxis">spsc:A2021StockRepurchaseProgramMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i0b6acb14977e4bbebf8dc1ae4945d040_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareRepurchaseProgramAxis">spsc:A2022StockRepurchaseProgramMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i93dad56146ff44d98768cfefa65393e7_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:CostOfSalesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="ic6e6e85d532b4870801fe3245685e79a_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:CostOfSalesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="icf5aa811f4814632b2861846f77139b8_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:SellingAndMarketingExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i3a215ac4955d48c8bdf4ef5efe7b2501_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:SellingAndMarketingExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="ia33d3193bbcb46b69d9ea868360410f0_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:ResearchAndDevelopmentExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i48945f26aa664703a3348e4cba198e2d_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:ResearchAndDevelopmentExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i327830e256a546128e87027704b0e090_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:GeneralAndAdministrativeExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="id2486bd8e47b45c383a6d5f3f183cd42_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeStatementLocationAxis">us-gaap:GeneralAndAdministrativeExpenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:EmployeeStockOptionMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i7c8e86e8da8b413e95c1e1f7ad578007_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:EmployeeStockOptionMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="ie078c18202d541869aac6a5c656ff133_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i81fe3639cdd0409783650946d9f206c1_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="if541830b99f34fada5f80dbf22b9a42b_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:RestrictedStockUnitsRSUMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="ic919f20ea9e34d7d8a49f792f2850731_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:RestrictedStockUnitsRSUMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i139966462e7d44a6a65729d6e89d9a2b_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:RestrictedStockUnitsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i9efb8a2ef80941b3b94082525317fe20_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:RestrictedStockUnitsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i7004f48977d74e228c6e84df8cbc78b7_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:EmployeeStockPurchasePlanMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="if398ccb0bdb94ada908408abec6ccc79_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:EmployeeStockPurchasePlanMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="ice4475e67a4a4f4e8c671ae4a60c0e9e_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:FourZeroOneKStockMatchMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="iace8208134024531b6ba59e56e7e46a1_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:FourZeroOneKStockMatchMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="ibfc64785d5dc41fb8fbce3eb2022373c_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:EmployeeStockOptionMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i8bf3eacc627448edb90205fb30ece2b5_D20200101-20200331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2020-01-01</startDate>
            <endDate>2020-03-31</endDate>
        </period>
    </context>
    <context id="ia94b7f289d9c466e924f9972711567b8_D20210101-20210331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2021-01-01</startDate>
            <endDate>2021-03-31</endDate>
        </period>
    </context>
    <context id="i648dacc2484645a191cd2b52aedd0022_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MaximumMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">us-gaap:PerformanceSharesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i8eae6a60d667472db9b3b0b29fa91b99_I20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2022-12-31</instant>
        </period>
    </context>
    <context id="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i8243d525cc6644e3a8b086461514844d_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i75224f37ba834f5087c46bd2805cd5e7_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="srt:RangeAxis">srt:MaximumMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:AwardTypeAxis">spsc:PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="idc151901553f4a18a424d23b910d4ad3_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:SubsidiarySaleOfStockAxis">us-gaap:EmployeeStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i8e28272e86eb4ea5b8c9d7b9f8471840_I20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:SubsidiarySaleOfStockAxis">us-gaap:EmployeeStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2023-03-31</instant>
        </period>
    </context>
    <context id="i09c91f829fc14da1b95accd9d3986fac_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionDomesticMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="ibdb411029c074e9ea4c1c3c2e805eced_D20220101-20220331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionDomesticMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-03-31</endDate>
        </period>
    </context>
    <context id="i62f046dcd2034c77b0a5beb5ec3cff59_D20230101-20230331">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionForeignMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2023-01-01</startDate>
            <endDate>2023-03-31</endDate>
        </period>
    </context>
    <context id="i6f4fecba0c8a4e1786a0301a0c8ea540_D20220101-20221231">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0001092699</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByBenchmarkAxis">us-gaap:SalesRevenueNetMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:ConcentrationRiskByTypeAxis">us-gaap:GeographicConcentrationRiskMember</xbrldi:explicitMember>
                <xbrldi:explicitMember dimension="us-gaap:GeographicDistributionAxis">us-gaap:GeographicDistributionForeignMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2022-01-01</startDate>
            <endDate>2022-12-31</endDate>
        </period>
    </context>
    <unit id="shares">
        <measure>shares</measure>
    </unit>
    <unit id="usd">
        <measure>iso4217:USD</measure>
    </unit>
    <unit id="usdPerShare">
        <divide>
            <unitNumerator>
                <measure>iso4217:USD</measure>
            </unitNumerator>
            <unitDenominator>
                <measure>shares</measure>
            </unitDenominator>
        </divide>
    </unit>
    <unit id="number">
        <measure>pure</measure>
    </unit>
    <dei:EntityCentralIndexKey
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80L2ZyYWc6YzU0YWQ1NmJhZTJkNGJiMTg1ODA3NDZjN2E0NDcwY2MvdGFibGU6NmMyYTI2MDk2ZmU0NDFlN2FlOWQzMjA3OGYyNzQ3OTcvdGFibGVyYW5nZTo2YzJhMjYwOTZmZTQ0MWU3YWU5ZDMyMDc4ZjI3NDc5N183LTEtMS0xLTEwMDAzNg_de020644-9348-46e1-8d20-e441c208eadc">0001092699</dei:EntityCentralIndexKey>
    <dei:CurrentFiscalYearEndDate
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80L2ZyYWc6YzU0YWQ1NmJhZTJkNGJiMTg1ODA3NDZjN2E0NDcwY2MvdGFibGU6NmMyYTI2MDk2ZmU0NDFlN2FlOWQzMjA3OGYyNzQ3OTcvdGFibGVyYW5nZTo2YzJhMjYwOTZmZTQ0MWU3YWU5ZDMyMDc4ZjI3NDc5N184LTEtMS0xLTEwMDAzNg_2573ecd9-d40a-44fe-bc38-feba25abae7f">--12-31</dei:CurrentFiscalYearEndDate>
    <dei:DocumentFiscalYearFocus
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80L2ZyYWc6YzU0YWQ1NmJhZTJkNGJiMTg1ODA3NDZjN2E0NDcwY2MvdGFibGU6NmMyYTI2MDk2ZmU0NDFlN2FlOWQzMjA3OGYyNzQ3OTcvdGFibGVyYW5nZTo2YzJhMjYwOTZmZTQ0MWU3YWU5ZDMyMDc4ZjI3NDc5N185LTEtMS0xLTEwMDAzNg_12a96c87-0b98-4e18-807a-edfa28b5e1c5">2023</dei:DocumentFiscalYearFocus>
    <dei:DocumentFiscalPeriodFocus
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80L2ZyYWc6YzU0YWQ1NmJhZTJkNGJiMTg1ODA3NDZjN2E0NDcwY2MvdGFibGU6NmMyYTI2MDk2ZmU0NDFlN2FlOWQzMjA3OGYyNzQ3OTcvdGFibGVyYW5nZTo2YzJhMjYwOTZmZTQ0MWU3YWU5ZDMyMDc4ZjI3NDc5N18xMC0xLTEtMS0xMDAwMzY_17d8f5ee-d09e-4fea-9c2d-d2adb544a6cb">Q1</dei:DocumentFiscalPeriodFocus>
    <dei:AmendmentFlag
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80L2ZyYWc6YzU0YWQ1NmJhZTJkNGJiMTg1ODA3NDZjN2E0NDcwY2MvdGFibGU6NmMyYTI2MDk2ZmU0NDFlN2FlOWQzMjA3OGYyNzQ3OTcvdGFibGVyYW5nZTo2YzJhMjYwOTZmZTQ0MWU3YWU5ZDMyMDc4ZjI3NDc5N18xMS0xLTEtMS0xMDAwMzY_4a2ad337-b025-4485-911b-5e5ea29eca51">false</dei:AmendmentFlag>
    <dei:DocumentType
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDI5_382712f4-8db7-4468-9c66-170624c90af0">10-Q</dei:DocumentType>
    <dei:DocumentQuarterlyReport
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6NjRiNWQyMDU4NDhmNDYxNzgwYzA0YjhhM2U2MDcwNzEvdGFibGVyYW5nZTo2NGI1ZDIwNTg0OGY0NjE3ODBjMDRiOGEzZTYwNzA3MV8wLTAtMS0xLTEwMDAzNg_6120b7fc-693d-41b5-9a91-53e594979381">true</dei:DocumentQuarterlyReport>
    <dei:DocumentPeriodEndDate
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8xMzI_434f8740-696b-448e-b40a-885674e4d243">2023-03-31</dei:DocumentPeriodEndDate>
    <dei:DocumentTransitionReport
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6MDZlMjk5ZDQzZGMwNDgwOWE0ODc0M2YxOTY5YzlkMWEvdGFibGVyYW5nZTowNmUyOTlkNDNkYzA0ODA5YTQ4NzQzZjE5NjljOWQxYV8wLTAtMS0xLTEwMDAzNg_d0d1fc58-ae36-4670-99a5-c46705919261">false</dei:DocumentTransitionReport>
    <dei:EntityFileNumber
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDMw_90218b81-4ff1-4dca-a2a9-0b7ec149bed2">001-34702</dei:EntityFileNumber>
    <dei:EntityRegistrantName
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDMx_32d73002-509a-4bca-8837-bcb471311af6">SPS COMMERCE, INC.</dei:EntityRegistrantName>
    <dei:EntityIncorporationStateCountryCode
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6Y2Y4NjZiYmY0MzYwNGQzMGIzYzdiODUxODk4YjA5YzgvdGFibGVyYW5nZTpjZjg2NmJiZjQzNjA0ZDMwYjNjN2I4NTE4OThiMDljOF8wLTAtMS0xLTEwMDAzNg_024cafb6-fe27-4935-8a02-b74e6f70da36">DE</dei:EntityIncorporationStateCountryCode>
    <dei:EntityTaxIdentificationNumber
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6Y2Y4NjZiYmY0MzYwNGQzMGIzYzdiODUxODk4YjA5YzgvdGFibGVyYW5nZTpjZjg2NmJiZjQzNjA0ZDMwYjNjN2I4NTE4OThiMDljOF8wLTEtMS0xLTEwMDAzNg_a621bfc1-0e06-4fb7-be61-0265eeeaedbf">41-2015127</dei:EntityTaxIdentificationNumber>
    <dei:EntityAddressAddressLine1
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8zMDA_734ba8a6-df78-4270-8983-60441cfde90e">333 South Seventh Street</dei:EntityAddressAddressLine1>
    <dei:EntityAddressAddressLine2
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8zMDQ_702b21d0-ec53-4be7-addf-32dc73f4ab7b">Suite 1000</dei:EntityAddressAddressLine2>
    <dei:EntityAddressCityOrTown
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8zMDg_ed66c3eb-ad1f-41b7-abb0-97daa4379129">Minneapolis</dei:EntityAddressCityOrTown>
    <dei:EntityAddressStateOrProvince
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8zMTI_4f549818-c450-4fcd-90ff-02e3dcd79802">MN</dei:EntityAddressStateOrProvince>
    <dei:EntityAddressPostalZipCode
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8zMTU_c89ad1b3-5021-4a42-87fc-3541ecc3c17d">55402</dei:EntityAddressPostalZipCode>
    <dei:CityAreaCode
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDMz_79242a03-1a94-4c1e-a1dd-8dceaadce7b3">612</dei:CityAreaCode>
    <dei:LocalPhoneNumber
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDM4_57abcde3-6a4e-4e6c-9bd8-01ca1b7d708b">435-9400</dei:LocalPhoneNumber>
    <dei:Security12bTitle
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6OGZkNzg0N2U4MjMxNDM0Y2E3YmViZGNkNGI1MGM1ZTIvdGFibGVyYW5nZTo4ZmQ3ODQ3ZTgyMzE0MzRjYTdiZWJkY2Q0YjUwYzVlMl8xLTAtMS0xLTEwMDAzNg_e6e8f960-c93c-47ae-8834-b7cc2da1ed63">Common Stock, par value $0.001 per share</dei:Security12bTitle>
    <dei:TradingSymbol
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6OGZkNzg0N2U4MjMxNDM0Y2E3YmViZGNkNGI1MGM1ZTIvdGFibGVyYW5nZTo4ZmQ3ODQ3ZTgyMzE0MzRjYTdiZWJkY2Q0YjUwYzVlMl8xLTItMS0xLTEwMDAzNg_f2c760b1-b0e3-43d6-87e0-7deeb2bc6fcf">SPSC</dei:TradingSymbol>
    <dei:SecurityExchangeName
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6OGZkNzg0N2U4MjMxNDM0Y2E3YmViZGNkNGI1MGM1ZTIvdGFibGVyYW5nZTo4ZmQ3ODQ3ZTgyMzE0MzRjYTdiZWJkY2Q0YjUwYzVlMl8xLTQtMS0xLTEwMDAzNi90ZXh0cmVnaW9uOjE0MGQ5OTI1MjFhOTQwODI4NTA3ZmI2NmU3NGI3MmZiXzMz_66c2d526-f8cc-4528-9f2c-1d5abaf9969d">NASDAQ</dei:SecurityExchangeName>
    <dei:EntityCurrentReportingStatus
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDI2_625cb61f-c046-434e-9108-c520ef3493d9">Yes</dei:EntityCurrentReportingStatus>
    <dei:EntityInteractiveDataCurrent
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDQ1_70c35d76-5e9b-4a70-a4fc-b50f1c9305d9">Yes</dei:EntityInteractiveDataCurrent>
    <dei:EntityFilerCategory
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6OTI4YTI5NmQ0YTJjNGM4ZWJiZjdlNzQ5NjNhOTQ5MzgvdGFibGVyYW5nZTo5MjhhMjk2ZDRhMmM0YzhlYmJmN2U3NDk2M2E5NDkzOF8wLTAtMS0xLTEwMDAzNg_96167cd5-a37b-40a4-ab99-54cce024aeeb">Large Accelerated Filer</dei:EntityFilerCategory>
    <dei:EntitySmallBusiness
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6OTI4YTI5NmQ0YTJjNGM4ZWJiZjdlNzQ5NjNhOTQ5MzgvdGFibGVyYW5nZTo5MjhhMjk2ZDRhMmM0YzhlYmJmN2U3NDk2M2E5NDkzOF8yLTMtMS0xLTEwMDAzNg_1029f2fd-af2d-4830-8076-598ee29e3e68">false</dei:EntitySmallBusiness>
    <dei:EntityEmergingGrowthCompany
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGFibGU6OTI4YTI5NmQ0YTJjNGM4ZWJiZjdlNzQ5NjNhOTQ5MzgvdGFibGVyYW5nZTo5MjhhMjk2ZDRhMmM0YzhlYmJmN2U3NDk2M2E5NDkzOF80LTMtMS0xLTEwMDAzNg_6a501a26-7c17-4eed-91ea-49acd2ea3860">false</dei:EntityEmergingGrowthCompany>
    <dei:EntityShellCompany
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDQ2_5a79d85a-f315-4c36-82b4-6634fca164cb">false</dei:EntityShellCompany>
    <dei:EntityCommonStockSharesOutstanding
      contextRef="i37551c7b2ead4393b6dfecd64cebfbe2_I20230419"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xL2ZyYWc6YWMyY2ZkNDMyYmNmNGNhYzljYWEzNjUxOTUzYjk5OTkvdGV4dHJlZ2lvbjphYzJjZmQ0MzJiY2Y0Y2FjOWNhYTM2NTE5NTNiOTk5OV8yMDE3_5edf20f9-a9cf-4c95-acf4-71f483a41a94"
      unitRef="shares">36532756</dei:EntityCommonStockSharesOutstanding>
    <us-gaap:CashAndCashEquivalentsAtCarryingValue
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMy0xLTEtMS0xMDAwMzY_ef015f0c-30ba-4ca5-a20d-9d8d1b629083"
      unitRef="usd">182304000</us-gaap:CashAndCashEquivalentsAtCarryingValue>
    <us-gaap:CashAndCashEquivalentsAtCarryingValue
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMy0zLTEtMS0xMDAwMzY_b59211d8-ddbe-41ef-b022-5c9e35181920"
      unitRef="usd">162893000</us-gaap:CashAndCashEquivalentsAtCarryingValue>
    <us-gaap:ShortTermInvestments
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNC0xLTEtMS0xMDAwMzY_632e14c2-1ec8-4fc9-bd99-7e962b534220"
      unitRef="usd">51146000</us-gaap:ShortTermInvestments>
    <us-gaap:ShortTermInvestments
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNC0zLTEtMS0xMDAwMzY_fb4ca49b-c8d2-485c-aba2-a87da782e82f"
      unitRef="usd">51412000</us-gaap:ShortTermInvestments>
    <us-gaap:AccountsReceivableGrossCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNS0xLTEtMS0xMDAwMzY_2423941d-56a8-4927-92c2-fb79272512b2"
      unitRef="usd">46654000</us-gaap:AccountsReceivableGrossCurrent>
    <us-gaap:AccountsReceivableGrossCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNS0zLTEtMS0xMDAwMzY_cce5f12c-6ba4-44f0-b935-a780be65765d"
      unitRef="usd">42501000</us-gaap:AccountsReceivableGrossCurrent>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNi0xLTEtMS0xMDAwMzY_daf772d1-f904-4a89-971a-b7693306adac"
      unitRef="usd">3217000</us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNi0zLTEtMS0xMDAwMzY_ae33570b-101b-4265-8879-5d8a49772cfd"
      unitRef="usd">3066000</us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent>
    <us-gaap:AccountsReceivableNetCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNy0xLTEtMS0xMDAwMzY_ebf84fae-ba01-445e-ae9d-7a5d9f296c10"
      unitRef="usd">43437000</us-gaap:AccountsReceivableNetCurrent>
    <us-gaap:AccountsReceivableNetCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNy0zLTEtMS0xMDAwMzY_c0bae18e-a863-46a3-94c0-486ed034b722"
      unitRef="usd">39435000</us-gaap:AccountsReceivableNetCurrent>
    <us-gaap:DeferredCostsCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfOC0xLTEtMS0xMDAwMzY_ce6ecc96-38cf-43ad-a6dc-195fc5725f6b"
      unitRef="usd">53844000</us-gaap:DeferredCostsCurrent>
    <us-gaap:DeferredCostsCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfOC0zLTEtMS0xMDAwMzY_3b8c94c5-ae17-4799-851e-0b8ed36f4a73"
      unitRef="usd">52755000</us-gaap:DeferredCostsCurrent>
    <us-gaap:OtherAssetsCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfOS0xLTEtMS0xMDAwMzY_b2a905b8-3d3a-4b5e-8955-bd37cef21839"
      unitRef="usd">15651000</us-gaap:OtherAssetsCurrent>
    <us-gaap:OtherAssetsCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfOS0zLTEtMS0xMDAwMzY_29c5d37b-27aa-4461-a923-4f97d6374273"
      unitRef="usd">16319000</us-gaap:OtherAssetsCurrent>
    <us-gaap:AssetsCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTAtMS0xLTEtMTAwMDM2_18c08b6f-f633-4ca4-b8d2-9dad3f6310e1"
      unitRef="usd">346382000</us-gaap:AssetsCurrent>
    <us-gaap:AssetsCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTAtMy0xLTEtMTAwMDM2_5b8e4212-93c5-45ad-aef0-fb88b3f115f3"
      unitRef="usd">322814000</us-gaap:AssetsCurrent>
    <us-gaap:PropertyPlantAndEquipmentNet
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTEtMS0xLTEtMTAwMDM2_6de16038-1992-45d8-9dd4-7393c8d72aeb"
      unitRef="usd">35078000</us-gaap:PropertyPlantAndEquipmentNet>
    <us-gaap:PropertyPlantAndEquipmentNet
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTEtMy0xLTEtMTAwMDM2_c0ab1cba-c5a4-46f6-bf0f-09e178201a19"
      unitRef="usd">35458000</us-gaap:PropertyPlantAndEquipmentNet>
    <us-gaap:OperatingLeaseRightOfUseAsset
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTItMS0xLTEtMTAwMDM2_467d9a25-b19b-4f86-917f-0f3ed1f74957"
      unitRef="usd">8451000</us-gaap:OperatingLeaseRightOfUseAsset>
    <us-gaap:OperatingLeaseRightOfUseAsset
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTItMy0xLTEtMTAwMDM2_de09dc61-5413-4de9-8221-fdcd6b77188a"
      unitRef="usd">9170000</us-gaap:OperatingLeaseRightOfUseAsset>
    <us-gaap:Goodwill
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTMtMS0xLTEtMTAwMDM2_c4d3fe72-c2a2-4211-a940-0b546272e6f2"
      unitRef="usd">199001000</us-gaap:Goodwill>
    <us-gaap:Goodwill
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTMtMy0xLTEtMTAwMDM2_e8537fc2-14d3-4ba8-a1be-11e0fcc2717e"
      unitRef="usd">197284000</us-gaap:Goodwill>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTQtMS0xLTEtMTAwMDM2_d80c5f47-4451-45c6-9f0b-9da5e69e9dc5"
      unitRef="usd">84536000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTQtMy0xLTEtMTAwMDM2_f67b16fb-917b-4039-ad19-110e540ecd2f"
      unitRef="usd">88352000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:DeferredCosts
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTYtMS0xLTEtMTAwMDM2_e8918210-a1ca-4b05-b5a0-4db0043eaa92"
      unitRef="usd">17965000</us-gaap:DeferredCosts>
    <us-gaap:DeferredCosts
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTYtMy0xLTEtMTAwMDM2_1d106c91-676c-4bad-b8c1-805086897382"
      unitRef="usd">17424000</us-gaap:DeferredCosts>
    <us-gaap:DeferredIncomeTaxAssetsNet
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTctMS0xLTEtMTAwMDM2_6f7e1f6f-644d-4b88-aeef-8383a7364dde"
      unitRef="usd">3365000</us-gaap:DeferredIncomeTaxAssetsNet>
    <us-gaap:DeferredIncomeTaxAssetsNet
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTctMy0xLTEtMTAwMDM2_d3a54e63-eb80-4f06-9593-9caac51bf637"
      unitRef="usd">227000</us-gaap:DeferredIncomeTaxAssetsNet>
    <us-gaap:OtherAssetsNoncurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTgtMS0xLTEtMTAwMDM2_63e11651-9ef1-4045-a3cb-4e1596daf07c"
      unitRef="usd">2149000</us-gaap:OtherAssetsNoncurrent>
    <us-gaap:OtherAssetsNoncurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTgtMy0xLTEtMTAwMDM2_a478afa8-92b3-4621-89d6-73f8927469a9"
      unitRef="usd">2185000</us-gaap:OtherAssetsNoncurrent>
    <us-gaap:Assets
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTktMS0xLTEtMTAwMDM2_5b37d556-e4c5-47df-9d22-cebbc426093f"
      unitRef="usd">696927000</us-gaap:Assets>
    <us-gaap:Assets
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMTktMy0xLTEtMTAwMDM2_f15502d6-56a1-4ef7-8558-2d65ecc9050a"
      unitRef="usd">672914000</us-gaap:Assets>
    <us-gaap:AccountsPayableCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjItMS0xLTEtMTAwMDM2_1a1c6518-08eb-45bf-b680-af47953e0f39"
      unitRef="usd">5339000</us-gaap:AccountsPayableCurrent>
    <us-gaap:AccountsPayableCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjItMy0xLTEtMTAwMDM2_38175d67-c547-4ca1-ba29-abf47b14437b"
      unitRef="usd">11256000</us-gaap:AccountsPayableCurrent>
    <us-gaap:EmployeeRelatedLiabilitiesCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjMtMS0xLTEtMTAwMDM2_67ef688e-51bb-41a2-81d9-28ac73336400"
      unitRef="usd">26431000</us-gaap:EmployeeRelatedLiabilitiesCurrent>
    <us-gaap:EmployeeRelatedLiabilitiesCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjMtMy0xLTEtMTAwMDM2_cb857773-6740-43bb-95e4-d4557c10a45c"
      unitRef="usd">30235000</us-gaap:EmployeeRelatedLiabilitiesCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjQtMS0xLTEtMTAwMDM2_76f9a0b3-2526-4ffb-bc5f-ca2f6b7c8251"
      unitRef="usd">8163000</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjQtMy0xLTEtMTAwMDM2_367214bf-4bdd-419e-b995-da77d52068b6"
      unitRef="usd">7451000</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:ContractWithCustomerLiabilityCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjUtMS0xLTEtMTAwMDM2_04baad38-9842-475d-bab4-2addd4425893"
      unitRef="usd">62907000</us-gaap:ContractWithCustomerLiabilityCurrent>
    <us-gaap:ContractWithCustomerLiabilityCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjUtMy0xLTEtMTAwMDM2_8fabd8ff-bdc0-43db-a255-53cffd96bdb0"
      unitRef="usd">57423000</us-gaap:ContractWithCustomerLiabilityCurrent>
    <us-gaap:OperatingLeaseLiabilityCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjYtMS0xLTEtMTAwMDM2_df14d4ba-b262-4fb5-b7f8-01595b7146b9"
      unitRef="usd">4121000</us-gaap:OperatingLeaseLiabilityCurrent>
    <us-gaap:OperatingLeaseLiabilityCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjYtMy0xLTEtMTAwMDM2_6eb353ef-2283-46c9-b7ae-b8a4ff7a87bd"
      unitRef="usd">4277000</us-gaap:OperatingLeaseLiabilityCurrent>
    <us-gaap:LiabilitiesCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjctMS0xLTEtMTAwMDM2_6df311f6-9f7c-4604-a9ae-0ef5c0cc3dbe"
      unitRef="usd">106961000</us-gaap:LiabilitiesCurrent>
    <us-gaap:LiabilitiesCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjctMy0xLTEtMTAwMDM2_19fea991-821d-4042-8f4b-b57a82ac5f6c"
      unitRef="usd">110642000</us-gaap:LiabilitiesCurrent>
    <us-gaap:ContractWithCustomerLiabilityNoncurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjktMS0xLTEtMTAwMDM2_4f5ee5cf-aeb4-45f0-bddd-d46c9282835f"
      unitRef="usd">5105000</us-gaap:ContractWithCustomerLiabilityNoncurrent>
    <us-gaap:ContractWithCustomerLiabilityNoncurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMjktMy0xLTEtMTAwMDM2_6589f287-cb68-4197-9b4d-2d980e809893"
      unitRef="usd">4771000</us-gaap:ContractWithCustomerLiabilityNoncurrent>
    <us-gaap:OperatingLeaseLiabilityNoncurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzAtMS0xLTEtMTAwMDM2_1b418907-8ce9-4ad1-89c4-cb700e96b630"
      unitRef="usd">11994000</us-gaap:OperatingLeaseLiabilityNoncurrent>
    <us-gaap:OperatingLeaseLiabilityNoncurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzAtMy0xLTEtMTAwMDM2_676bb1a9-f965-4724-82b9-ce86c47409ef"
      unitRef="usd">13009000</us-gaap:OperatingLeaseLiabilityNoncurrent>
    <us-gaap:DeferredIncomeTaxLiabilitiesNet
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzEtMS0xLTEtMTAwMDM2_b24d28c3-8d12-4c4f-ae31-1274aa584674"
      unitRef="usd">6977000</us-gaap:DeferredIncomeTaxLiabilitiesNet>
    <us-gaap:DeferredIncomeTaxLiabilitiesNet
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzEtMy0xLTEtMTAwMDM2_252519a3-2d51-4f2d-9eed-c06653cc429a"
      unitRef="usd">7419000</us-gaap:DeferredIncomeTaxLiabilitiesNet>
    <us-gaap:Liabilities
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzItMS0xLTEtMTAwMDM2_eb9ea4b1-7b20-4816-b0fa-0b563e6723b3"
      unitRef="usd">131037000</us-gaap:Liabilities>
    <us-gaap:Liabilities
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzItMy0xLTEtMTAwMDM2_f1df73e9-577c-42ac-903f-40144cee6288"
      unitRef="usd">135841000</us-gaap:Liabilities>
    <us-gaap:CommitmentsAndContingencies
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzMtMS0xLTEtMTAwMDM2_370596b9-8cda-4591-903b-2af8bcc01fcf"
      unitRef="usd"
      xsi:nil="true"/>
    <us-gaap:CommitmentsAndContingencies
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzMtMy0xLTEtMTAwMDM2_34d9dfcd-fe0a-476d-b57d-d8cd69738e72"
      unitRef="usd"
      xsi:nil="true"/>
    <us-gaap:PreferredStockParOrStatedValuePerShare
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfMjE_33231be9-c09c-4f23-b5a7-0fa955c4e8ce"
      unitRef="usdPerShare">0.001</us-gaap:PreferredStockParOrStatedValuePerShare>
    <us-gaap:PreferredStockParOrStatedValuePerShare
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfMjE_c2eff8a1-4631-447b-8bd3-cc3072028119"
      unitRef="usdPerShare">0.001</us-gaap:PreferredStockParOrStatedValuePerShare>
    <us-gaap:PreferredStockSharesAuthorized
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfMzU_1db8a2ed-be2a-439d-ae71-29a5f8868cc0"
      unitRef="shares">5000000</us-gaap:PreferredStockSharesAuthorized>
    <us-gaap:PreferredStockSharesAuthorized
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfMzU_332674f8-d9de-4ccb-a1c5-c379ec728dda"
      unitRef="shares">5000000</us-gaap:PreferredStockSharesAuthorized>
    <us-gaap:PreferredStockSharesOutstanding
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfNTc_0a102899-20bf-443f-b1d0-fa8328ba15e6"
      unitRef="shares">0</us-gaap:PreferredStockSharesOutstanding>
    <us-gaap:PreferredStockSharesOutstanding
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfNTc_d056115b-eeb2-41a0-9765-17d48c1e05c4"
      unitRef="shares">0</us-gaap:PreferredStockSharesOutstanding>
    <us-gaap:PreferredStockSharesIssued
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfNTc_f9a50258-e6dd-4d98-83c6-fedcb864fe1a"
      unitRef="shares">0</us-gaap:PreferredStockSharesIssued>
    <us-gaap:PreferredStockSharesIssued
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246OWRlYjA2ZDIyZDE0NDEwNTk1OGVlZDAyZjVkODYxMThfNTc_fc7fcd62-649b-491e-9b08-36ce502f8826"
      unitRef="shares">0</us-gaap:PreferredStockSharesIssued>
    <us-gaap:PreferredStockValue
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMS0xLTEtMTAwMDM2_ff551cf0-0e34-4b3c-bdf0-6d900e25dc3e"
      unitRef="usd">0</us-gaap:PreferredStockValue>
    <us-gaap:PreferredStockValue
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzUtMy0xLTEtMTAwMDM2_6f219390-e789-4d25-a564-d49a38a73176"
      unitRef="usd">0</us-gaap:PreferredStockValue>
    <us-gaap:CommonStockParOrStatedValuePerShare
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfMTg_0aee8db9-5777-4a91-be86-5472fdfb436e"
      unitRef="usdPerShare">0.001</us-gaap:CommonStockParOrStatedValuePerShare>
    <us-gaap:CommonStockParOrStatedValuePerShare
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfMTg_c1a8da2a-4baa-4fc9-bcf3-d815bfc1f000"
      unitRef="usdPerShare">0.001</us-gaap:CommonStockParOrStatedValuePerShare>
    <us-gaap:CommonStockSharesAuthorized
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfMzI_86ac56a0-3825-4b80-b1a0-0dfdb3e37491"
      unitRef="shares">110000000</us-gaap:CommonStockSharesAuthorized>
    <us-gaap:CommonStockSharesAuthorized
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfMzI_8a47c26a-b343-4f62-9e06-5e39d4ded78e"
      unitRef="shares">110000000</us-gaap:CommonStockSharesAuthorized>
    <us-gaap:CommonStockSharesIssued
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfNTQ_27f673cb-6f20-4810-b2e5-9d26f5e23bd5"
      unitRef="shares">38683854</us-gaap:CommonStockSharesIssued>
    <us-gaap:CommonStockSharesIssued
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfNjE_aa3fe2f0-2629-4562-9f8a-1d25e5db62b7"
      unitRef="shares">38309144</us-gaap:CommonStockSharesIssued>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfODM_e947462b-5839-4116-8f4d-c60b3392e739"
      unitRef="shares">36532756</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfNDk0NzgwMjMyNTEzOA_28042723-fd59-40dc-a97e-7fe4be89d2ee"
      unitRef="shares">36158046</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="i0fb6c4ac52bb4e62922d66b045aa21d1_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246MDQzN2JiYmQ0YzU1NDBkZDkzNTg1N2ViNTQxYmM3MjVfNDk0NzgwMjMyNTEzOA_dea9fb7c-df27-4ccd-b718-b9d2848a4cac"
      unitRef="shares">36158046</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:CommonStockValue
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMS0xLTEtMTAwMDM2_aa3d7373-e8fe-4542-8b2d-e9c7a1f8ca44"
      unitRef="usd">39000</us-gaap:CommonStockValue>
    <us-gaap:CommonStockValue
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzYtMy0xLTEtMTAwMDM2_975b3155-2f4f-4e7b-941a-a2cbebaaf884"
      unitRef="usd">38000</us-gaap:CommonStockValue>
    <us-gaap:TreasuryStockCommonShares
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzctMC0xLTEtMTAwMDM2L3RleHRyZWdpb246YmNmMGQzOTYyZjFhNDhhNGJjOWFmNTMzOWExMDkzNDNfMjk_022b55b2-7152-4ee4-9399-6bfa1bdaa8b9"
      unitRef="shares">2151098</us-gaap:TreasuryStockCommonShares>
    <us-gaap:TreasuryStockCommonShares
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzctMC0xLTEtMTAwMDM2L3RleHRyZWdpb246YmNmMGQzOTYyZjFhNDhhNGJjOWFmNTMzOWExMDkzNDNfMjk_7627e715-678f-4ebd-bdca-94c3af30e8f7"
      unitRef="shares">2151098</us-gaap:TreasuryStockCommonShares>
    <us-gaap:TreasuryStockCommonValue
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzctMS0xLTEtMTAwMDM2_fac5e11e-083b-4a74-8e3a-22a4169154b6"
      unitRef="usd">128892000</us-gaap:TreasuryStockCommonValue>
    <us-gaap:TreasuryStockCommonValue
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzctMy0xLTEtMTAwMDM2_b7c655e2-3227-4190-9b10-23b3fce5cd4b"
      unitRef="usd">128892000</us-gaap:TreasuryStockCommonValue>
    <us-gaap:AdditionalPaidInCapitalCommonStock
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzgtMS0xLTEtMTAwMDM2_d22d4fb9-7dea-4ca5-9143-9529339be67b"
      unitRef="usd">489716000</us-gaap:AdditionalPaidInCapitalCommonStock>
    <us-gaap:AdditionalPaidInCapitalCommonStock
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzgtMy0xLTEtMTAwMDM2_68699fcc-705d-49cf-83d7-be98ef589c91"
      unitRef="usd">476117000</us-gaap:AdditionalPaidInCapitalCommonStock>
    <us-gaap:RetainedEarningsAccumulatedDeficit
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzktMS0xLTEtMTAwMDM2_fe59099e-4116-47eb-94dd-111f24fc02eb"
      unitRef="usd">208510000</us-gaap:RetainedEarningsAccumulatedDeficit>
    <us-gaap:RetainedEarningsAccumulatedDeficit
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfMzktMy0xLTEtMTAwMDM2_3ccf9a91-be40-4a68-a846-391cff4d8b00"
      unitRef="usd">193221000</us-gaap:RetainedEarningsAccumulatedDeficit>
    <us-gaap:AccumulatedOtherComprehensiveIncomeLossNetOfTax
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNDAtMS0xLTEtMTAwMDM2_9797d73f-66d7-4f76-a276-ad8224258c29"
      unitRef="usd">-3483000</us-gaap:AccumulatedOtherComprehensiveIncomeLossNetOfTax>
    <us-gaap:AccumulatedOtherComprehensiveIncomeLossNetOfTax
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNDAtMy0xLTEtMTAwMDM2_17d45d79-3b0a-4c8a-a982-6fc94d866c55"
      unitRef="usd">-3411000</us-gaap:AccumulatedOtherComprehensiveIncomeLossNetOfTax>
    <us-gaap:StockholdersEquity
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNDEtMS0xLTEtMTAwMDM2_bb360056-660a-438b-a195-a9be4c14c43c"
      unitRef="usd">565890000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNDEtMy0xLTEtMTAwMDM2_d1f5a038-25ea-48c1-b186-dde188219ddf"
      unitRef="usd">537073000</us-gaap:StockholdersEquity>
    <us-gaap:LiabilitiesAndStockholdersEquity
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNDItMS0xLTEtMTAwMDM2_33aa1061-3ffe-4dbe-9c44-990e96cab30e"
      unitRef="usd">696927000</us-gaap:LiabilitiesAndStockholdersEquity>
    <us-gaap:LiabilitiesAndStockholdersEquity
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xNi9mcmFnOmFjMDRlY2ZjOWRhZjQwZDA4NDg2MmQ5ZGY4OGZhN2ZiL3RhYmxlOmE2M2ZlYmZkYjQ4ZTRjODNiZDc4NTRhYWYxMmYwNWI1L3RhYmxlcmFuZ2U6YTYzZmViZmRiNDhlNGM4M2JkNzg1NGFhZjEyZjA1YjVfNDItMy0xLTEtMTAwMDM2_8154736f-e34b-4b7c-a85f-e992b9df6517"
      unitRef="usd">672914000</us-gaap:LiabilitiesAndStockholdersEquity>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMi0xLTEtMS0xMDAwMzY_d15a6dbb-d433-40fc-9938-fbb402690b30"
      unitRef="usd">125868000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMi0zLTEtMS0xMDAwMzY_ef94d7c3-f049-4b7a-a839-7d76c919c643"
      unitRef="usd">105193000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:CostOfRevenue
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMy0xLTEtMS0xMDAwMzY_d6a23aa0-392c-47c0-8a84-10c3cd3ec0fe"
      unitRef="usd">42964000</us-gaap:CostOfRevenue>
    <us-gaap:CostOfRevenue
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMy0zLTEtMS0xMDAwMzY_02c7aa39-15f2-433d-8951-8a2f181e8582"
      unitRef="usd">35389000</us-gaap:CostOfRevenue>
    <us-gaap:GrossProfit
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfNC0xLTEtMS0xMDAwMzY_346515c0-5812-4da6-99b7-e5927c5f55c9"
      unitRef="usd">82904000</us-gaap:GrossProfit>
    <us-gaap:GrossProfit
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfNC0zLTEtMS0xMDAwMzY_deb1f50d-f976-4cdb-b69d-a5f8632ef6b7"
      unitRef="usd">69804000</us-gaap:GrossProfit>
    <us-gaap:SellingAndMarketingExpense
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfNi0xLTEtMS0xMDAwMzY_9dbde171-951e-436a-a30b-2cd285d54b5a"
      unitRef="usd">29083000</us-gaap:SellingAndMarketingExpense>
    <us-gaap:SellingAndMarketingExpense
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfNi0zLTEtMS0xMDAwMzY_8194e91d-178c-4873-b556-8612138937a6"
      unitRef="usd">24655000</us-gaap:SellingAndMarketingExpense>
    <us-gaap:ResearchAndDevelopmentExpense
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfNy0xLTEtMS0xMDAwMzY_1c386dc8-ab52-4105-b159-5af7ba042c0c"
      unitRef="usd">12563000</us-gaap:ResearchAndDevelopmentExpense>
    <us-gaap:ResearchAndDevelopmentExpense
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfNy0zLTEtMS0xMDAwMzY_601a90c7-fb28-4e43-8969-d0cdf39970c5"
      unitRef="usd">10701000</us-gaap:ResearchAndDevelopmentExpense>
    <us-gaap:GeneralAndAdministrativeExpense
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfOC0xLTEtMS0xMDAwMzY_b7e5f79d-2263-49e2-a372-cf45ed478360"
      unitRef="usd">20677000</us-gaap:GeneralAndAdministrativeExpense>
    <us-gaap:GeneralAndAdministrativeExpense
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfOC0zLTEtMS0xMDAwMzY_05ab181f-5bed-41a0-a69f-f24f6f53ff8c"
      unitRef="usd">15468000</us-gaap:GeneralAndAdministrativeExpense>
    <us-gaap:AmortizationOfIntangibleAssets
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfOS0xLTEtMS0xMDAwMzY_89399400-99d2-46f7-b5dd-0b2beb2adaaf"
      unitRef="usd">3851000</us-gaap:AmortizationOfIntangibleAssets>
    <us-gaap:AmortizationOfIntangibleAssets
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfOS0zLTEtMS0xMDAwMzY_1e985be4-5ecf-47d4-96ff-8bdc9fc8f1dd"
      unitRef="usd">2470000</us-gaap:AmortizationOfIntangibleAssets>
    <us-gaap:OperatingExpenses
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTAtMS0xLTEtMTAwMDM2_71ba1d37-8a47-4443-bc9f-5de2938987d5"
      unitRef="usd">66174000</us-gaap:OperatingExpenses>
    <us-gaap:OperatingExpenses
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTAtMy0xLTEtMTAwMDM2_314aa4b2-51d6-46dd-a4ca-a1eeab7c905d"
      unitRef="usd">53294000</us-gaap:OperatingExpenses>
    <us-gaap:OperatingIncomeLoss
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTEtMS0xLTEtMTAwMDM2_843cc7d4-9fcb-436e-9778-a7be43da5329"
      unitRef="usd">16730000</us-gaap:OperatingIncomeLoss>
    <us-gaap:OperatingIncomeLoss
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTEtMy0xLTEtMTAwMDM2_4f84be58-8c0b-40fc-ad24-5b4bdd217255"
      unitRef="usd">16510000</us-gaap:OperatingIncomeLoss>
    <us-gaap:NonoperatingIncomeExpense
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTItMS0xLTEtMTAwMDM2_0e0cf0bc-d21a-428b-84d1-d3ac3cb7ba8d"
      unitRef="usd">1276000</us-gaap:NonoperatingIncomeExpense>
    <us-gaap:NonoperatingIncomeExpense
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTItMy0xLTEtMTAwMDM2_a31c6b17-7830-409d-9487-f08410795ce7"
      unitRef="usd">423000</us-gaap:NonoperatingIncomeExpense>
    <us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTMtMS0xLTEtMTAwMDM2_a6f80b6c-ba0c-453e-a3ef-f7c5455f1b7b"
      unitRef="usd">18006000</us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest>
    <us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTMtMy0xLTEtMTAwMDM2_1a37247e-c2f4-4c27-be70-d670c49bfc22"
      unitRef="usd">16933000</us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTQtMS0xLTEtMTAwMDM2_782003cf-580b-413b-a5f5-76827962c361"
      unitRef="usd">2717000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTQtMy0xLTEtMTAwMDM2_64bd424f-95b9-4523-9feb-4888818a2628"
      unitRef="usd">4330000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:NetIncomeLoss
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTUtMS0xLTEtMTAwMDM2_e097781f-9a33-462c-af43-8492e52070b0"
      unitRef="usd">15289000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTUtMy0xLTEtMTAwMDM2_0d496217-35f7-48e4-a178-8b2addd5c76a"
      unitRef="usd">12603000</us-gaap:NetIncomeLoss>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax
      contextRef="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTctMS0xLTEtMTAwMDM2_77dbfcac-f808-492f-896e-0e8c2bffda67"
      unitRef="usd">-95000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTctMy0xLTEtMTAwMDM2_47802594-7968-47a6-a853-beb8f66e2998"
      unitRef="usd">730000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTgtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246M2Q1ODAyYTJiNzM1NDQ0YmI1MjhlMzg5Y2YxZWIwY2JfNTc_f4f5fce5-9819-4819-b9c4-eb2e0d67fdf0"
      unitRef="usd">133000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTgtMC0xLTEtMTAwMDM2L3RleHRyZWdpb246M2Q1ODAyYTJiNzM1NDQ0YmI1MjhlMzg5Y2YxZWIwY2JfNjE_5869c64b-e170-4def-b606-132395dcea82"
      unitRef="usd">-1000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax
      contextRef="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTgtMS0xLTEtMTAwMDM2_978b7d93-7748-4bc8-8a69-5fb26caf65f4"
      unitRef="usd">399000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTgtMy0xLTEtMTAwMDM2_37e698ca-bc39-4ac5-b397-f993f4e21b91"
      unitRef="usd">-3000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTktMC0xLTEtMTAwMDM2L3RleHRyZWdpb246YTk2NTQ1YmFiOGMzNGM5ZmI1NzA2MzIzZmJjZWNlMTdfODA_a8ceb232-50a3-4bb0-931d-a3323d87c0d5"
      unitRef="usd">125000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTktMC0xLTEtMTAwMDM2L3RleHRyZWdpb246YTk2NTQ1YmFiOGMzNGM5ZmI1NzA2MzIzZmJjZWNlMTdfODQ_7e257d48-dc3b-47f5-a7dc-36c02f8c8ea0"
      unitRef="usd">-4000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax
      contextRef="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTktMS0xLTEtMTAwMDM2_c011e146-4cfc-4b4b-9b2e-638c375c7652"
      unitRef="usd">376000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMTktMy0xLTEtMTAwMDM2_01f75933-78a8-47ad-97e7-40088ddb427d"
      unitRef="usd">-11000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjAtMS0xLTEtMTAwMDM2_4fb5fa7f-54e6-4b7c-94a1-e173ac023c68"
      unitRef="usd">-72000</us-gaap:OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent>
    <us-gaap:OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjAtMy0xLTEtMTAwMDM2_c8541d8e-e783-408f-869b-37cc41b248b8"
      unitRef="usd">738000</us-gaap:OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent>
    <us-gaap:ComprehensiveIncomeNetOfTax
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjEtMS0xLTEtMTAwMDM2_536500f1-7a87-4a46-aa8b-877fb3542975"
      unitRef="usd">15217000</us-gaap:ComprehensiveIncomeNetOfTax>
    <us-gaap:ComprehensiveIncomeNetOfTax
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjEtMy0xLTEtMTAwMDM2_d79e4098-7b47-47a7-a849-ca863c63332b"
      unitRef="usd">13341000</us-gaap:ComprehensiveIncomeNetOfTax>
    <us-gaap:EarningsPerShareBasic
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjQtMS0xLTEtMTAwMDM2_73c4c13d-ab2d-477d-b371-b60678ae2aa2"
      unitRef="usdPerShare">0.42</us-gaap:EarningsPerShareBasic>
    <us-gaap:EarningsPerShareBasic
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjQtMy0xLTEtMTAwMDM2_895bd389-593b-444f-a448-256204da3856"
      unitRef="usdPerShare">0.35</us-gaap:EarningsPerShareBasic>
    <us-gaap:EarningsPerShareDiluted
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjUtMS0xLTEtMTAwMDM2_4f7ca6bc-340e-4e3c-b26e-57550a562872"
      unitRef="usdPerShare">0.41</us-gaap:EarningsPerShareDiluted>
    <us-gaap:EarningsPerShareDiluted
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjUtMy0xLTEtMTAwMDM2_e8e121f6-5207-409e-be87-cc8512ef26dc"
      unitRef="usdPerShare">0.34</us-gaap:EarningsPerShareDiluted>
    <us-gaap:WeightedAverageNumberOfSharesOutstandingBasic
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjgtMS0xLTEtMTAwMDM2_4a25c50d-ffb0-46d4-a736-81b2324d36d0"
      unitRef="shares">36427000</us-gaap:WeightedAverageNumberOfSharesOutstandingBasic>
    <us-gaap:WeightedAverageNumberOfSharesOutstandingBasic
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjgtMS0xLTEtMTAwMDM2_c84e6d40-cbac-4c7b-a790-1c8c1c25b87d"
      unitRef="shares">36427000</us-gaap:WeightedAverageNumberOfSharesOutstandingBasic>
    <us-gaap:WeightedAverageNumberOfSharesOutstandingBasic
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjgtMy0xLTEtMTAwMDM2_a42a3d2f-b6bf-40fb-95bd-cdf54bf0b1d4"
      unitRef="shares">36136000</us-gaap:WeightedAverageNumberOfSharesOutstandingBasic>
    <us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjktMS0xLTEtMTAwMDM2_c9cacfb3-142b-417d-9c4d-2f606cff22e5"
      unitRef="shares">37155000</us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding>
    <us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjktMS0xLTEtMTAwMDM2_fa9d9ba7-2aca-4232-8d9b-84c0a1c1b37a"
      unitRef="shares">37155000</us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding>
    <us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8xOS9mcmFnOjM5YzE0OGJmNmI2MTQzZTI5YmZkNGM5YWVhNWMyMzI4L3RhYmxlOjg5NGM2NGQ3NDRiZjRkZWZhMjIxMWZjNzZiY2M3ZWU1L3RhYmxlcmFuZ2U6ODk0YzY0ZDc0NGJmNGRlZmEyMjExZmM3NmJjYzdlZTVfMjktMy0xLTEtMTAwMDM2_95d3c5bd-3ab5-49f3-9099-9c39ed85c867"
      unitRef="shares">36989000</us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="i6c4d0a1e68ca4de9a8b11e4ce719a889_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi0xLTEtMS0xMDAwMzY_efe62904-f84a-4189-a00c-17276db99d8e"
      unitRef="shares">36009257</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:StockholdersEquity
      contextRef="i6c4d0a1e68ca4de9a8b11e4ce719a889_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi0zLTEtMS0xMDAwMzY_778c2226-8921-449c-bf31-e61c587db140"
      unitRef="usd">38000</us-gaap:StockholdersEquity>
    <us-gaap:TreasuryStockCommonShares
      contextRef="i711912af9a734238a854043c07d37223_I20211231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi01LTEtMS0xMDAwMzY_5bb74ead-dacb-4e1c-83c4-76b0a8db6de9"
      unitRef="shares">1789353</us-gaap:TreasuryStockCommonShares>
    <us-gaap:StockholdersEquity
      contextRef="i711912af9a734238a854043c07d37223_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi03LTEtMS0xMDAwMzY_50834772-fa1f-460d-abb6-70e3fc6fe5dc"
      unitRef="usd">-85677000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="id39e6985d7b2436da2d47a1c0785aa39_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi05LTEtMS0xMDAwMzY_b0eb82e0-9707-4a20-8787-66eb8a911ded"
      unitRef="usd">433258000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="ia7960d706d64455a9dcc2a1cb1cc072b_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi0xMS0xLTEtMTAwMDM2_a5a24773-93ca-41a2-8966-04dab170f89f"
      unitRef="usd">138087000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i6f9600d5b58b4add81e29b168a498238_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi0xMy0xLTEtMTAwMDM2_23e1dfbd-c2d0-4ddc-a12e-f3a3c21148ff"
      unitRef="usd">-1447000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="id23181cd6ae24a028a249a4d25818065_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMi0xNS0xLTEtMTAwMDM2_1181772b-d793-459c-8826-a3c17b3c5cb3"
      unitRef="usd">484259000</us-gaap:StockholdersEquity>
    <us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue
      contextRef="i1fc9801726514305b4f9b2bdf7d77387_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMy05LTEtMS0xMDAwMzY_c62a5dfb-775f-4104-a0b1-d3744e8e11e3"
      unitRef="usd">8496000</us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue>
    <us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMy0xNS0xLTEtMTAwMDM2_b66faef8-ebb7-4b9a-9817-567499a302c4"
      unitRef="usd">8496000</us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue>
    <us-gaap:StockIssuedDuringPeriodSharesShareBasedCompensation
      contextRef="idd114f039c2f4f8abd444d113432aef1_D20220101-20220331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNC0xLTEtMS0xMDAwMzY_d2c6b2aa-8697-4718-b541-95e3b3f9cf44"
      unitRef="shares">231107</us-gaap:StockIssuedDuringPeriodSharesShareBasedCompensation>
    <us-gaap:StockIssuedDuringPeriodValueShareBasedCompensation
      contextRef="i1fc9801726514305b4f9b2bdf7d77387_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNC05LTEtMS0xMDAwMzY_83b85764-beeb-4f3d-a78c-f5a82959aa34"
      unitRef="usd">504000</us-gaap:StockIssuedDuringPeriodValueShareBasedCompensation>
    <us-gaap:StockIssuedDuringPeriodValueShareBasedCompensation
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNC0xNS0xLTEtMTAwMDM2_f54ebe67-c831-4d3b-8bcc-23c7fac46d7c"
      unitRef="usd">504000</us-gaap:StockIssuedDuringPeriodValueShareBasedCompensation>
    <us-gaap:StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans
      contextRef="idd114f039c2f4f8abd444d113432aef1_D20220101-20220331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNS0xLTEtMS0xMDAwMzY_ea5bf63b-3400-442c-8734-6298f218866b"
      unitRef="shares">1698</us-gaap:StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="i1fc9801726514305b4f9b2bdf7d77387_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNS05LTEtMS0xMDAwMzY_42c3c61a-bc22-4b82-a0a6-88f42976caea"
      unitRef="usd">147000</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNS0xNS0xLTEtMTAwMDM2_c4af56ea-0162-4571-a908-e10e47aca001"
      unitRef="usd">147000</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="idd114f039c2f4f8abd444d113432aef1_D20220101-20220331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNi0xLTEtMS0xMDAwMzY_ded3f678-8504-418c-a6cd-7a8fd035fbe3"
      unitRef="shares">121544</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="ie7c55ab2807f4502a58026a33c40c206_D20220101-20220331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNi01LTEtMS0xMDAwMzY_97bf0b14-740f-48ef-bd73-a38572229859"
      unitRef="shares">121544</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="ie7c55ab2807f4502a58026a33c40c206_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNi03LTEtMS0xMDAwMzY_68606d02-b59e-4b13-bc18-2f71eed4eb58"
      unitRef="usd">15226000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNi0xNS0xLTEtMTAwMDM2_c1317cef-0940-40e1-9275-1f100421a40d"
      unitRef="usd">15226000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:NetIncomeLoss
      contextRef="i7b9811e5d915467c97be523960c15694_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNy0xMS0xLTEtMTAwMDM2_54373a64-206d-453e-9eba-d4ffdee169e6"
      unitRef="usd">12603000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfNy0xNS0xLTEtMTAwMDM2_d021294c-b5b7-4ac2-b53c-237ccceb9ded"
      unitRef="usd">12603000</us-gaap:NetIncomeLoss>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax
      contextRef="i75d8049bb9b74cb18a2bc589da52a8fa_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfOC0xMy0xLTEtMTAwMDM2_162325f3-8858-417b-b8e7-ea46ae342d77"
      unitRef="usd">730000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfOC0xNS0xLTEtMTAwMDM2_b1f8ecf8-ef13-4e1c-b555-8856e1d382f4"
      unitRef="usd">730000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax
      contextRef="i75d8049bb9b74cb18a2bc589da52a8fa_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfOS0xMy0xLTEtMTAwMDM2_04f402e1-49bd-4f93-8304-f5093e8295b5"
      unitRef="usd">-3000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfOS0xNS0xLTEtMTAwMDM2_fa5ab366-2afe-403d-aa79-09a503d7ba6d"
      unitRef="usd">-3000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax
      contextRef="i75d8049bb9b74cb18a2bc589da52a8fa_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTAtMTMtMS0xLTEwMDAzNg_7d7def61-91b4-4e2b-91d1-458f09aa3119"
      unitRef="usd">-11000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTAtMTUtMS0xLTEwMDAzNg_1450cf76-3342-467a-8ea6-324ffe67cca0"
      unitRef="usd">-11000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="i8124e569001b4e4b82731473fb5747be_I20220331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtMS0xLTEtMTAwMDM2_28375fcd-3929-4a00-8c13-bbe4928b03ec"
      unitRef="shares">36120518</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:StockholdersEquity
      contextRef="i8124e569001b4e4b82731473fb5747be_I20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtMy0xLTEtMTAwMDM2_d2a1b884-331a-4538-95a7-72fdfaa84cfd"
      unitRef="usd">38000</us-gaap:StockholdersEquity>
    <us-gaap:TreasuryStockCommonShares
      contextRef="ibfcbe17b3dac42f7abe430e868e4f22b_I20220331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtNS0xLTEtMTAwMDM2_98d904a1-0a83-4973-a88e-1284f040f758"
      unitRef="shares">1910897</us-gaap:TreasuryStockCommonShares>
    <us-gaap:StockholdersEquity
      contextRef="ibfcbe17b3dac42f7abe430e868e4f22b_I20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtNy0xLTEtMTAwMDM2_211d6401-6572-41b9-ba26-d99006bc75ba"
      unitRef="usd">-100903000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="if778689a912e42d6b2037b7a25101d96_I20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtOS0xLTEtMTAwMDM2_2103f195-9a18-491a-b09b-a7619893e264"
      unitRef="usd">442405000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="iea4c199918fe4c558f469af3807faa16_I20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtMTEtMS0xLTEwMDAzNg_d859bdd2-136d-4ad6-8462-51f8226180fa"
      unitRef="usd">150690000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i55d085d612994f239183415316aadc58_I20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtMTMtMS0xLTEwMDAzNg_e5421751-f7f7-4b62-99d9-438be9982d9b"
      unitRef="usd">-709000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="iea65401e964c4d079f6a7764673f9d3e_I20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTEtMTUtMS0xLTEwMDAzNg_4c8e5ffe-dfdb-46ab-b7c1-cac1cce7bce0"
      unitRef="usd">491521000</us-gaap:StockholdersEquity>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="i0fb6c4ac52bb4e62922d66b045aa21d1_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtMS0xLTEtMTAwMDM2_124b09d3-e32b-4553-9451-bdcfff00c575"
      unitRef="shares">36158046</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:StockholdersEquity
      contextRef="i0fb6c4ac52bb4e62922d66b045aa21d1_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtMy0xLTEtMTAwMDM2_572a8990-52ea-4014-ada9-e3e96b52d22c"
      unitRef="usd">38000</us-gaap:StockholdersEquity>
    <us-gaap:TreasuryStockCommonShares
      contextRef="i8af1540ceff142b6a0d5b42e48a50184_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtNS0xLTEtMTAwMDM2_4706e8d2-bb42-4ad7-ab3c-cc0d2c7a95a3"
      unitRef="shares">2151098</us-gaap:TreasuryStockCommonShares>
    <us-gaap:StockholdersEquity
      contextRef="i8af1540ceff142b6a0d5b42e48a50184_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtNy0xLTEtMTAwMDM2_36dedc39-95be-4c61-aa05-3e0c60b861af"
      unitRef="usd">-128892000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i6414f87f71f94519989c31299a6bdc50_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtOS0xLTEtMTAwMDM2_2aa835f7-d739-469a-b6f8-9522be875dd8"
      unitRef="usd">476117000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i816385f2c35a409ab40061bbedc4ce46_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtMTEtMS0xLTEwMDAzNg_55678cc7-6410-42fc-9e24-b131fd0fe117"
      unitRef="usd">193221000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i4efe2f28c7954c8a8aba61558e2a21d5_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtMTMtMS0xLTEwMDAzNg_c6527d21-64e9-478c-bce6-8e51bea85eac"
      unitRef="usd">-3411000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTMtMTUtMS0xLTEwMDAzNg_996a33a0-4f35-4f84-bf98-a823bf793b71"
      unitRef="usd">537073000</us-gaap:StockholdersEquity>
    <us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue
      contextRef="idd022eaf6b814505b1ba92ba75ab3173_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTQtOS0xLTEtMTAwMDM2_866d1b1c-1d72-4ae9-a822-ed424f741500"
      unitRef="usd">11175000</us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue>
    <us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTQtMTUtMS0xLTEwMDAzNg_fa6614a1-ce47-4af2-b1f7-762ce8c9f4b0"
      unitRef="usd">11175000</us-gaap:AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue>
    <us-gaap:StockIssuedDuringPeriodSharesShareBasedCompensation
      contextRef="i1eab60dc7b84487ca4d1c577cde5b045_D20230101-20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTUtMS0xLTEtMTAwMDM2_e66fb0df-86ec-4322-a264-234594ff6abb"
      unitRef="shares">372161</us-gaap:StockIssuedDuringPeriodSharesShareBasedCompensation>
    <us-gaap:StockIssuedDuringPeriodValueShareBasedCompensation
      contextRef="idd022eaf6b814505b1ba92ba75ab3173_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTUtOS0xLTEtMTAwMDM2_1f594f05-7748-496d-b675-6ad85100576c"
      unitRef="usd">2183000</us-gaap:StockIssuedDuringPeriodValueShareBasedCompensation>
    <us-gaap:StockIssuedDuringPeriodValueShareBasedCompensation
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTUtMTUtMS0xLTEwMDAzNg_3ee47344-7fba-4bc1-ac18-93c2adebc468"
      unitRef="usd">2184000</us-gaap:StockIssuedDuringPeriodValueShareBasedCompensation>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward
      contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTYtMS0xLTEtMTAwMDM2_b9084df6-ad98-44f5-9619-2aa652af1e89"
      unitRef="shares">2549</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="idd022eaf6b814505b1ba92ba75ab3173_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTYtOS0xLTEtMTAwMDM2_39700f28-d4eb-46dd-8a6c-8e5bd7cb9dd0"
      unitRef="usd">241000</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTYtMTUtMS0xLTEwMDAzNg_d2bb90d5-3111-4010-85f9-c5666f7c0c2d"
      unitRef="usd">241000</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:NetIncomeLoss
      contextRef="ia18cb472d37847b4ae4f0e7c9fcc2093_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTgtMTEtMS0xLTEwMDAzNg_82620c20-cf40-4702-84f0-a471c995fc78"
      unitRef="usd">15289000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTgtMTUtMS0xLTEwMDAzNg_f491704d-3f13-4ea0-8fc6-526bccafa998"
      unitRef="usd">15289000</us-gaap:NetIncomeLoss>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax
      contextRef="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTktMTMtMS0xLTEwMDAzNg_77dbfcac-f808-492f-896e-0e8c2bffda67"
      unitRef="usd">-95000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax>
    <us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMTktMTUtMS0xLTEwMDAzNg_88549927-5ba0-44e2-a8a7-ec68a53c2cb7"
      unitRef="usd">-95000</us-gaap:OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax
      contextRef="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjAtMTMtMS0xLTEwMDAzNg_978b7d93-7748-4bc8-8a69-5fb26caf65f4"
      unitRef="usd">399000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax>
    <us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjAtMTUtMS0xLTEwMDAzNg_62c74cfc-7c42-4a32-b4c4-5d4373d1e7f1"
      unitRef="usd">399000</us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax
      contextRef="i95b3738dd893400f85c8cc20eaee2857_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjEtMTMtMS0xLTEwMDAzNg_c011e146-4cfc-4b4b-9b2e-638c375c7652"
      unitRef="usd">376000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax>
    <us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjEtMTUtMS0xLTEwMDAzNg_bb2af7f1-5736-40bc-b6c6-dc6712ac058c"
      unitRef="usd">376000</us-gaap:OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="ibfb2f662a68c47be9ba841e369ff84b6_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItMS0xLTEtMTAwMDM2_33d0dc8d-d625-43cd-89aa-67f59325ba58"
      unitRef="shares">36532756</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:StockholdersEquity
      contextRef="ibfb2f662a68c47be9ba841e369ff84b6_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItMy0xLTEtMTAwMDM2_066d7f82-3a94-44fa-96d4-83081ba67342"
      unitRef="usd">39000</us-gaap:StockholdersEquity>
    <us-gaap:TreasuryStockCommonShares
      contextRef="i12ac53a6dd6f4f92b7a17ef4b5ebd28a_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItNS0xLTEtMTAwMDM2_75f60d1e-2378-433d-9213-5f6c8fd708c7"
      unitRef="shares">2151098</us-gaap:TreasuryStockCommonShares>
    <us-gaap:StockholdersEquity
      contextRef="i12ac53a6dd6f4f92b7a17ef4b5ebd28a_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItNy0xLTEtMTAwMDM2_b7fbebc2-c524-419f-a29c-c0caa8e3b0b5"
      unitRef="usd">-128892000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i4911634e78ad4b7eb05c009b2036124f_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItOS0xLTEtMTAwMDM2_65867986-5637-4fef-91bb-961e5cd10d62"
      unitRef="usd">489716000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i7a0dda8262a5406492187cabbd51d4c6_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItMTEtMS0xLTEwMDAzNg_be800e96-d859-4ef4-aa44-c988e3ec378d"
      unitRef="usd">208510000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i15c6e19508144394b19c34d4451703e8_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItMTMtMS0xLTEwMDAzNg_864b12ad-09df-4863-b153-44a945aea96b"
      unitRef="usd">-3483000</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yMi9mcmFnOmU5YTdiZDE3MjAyYTQxZjlhYjk3ZTdjMzNlZWZlNDc0L3RhYmxlOjhiNjNkOTBiYzNhMDQyMjQ4YjczMDMwMDNmYjYxOGFjL3RhYmxlcmFuZ2U6OGI2M2Q5MGJjM2EwNDIyNDhiNzMwMzAwM2ZiNjE4YWNfMjItMTUtMS0xLTEwMDAzNg_bdcfc3c9-a501-430c-9ebd-8880d3c6075f"
      unitRef="usd">565890000</us-gaap:StockholdersEquity>
    <us-gaap:NetIncomeLoss
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMy0xLTEtMS0xMDAwMzY_cbb60761-b356-4688-83dc-637639420d02"
      unitRef="usd">15289000</us-gaap:NetIncomeLoss>
    <us-gaap:DeferredIncomeTaxExpenseBenefit
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfNS0xLTEtMS0xMDAwMzY_8ae2141f-4d3b-44ca-b452-05b123908df1"
      unitRef="usd">-5147000</us-gaap:DeferredIncomeTaxExpenseBenefit>
    <us-gaap:DepreciationDepletionAndAmortization
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfNi0xLTEtMS0xMDAwMzY_905f1610-d10c-4697-b5b2-925dcc065b0f"
      unitRef="usd">4626000</us-gaap:DepreciationDepletionAndAmortization>
    <us-gaap:AmortizationOfIntangibleAssets
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfNy0xLTEtMS0xMDAwMzY_c5f387e8-c596-4a5a-ae72-fa29c9f24a42"
      unitRef="usd">3851000</us-gaap:AmortizationOfIntangibleAssets>
    <us-gaap:ProvisionForDoubtfulAccounts
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfOC0xLTEtMS0xMDAwMzY_055d7ff9-9d1e-4f6b-a349-7f015a123132"
      unitRef="usd">1206000</us-gaap:ProvisionForDoubtfulAccounts>
    <us-gaap:ShareBasedCompensation
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfOS0xLTEtMS0xMDAwMzY_1392499d-98e5-408a-a540-2c359689e47b"
      unitRef="usd">11780000</us-gaap:ShareBasedCompensation>
    <us-gaap:OtherNoncashIncomeExpense
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTAtMS0xLTEtMTAwMDM2_35383620-4312-4f04-ab61-cd12c3e3db31"
      unitRef="usd">-502000</us-gaap:OtherNoncashIncomeExpense>
    <us-gaap:IncreaseDecreaseInAccountsReceivable
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTItMS0xLTEtMTAwMDM2_137299f3-b419-4d83-8c24-392801bfc96a"
      unitRef="usd">6220000</us-gaap:IncreaseDecreaseInAccountsReceivable>
    <us-gaap:IncreaseDecreaseInDeferredCharges
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTMtMS0xLTEtMTAwMDM2_33fc6acc-fa2b-4761-bf0a-94a202908f68"
      unitRef="usd">1679000</us-gaap:IncreaseDecreaseInDeferredCharges>
    <us-gaap:IncreaseDecreaseInOtherOperatingAssets
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTQtMS0xLTEtMTAwMDM2_75f4b31e-7905-4506-8395-c1d3d2c50e7b"
      unitRef="usd">-602000</us-gaap:IncreaseDecreaseInOtherOperatingAssets>
    <us-gaap:IncreaseDecreaseInAccountsPayable
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTUtMS0xLTEtMTAwMDM2_daf1bc7c-ca49-4ae3-b475-0b2b0251f33a"
      unitRef="usd">-4849000</us-gaap:IncreaseDecreaseInAccountsPayable>
    <us-gaap:IncreaseDecreaseInEmployeeRelatedLiabilities
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTYtMS0xLTEtMTAwMDM2_90d9bb58-fe27-45e2-a9ad-c1000c744733"
      unitRef="usd">-4417000</us-gaap:IncreaseDecreaseInEmployeeRelatedLiabilities>
    <us-gaap:IncreaseDecreaseInAccruedLiabilities
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTctMS0xLTEtMTAwMDM2_6bb89a34-05f5-4b0f-a1e1-77ef3e19cec6"
      unitRef="usd">721000</us-gaap:IncreaseDecreaseInAccruedLiabilities>
    <us-gaap:IncreaseDecreaseInContractWithCustomerLiability
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTgtMS0xLTEtMTAwMDM2_732fc0d5-5e80-4f5f-9072-3e4795cf2e39"
      unitRef="usd">5818000</us-gaap:IncreaseDecreaseInContractWithCustomerLiability>
    <spsc:IncreaseDecreaseInOperatingLeases
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMTktMS0xLTEtMTAwMDM2_dce296a0-f4ea-41ca-9eed-1a70118f96cb"
      unitRef="usd">-452000</spsc:IncreaseDecreaseInOperatingLeases>
    <us-gaap:NetCashProvidedByUsedInOperatingActivities
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjAtMS0xLTEtMTAwMDM2_119d7b0e-5c81-4be5-b0d3-8f0135c69c0b"
      unitRef="usd">21631000</us-gaap:NetCashProvidedByUsedInOperatingActivities>
    <us-gaap:PaymentsToAcquirePropertyPlantAndEquipment
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjItMS0xLTEtMTAwMDM2_0ed43baa-4400-4787-9091-5e5c6036b819"
      unitRef="usd">5261000</us-gaap:PaymentsToAcquirePropertyPlantAndEquipment>
    <us-gaap:PaymentsToAcquireOtherInvestments
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjMtMS0xLTEtMTAwMDM2_904a9de6-2a2f-45f0-a01d-3c6c271f8a92"
      unitRef="usd">34329000</us-gaap:PaymentsToAcquireOtherInvestments>
    <us-gaap:ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjQtMS0xLTEtMTAwMDM2_a2c58df1-a4ba-41e8-a700-fe59ab88b643"
      unitRef="usd">35000000</us-gaap:ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities>
    <us-gaap:NetCashProvidedByUsedInInvestingActivities
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjYtMS0xLTEtMTAwMDM2_c6d7fc24-81f6-4028-ac6f-06d25d215b3e"
      unitRef="usd">-4590000</us-gaap:NetCashProvidedByUsedInInvestingActivities>
    <us-gaap:PaymentsForRepurchaseOfCommonStock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjgtMS0xLTEtMTAwMDM2_01cc1927-5b59-44ef-89af-aa913c690dda"
      unitRef="usd">0</us-gaap:PaymentsForRepurchaseOfCommonStock>
    <us-gaap:ProceedsFromStockOptionsExercised
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMjktMS0xLTEtMTAwMDM2_d8146b94-fd73-4dde-aef5-705deb6b4e1a"
      unitRef="usd">2184000</us-gaap:ProceedsFromStockOptionsExercised>
    <us-gaap:ProceedsFromStockPlans
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMzAtMS0xLTEtMTAwMDM2_1f20da9c-be4a-4d9d-8261-a8545ce14c86"
      unitRef="usd">241000</us-gaap:ProceedsFromStockPlans>
    <us-gaap:NetCashProvidedByUsedInFinancingActivities
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMzItMS0xLTEtMTAwMDM2_99d215f0-f704-49fe-b636-d853d36b7686"
      unitRef="usd">2425000</us-gaap:NetCashProvidedByUsedInFinancingActivities>
    <us-gaap:EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMzMtMS0xLTEtMTAwMDM2_a16c1271-6bdc-4ad8-bec7-d44676940f69"
      unitRef="usd">-55000</us-gaap:EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMzQtMS0xLTEtMTAwMDM2_150f25e4-9cc0-4dfa-9522-18a3e1cbad66"
      unitRef="usd">19411000</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMzUtMS0xLTEtMTAwMDM2_864b85f3-5d4d-4818-8c7f-800f407255fb"
      unitRef="usd">162893000</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8yNS9mcmFnOmU0OGQ5NWE1Y2YyNzQzY2I5MTc1MDc5NWVlMDVlY2RmL3RhYmxlOmEzNWY3M2I2OTgwMzRmZDA5MTEwNGViYzNhM2EyODU3L3RhYmxlcmFuZ2U6YTM1ZjczYjY5ODAzNGZkMDkxMTA0ZWJjM2EzYTI4NTdfMzYtMS0xLTEtMTAwMDM2_0876a895-55d1-4de9-815a-130475487ec1"
      unitRef="usd">182304000</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations>
    <us-gaap:OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNC9mcmFnOjM5OTZhMjc2Y2QwZTRjN2ZhYmE1MTRlZmU5OWNkMWMwL3RleHRyZWdpb246Mzk5NmEyNzZjZDBlNGM3ZmFiYTUxNGVmZTk5Y2QxYzBfMTcyNg_9e702fe3-4104-412f-be2e-736d928036cc">General&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Business Description&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;SPS Commerce is a leading provider of cloud-based supply chain management services across our global retail network. Our products make it easier for retailers, grocers, distributors, suppliers, and logistics firms to communicate and collaborate by simplifying how they manage and share item, inventory, order and sales data across omnichannel retail channels. We deliver our products using a full-service model, which includes industry-leading technology and a team of experts that optimize, update, and operate the technology on customers' behalf.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our products enable customers to increase supply chain performance, optimize inventory levels and sell-through, reduce operational costs, improve order visibility, and satisfy consumer demands for a seamless omnichannel experience.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Basis of Presentation&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The accompanying unaudited condensed consolidated financial statements have been prepared in conformity with accounting principles generally accepted in the United States of America (&#x201c;GAAP&#x201d;) and include the accounts of SPS Commerce, Inc. and its subsidiaries. All intercompany accounts and transactions have been eliminated in the condensed consolidated financial statements. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;This interim financial information has been prepared under the instructions to Form 10-Q and Rule 10-01 of Regulation S-X. Accordingly, these condensed consolidated financial statements do not include all of the information and notes required by GAAP. Therefore, these condensed consolidated financial statements should be read in conjunction with the consolidated financial statements and notes included in our Annual Report on Form 10-K for the year ended December&#160;31, 2022, as filed with the Securities and Exchange Commission (&#x201c;SEC&#x201d;). We have included all normal recurring adjustments considered necessary to provide a fair presentation of our financial position, results of operations, stockholders&#x2019; equity, and cash flows for the interim periods presented. Operating results for these interim periods are not necessarily indicative of the results to be expected for the full year.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Use of Estimates&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Preparing financial statements in conformity with GAAP requires management to make estimates, judgments, and assumptions that affect the reported amounts of assets and liabilities, disclosure of contingent assets and liabilities at the date of the financial statements, and the reported amounts of revenues and expenses during the reporting periods. Actual results could differ from those estimates.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Significant Accounting Policies&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;There were no material changes in our significant accounting policies during the three months ended March&#160;31, 2023. See Note A to the consolidated financial statements included in our Annual Report on Form 10-K for the year ended &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;December&#160;31, 2022&lt;/span&gt;&lt;span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;, as filed with the SEC, for additional information regarding our significant accounting policies.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Accounting Pronouncements Recently Adopted&lt;/span&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:20.566%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.172%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:29.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.384%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:20.418%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Standard&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Date of Issuance&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Description&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Date of Adoption&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Effect on the Financial Statements&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:115%"&gt;ASU 2021-08, &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%"&gt;Business Combinations (Topic 805) - Accounting for Contract Assets and Contract Liabilities from Contracts with Customers&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;October 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;This amendment requires that an acquirer recognize and measure contract assets and contract liabilities acquired in a business combination in accordance with Topic 606, effective for all business combinations in the year of adoption and thereafter.&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;January 2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;The adoption of this standard may have a material impact on the purchase accounting for future business combinations depending on the specific amount of contract assets and liabilities being acquired.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock>
    <spsc:BusinessDescriptionPolicyPolicyTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNC9mcmFnOjM5OTZhMjc2Y2QwZTRjN2ZhYmE1MTRlZmU5OWNkMWMwL3RleHRyZWdpb246Mzk5NmEyNzZjZDBlNGM3ZmFiYTUxNGVmZTk5Y2QxYzBfMTcyNw_8f375777-d8a2-4fb1-af78-cf216044094a">&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Business Description&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;SPS Commerce is a leading provider of cloud-based supply chain management services across our global retail network. Our products make it easier for retailers, grocers, distributors, suppliers, and logistics firms to communicate and collaborate by simplifying how they manage and share item, inventory, order and sales data across omnichannel retail channels. We deliver our products using a full-service model, which includes industry-leading technology and a team of experts that optimize, update, and operate the technology on customers' behalf.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our products enable customers to increase supply chain performance, optimize inventory levels and sell-through, reduce operational costs, improve order visibility, and satisfy consumer demands for a seamless omnichannel experience.&lt;/span&gt;&lt;/div&gt;</spsc:BusinessDescriptionPolicyPolicyTextBlock>
    <us-gaap:BasisOfAccountingPolicyPolicyTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNC9mcmFnOjM5OTZhMjc2Y2QwZTRjN2ZhYmE1MTRlZmU5OWNkMWMwL3RleHRyZWdpb246Mzk5NmEyNzZjZDBlNGM3ZmFiYTUxNGVmZTk5Y2QxYzBfMTcyOA_d0f95d91-2f43-4d54-a5f4-db74c5358498">&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Basis of Presentation&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The accompanying unaudited condensed consolidated financial statements have been prepared in conformity with accounting principles generally accepted in the United States of America (&#x201c;GAAP&#x201d;) and include the accounts of SPS Commerce, Inc. and its subsidiaries. All intercompany accounts and transactions have been eliminated in the condensed consolidated financial statements. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;This interim financial information has been prepared under the instructions to Form 10-Q and Rule 10-01 of Regulation S-X. Accordingly, these condensed consolidated financial statements do not include all of the information and notes required by GAAP. Therefore, these condensed consolidated financial statements should be read in conjunction with the consolidated financial statements and notes included in our Annual Report on Form 10-K for the year ended December&#160;31, 2022, as filed with the Securities and Exchange Commission (&#x201c;SEC&#x201d;). We have included all normal recurring adjustments considered necessary to provide a fair presentation of our financial position, results of operations, stockholders&#x2019; equity, and cash flows for the interim periods presented. Operating results for these interim periods are not necessarily indicative of the results to be expected for the full year.&lt;/span&gt;&lt;/div&gt;</us-gaap:BasisOfAccountingPolicyPolicyTextBlock>
    <us-gaap:UseOfEstimates
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNC9mcmFnOjM5OTZhMjc2Y2QwZTRjN2ZhYmE1MTRlZmU5OWNkMWMwL3RleHRyZWdpb246Mzk5NmEyNzZjZDBlNGM3ZmFiYTUxNGVmZTk5Y2QxYzBfMTczNA_98675b3a-dc90-4afe-8f7c-3264741a6bc1">&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Use of Estimates&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Preparing financial statements in conformity with GAAP requires management to make estimates, judgments, and assumptions that affect the reported amounts of assets and liabilities, disclosure of contingent assets and liabilities at the date of the financial statements, and the reported amounts of revenues and expenses during the reporting periods. Actual results could differ from those estimates.&lt;/span&gt;&lt;/div&gt;</us-gaap:UseOfEstimates>
    <spsc:SignificantAccountingPoliciesPolicyPolicyTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNC9mcmFnOjM5OTZhMjc2Y2QwZTRjN2ZhYmE1MTRlZmU5OWNkMWMwL3RleHRyZWdpb246Mzk5NmEyNzZjZDBlNGM3ZmFiYTUxNGVmZTk5Y2QxYzBfMTczNw_2f564de4-48ec-490b-ba94-2e59b124f872">&lt;div style="margin-top:12pt"&gt;&lt;span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Significant Accounting Policies&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;There were no material changes in our significant accounting policies during the three months ended March&#160;31, 2023. See Note A to the consolidated financial statements included in our Annual Report on Form 10-K for the year ended &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;December&#160;31, 2022&lt;/span&gt;&lt;span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;, as filed with the SEC, for additional information regarding our significant accounting policies.&lt;/span&gt;&lt;/div&gt;</spsc:SignificantAccountingPoliciesPolicyPolicyTextBlock>
    <us-gaap:ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNC9mcmFnOjM5OTZhMjc2Y2QwZTRjN2ZhYmE1MTRlZmU5OWNkMWMwL3RleHRyZWdpb246Mzk5NmEyNzZjZDBlNGM3ZmFiYTUxNGVmZTk5Y2QxYzBfMTczOA_b439a438-36ad-4d70-8076-8e2769bc69c6">&lt;span style="background-color:#ffffff;color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Accounting Pronouncements Recently Adopted&lt;/span&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:20.566%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.172%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:29.960%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.384%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:20.418%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Standard&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Date of Issuance&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Description&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Date of Adoption&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Effect on the Financial Statements&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;div style="text-align:center"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:115%"&gt;ASU 2021-08, &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:115%"&gt;Business Combinations (Topic 805) - Accounting for Contract Assets and Contract Liabilities from Contracts with Customers&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;October 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;This amendment requires that an acquirer recognize and measure contract assets and contract liabilities acquired in a business combination in accordance with Topic 606, effective for all business combinations in the year of adoption and thereafter.&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;January 2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;The adoption of this standard may have a material impact on the purchase accounting for future business combinations depending on the specific amount of contract assets and liabilities being acquired.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</us-gaap:ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock>
    <us-gaap:BusinessCombinationDisclosureTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfNTQ5NzU1ODE0OTI1MA_a0264d8a-c764-48ba-8b7a-448327d60bf8">Business Acquisitions&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%;text-decoration:underline"&gt;GCommerce&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Effective July 19, 2022, we acquired all of the outstanding equity ownership interests of GCommerce, Inc. ("GCommerce"), a leading EDI provider within the automotive aftermarket industry. Pursuant to the definitive agreement, the purchase price was $45.1&#160;million, including post-closing adjustments. The purchase accounting for the acquisition has not been finalized as of March 31, 2023 due primarily to provisional tax components and corresponding impacts to other items, including intangible assets. We expect to finalize the allocation of the purchase price within the one-year measurement period following the acquisition. During the quarter ended March 31, 2023, provisional amounts were adjusted by $1.6&#160;million, primarily relating to a $1.5&#160;million decrease in the estimated value of deferred income tax assets, with the corresponding offset to goodwill. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:120%;text-decoration:underline"&gt;InterTrade&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Effective October 4, 2022, we acquired all of the outstanding equity ownership interests of Canadian based InterTrade Systems Inc. ("InterTrade"), a leading EDI provider within the apparel and general merchandising markets. Pursuant to the definitive agreement, the purchase price was $49.1&#160;million, including estimated post-closing adjustments. The purchase accounting for the acquisition has not been finalized as of March 31, 2023 due to various items including valuation modeling completion; provisional amounts are primarily related to intangible assets. We expect to finalize the allocation of the purchase price within the one-year measurement period following the acquisition. During the quarter ended March 31, 2023, there were no material changes to the provisional amounts.&lt;/span&gt;&lt;/div&gt;</us-gaap:BusinessCombinationDisclosureTextBlock>
    <us-gaap:BusinessCombinationConsiderationTransferred1
      contextRef="i494bbf45b93640b8b137b284e56fea8c_D20220719-20220719"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfMzI5ODUzNDg5MTEwNQ_ffccccad-9968-47f0-b697-b55639a1cb5e"
      unitRef="usd">45100000</us-gaap:BusinessCombinationConsiderationTransferred1>
    <spsc:BusinessCombinationMeasurementPeriod
      contextRef="i494bbf45b93640b8b137b284e56fea8c_D20220719-20220719"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfMzI5ODUzNDg5MTEyOQ_fa4ce734-f5d1-4cd9-88e5-587615511aa4">P1Y</spsc:BusinessCombinationMeasurementPeriod>
    <us-gaap:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred
      contextRef="i0548f3e001a74dfe9ff742bd06bf5d1d_D20230101-20230331"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfNTQ5NzU1ODE0OTIyMw_5626d4c3-273b-4953-91e1-0ae64df585c9"
      unitRef="usd">-1600000</us-gaap:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred>
    <spsc:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets
      contextRef="i0548f3e001a74dfe9ff742bd06bf5d1d_D20230101-20230331"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfNTQ5NzU1ODE0OTIzNw_5985d9cf-0ac4-411a-8ea0-b6168a35b20d"
      unitRef="usd">-1500000</spsc:BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets>
    <us-gaap:BusinessCombinationConsiderationTransferred1
      contextRef="ibeb5587d4f8d49878baf94f9edca4f5c_D20221004-20221004"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfMTY0OTI2NzQ0NTMzNA_0c970860-de5d-4659-a7a5-5f13350c1729"
      unitRef="usd">49100000</us-gaap:BusinessCombinationConsiderationTransferred1>
    <spsc:BusinessCombinationMeasurementPeriod
      contextRef="ibeb5587d4f8d49878baf94f9edca4f5c_D20221004-20221004"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl8zNy9mcmFnOmM3YzQ1MDUyYzQ4MTQ5ZWFiODMzMTYzZDU4MzM3NTFlL3RleHRyZWdpb246YzdjNDUwNTJjNDgxNDllYWI4MzMxNjNkNTgzMzc1MWVfMzI5ODUzNDg5MTE0MA_28d85d8c-ff1a-4ca9-96a9-fe17d3846fe3">P1Y</spsc:BusinessCombinationMeasurementPeriod>
    <us-gaap:RevenueFromContractWithCustomerTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfMTExOQ_cf2c38a3-ff45-4845-8774-ca90e54e4a03">Revenue &lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We derive our revenues from the following revenue streams:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.545%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.807%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.408%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.143%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Recurring revenues:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Fulfillment&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;101,668&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;84,731&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Analytics&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;12,370&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;11,296&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Other&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,263&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,540&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Recurring revenues&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;117,301&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;97,567&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;One-time revenues&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;8,567&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7,626&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Total revenue&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;125,868&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;105,193&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Revenues are the amount that reflects the consideration we are contractually and legally entitled to, as well as the amount we expect to collect, in exchange for those services.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Recurring Revenues&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Recurring revenues consist of recurring subscriptions from customers that utilize our Fulfillment, Analytics, and Other supply chain management products. Revenue for these products is generally recognized on a ratable basis over the contract term beginning on the date that our service is made available to the customer. Our contracts with our recurring revenue customers are recurring in nature, generally ranging from monthly to annual, and generally allow the customer to cancel the contract for any reason with 30 to 90 days&#x2019; notice. Timing of billings varies by customer and by contract type and generally are either in advance or within 30 days of the service being performed.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Given that the recurring revenue contracts are for one year or less, we have applied the optional exemption to not disclose information about the remaining performance obligations for recurring revenue contracts.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;One-time Revenues&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;One-time revenues consist of set-up fees and miscellaneous fees from customers.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:9pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%"&gt;Set-up revenues&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Set-up fees are specific for each connection a customer has with a trading partner. These nonrefundable fees are necessary for our customers to utilize our services and do not provide any standalone value. Many of our customers have connections with numerous trading partners.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Set-up fees constitute a material renewal option right that provide customers a significant future incentive that would not be otherwise available to that customer unless they entered into the contract, as the set-up fees will not be incurred again upon contract renewal. As such, set-up fees and related costs are deferred and recognized ratably over two years which is the estimated period for which a material right is present for our customers.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;padding-left:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The table below presents the activity of the portion of the deferred revenue liability relating to set-up fees: &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.090%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.682%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.202%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.411%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.205%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, beginning of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;14,999&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;14,459&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Invoiced set-up fees&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,251&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,003&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Recognized set-up fees&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(3,963)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(3,524)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, end of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;15,287&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;14,938&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The entire balance of deferred set-up fees will be recognized within two years. Those that will be recognized within the next year are classified as current, whereas the remainder are classified as non-current.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:9pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:400;line-height:120%"&gt;Miscellaneous one-time revenues&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Miscellaneous one-time fees consist of professional services and testing and certification. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The contract period for these one-time fees is for one year or less and recognized at the time service is provided. We have applied the optional exemption to not disclose information about the remaining performance obligations for miscellaneous one-time fee contracts since they have original durations of one year or less.&lt;/span&gt;&lt;/div&gt;</us-gaap:RevenueFromContractWithCustomerTextBlock>
    <us-gaap:DisaggregationOfRevenueTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfMTEyMA_9db2c99f-3004-4428-b4c3-e10d7fffadcb">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We derive our revenues from the following revenue streams:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.545%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.807%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.408%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.143%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Recurring revenues:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Fulfillment&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;101,668&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;84,731&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Analytics&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;12,370&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;11,296&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Other&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,263&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,540&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Recurring revenues&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;117,301&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;97,567&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;One-time revenues&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;8,567&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7,626&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Total revenue&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;125,868&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;105,193&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:DisaggregationOfRevenueTableTextBlock>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i5e5f3e01a4554a07ace384858fe9fe50_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfMy0xLTEtMS0xMDAwMzY_d6b7dbbe-d55b-4f5e-8503-45a097078acf"
      unitRef="usd">101668000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="ic23344cee2e746358b8076d9aa27eb34_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfMy0zLTEtMS0xMDAwMzY_26f8574b-1869-4a97-82d1-7b9604644174"
      unitRef="usd">84731000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="ie322d516768a46d3840f582881367ef1_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNC0xLTEtMS0xMDAwMzY_12e51868-92c6-4e26-b2f8-97c873196b09"
      unitRef="usd">12370000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i66eb5ae5d9f648d1be790070d3eb42fb_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNC0zLTEtMS0xMDAwMzY_183341ae-50a9-4f17-bc1f-8f9af90c54e0"
      unitRef="usd">11296000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i430fe804c8354c35acdbac54c1a8103f_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNS0xLTEtMS0xMDAwMzY_c9313772-5e21-4efc-a6e7-102a63218fad"
      unitRef="usd">3263000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i483819e474e64d97b8cae765a6e4a1fc_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNS0zLTEtMS0xMDAwMzY_2daf1468-0039-4647-bab1-2677f980ef8b"
      unitRef="usd">1540000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="ic7f5ba10540447178ab71b4bb94aec7a_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNi0xLTEtMS0xMDAwMzY_a51fa14c-a5c0-4a4c-ac48-405bce682f50"
      unitRef="usd">117301000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i466b3e33d52b4738bb24fb4712caadf1_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNi0zLTEtMS0xMDAwMzY_45940921-5184-4bda-adb9-bbbcef80deb8"
      unitRef="usd">97567000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="if42252827934498bbe58d7c7792a6ce5_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNy0xLTEtMS0xMDAwMzY_988eead5-1648-4ff5-939e-c2464d64b763"
      unitRef="usd">8567000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i1bd93224c1834afcaecf43afdfecbc56_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfNy0zLTEtMS0xMDAwMzY_c4fb19df-dd6a-4a2e-a054-5c867a308f8d"
      unitRef="usd">7626000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfOC0xLTEtMS0xMDAwMzY_3e245610-c044-4b6d-a25b-01192a57c712"
      unitRef="usd">125868000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOjM3OGZiMTlhMDM2ZTRjNjNiNjJiMmNlNTJiYjczMjBkL3RhYmxlcmFuZ2U6Mzc4ZmIxOWEwMzZlNGM2M2I2MmIyY2U1MmJiNzMyMGRfOC0zLTEtMS0xMDAwMzY_cde8a01c-5edd-4a37-b567-387c45a6b9f5"
      unitRef="usd">105193000</us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax>
    <spsc:CustomerContractCancellationPeriod
      contextRef="i492ea2be0bc2406a877c7ea5f708a619_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfNTM_249f2fd3-3812-4543-93e7-a8ba7932d922">P30D</spsc:CustomerContractCancellationPeriod>
    <spsc:CustomerContractCancellationPeriod
      contextRef="i62d7c092a8b141fc9e9a77bf6fd97969_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfNTk_05f6a67c-aa49-467e-82fd-ec2fc7539241">P90D</spsc:CustomerContractCancellationPeriod>
    <spsc:RecurringRevenuesTimingOfBillingsLatestPeriod
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfMTc2_f9b9b3ec-fa36-4824-ba24-f4d234920760">P30D</spsc:RecurringRevenuesTimingOfBillingsLatestPeriod>
    <spsc:ContractTermMaximum
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfMjYy_a28afaa8-2b7f-4046-8a80-613a887b9f5e">P1Y</spsc:ContractTermMaximum>
    <spsc:SetUpFeesRecognizedPeriod
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfNDYx_8bc16dff-dada-405c-906d-13b7579c903b">P2Y</spsc:SetUpFeesRecognizedPeriod>
    <us-gaap:ContractWithCustomerAssetAndLiabilityTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfMTExOA_b9edb3db-4591-4fba-8467-0cf41b27669a">&lt;div style="margin-top:6pt;padding-left:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The table below presents the activity of the portion of the deferred revenue liability relating to set-up fees: &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.090%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.682%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.202%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.411%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.205%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, beginning of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;14,999&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;14,459&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Invoiced set-up fees&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,251&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,003&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Recognized set-up fees&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(3,963)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(3,524)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, end of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;15,287&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;14,938&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ContractWithCustomerAssetAndLiabilityTableTextBlock>
    <us-gaap:ContractWithCustomerLiability
      contextRef="i33903016b04043ff8f3b903207f93675_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfMi0xLTEtMS0xMDAwMzY_6988b606-3da3-4e0d-9565-34fcd34f002c"
      unitRef="usd">14999000</us-gaap:ContractWithCustomerLiability>
    <us-gaap:ContractWithCustomerLiability
      contextRef="i0727a052638340d28c42291a37278daf_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfMi0zLTEtMS0xMDAwMzY_bcfa9865-24e2-4a67-a079-246d85c12dcf"
      unitRef="usd">14459000</us-gaap:ContractWithCustomerLiability>
    <spsc:DeferredRevenueInvoicedSetUpFees
      contextRef="i7c34593b80204d5f877eca45dd51d401_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfMy0xLTEtMS0xMDAwMzY_7dd5b24d-ca5f-49c3-9efa-837f098a816f"
      unitRef="usd">4251000</spsc:DeferredRevenueInvoicedSetUpFees>
    <spsc:DeferredRevenueInvoicedSetUpFees
      contextRef="i88aef2c21a2d44408cff8c9801e859c8_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfMy0zLTEtMS0xMDAwMzY_263415d5-9259-48c4-ae3a-441951108b60"
      unitRef="usd">4003000</spsc:DeferredRevenueInvoicedSetUpFees>
    <spsc:DeferredRevenueAmortizedSetUpFees
      contextRef="i7c34593b80204d5f877eca45dd51d401_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfNC0xLTEtMS0xMDAwMzY_02df2aaf-c4eb-44d8-9ec3-67e0b708a009"
      unitRef="usd">3963000</spsc:DeferredRevenueAmortizedSetUpFees>
    <spsc:DeferredRevenueAmortizedSetUpFees
      contextRef="i88aef2c21a2d44408cff8c9801e859c8_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfNC0zLTEtMS0xMDAwMzY_cfaffda3-6a78-45a4-926c-24022c691983"
      unitRef="usd">3524000</spsc:DeferredRevenueAmortizedSetUpFees>
    <us-gaap:ContractWithCustomerLiability
      contextRef="i8f43e591125d49a89354fae41f4ec9e1_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfNS0xLTEtMS0xMDAwMzY_fc36dd9e-c049-4145-ab80-baa28d8c9336"
      unitRef="usd">15287000</us-gaap:ContractWithCustomerLiability>
    <us-gaap:ContractWithCustomerLiability
      contextRef="iee085911fef74ba4bab1072985c39349_I20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RhYmxlOmFmODNhMWZmMzQ1ZDRlOTI4ZWQzMDhmMmM3ZTYxOWRkL3RhYmxlcmFuZ2U6YWY4M2ExZmYzNDVkNGU5MjhlZDMwOGYyYzdlNjE5ZGRfNS0zLTEtMS0xMDAwMzY_9e89188b-36e1-4345-9b2a-a943d3bb1644"
      unitRef="usd">14938000</us-gaap:ContractWithCustomerLiability>
    <spsc:SetUpFeesRecognizedPeriod
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfNTQx_d209666b-70c5-4a1b-bb20-a443ba14d450">P2Y</spsc:SetUpFeesRecognizedPeriod>
    <spsc:MaximumRecognitionPeriodForMiscellaneousOneTimeFee
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80MC9mcmFnOmRkMzMwMTViM2NmNDQxYzRhNDlhNzBhMDI0MTM2MzU1L3RleHRyZWdpb246ZGQzMzAxNWIzY2Y0NDFjNGE0OWE3MGEwMjQxMzYzNTVfODUy_1b71ba08-ebd7-4807-bd97-c14f9393d4b8">P1Y</spsc:MaximumRecognitionPeriodForMiscellaneousOneTimeFee>
    <spsc:DeferredCostsDisclosureTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RleHRyZWdpb246MmY1ZDdjMWQxMGRhNDkxY2IwZWJkNTAyM2QyMzFkZTlfMzI_95920f3d-8b40-4b34-8533-b6fb068b6002">Deferred Costs&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The deferred costs activity was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.696%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.848%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.121%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.407%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.124%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, beginning of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;70,179&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;59,720&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Incurred deferred costs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;18,234&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;17,781&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Amortized deferred costs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(16,604)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(14,891)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, end of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;71,809&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;62,610&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:DeferredCostsDisclosureTextBlock>
    <spsc:DeferredCostsAndAmortizationTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RleHRyZWdpb246MmY1ZDdjMWQxMGRhNDkxY2IwZWJkNTAyM2QyMzFkZTlfMzM_430c411b-2e26-4445-9877-233c4690a478">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The deferred costs activity was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.696%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.848%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.121%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.407%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.124%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, beginning of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;70,179&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;59,720&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Incurred deferred costs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;18,234&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;17,781&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Amortized deferred costs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(16,604)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(14,891)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, end of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;71,809&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;62,610&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:DeferredCostsAndAmortizationTableTextBlock>
    <us-gaap:DeferredCostsCurrentAndNoncurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfMi0xLTEtMS0xMDAwMzY_6b75e569-89eb-4d63-bbe4-2afea2833c85"
      unitRef="usd">70179000</us-gaap:DeferredCostsCurrentAndNoncurrent>
    <us-gaap:DeferredCostsCurrentAndNoncurrent
      contextRef="id23181cd6ae24a028a249a4d25818065_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfMi0zLTEtMS0xMDAwMzY_ea0b8ec6-cd3e-4f54-984a-1787ff20654b"
      unitRef="usd">59720000</us-gaap:DeferredCostsCurrentAndNoncurrent>
    <spsc:DeferredCostsIncurred
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfMy0xLTEtMS0xMDAwMzY_586d9fe0-fc09-4dc0-9005-98d976ff9bec"
      unitRef="usd">18234000</spsc:DeferredCostsIncurred>
    <spsc:DeferredCostsIncurred
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfMy0zLTEtMS0xMDAwMzY_603adff0-3f86-4529-8cbc-3c63652b5403"
      unitRef="usd">17781000</spsc:DeferredCostsIncurred>
    <spsc:DeferredCostsAmortized
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfNC0xLTEtMS0xMDAwMzY_c7da3cc0-4972-414d-8c76-3338c4cd9854"
      unitRef="usd">-16604000</spsc:DeferredCostsAmortized>
    <spsc:DeferredCostsAmortized
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfNC0zLTEtMS0xMDAwMzY_0ef3998f-95c6-4566-acb6-0823db1382d6"
      unitRef="usd">-14891000</spsc:DeferredCostsAmortized>
    <us-gaap:DeferredCostsCurrentAndNoncurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfNS0xLTEtMS0xMDAwMzY_6cf4f89d-fca2-4629-9fbf-9d677a07a953"
      unitRef="usd">71809000</us-gaap:DeferredCostsCurrentAndNoncurrent>
    <us-gaap:DeferredCostsCurrentAndNoncurrent
      contextRef="iea65401e964c4d079f6a7764673f9d3e_I20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80My9mcmFnOjJmNWQ3YzFkMTBkYTQ5MWNiMGViZDUwMjNkMjMxZGU5L3RhYmxlOmNlYWM0OTZlNDgxMTRkYWY5YmVhMWJkYTc0NDU4NjdmL3RhYmxlcmFuZ2U6Y2VhYzQ5NmU0ODExNGRhZjliZWExYmRhNzQ0NTg2N2ZfNS0zLTEtMS0xMDAwMzY_322dcfeb-4404-44fa-8f35-e5025af6a767"
      unitRef="usd">62610000</us-gaap:DeferredCostsCurrentAndNoncurrent>
    <us-gaap:FinancialInstrumentsDisclosureTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RleHRyZWdpb246NDExNGI5ZTkxZjE5NDhkODkzNmY5MzhkY2YzODEyM2JfMzU2_f7d10a43-99e8-4d51-b75c-048345ac5cfb">Fair Value Measurements&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Cash Equivalents and Investments&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Cash equivalents and investments, as measured at fair value on a recurring basis, consisted of the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:25.869%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:6.778%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.056%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;March 31, 2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt 0 13pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Fair Value Level&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Amortized Cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Unrealized Gains (Losses), net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Fair Value&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Amortized Cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Unrealized Gains (Losses), net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Fair Value&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%"&gt;Cash equivalents:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Money market funds&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 1&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;94,284&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;94,284&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;73,368&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;73,368&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%"&gt;Investments:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Certificates of deposit&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 1&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,687&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,687&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,813&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6,813&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Marketable securities:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Commercial paper&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 2&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;34,228&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;353&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;34,581&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44,224&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;375&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;44,599&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;U.S. treasury securities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 2&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;9,827&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;51&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;9,878&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt 0 13pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;145,026&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;404&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;145,430&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;124,405&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;375&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;124,780&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:FinancialInstrumentsDisclosureTextBlock>
    <us-gaap:ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RleHRyZWdpb246NDExNGI5ZTkxZjE5NDhkODkzNmY5MzhkY2YzODEyM2JfMzI5ODUzNDg4NDExNQ_37ee6cc4-b065-4bba-bcd9-066b1817e44c">&lt;div style="margin-top:6pt;text-indent:27pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Cash equivalents and investments, as measured at fair value on a recurring basis, consisted of the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:25.869%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:6.778%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.051%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:9.056%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;March 31, 2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="15" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt 0 13pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Fair Value Level&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Amortized Cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Unrealized Gains (Losses), net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Fair Value&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Amortized Cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Unrealized Gains (Losses), net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;Fair Value&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:114%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%"&gt;Cash equivalents:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Money market funds&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 1&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;94,284&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;94,284&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;73,368&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;73,368&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:114%"&gt;Investments:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Certificates of deposit&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 1&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,687&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,687&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;6,813&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6,813&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Marketable securities:&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Commercial paper&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 2&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;34,228&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;353&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;34,581&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;44,224&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;375&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;44,599&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 25pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;U.S. treasury securities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Level 2&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;9,827&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;51&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;9,878&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt 0 13pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;145,026&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;404&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;145,430&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;124,405&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;375&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;124,780&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock>
    <us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis
      contextRef="ib95cb9989143445f9a7e651950c32288_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNC00LTEtMS0xMTA2OTM_392bd178-9318-4f98-b8d6-2846ea104a6e"
      unitRef="usd">94284000</us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis>
    <us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax
      contextRef="ib95cb9989143445f9a7e651950c32288_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNC02LTEtMS0xMTA2OTM_ed595a74-b956-4243-8da2-74e9616dc6fa"
      unitRef="usd">0</us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax>
    <us-gaap:AvailableForSaleSecuritiesDebtSecurities
      contextRef="ib95cb9989143445f9a7e651950c32288_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNC04LTEtMS0xMTA2OTM_020cac6d-02a1-42e0-989b-82a5c9d80a59"
      unitRef="usd">94284000</us-gaap:AvailableForSaleSecuritiesDebtSecurities>
    <us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis
      contextRef="i1b7e5436e1104d35b4b017c4042ef741_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNC0xMC0xLTEtMTEwNjkz_17ac1eb5-1eb3-44ea-ae88-5d7c69d0e6df"
      unitRef="usd">73368000</us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis>
    <us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax
      contextRef="i1b7e5436e1104d35b4b017c4042ef741_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNC0xMi0xLTEtMTEwNjkz_b3a269f9-022d-4c67-8764-a6add7f636e2"
      unitRef="usd">0</us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax>
    <us-gaap:AvailableForSaleSecuritiesDebtSecurities
      contextRef="i1b7e5436e1104d35b4b017c4042ef741_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNC0xNC0xLTEtMTEwNjkz_0233185d-e63c-4ae6-87d4-28941a3ed62f"
      unitRef="usd">73368000</us-gaap:AvailableForSaleSecuritiesDebtSecurities>
    <us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis
      contextRef="i06db95e3caa74fd69f6bf699dc8553ac_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNi00LTEtMS0xMTA2OTM_a75b75e2-1db6-4139-bccf-988802a0afa7"
      unitRef="usd">6687000</us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis>
    <us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax
      contextRef="i06db95e3caa74fd69f6bf699dc8553ac_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNi02LTEtMS0xMTA2OTM_497a30b4-3599-46c6-8936-49812da8db70"
      unitRef="usd">0</us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax>
    <us-gaap:AvailableForSaleSecuritiesDebtSecurities
      contextRef="i06db95e3caa74fd69f6bf699dc8553ac_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNi04LTEtMS0xMTA2OTM_9f0052a6-e6dd-40e4-b305-a23c5e62209a"
      unitRef="usd">6687000</us-gaap:AvailableForSaleSecuritiesDebtSecurities>
    <us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis
      contextRef="i9978aeb34edf49fdb2b635d1da947f0f_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNi0xMC0xLTEtMTEwNjkz_be38e3bb-3fa3-418f-bcf8-2ae2b75a134b"
      unitRef="usd">6813000</us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis>
    <us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax
      contextRef="i9978aeb34edf49fdb2b635d1da947f0f_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNi0xMi0xLTEtMTEwNjkz_35ab97fa-ffbb-4727-aa02-b41f8c2a0017"
      unitRef="usd">0</us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax>
    <us-gaap:AvailableForSaleSecuritiesDebtSecurities
      contextRef="i9978aeb34edf49fdb2b635d1da947f0f_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfNi0xNC0xLTEtMTEwNjkz_b33ef3bb-ca2b-4132-acc0-1ebe3809b755"
      unitRef="usd">6813000</us-gaap:AvailableForSaleSecuritiesDebtSecurities>
    <us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis
      contextRef="i3d24870a54cb4537b1c2ea12039f0869_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOC00LTEtMS0xMTA2OTM_90eab4a0-349c-40fe-a3ce-48f6e3bfe8e6"
      unitRef="usd">34228000</us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis>
    <us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax
      contextRef="i3d24870a54cb4537b1c2ea12039f0869_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOC02LTEtMS0xMTA2OTM_3f645256-bfa5-4549-a430-96e5a1a12759"
      unitRef="usd">353000</us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax>
    <us-gaap:AvailableForSaleSecuritiesDebtSecurities
      contextRef="i3d24870a54cb4537b1c2ea12039f0869_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOC04LTEtMS0xMTA2OTM_589c2f70-6e02-43e3-aaf8-e016495e6896"
      unitRef="usd">34581000</us-gaap:AvailableForSaleSecuritiesDebtSecurities>
    <us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis
      contextRef="i3938b8743ba341c6b9496d0431a386f7_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOC0xMC0xLTEtMTEwNjkz_1216abe2-3960-4809-9f44-d5395b4af597"
      unitRef="usd">44224000</us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis>
    <us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax
      contextRef="i3938b8743ba341c6b9496d0431a386f7_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOC0xMi0xLTEtMTEwNjkz_0f5264a7-19f2-4faa-8718-8d9173e1cb50"
      unitRef="usd">375000</us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax>
    <us-gaap:AvailableForSaleSecuritiesDebtSecurities
      contextRef="i3938b8743ba341c6b9496d0431a386f7_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOC0xNC0xLTEtMTEwNjkz_4fcded39-7076-4b50-8923-48d044a5abc6"
      unitRef="usd">44599000</us-gaap:AvailableForSaleSecuritiesDebtSecurities>
    <us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis
      contextRef="i27fdedb4de714a9fbe01d6729cbbec8e_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOS00LTEtMS0xMTA2OTM_4aa680e3-0378-431b-85d2-93632fa71ada"
      unitRef="usd">9827000</us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis>
    <us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax
      contextRef="i27fdedb4de714a9fbe01d6729cbbec8e_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOS02LTEtMS0xMTA2OTM_a986f535-d0cf-4218-af27-ff1903c9a688"
      unitRef="usd">51000</us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax>
    <us-gaap:AvailableForSaleSecuritiesDebtSecurities
      contextRef="i27fdedb4de714a9fbe01d6729cbbec8e_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOS04LTEtMS0xMTA2OTM_75e6c2d1-3a35-46c9-bbf7-dcc670fbbcb3"
      unitRef="usd">9878000</us-gaap:AvailableForSaleSecuritiesDebtSecurities>
    <us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis
      contextRef="i0fbb80009f17498db74b94eaf27cb4fe_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOS0xMC0xLTEtMTEwNjkz_0a0ea0ee-c4e4-463e-bdfd-68f7d8a8cc48"
      unitRef="usd">0</us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis>
    <us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax
      contextRef="i0fbb80009f17498db74b94eaf27cb4fe_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOS0xMi0xLTEtMTEwNjkz_7ecc9d1e-6dee-4464-84fb-696613c1b5b4"
      unitRef="usd">0</us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax>
    <us-gaap:AvailableForSaleSecuritiesDebtSecurities
      contextRef="i0fbb80009f17498db74b94eaf27cb4fe_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfOS0xNC0xLTEtMTEwNjkz_374b5cba-ce7e-49fc-80d8-42958d4bea0d"
      unitRef="usd">0</us-gaap:AvailableForSaleSecuritiesDebtSecurities>
    <us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfMTAtNC0xLTEtMTEwNzcx_e08b5567-84fb-4c74-80d1-6e08dacd2da5"
      unitRef="usd">145026000</us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis>
    <us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfMTAtNi0xLTEtMTEwNzcx_17628419-5734-4876-ac5b-5f28d2d3e189"
      unitRef="usd">404000</us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax>
    <us-gaap:AvailableForSaleSecuritiesDebtSecurities
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfMTAtOC0xLTEtMTEwNzcx_145e5a28-b325-4174-bffd-5d575accbc4f"
      unitRef="usd">145430000</us-gaap:AvailableForSaleSecuritiesDebtSecurities>
    <us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfMTAtMTAtMS0xLTExMDc3MQ_ca7b0427-3a0a-42b0-896c-4885245dd12a"
      unitRef="usd">124405000</us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis>
    <us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfMTAtMTItMS0xLTExMDc3MQ_2953a14d-e17b-4013-8f7d-d21e8c333aad"
      unitRef="usd">375000</us-gaap:DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax>
    <us-gaap:AvailableForSaleSecuritiesDebtSecurities
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80Ni9mcmFnOjQxMTRiOWU5MWYxOTQ4ZDg5MzZmOTM4ZGNmMzgxMjNiL3RhYmxlOjhmNTFmMDNjMjgwMzQ0MWE4ODY5ODlmZmJlZDI2MTIwL3RhYmxlcmFuZ2U6OGY1MWYwM2MyODAzNDQxYTg4Njk4OWZmYmVkMjYxMjBfMTAtMTQtMS0xLTExMDc3MQ_db31d306-4d2b-44c9-a7c3-4eb62d14076e"
      unitRef="usd">124780000</us-gaap:AvailableForSaleSecuritiesDebtSecurities>
    <us-gaap:AllowanceForCreditLossesTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RleHRyZWdpb246ZWUzMjc1OGU2NzRkNGFmYjhiM2QyN2YzNDZiNmM0ODBfNDY_3a9fc56b-853c-499c-8d9f-bc1cd558f3b1">Allowance for Credit Losses&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The allowance for credit losses activity, included in accounts receivable, net, was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, beginning of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,066&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,249&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Provision for credit losses&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,206&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,144&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Write-offs, net of recoveries&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1,055)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1,106)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, end of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,217&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,287&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:AllowanceForCreditLossesTextBlock>
    <us-gaap:AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RleHRyZWdpb246ZWUzMjc1OGU2NzRkNGFmYjhiM2QyN2YzNDZiNmM0ODBfNDU_e5ea6dee-96ed-4bbf-bf10-fd770f54c8ae">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The allowance for credit losses activity, included in accounts receivable, net, was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, beginning of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,066&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,249&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Provision for credit losses&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,206&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,144&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Write-offs, net of recoveries&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1,055)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1,106)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, end of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,217&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,287&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfMi0xLTEtMS0xMDAwMzY_9dfa01ae-8452-4209-9d84-501a9c33d3b2"
      unitRef="usd">3066000</us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent
      contextRef="id23181cd6ae24a028a249a4d25818065_I20211231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfMi0zLTEtMS0xMDAwMzY_b8e83013-4c8a-4953-98ee-c2579c21b8d6"
      unitRef="usd">4249000</us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent>
    <us-gaap:ProvisionForDoubtfulAccounts
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfMy0xLTEtMS0xMDAwMzY_b39a0645-610b-446c-aa71-9cacbe5c3826"
      unitRef="usd">1206000</us-gaap:ProvisionForDoubtfulAccounts>
    <us-gaap:ProvisionForDoubtfulAccounts
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfMy0zLTEtMS0xMDAwMzY_7a8f5c67-dbe1-45c6-a8e3-3e34113fb41c"
      unitRef="usd">1144000</us-gaap:ProvisionForDoubtfulAccounts>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableWriteOffs
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfNC0xLTEtMS0xMDAwMzY_04f760cc-51d9-40f0-81e6-c0fdc00832f3"
      unitRef="usd">1055000</us-gaap:AllowanceForDoubtfulAccountsReceivableWriteOffs>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableWriteOffs
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfNC0zLTEtMS0xMDAwMzY_ea76c9b9-af34-416c-b15c-5ab4a079631d"
      unitRef="usd">1106000</us-gaap:AllowanceForDoubtfulAccountsReceivableWriteOffs>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfNS0xLTEtMS0xMDAwMzY_301342dc-65e5-4c36-97e6-199ef3c71df4"
      unitRef="usd">3217000</us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent>
    <us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent
      contextRef="iea65401e964c4d079f6a7764673f9d3e_I20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl80OS9mcmFnOmVlMzI3NThlNjc0ZDRhZmI4YjNkMjdmMzQ2YjZjNDgwL3RhYmxlOjY3YWM0MmYxYThjODQ2NDE5ODg4NzkxOTBjYjkzNzM1L3RhYmxlcmFuZ2U6NjdhYzQyZjFhOGM4NDY0MTk4ODg3OTE5MGNiOTM3MzVfNS0zLTEtMS0xMDAwMzY_126f34a8-44ee-4bcf-8aa9-bed8c3b02097"
      unitRef="usd">4287000</us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent>
    <us-gaap:PropertyPlantAndEquipmentDisclosureTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RleHRyZWdpb246NzJkYTQzMmY5MzdlNGY0YmFiM2NlY2I2YjAzMjhlYWZfNDQ_b0901c30-2558-43f5-9b51-f7dfb169c853">Property and Equipment, Net&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Property and equipment, net consisted of the following:&lt;/span&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:72.384%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.557%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.475%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.478%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;March 31,&lt;br/&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Internally developed software&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;53,530&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;49,994&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Computer equipment&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;30,601&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;30,310&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Leasehold improvements&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;16,603&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;16,531&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Office equipment and furniture&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;11,113&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;10,981&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Property and equipment, cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;111,847&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;107,816&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Less: accumulated depreciation and amortization&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(76,769)&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(72,358)&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Total property and equipment, net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;35,078&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;35,458&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;</us-gaap:PropertyPlantAndEquipmentDisclosureTextBlock>
    <us-gaap:PropertyPlantAndEquipmentTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RleHRyZWdpb246NzJkYTQzMmY5MzdlNGY0YmFiM2NlY2I2YjAzMjhlYWZfNDU_724edceb-5837-4a79-bd11-c40dd11e4a9a">&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Property and equipment, net consisted of the following:&lt;/span&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:72.384%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.557%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.475%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.478%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;March 31,&lt;br/&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Internally developed software&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;53,530&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;49,994&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Computer equipment&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;30,601&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;30,310&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Leasehold improvements&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;16,603&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;16,531&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Office equipment and furniture&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;11,113&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;10,981&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Property and equipment, cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;111,847&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;107,816&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Less: accumulated depreciation and amortization&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(76,769)&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(72,358)&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Total property and equipment, net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;35,078&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;35,458&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;</us-gaap:PropertyPlantAndEquipmentTextBlock>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i5a75bb88debd45d6977bc1802be484e8_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfMS0yLTEtMS0xMDAwMzY_4a7d4cd5-ff53-4de8-b808-92f3cd2ab7ed"
      unitRef="usd">53530000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="if36c1fbf7d614e4c996719209cbd2203_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfMS00LTEtMS0xMDAwMzY_6c6b6fa3-3d5f-4cbb-b9b6-9e33d82b18e9"
      unitRef="usd">49994000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i386c273d4ce1474b8fe0376f049c4026_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfMi0yLTEtMS0xMDAwMzY_01752d8b-07a3-4cae-a585-fb272f375693"
      unitRef="usd">30601000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i044036208ec345ceb8743ee4003b4012_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfMi00LTEtMS0xMDAwMzY_c406db0e-6005-4a61-8e85-31a1658922c4"
      unitRef="usd">30310000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i7fdb034bc95a4b0392b1bc5c4e517c57_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfMy0yLTEtMS0xMDAwMzY_a29bf7de-8e18-47a8-8129-086c137a2cfc"
      unitRef="usd">16603000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i3f4882303fd44f25b34a7e397c10779f_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfMy00LTEtMS0xMDAwMzY_0ff3022a-b76a-413a-9f5b-c4195f5d5358"
      unitRef="usd">16531000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="if15e5b2451054b38881f736fe9625cc2_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNC0yLTEtMS0xMDAwMzY_70ef1aa0-801e-47e9-8740-3bf302b75ac3"
      unitRef="usd">11113000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i534eee2a26b2444ebe09cb50ac751aff_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNC00LTEtMS0xMDAwMzY_977a631d-62e3-4992-954a-063037ed9400"
      unitRef="usd">10981000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNS0yLTEtMS0xMDAwMzY_7a233f02-6b0a-47da-b9ef-16aa4dbe3e7f"
      unitRef="usd">111847000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNS00LTEtMS0xMDAwMzY_25aae3ec-ff48-47b8-82bc-684578280dbc"
      unitRef="usd">107816000</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNi0yLTEtMS0xMDAwMzY_d000e983-4ced-4b08-abbd-7c19d91c11c8"
      unitRef="usd">76769000</us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment>
    <us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNi00LTEtMS0xMDAwMzY_6adc7c3e-0edc-4e56-971a-fd95f2d48190"
      unitRef="usd">72358000</us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment>
    <us-gaap:PropertyPlantAndEquipmentNet
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNy0yLTEtMS0xMDAwMzY_6a4a97a8-c5bd-4963-afaa-15940ef61f24"
      unitRef="usd">35078000</us-gaap:PropertyPlantAndEquipmentNet>
    <us-gaap:PropertyPlantAndEquipmentNet
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81Mi9mcmFnOjcyZGE0MzJmOTM3ZTRmNGJhYjNjZWNiNmIwMzI4ZWFmL3RhYmxlOmUzZTFjNTQyOTEyNDQ3MzVhMWFjZmQ4ZDBhNzc3ZDAyL3RhYmxlcmFuZ2U6ZTNlMWM1NDI5MTI0NDczNWExYWNmZDhkMGE3NzdkMDJfNy00LTEtMS0xMDAwMzY_81c116f7-141c-4e65-8315-e6d2d00f9147"
      unitRef="usd">35458000</us-gaap:PropertyPlantAndEquipmentNet>
    <us-gaap:GoodwillAndIntangibleAssetsDisclosureTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RleHRyZWdpb246MDdiYThiOGNiMzUyNDRhMmI1MDdlOGI5NDUwYTllNjBfOTM_3cfe281c-2ab1-47c3-9b6d-fd4ab0ab2a83">Goodwill and Intangible Assets, Net&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Goodwill&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The activity in goodwill was as follows:&lt;/span&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, beginning of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;197,284&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Foreign currency translation&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(71)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Remeasurement from provisional purchase accounting amount&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,788&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, end of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;199,001&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Intangible Assets&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Intangible assets, net consisted of the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:30.566%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.086%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;March 31, 2023&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;($ in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Gross&lt;br/&gt;Carrying&lt;br/&gt;Amount&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Accumulated &lt;br/&gt;Amortization &lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Foreign&lt;br/&gt;Currency &lt;br/&gt;Translation&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Weighted Average Remaining Amortization Period&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;79,385&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(24,205)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;29&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;55,209&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6.6 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Acquired technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;40,612&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(11,292)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;29,327&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;5.5 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;119,997&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(35,497)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;36&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;84,536&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6.2 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:30.566%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.086%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;($ in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Gross&lt;br/&gt;Carrying&lt;br/&gt;Amount&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Accumulated &lt;br/&gt;Amortization &lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Foreign&lt;br/&gt;Currency &lt;br/&gt;Translation&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Weighted Average Remaining Amortization Period&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;80,101&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(22,255)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(171)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;57,675&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6.8 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Acquired technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;40,610&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(9,934)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;30,677&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;5.7 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;120,711&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(32,189)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(170)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;88,352&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6.4 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:3pt;font-weight:700;line-height:120%"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The estimated future annual amortization expense related to intangible assets is as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Remainder of 2023&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;11,450&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;14,102&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;13,964&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2026&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;12,960&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2027&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;12,497&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Thereafter&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;19,563&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Total future amortization&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;84,536&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:GoodwillAndIntangibleAssetsDisclosureTextBlock>
    <us-gaap:ScheduleOfGoodwillTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RleHRyZWdpb246MDdiYThiOGNiMzUyNDRhMmI1MDdlOGI5NDUwYTllNjBfOTU_2ec5f1c0-4e71-4bd8-91e3-99d56fce34f0">&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Goodwill&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The activity in goodwill was as follows:&lt;/span&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, beginning of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;197,284&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Foreign currency translation&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(71)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Remeasurement from provisional purchase accounting amount&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,788&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Balance, end of period&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;199,001&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfGoodwillTextBlock>
    <us-gaap:Goodwill
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjI0ODYzZDgzODI2YjQxNTM5MmY0YmYwMjg3YmE1OWJlL3RhYmxlcmFuZ2U6MjQ4NjNkODM4MjZiNDE1MzkyZjRiZjAyODdiYTU5YmVfMi0xLTEtMS0xMDAwMzY_9cc2c360-6549-4c41-b1ae-b773f65badcb"
      unitRef="usd">197284000</us-gaap:Goodwill>
    <us-gaap:GoodwillForeignCurrencyTranslationGainLoss
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjI0ODYzZDgzODI2YjQxNTM5MmY0YmYwMjg3YmE1OWJlL3RhYmxlcmFuZ2U6MjQ4NjNkODM4MjZiNDE1MzkyZjRiZjAyODdiYTU5YmVfMy0xLTEtMS0xMjQ2OTg_d116175d-3147-4e3a-bea9-15d2b0dd38d6"
      unitRef="usd">-71000</us-gaap:GoodwillForeignCurrencyTranslationGainLoss>
    <us-gaap:GoodwillPurchaseAccountingAdjustments
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjI0ODYzZDgzODI2YjQxNTM5MmY0YmYwMjg3YmE1OWJlL3RhYmxlcmFuZ2U6MjQ4NjNkODM4MjZiNDE1MzkyZjRiZjAyODdiYTU5YmVfNC0xLTEtMS0xMjQ2ODk_3d327d8c-72be-4128-ad21-90f048612c79"
      unitRef="usd">1788000</us-gaap:GoodwillPurchaseAccountingAdjustments>
    <us-gaap:Goodwill
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjI0ODYzZDgzODI2YjQxNTM5MmY0YmYwMjg3YmE1OWJlL3RhYmxlcmFuZ2U6MjQ4NjNkODM4MjZiNDE1MzkyZjRiZjAyODdiYTU5YmVfNi0xLTEtMS0xMDAwMzY_1f72a20f-c565-4669-ba3d-9141e2a3b168"
      unitRef="usd">199001000</us-gaap:Goodwill>
    <us-gaap:ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RleHRyZWdpb246MDdiYThiOGNiMzUyNDRhMmI1MDdlOGI5NDUwYTllNjBfOTc_c55ed6b4-62d9-4a0c-89c0-bdeb5618bc0c">&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Intangible Assets&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Intangible assets, net consisted of the following:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:30.566%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.086%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;March 31, 2023&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;($ in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Gross&lt;br/&gt;Carrying&lt;br/&gt;Amount&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Accumulated &lt;br/&gt;Amortization &lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Foreign&lt;br/&gt;Currency &lt;br/&gt;Translation&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Weighted Average Remaining Amortization Period&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;79,385&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(24,205)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;29&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;55,209&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6.6 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Acquired technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;40,612&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(11,292)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;7&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;29,327&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;5.5 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;119,997&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(35,497)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;36&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;84,536&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6.2 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:30.566%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.086%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="27" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;($ in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Gross&lt;br/&gt;Carrying&lt;br/&gt;Amount&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Accumulated &lt;br/&gt;Amortization &lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Foreign&lt;br/&gt;Currency &lt;br/&gt;Translation&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Weighted Average Remaining Amortization Period&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Subscriber relationships&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;80,101&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(22,255)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(171)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;57,675&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6.8 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Acquired technology&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;40,610&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(9,934)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;30,677&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;5.7 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;120,711&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(32,189)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(170)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;88,352&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6.4 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock>
    <us-gaap:FiniteLivedIntangibleAssetsGross
      contextRef="idfbc23a59140439a8615288bcb3f78ef_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMi0xLTEtMS0xMDAwMzY_dae7a429-1876-4c0a-bf9d-61f603d77656"
      unitRef="usd">79385000</us-gaap:FiniteLivedIntangibleAssetsGross>
    <us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization
      contextRef="idfbc23a59140439a8615288bcb3f78ef_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMi0zLTEtMS0xMDAwMzY_db9b7389-36fb-48bd-98d6-cf753f01aa9e"
      unitRef="usd">24205000</us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization>
    <spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss
      contextRef="idfbc23a59140439a8615288bcb3f78ef_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMi01LTEtMS0xMDAwMzY_9be55115-a54a-48d2-8135-96156a6dc5c1"
      unitRef="usd">29000</spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="idfbc23a59140439a8615288bcb3f78ef_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMi03LTEtMS0xMDAwMzY_00979246-b73e-4fa7-a57d-064651b76513"
      unitRef="usd">55209000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1
      contextRef="ic91aaccdeb714bfc8f0dce202e196a66_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMi05LTEtMS0xMDAwMzY_3c7b3413-4db9-4c2c-86cb-ec5b12db229d">P6Y7M6D</us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1>
    <us-gaap:FiniteLivedIntangibleAssetsGross
      contextRef="i42612c0ae9fd49b38cbc84eb2d0083e6_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMy0xLTEtMS0xMDAwMzY_542c1590-cb81-43aa-aa8e-970b1d3fe615"
      unitRef="usd">40612000</us-gaap:FiniteLivedIntangibleAssetsGross>
    <us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization
      contextRef="i42612c0ae9fd49b38cbc84eb2d0083e6_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMy0zLTEtMS0xMDAwMzY_349025e5-858d-46b8-ae84-689e5d2f3dce"
      unitRef="usd">11292000</us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization>
    <spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss
      contextRef="i42612c0ae9fd49b38cbc84eb2d0083e6_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMy01LTEtMS0xMDAwMzY_285d46a3-6aa5-4b63-a8a0-0bbed676981b"
      unitRef="usd">7000</spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="i42612c0ae9fd49b38cbc84eb2d0083e6_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMy03LTEtMS0xMDAwMzY_37eb3f48-5018-4967-a714-509deee21d4d"
      unitRef="usd">29327000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1
      contextRef="i4e6aa02ec2b74ba69310d3ad612c9cda_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfMy05LTEtMS0xMDAwMzY_03b20d55-148e-4051-9712-37701ec0c082">P5Y6M</us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1>
    <us-gaap:FiniteLivedIntangibleAssetsGross
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfNC0xLTEtMS0xMDAwMzY_1bfa3fe7-78b5-470e-9bb6-3cfc28376972"
      unitRef="usd">119997000</us-gaap:FiniteLivedIntangibleAssetsGross>
    <us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfNC0zLTEtMS0xMDAwMzY_95bf3e0d-d01e-4ec9-a1b9-e2071d9dbb45"
      unitRef="usd">35497000</us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization>
    <spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfNC01LTEtMS0xMDAwMzY_d5b569d8-db89-4ee8-8e68-c8940b75f3c2"
      unitRef="usd">36000</spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfNC03LTEtMS0xMDAwMzY_cdfa6fb1-7902-479d-8aa3-168da9267ef4"
      unitRef="usd">84536000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjVmYmZjMzgyODYzYTRlYzM4OWNiZjhmM2NiZjk5N2FiL3RhYmxlcmFuZ2U6NWZiZmMzODI4NjNhNGVjMzg5Y2JmOGYzY2JmOTk3YWJfNC05LTEtMS0xMDAwMzY_f7359236-141b-4644-88e7-28118c157fc2">P6Y2M12D</us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1>
    <us-gaap:FiniteLivedIntangibleAssetsGross
      contextRef="iaf6b0a0eb5b3448ebe65047605d7d317_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMi0xLTEtMS0xMDAwMzY_97866b96-5d8f-472b-b98e-4e91dbf53cb3"
      unitRef="usd">80101000</us-gaap:FiniteLivedIntangibleAssetsGross>
    <us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization
      contextRef="iaf6b0a0eb5b3448ebe65047605d7d317_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMi0zLTEtMS0xMDAwMzY_197df13c-054f-467c-89ca-05be63c68669"
      unitRef="usd">22255000</us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization>
    <spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss
      contextRef="iaf6b0a0eb5b3448ebe65047605d7d317_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMi01LTEtMS0xMDAwMzY_e7897c9f-dbcd-49ea-8168-c8e7a2c9b9f4"
      unitRef="usd">-171000</spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="iaf6b0a0eb5b3448ebe65047605d7d317_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMi03LTEtMS0xMDAwMzY_7aeae2a4-821e-432c-9e03-7b4e48cb52f6"
      unitRef="usd">57675000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1
      contextRef="ic65167d9de1f4e50805056a53d766244_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMi05LTEtMS0xMDAwMzY_93eef809-95d0-45db-92ef-ebd47e80b1cc">P6Y9M18D</us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1>
    <us-gaap:FiniteLivedIntangibleAssetsGross
      contextRef="ibef612a6a2494f51809d078779233bed_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMy0xLTEtMS0xMDAwMzY_68185e2c-addf-4127-b3e5-70b8e788a704"
      unitRef="usd">40610000</us-gaap:FiniteLivedIntangibleAssetsGross>
    <us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization
      contextRef="ibef612a6a2494f51809d078779233bed_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMy0zLTEtMS0xMDAwMzY_f07f919c-5f88-429e-9c2a-466f7d22cd3f"
      unitRef="usd">9934000</us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization>
    <spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss
      contextRef="ibef612a6a2494f51809d078779233bed_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMy01LTEtMS0xMDAwMzY_e5aba69f-475c-4efe-8f69-61147c90ed6b"
      unitRef="usd">1000</spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="ibef612a6a2494f51809d078779233bed_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMy03LTEtMS0xMDAwMzY_f4cc197c-b8a7-43c0-b97b-502dfe22e495"
      unitRef="usd">30677000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1
      contextRef="i2139ddbdb599478c96f7dbd3221493e7_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfMy05LTEtMS0xMDAwMzY_c8f65ecb-7f0a-4bfa-b8cb-146c111aac98">P5Y8M12D</us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1>
    <us-gaap:FiniteLivedIntangibleAssetsGross
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfNC0xLTEtMS0xMDAwMzY_8fd22181-bee8-41b6-983b-426a0fd8ae35"
      unitRef="usd">120711000</us-gaap:FiniteLivedIntangibleAssetsGross>
    <us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfNC0zLTEtMS0xMDAwMzY_fd48e38e-f6b8-4b7e-b464-196cebf97e2c"
      unitRef="usd">32189000</us-gaap:FiniteLivedIntangibleAssetsAccumulatedAmortization>
    <spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfNC01LTEtMS0xMDAwMzY_ab42541b-fe10-4ebd-9a98-6ba56c3ac514"
      unitRef="usd">-170000</spsc:FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfNC03LTEtMS0xMDAwMzY_4850f782-b201-40d8-8ebb-c0eb1ca58c03"
      unitRef="usd">88352000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1
      contextRef="ie8eb7dd105294462b8565005c929635e_D20220101-20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOmIwNTgxOWI5OGNmMjQ1MzM5N2M3MjRlMDdjMjhkODRlL3RhYmxlcmFuZ2U6YjA1ODE5Yjk4Y2YyNDUzMzk3YzcyNGUwN2MyOGQ4NGVfNC05LTEtMS0xMDAwMzY_eb5b27ae-bff1-4a9d-b157-3ac943516e36">P6Y4M24D</us-gaap:FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1>
    <us-gaap:ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RleHRyZWdpb246MDdiYThiOGNiMzUyNDRhMmI1MDdlOGI5NDUwYTllNjBfOTk_bd744743-e41a-4221-9160-d7807d4a3a53">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The estimated future annual amortization expense related to intangible assets is as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Remainder of 2023&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;11,450&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;14,102&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;13,964&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2026&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;12,960&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2027&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;12,497&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Thereafter&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;19,563&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Total future amortization&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;84,536&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock>
    <us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfMS0xLTEtMS0xMDAwMzY_47153add-d1fa-44aa-a0be-e310595d7b88"
      unitRef="usd">11450000</us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear>
    <us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfMi0xLTEtMS0xMDAwMzY_1bc57c40-a0bd-4866-8e4c-9cde88658429"
      unitRef="usd">14102000</us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths>
    <us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfMy0xLTEtMS0xMDAwMzY_181983fc-f174-4bd5-a4fb-6e2f5b26f21a"
      unitRef="usd">13964000</us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo>
    <us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearThree
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfNC0xLTEtMS0xMDAwMzY_b3e947ca-4a1a-499c-90c0-663a38d45156"
      unitRef="usd">12960000</us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearThree>
    <us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearFour
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfNS0xLTEtMS0xMDAwMzY_1cdcc9ea-32a9-40fc-8108-14c6666b31c7"
      unitRef="usd">12497000</us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseYearFour>
    <spsc:FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfNi0xLTEtMS0xMDAwMzY_38a73506-fbde-4181-87e8-7adefebc2e56"
      unitRef="usd">19563000</spsc:FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour>
    <us-gaap:FiniteLivedIntangibleAssetsNet
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81NS9mcmFnOjA3YmE4YjhjYjM1MjQ0YTJiNTA3ZThiOTQ1MGE5ZTYwL3RhYmxlOjIyMTQxY2MzNDVhYTQ5ZmZiMThiMWZmNjI4NmE4NGE2L3RhYmxlcmFuZ2U6MjIxNDFjYzM0NWFhNDlmZmIxOGIxZmY2Mjg2YTg0YTZfNy0xLTEtMS0xMDAwMzY_9591e97a-ad15-4b63-b7e5-d27b5ce7dc29"
      unitRef="usd">84536000</us-gaap:FiniteLivedIntangibleAssetsNet>
    <us-gaap:CommitmentsAndContingenciesDisclosureTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RleHRyZWdpb246ZmUyNjE3YzA3NjllNDYzM2EyMWE5ZDQ4ZjUwMzg2ZjFfMzYw_7c133cc8-1163-482d-b290-e273b0a8346c">Commitments and Contingencies&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Leases&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The components of lease expense were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:98.181%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.430%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.325%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.417%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.328%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Operating lease cost&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;798&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;759&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Variable lease cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;928&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;793&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,726&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,552&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Supplemental cash flow information related to leases was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Cash paid for amounts included in the measurement of lease liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Operating cash flows from operating leases&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,247&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,095&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Supplemental balance sheet information related to operating leases was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;March 31,&lt;br/&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Weighted-average remaining lease term&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3.8 years&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3.9 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Weighted-average discount rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;At March&#160;31, 2023, our future minimum payments under operating leases were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Remainder of 2023&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,847&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,471&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,081&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2026&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,763&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2027&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,266&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Total future gross payments&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;17,428&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Less: imputed interest&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1,313)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Total operating lease liabilities&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;16,115&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Purchase Commitments&lt;/span&gt;&lt;/div&gt;We have entered into separate noncancelable agreements with computing infrastructure, customer relationship management, and performance and security data analytics vendors for services through 2025. At March&#160;31, 2023, the total remaining purchase commitments were $4.3 million</us-gaap:CommitmentsAndContingenciesDisclosureTextBlock>
    <us-gaap:LeaseCostTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RleHRyZWdpb246ZmUyNjE3YzA3NjllNDYzM2EyMWE5ZDQ4ZjUwMzg2ZjFfMzYx_5bb3e00c-145e-4fc8-8b41-7f3dce9de7ac">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The components of lease expense were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:98.181%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.430%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.325%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.417%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.328%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Operating lease cost&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;798&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;759&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Variable lease cost&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;928&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;793&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,726&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,552&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:LeaseCostTableTextBlock>
    <us-gaap:OperatingLeaseCost
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmM3Yzc5NjFiNWNlODQwMDA5ZGI5OWZjNjI4Mjk2NTM1L3RhYmxlcmFuZ2U6YzdjNzk2MWI1Y2U4NDAwMDlkYjk5ZmM2MjgyOTY1MzVfMi0xLTEtMS0xMDAwMzY_2ae07e55-fdf8-4924-8aa6-d62563b52033"
      unitRef="usd">798000</us-gaap:OperatingLeaseCost>
    <us-gaap:OperatingLeaseCost
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmM3Yzc5NjFiNWNlODQwMDA5ZGI5OWZjNjI4Mjk2NTM1L3RhYmxlcmFuZ2U6YzdjNzk2MWI1Y2U4NDAwMDlkYjk5ZmM2MjgyOTY1MzVfMi0zLTEtMS0xMDAwMzY_5792d574-1ab6-4dd1-a683-e56de4f69cf8"
      unitRef="usd">759000</us-gaap:OperatingLeaseCost>
    <us-gaap:VariableLeaseCost
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmM3Yzc5NjFiNWNlODQwMDA5ZGI5OWZjNjI4Mjk2NTM1L3RhYmxlcmFuZ2U6YzdjNzk2MWI1Y2U4NDAwMDlkYjk5ZmM2MjgyOTY1MzVfMy0xLTEtMS0xMDAwMzY_3ad2a0c0-24b2-4d8c-a897-ddf633f52162"
      unitRef="usd">928000</us-gaap:VariableLeaseCost>
    <us-gaap:VariableLeaseCost
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmM3Yzc5NjFiNWNlODQwMDA5ZGI5OWZjNjI4Mjk2NTM1L3RhYmxlcmFuZ2U6YzdjNzk2MWI1Y2U4NDAwMDlkYjk5ZmM2MjgyOTY1MzVfMy0zLTEtMS0xMDAwMzY_36924edb-edfc-4ec4-ba2f-850dc3235f97"
      unitRef="usd">793000</us-gaap:VariableLeaseCost>
    <us-gaap:LeaseCost
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmM3Yzc5NjFiNWNlODQwMDA5ZGI5OWZjNjI4Mjk2NTM1L3RhYmxlcmFuZ2U6YzdjNzk2MWI1Y2U4NDAwMDlkYjk5ZmM2MjgyOTY1MzVfNC0xLTEtMS0xMDAwMzY_a42fa1e6-00d6-49be-92c1-49439af0c6b3"
      unitRef="usd">1726000</us-gaap:LeaseCost>
    <us-gaap:LeaseCost
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmM3Yzc5NjFiNWNlODQwMDA5ZGI5OWZjNjI4Mjk2NTM1L3RhYmxlcmFuZ2U6YzdjNzk2MWI1Y2U4NDAwMDlkYjk5ZmM2MjgyOTY1MzVfNC0zLTEtMS0xMDAwMzY_59bc3214-ebb6-47b0-b121-7146a70ea491"
      unitRef="usd">1552000</us-gaap:LeaseCost>
    <spsc:ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RleHRyZWdpb246ZmUyNjE3YzA3NjllNDYzM2EyMWE5ZDQ4ZjUwMzg2ZjFfMzU2_e9a88dde-6a9e-462c-a9a4-8d71ee07c5f5">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Supplemental cash flow information related to leases was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Cash paid for amounts included in the measurement of lease liabilities&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Operating cash flows from operating leases&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,247&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,095&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock>
    <us-gaap:OperatingLeasePayments
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjRkMDZiNWI3NDlkMzQ3MzZiMDk3YzUzZTlhNzM2OTQxL3RhYmxlcmFuZ2U6NGQwNmI1Yjc0OWQzNDczNmIwOTdjNTNlOWE3MzY5NDFfMy0xLTEtMS0xMDAwMzY_210b8291-bd41-44ff-9504-046508a43553"
      unitRef="usd">1247000</us-gaap:OperatingLeasePayments>
    <us-gaap:OperatingLeasePayments
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjRkMDZiNWI3NDlkMzQ3MzZiMDk3YzUzZTlhNzM2OTQxL3RhYmxlcmFuZ2U6NGQwNmI1Yjc0OWQzNDczNmIwOTdjNTNlOWE3MzY5NDFfMy0zLTEtMS0xMDAwMzY_43ba54f7-a456-4f9b-bf43-c7079c0ff4f6"
      unitRef="usd">1095000</us-gaap:OperatingLeasePayments>
    <spsc:ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RleHRyZWdpb246ZmUyNjE3YzA3NjllNDYzM2EyMWE5ZDQ4ZjUwMzg2ZjFfMzYz_f4f54a94-b8da-4479-9e05-889318875865">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Supplemental balance sheet information related to operating leases was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;March 31,&lt;br/&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Weighted-average remaining lease term&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3.8 years&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3.9 years&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Weighted-average discount rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4.0&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock>
    <us-gaap:OperatingLeaseWeightedAverageRemainingLeaseTerm1
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmZlNjI4NGYwNjViYzQ3NWFhNTg4ZjEyZGJkNTNmYmEwL3RhYmxlcmFuZ2U6ZmU2Mjg0ZjA2NWJjNDc1YWE1ODhmMTJkYmQ1M2ZiYTBfMS0xLTEtMS0xMDAwMzY_8bd407c5-629f-4e05-9f2e-f8a0998bd5d3">P3Y9M18D</us-gaap:OperatingLeaseWeightedAverageRemainingLeaseTerm1>
    <us-gaap:OperatingLeaseWeightedAverageRemainingLeaseTerm1
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmZlNjI4NGYwNjViYzQ3NWFhNTg4ZjEyZGJkNTNmYmEwL3RhYmxlcmFuZ2U6ZmU2Mjg0ZjA2NWJjNDc1YWE1ODhmMTJkYmQ1M2ZiYTBfMS0zLTEtMS0xMDAwMzY_f7953570-ef1c-46a2-9781-0c18170c6426">P3Y10M24D</us-gaap:OperatingLeaseWeightedAverageRemainingLeaseTerm1>
    <us-gaap:OperatingLeaseWeightedAverageDiscountRatePercent
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmZlNjI4NGYwNjViYzQ3NWFhNTg4ZjEyZGJkNTNmYmEwL3RhYmxlcmFuZ2U6ZmU2Mjg0ZjA2NWJjNDc1YWE1ODhmMTJkYmQ1M2ZiYTBfMi0xLTEtMS0xMDAwMzY_e09f059a-f5d1-4524-bf27-90423095e3b0"
      unitRef="number">0.040</us-gaap:OperatingLeaseWeightedAverageDiscountRatePercent>
    <us-gaap:OperatingLeaseWeightedAverageDiscountRatePercent
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOmZlNjI4NGYwNjViYzQ3NWFhNTg4ZjEyZGJkNTNmYmEwL3RhYmxlcmFuZ2U6ZmU2Mjg0ZjA2NWJjNDc1YWE1ODhmMTJkYmQ1M2ZiYTBfMi0zLTEtMS0xMDAwMzY_ee7d3249-6422-4bec-aa98-3624298b5976"
      unitRef="number">0.040</us-gaap:OperatingLeaseWeightedAverageDiscountRatePercent>
    <us-gaap:LesseeOperatingLeaseLiabilityMaturityTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RleHRyZWdpb246ZmUyNjE3YzA3NjllNDYzM2EyMWE5ZDQ4ZjUwMzg2ZjFfMzY0_448a9080-d224-4057-bba6-79fd7931e7e7">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;At March&#160;31, 2023, our future minimum payments under operating leases were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Remainder of 2023&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,847&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2024&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,471&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2025&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,081&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2026&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,763&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2027&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,266&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Total future gross payments&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;17,428&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Less: imputed interest&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1,313)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Total operating lease liabilities&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;16,115&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:LesseeOperatingLeaseLiabilityMaturityTableTextBlock>
    <us-gaap:LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfMS0xLTEtMS0xMDAwMzY_529b0b47-11cf-4cfa-8870-7291baff8245"
      unitRef="usd">3847000</us-gaap:LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear>
    <us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfMi0xLTEtMS0xMDAwMzY_75977952-da9a-49f9-9a07-6170557b741f"
      unitRef="usd">4471000</us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths>
    <us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearTwo
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfMy0xLTEtMS0xMDAwMzY_6fb92a05-04d6-452c-8528-6620fd0e0a9f"
      unitRef="usd">4081000</us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearTwo>
    <us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearThree
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfNC0xLTEtMS0xMDAwMzY_9879c51e-3b4f-48de-87ac-817085ec7b5b"
      unitRef="usd">3763000</us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearThree>
    <us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearFour
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfNS0xLTEtMS0xMDAwMzY_4f7c2d2c-51bf-47be-ba2d-e9551176cda2"
      unitRef="usd">1266000</us-gaap:LesseeOperatingLeaseLiabilityPaymentsDueYearFour>
    <us-gaap:LesseeOperatingLeaseLiabilityPaymentsDue
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfNy0xLTEtMS0xMDAwMzY_91a4c43c-e90d-481e-8e08-f504e53f0bac"
      unitRef="usd">17428000</us-gaap:LesseeOperatingLeaseLiabilityPaymentsDue>
    <us-gaap:LesseeOperatingLeaseLiabilityUndiscountedExcessAmount
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfOC0xLTEtMS0xMDAwMzY_ae6693c5-fd10-4c27-a1b5-71a29c29f82b"
      unitRef="usd">1313000</us-gaap:LesseeOperatingLeaseLiabilityUndiscountedExcessAmount>
    <us-gaap:OperatingLeaseLiability
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RhYmxlOjI0NzRhOTQ3ZjI0MDRiNDZhY2Y1MmVkNzk0ZDljN2EwL3RhYmxlcmFuZ2U6MjQ3NGE5NDdmMjQwNGI0NmFjZjUyZWQ3OTRkOWM3YTBfOS0xLTEtMS0xMDAwMzY_36f59018-2f93-4cdf-9e6a-5731b73c8b05"
      unitRef="usd">16115000</us-gaap:OperatingLeaseLiability>
    <us-gaap:PurchaseCommitmentRemainingMinimumAmountCommitted
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl81OC9mcmFnOmZlMjYxN2MwNzY5ZTQ2MzNhMjFhOWQ0OGY1MDM4NmYxL3RleHRyZWdpb246ZmUyNjE3YzA3NjllNDYzM2EyMWE5ZDQ4ZjUwMzg2ZjFfMzUx_f3c7ea4c-a8be-413e-a360-902c06fe9af0"
      unitRef="usd">4300000</us-gaap:PurchaseCommitmentRemainingMinimumAmountCommitted>
    <us-gaap:StockholdersEquityNoteDisclosureTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RleHRyZWdpb246YzBmOTZkNWEwZjM4NDA0N2I0NGVmMWJmMjY2YTA5MTRfOTQ_4ce7b193-a612-44d2-bd86-af5f7a46f326">Stockholders&#x2019; Equity&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Share&lt;/span&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt; Repurchase Programs&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our board of directors has authorized multiple non-concurrent programs to repurchase our common stock. Details of the programs and activity thereunder through &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;March&#160;31, 2023 were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.293%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.839%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.839%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.839%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.843%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Effective Date&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Expiration Date&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Share Value Authorized for Repurchase&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Share Value Repurchased&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Unused &amp;amp; Expired Share Repurchase Value&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Share Value Available for Future Repurchase&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2021 Program&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;November 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;August 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;50,000&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;49,992&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;8&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;N/A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2022 Program&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;August 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;July 2024&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;50,000&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,992&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;N/A&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;47,008&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="background-color:#ffffff;color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;share&lt;/span&gt;&lt;span style="background-color:#ffffff;color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;repurchase activity by period was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:69.354%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.900%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.840%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands, except shares and per share amounts)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Number of shares repurchased&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;121,544&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Shares repurchased cost&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;15,226&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Average price per repurchased share&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;125.27&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:StockholdersEquityNoteDisclosureTextBlock>
    <us-gaap:ScheduleOfTreasuryStockByClassTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RleHRyZWdpb246YzBmOTZkNWEwZjM4NDA0N2I0NGVmMWJmMjY2YTA5MTRfOTY_30712b25-a540-4a53-a4b8-6a05ff21fa23">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our board of directors has authorized multiple non-concurrent programs to repurchase our common stock. Details of the programs and activity thereunder through &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;March&#160;31, 2023 were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.293%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.839%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.839%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.839%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.843%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Effective Date&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Expiration Date&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Share Value Authorized for Repurchase&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Share Value Repurchased&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Unused &amp;amp; Expired Share Repurchase Value&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Share Value Available for Future Repurchase&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2021 Program&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;November 2021&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;August 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;50,000&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;49,992&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;8&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;N/A&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2022 Program&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;August 2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;July 2024&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 7pt 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;50,000&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,992&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;N/A&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;47,008&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="background-color:#ffffff;color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;share&lt;/span&gt;&lt;span style="background-color:#ffffff;color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt; &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;repurchase activity by period was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:69.354%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:13.900%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.840%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands, except shares and per share amounts)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Number of shares repurchased&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;121,544&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Shares repurchased cost&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;15,226&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Average price per repurchased share&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;125.27&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfTreasuryStockByClassTextBlock>
    <us-gaap:StockRepurchaseProgramAuthorizedAmount1
      contextRef="ic66b2fe6cc7a4bf9b038a88eb9c4f953_I20230331"
      decimals="-7"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjJhMzUwYjVhM2JlMTQ0YzBiOTVhMjQzZGY1NTYzMDkwL3RhYmxlcmFuZ2U6MmEzNTBiNWEzYmUxNDRjMGI5NWEyNDNkZjU1NjMwOTBfMi00LTEtMS0xMDAwMzY_2d65ce82-bfba-49d9-9b9d-490a493b2b42"
      unitRef="usd">50000000</us-gaap:StockRepurchaseProgramAuthorizedAmount1>
    <us-gaap:TreasuryStockCommonValue
      contextRef="ic66b2fe6cc7a4bf9b038a88eb9c4f953_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjJhMzUwYjVhM2JlMTQ0YzBiOTVhMjQzZGY1NTYzMDkwL3RhYmxlcmFuZ2U6MmEzNTBiNWEzYmUxNDRjMGI5NWEyNDNkZjU1NjMwOTBfMi02LTEtMS0xMDAwMzY_e00611f6-e028-4cfd-801c-0d7803b4e415"
      unitRef="usd">49992000</us-gaap:TreasuryStockCommonValue>
    <spsc:TreasuryStockUnusedAndExpiredRepurchaseValue
      contextRef="i3cf98a1bfcce425bb63813ffc2c3e964_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjJhMzUwYjVhM2JlMTQ0YzBiOTVhMjQzZGY1NTYzMDkwL3RhYmxlcmFuZ2U6MmEzNTBiNWEzYmUxNDRjMGI5NWEyNDNkZjU1NjMwOTBfMi04LTEtMS0xMDAwMzY_6fea4c65-5240-4f48-991a-59a5f3d02093"
      unitRef="usd">8000</spsc:TreasuryStockUnusedAndExpiredRepurchaseValue>
    <us-gaap:StockRepurchaseProgramAuthorizedAmount1
      contextRef="i0b6acb14977e4bbebf8dc1ae4945d040_I20230331"
      decimals="-7"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjJhMzUwYjVhM2JlMTQ0YzBiOTVhMjQzZGY1NTYzMDkwL3RhYmxlcmFuZ2U6MmEzNTBiNWEzYmUxNDRjMGI5NWEyNDNkZjU1NjMwOTBfMy00LTEtMS0xMDAwMzY_1020067b-a566-42a7-84e3-c931906933f8"
      unitRef="usd">50000000</us-gaap:StockRepurchaseProgramAuthorizedAmount1>
    <us-gaap:TreasuryStockCommonValue
      contextRef="i0b6acb14977e4bbebf8dc1ae4945d040_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjJhMzUwYjVhM2JlMTQ0YzBiOTVhMjQzZGY1NTYzMDkwL3RhYmxlcmFuZ2U6MmEzNTBiNWEzYmUxNDRjMGI5NWEyNDNkZjU1NjMwOTBfMy02LTEtMS0xMDAwMzY_cb49419f-2be0-4522-b2a5-57b719fa8342"
      unitRef="usd">2992000</us-gaap:TreasuryStockCommonValue>
    <us-gaap:StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1
      contextRef="i0b6acb14977e4bbebf8dc1ae4945d040_I20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjJhMzUwYjVhM2JlMTQ0YzBiOTVhMjQzZGY1NTYzMDkwL3RhYmxlcmFuZ2U6MmEzNTBiNWEzYmUxNDRjMGI5NWEyNDNkZjU1NjMwOTBfMy0xMC0xLTEtMTAwMDM2_ce50e154-885e-4301-93b9-73a29e25219b"
      unitRef="usd">47008000</us-gaap:StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjA3ZjM2MjA4MGM2ZTRjNGM4ODllMDA2NzRiMDAxNWIwL3RhYmxlcmFuZ2U6MDdmMzYyMDgwYzZlNGM0Yzg4OWUwMDY3NGIwMDE1YjBfMi0xLTEtMS0xMDAwMzY_df5c08e1-cb7a-46e5-b426-47f5cba7067b"
      unitRef="shares">0</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockSharesAcquired
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjA3ZjM2MjA4MGM2ZTRjNGM4ODllMDA2NzRiMDAxNWIwL3RhYmxlcmFuZ2U6MDdmMzYyMDgwYzZlNGM0Yzg4OWUwMDY3NGIwMDE1YjBfMi0zLTEtMS0xMDAwMzY_3afe94e6-2253-49bc-aa26-d37b42f5add2"
      unitRef="shares">121544</us-gaap:TreasuryStockSharesAcquired>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjA3ZjM2MjA4MGM2ZTRjNGM4ODllMDA2NzRiMDAxNWIwL3RhYmxlcmFuZ2U6MDdmMzYyMDgwYzZlNGM0Yzg4OWUwMDY3NGIwMDE1YjBfMy0xLTEtMS0xMDAwMzY_c9d6995f-9e42-4b70-9da3-8a9a4baa64c2"
      unitRef="usd">0</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:TreasuryStockValueAcquiredCostMethod
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjA3ZjM2MjA4MGM2ZTRjNGM4ODllMDA2NzRiMDAxNWIwL3RhYmxlcmFuZ2U6MDdmMzYyMDgwYzZlNGM0Yzg4OWUwMDY3NGIwMDE1YjBfMy0zLTEtMS0xMDAwMzY_a44c91aa-eb61-491c-abe9-4600256d6747"
      unitRef="usd">15226000</us-gaap:TreasuryStockValueAcquiredCostMethod>
    <us-gaap:TreasuryStockAcquiredAverageCostPerShare
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjA3ZjM2MjA4MGM2ZTRjNGM4ODllMDA2NzRiMDAxNWIwL3RhYmxlcmFuZ2U6MDdmMzYyMDgwYzZlNGM0Yzg4OWUwMDY3NGIwMDE1YjBfNC0xLTEtMS0xMDAwMzY_f9b6e112-1403-4803-918f-618aa4ce7a74"
      unitRef="usdPerShare">0</us-gaap:TreasuryStockAcquiredAverageCostPerShare>
    <us-gaap:TreasuryStockAcquiredAverageCostPerShare
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82MS9mcmFnOmMwZjk2ZDVhMGYzODQwNDdiNDRlZjFiZjI2NmEwOTE0L3RhYmxlOjA3ZjM2MjA4MGM2ZTRjNGM4ODllMDA2NzRiMDAxNWIwL3RhYmxlcmFuZ2U6MDdmMzYyMDgwYzZlNGM0Yzg4OWUwMDY3NGIwMDE1YjBfNC0zLTEtMS0xMDAwMzY_4eed7e9f-cd27-43a6-8596-b6b35e91dc16"
      unitRef="usdPerShare">125.27</us-gaap:TreasuryStockAcquiredAverageCostPerShare>
    <us-gaap:DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg2MQ_d8a9f8eb-f019-4560-b862-c010cf0ae29a">Stock-Based Compensation&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our equity compensation plans provide for the grant of incentive and nonqualified stock options, as well as other stock-based awards including performance share units (&#x201c;PSUs&#x201d;), restricted stock awards (&#x201c;RSAs&#x201d;), restricted stock units (&#x201c;RSUs&#x201d;), and deferred stock units (&#x201c;DSUs&#x201d;), to employees, non-employee directors and other consultants who provide services to us. We also provide an employee stock purchase plan (&#x201c;ESPP&#x201d;) and 401(k) match to eligible participants. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;We recognize stock-based compensation expense based on grant date award fair value. This cost is recognized over the period for which the employee is required to provide service in exchange for the award or the award performance period, except for expenses relating to retirement-eligible employees that have not given their required notice, which is recognized on a pro-rata basis over the notice period prior to retirement. At &lt;/span&gt;&lt;span style="color:#212529;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;March&#160;31, 2023&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;, there were 12.8 million shares available for grant under approved equity compensation plans.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Stock-based compensation expense was allocated in the condensed consolidated statements of comprehensive income as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.090%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.682%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.202%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.411%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.205%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Cost of revenues&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,503&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,179&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Operating expenses&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Sales and marketing&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,423&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,032&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Research and development&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,777&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,474&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;General and administrative&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;5,077&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,330&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;11,780&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;9,015&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Stock-based compensation expense by grant type or plan was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Stock options&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;490&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;477&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;PSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,926&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,699&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;RSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6,062&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,638&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;RSAs &amp;amp; DSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;108&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;108&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;ESPP&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;589&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;574&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;401(k) stock match&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;605&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;519&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;11,780&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;9,015&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;As of March&#160;31, 2023, there was $63.8 million of unrecognized stock-based compensation expense under our equity compensation plans, which is expected to be recognized on a primarily straight-line basis over a weighted average period of 2.6 years.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Stock Options&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our stock option activity was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31, 2023&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Options (#) &lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Weighted Average&lt;br/&gt;Exercise Price &lt;br/&gt;($/share)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Outstanding, beginning of period&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;562,697&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;56.24&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;30,148&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;150.76&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Exercised&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(68,088)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;32.06&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1,916)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;123.49&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Outstanding, end of period&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;522,841&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;64.60&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Of the total outstanding options at March&#160;31, 2023, 0.4 million were exercisable. The outstanding and exercisable options had a weighted average exercise price of $53.22 per share and a weighted average remaining contractual life of 3.0 years.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The weighted average grant date fair value of options granted during the three months ended March&#160;31, 2023 was $54.53 per share. This was estimated on the date of grant using the Black-Scholes option pricing model with the following weighted-average assumptions:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Life (in years)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3.9&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Volatility&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;39.7&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Dividend yield&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Risk-free interest rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.2&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Performance Share Units, Restricted Stock Units and Awards, and Deferred Stock Units&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;In each of the quarters ended March 31, 2023, 2022, 2021, and 2020 we granted PSU awards with a target performance level. &lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;These awards are earned based upon our Company&#x2019;s total shareholder return as compared to an indexed total shareholder return over the course of a fiscal based three-year performance period, starting in the year of grant. Earned awards vest in the quarter following the conclusion of the performance period. In the three months ended March 31, &lt;/span&gt;&lt;span style="background-color:#ffffff;color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;2023&lt;/span&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;, PSU awards granted in 2019 vested at the maximum performance level and 0.1&#160;million shares of common stock were issued.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Activity for our PSUs, RSUs, RSAs, and DSUs in aggregate was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31, 2023&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;#&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Weighted Average Grant&lt;br/&gt;Date Fair Value &lt;br/&gt;($/share)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Outstanding, beginning of period&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;712,158&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;103.93&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;304,635&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;163.06&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Vested and common stock issued&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(305,123)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;74.70&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(3,798)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;112.93&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Outstanding, end of period&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;707,872&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;141.92&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The number of PSUs, RSUs, RSAs, and DSUs outstanding at March&#160;31, 2023 included less than 0.1&#160;million units that have vested, but the shares of common stock have not yet been issued, pursuant to the terms of the underlying agreements.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;span style="color:#1f282c;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Employee Stock Purchase Plan&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our ESPP activity was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands, except shares)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Amounts for shares purchased&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;241&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;147&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Shares purchased&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,549&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,698&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;A total of 1.7&#160;million shares of common stock are reserved for issuance under the ESPP as of March&#160;31, 2023.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The fair value was estimated based on the market price of our common stock at the beginning of the offering period using the following assumptions:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Life (in years)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.5&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Volatility&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;46.4&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Dividend yield&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Risk-free interest rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2.5&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfOTUw_3d2868cb-43a9-4109-8ea9-a62e26ebac7a"
      unitRef="shares">12800000</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant>
    <us-gaap:ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg2OQ_36af72b6-a0c8-461d-89b5-2eacc04de3f6">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Stock-based compensation expense was allocated in the condensed consolidated statements of comprehensive income as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.090%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.682%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.202%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.411%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.205%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Cost of revenues&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,503&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,179&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Operating expenses&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Sales and marketing&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,423&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,032&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Research and development&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,777&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,474&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;General and administrative&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;5,077&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,330&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;11,780&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;9,015&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Stock-based compensation expense by grant type or plan was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="background-color:#ffffff;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Stock options&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;490&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;477&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;PSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3,926&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,699&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;RSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;6,062&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;4,638&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;RSAs &amp;amp; DSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;108&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;108&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;ESPP&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;589&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#CFF0FC;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;574&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;401(k) stock match&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;605&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="2" style="padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;519&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;11,780&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#CFF0FC;padding:0 1pt"/&gt;&lt;td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;9,015&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#CFF0FC;border-bottom:3pt double #000000;border-top:0.75pt solid #000000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i93dad56146ff44d98768cfefa65393e7_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfMi0xLTEtMS0xMDAwMzY_115c64b5-b6d7-4a12-b8cd-e24b58f33e32"
      unitRef="usd">2503000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ic6e6e85d532b4870801fe3245685e79a_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfMi0zLTEtMS0xMDAwMzY_439b50bb-7690-4f46-ba67-e60bef2f7dcb"
      unitRef="usd">2179000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="icf5aa811f4814632b2861846f77139b8_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNC0xLTEtMS0xMDAwMzY_e1afd064-e06e-4d40-ae1c-382235e018a7"
      unitRef="usd">2423000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i3a215ac4955d48c8bdf4ef5efe7b2501_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNC0zLTEtMS0xMDAwMzY_a93b2765-37a0-43b2-9c88-a07a30640780"
      unitRef="usd">2032000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ia33d3193bbcb46b69d9ea868360410f0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNS0xLTEtMS0xMDAwMzY_a5260c0c-aae3-4d01-ba5a-38e0bf87437f"
      unitRef="usd">1777000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i48945f26aa664703a3348e4cba198e2d_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNS0zLTEtMS0xMDAwMzY_04191289-935b-42e5-8a15-260984ea022d"
      unitRef="usd">1474000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i327830e256a546128e87027704b0e090_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNi0xLTEtMS0xMDAwMzY_55c0af12-cf97-426d-84f8-97d7a1607ac0"
      unitRef="usd">5077000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="id2486bd8e47b45c383a6d5f3f183cd42_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNi0zLTEtMS0xMDAwMzY_a87d3407-d835-4978-affd-606c4b1f9962"
      unitRef="usd">3330000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNy0xLTEtMS0xMDAwMzY_e4e5c2b0-84ef-473d-88d8-d23fe2c02b12"
      unitRef="usd">11780000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjhhNWMwYWQ1ODgxZjRhY2VhMGMyNzU0YzJkYTM4Yzg5L3RhYmxlcmFuZ2U6OGE1YzBhZDU4ODFmNGFjZWEwYzI3NTRjMmRhMzhjODlfNy0zLTEtMS0xMDAwMzY_1cfe5d53-e688-40b0-aed9-7deacfe99f7e"
      unitRef="usd">9015000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfMi0xLTEtMS0xMDAwMzY_607b83af-d97c-402b-9d63-c1c6b4b42ff3"
      unitRef="usd">490000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i7c8e86e8da8b413e95c1e1f7ad578007_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfMi0zLTEtMS0xMDAwMzY_2b8353a4-7a78-48ef-a687-7cf299d938b7"
      unitRef="usd">477000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ie078c18202d541869aac6a5c656ff133_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfMy0xLTEtMS0xMDAwMzY_f276f006-0448-46fe-ab87-968317d90680"
      unitRef="usd">3926000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i81fe3639cdd0409783650946d9f206c1_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfMy0zLTEtMS0xMDAwMzY_161e7ff2-f344-4ff6-bf34-eced814b5041"
      unitRef="usd">2699000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="if541830b99f34fada5f80dbf22b9a42b_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNC0xLTEtMS0xMDAwMzY_d107d4ff-d6be-4a4d-b30f-d7fd03f44656"
      unitRef="usd">6062000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ic919f20ea9e34d7d8a49f792f2850731_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNC0zLTEtMS0xMDAwMzY_8e700380-80a6-47dc-8e7a-228bb12e754a"
      unitRef="usd">4638000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i139966462e7d44a6a65729d6e89d9a2b_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNS0xLTEtMS0xMDAwMzY_cc570036-b3fa-4fc5-8031-3de6df7d911d"
      unitRef="usd">108000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i9efb8a2ef80941b3b94082525317fe20_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNS0zLTEtMS0xMDAwMzY_ce5a47a4-77fe-4fe0-a814-1413631c339b"
      unitRef="usd">108000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i7004f48977d74e228c6e84df8cbc78b7_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNi0xLTEtMS0xMDAwMzY_6066d94f-ddee-4a23-a604-f707eafc5541"
      unitRef="usd">589000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="if398ccb0bdb94ada908408abec6ccc79_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNi0zLTEtMS0xMDAwMzY_731830fc-5d50-4090-aea7-2a875cd2996d"
      unitRef="usd">574000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ice4475e67a4a4f4e8c671ae4a60c0e9e_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNy0xLTEtMS0xMDAwMzY_8ae12274-0097-4db2-ae0c-a3df125b6788"
      unitRef="usd">605000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="iace8208134024531b6ba59e56e7e46a1_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfNy0zLTEtMS0xMDAwMzY_6dbd03f5-5849-4c77-81b4-eeb1d63a1c33"
      unitRef="usd">519000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfOC0xLTEtMS0xMDAwMzY_fb2e9d76-d191-4563-88e1-12f29c38ced5"
      unitRef="usd">11780000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:AllocatedShareBasedCompensationExpense
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmI3NzIwYWVjZjY3ZDQ2YWM4MTJiOGNlNmMxNzQ4YjA0L3RhYmxlcmFuZ2U6Yjc3MjBhZWNmNjdkNDZhYzgxMmI4Y2U2YzE3NDhiMDRfOC0zLTEtMS0xMDAwMzY_86ee5a9e-48de-4b12-bf03-bdf119bb5c5a"
      unitRef="usd">9015000</us-gaap:AllocatedShareBasedCompensationExpense>
    <us-gaap:EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMTE3Mw_401cf6c1-6b45-49b0-8a12-d8df535d76cf"
      unitRef="usd">63800000</us-gaap:EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized>
    <us-gaap:EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMTM2Ng_d03a0775-75a3-44a3-bcc8-b89c43bf85d3">P2Y7M6D</us-gaap:EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1>
    <us-gaap:ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg2NQ_1692b114-c69d-4621-84a0-18489171461c">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our stock option activity was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31, 2023&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Options (#) &lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Weighted Average&lt;br/&gt;Exercise Price &lt;br/&gt;($/share)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Outstanding, beginning of period&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;562,697&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;56.24&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;30,148&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;150.76&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Exercised&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(68,088)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;32.06&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(1,916)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;123.49&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Outstanding, end of period&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;522,841&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;64.60&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfMi0xLTEtMS0xMDAwMzY_32f76612-0292-4163-a444-4d2392486b94"
      unitRef="shares">562697</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice
      contextRef="i074918b0d14149a8b0f12b21ce312a7c_I20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfMi0zLTEtMS0xMDAwMzY_78573ab4-be6e-4158-9240-90781c97a01f"
      unitRef="usdPerShare">56.24</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfMy0xLTEtMS0xMDAwMzY_dfeb61e8-1ed3-46cd-b69c-1a80a76a4d3a"
      unitRef="shares">30148</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfMy0zLTEtMS0xMDAwMzY_8329d832-e652-4963-a869-7c4edca503b7"
      unitRef="usdPerShare">150.76</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice>
    <us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfNC0xLTEtMS0xMDAwMzY_dc872dec-88da-4759-aaba-6439737b66e7"
      unitRef="shares">68088</us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfNC0zLTEtMS0xMDAwMzY_56c967c2-42c5-470a-83e4-a9d16a610a43"
      unitRef="usdPerShare">32.06</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfNS0xLTEtMS0xMDAwMzY_b9968f54-83d2-42c2-a3b6-2b34cdbe7ede"
      unitRef="shares">1916</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfNS0zLTEtMS0xMDAwMzY_230957f8-9da3-4557-963e-4c76925ab022"
      unitRef="usdPerShare">123.49</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfNi0xLTEtMS0xMDAwMzY_41b037db-76bf-44ca-afc7-e6ee4903f48a"
      unitRef="shares">522841</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice
      contextRef="i3c3314e4b6ab4b059373b9922fd89803_I20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmQ2YmFhMTAwZjdmYzRmMDliMWYzMDllMDcwN2YwMmM1L3RhYmxlcmFuZ2U6ZDZiYWExMDBmN2ZjNGYwOWIxZjMwOWUwNzA3ZjAyYzVfNi0zLTEtMS0xMDAwMzY_93601d88-b262-4fcf-844b-4f0e3c658d42"
      unitRef="usdPerShare">64.60</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber
      contextRef="ibfc64785d5dc41fb8fbce3eb2022373c_I20230331"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMTQyOQ_5fac3e63-6b82-4444-ba79-1e5e9432c805"
      unitRef="shares">400000</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice
      contextRef="ibfc64785d5dc41fb8fbce3eb2022373c_I20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMTUzMQ_e45c958d-b975-4fbb-92c8-edcca925a3ad"
      unitRef="usdPerShare">53.22</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2
      contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMTU5Nw_cfa9e9ad-adc1-4245-a868-61395512f1d4">P3Y</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2>
    <us-gaap:ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg1Nw_bea73802-795c-4f06-90f1-1eb8c3799314">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The weighted average grant date fair value of options granted during the three months ended March&#160;31, 2023 was $54.53 per share. This was estimated on the date of grant using the Black-Scholes option pricing model with the following weighted-average assumptions:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Life (in years)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;3.9&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Volatility&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;39.7&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Dividend yield&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:top"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;Risk-free interest rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;4.2&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:114%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue
      contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMTY5Nw_6765361c-25ca-4deb-8d46-f2f7496f4f66"
      unitRef="usdPerShare">54.53</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1
      contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjM4YTQzMmNlZTBhYTQ0ZGRiYjhkM2IyNmM2MWZkZTQ4L3RhYmxlcmFuZ2U6MzhhNDMyY2VlMGFhNDRkZGJiOGQzYjI2YzYxZmRlNDhfMC0xLTEtMS0xMDAwMzY_896130b6-930f-4d3a-9e0f-b7a4609401f0">P3Y10M24D</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate
      contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjM4YTQzMmNlZTBhYTQ0ZGRiYjhkM2IyNmM2MWZkZTQ4L3RhYmxlcmFuZ2U6MzhhNDMyY2VlMGFhNDRkZGJiOGQzYjI2YzYxZmRlNDhfMS0xLTEtMS0xMDAwMzY_5d6813e5-b771-4823-8738-0ff2a23978cf"
      unitRef="number">0.397</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate
      contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjM4YTQzMmNlZTBhYTQ0ZGRiYjhkM2IyNmM2MWZkZTQ4L3RhYmxlcmFuZ2U6MzhhNDMyY2VlMGFhNDRkZGJiOGQzYjI2YzYxZmRlNDhfMi0xLTEtMS0xMDAwMzY_7ac421a3-d9ca-496e-b0f1-1c72abb5ada1"
      unitRef="number">0</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate
      contextRef="i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjM4YTQzMmNlZTBhYTQ0ZGRiYjhkM2IyNmM2MWZkZTQ4L3RhYmxlcmFuZ2U6MzhhNDMyY2VlMGFhNDRkZGJiOGQzYjI2YzYxZmRlNDhfMy0xLTEtMS0xMDAwMzY_fee25bdf-c858-4c71-8269-8e69f5dfa23a"
      unitRef="number">0.042</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1
      contextRef="i8bf3eacc627448edb90205fb30ece2b5_D20200101-20200331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg3MA_40500f9c-b2c5-44c7-8c9f-df2e6c327aea">P3Y</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1
      contextRef="ia94b7f289d9c466e924f9972711567b8_D20210101-20210331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg3MA_63c549d0-97d7-4037-b130-7d49f0856385">P3Y</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1
      contextRef="i81fe3639cdd0409783650946d9f206c1_D20220101-20220331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg3MA_eb936149-838a-4450-a6df-7dc2ae31354f">P3Y</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1
      contextRef="ie078c18202d541869aac6a5c656ff133_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg3MA_eee8f020-6475-41ef-ad79-5d4ab4c2885e">P3Y</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod
      contextRef="i648dacc2484645a191cd2b52aedd0022_D20220101-20220331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjQ3MQ_108b67d3-d52e-476d-bc65-69d76a31a07b"
      unitRef="shares">100000</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod>
    <us-gaap:ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg2NA_f2728dbe-20ca-4594-baaa-5acb0f2c13b3">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Activity for our PSUs, RSUs, RSAs, and DSUs in aggregate was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31, 2023&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;#&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Weighted Average Grant&lt;br/&gt;Date Fair Value &lt;br/&gt;($/share)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Outstanding, beginning of period&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;712,158&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;103.93&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Granted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;304,635&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;163.06&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Vested and common stock issued&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(305,123)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;74.70&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Forfeited&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(3,798)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;112.93&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Outstanding, end of period&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;707,872&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;141.92&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber
      contextRef="i8eae6a60d667472db9b3b0b29fa91b99_I20221231"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfMi0xLTEtMS0xMDAwMzY_b3f3993f-d62c-4009-806c-d977244663c1"
      unitRef="shares">712158</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue
      contextRef="i8eae6a60d667472db9b3b0b29fa91b99_I20221231"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfMi0zLTEtMS0xMDAwMzY_b1b0c305-8078-4293-85ce-601ad1f19e20"
      unitRef="usdPerShare">103.93</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod
      contextRef="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfMy0xLTEtMS0xMDAwMzY_fc689529-232b-4e60-8019-bf1beddca469"
      unitRef="shares">304635</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue
      contextRef="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfMy0zLTEtMS0xMDAwMzY_078bdfbd-04e9-4acd-9cf6-076459743c4f"
      unitRef="usdPerShare">163.06</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod
      contextRef="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfNC0xLTEtMS0xMDAwMzY_32111958-0f1e-4075-aacf-0d3d426a9c8f"
      unitRef="shares">305123</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue
      contextRef="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfNC0zLTEtMS0xMDAwMzY_252ed2ad-d8e8-4183-b6d2-ef658c1eb1da"
      unitRef="usdPerShare">74.70</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod
      contextRef="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfNS0xLTEtMS0xMDAwMzY_e80f70d1-cdbb-44ac-99b9-717e651c5836"
      unitRef="shares">3798</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue
      contextRef="ifbba1baca1234a62b6d6de074ecb57d4_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfNS0zLTEtMS0xMDAwMzY_4ebdcbf0-46e9-499c-94e3-87aa905a38bf"
      unitRef="usdPerShare">112.93</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber
      contextRef="i8243d525cc6644e3a8b086461514844d_I20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfNi0xLTEtMS0xMDAwMzY_b64ad37d-9c19-47bc-9390-222833d4022c"
      unitRef="shares">707872</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue
      contextRef="i8243d525cc6644e3a8b086461514844d_I20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjRlOTRkZmI2MWMwNDRhZWNhZjU3ZTFiYjc5YmM5MGE1L3RhYmxlcmFuZ2U6NGU5NGRmYjYxYzA0NGFlY2FmNTdlMWJiNzliYzkwYTVfNi0zLTEtMS0xMDAwMzY_dec150a4-15c0-4301-940d-a5cb88988ac8"
      unitRef="usdPerShare">141.92</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue>
    <spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd
      contextRef="i75224f37ba834f5087c46bd2805cd5e7_I20230331"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjU5Mw_e031db4a-bee9-4052-b1c2-befd94726f53"
      unitRef="shares">100000</spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd>
    <us-gaap:ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg1OA_f7dd3b52-3f69-4149-b596-4f7e0bb37388">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Our ESPP activity was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands, except shares)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Amounts for shares purchased&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;241&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;147&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Shares purchased&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2,549&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,698&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock>
    <spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward
      contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmM0M2RjYzI3N2IxZjQyMmU4NDcwM2M5MzY4YjVlMGNlL3RhYmxlcmFuZ2U6YzQzZGNjMjc3YjFmNDIyZTg0NzAzYzkzNjhiNWUwY2VfMi0xLTEtMS0xMDAwMzY_4bca0fca-2802-4942-839e-352b56abb30d"
      unitRef="usd">241000</spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward>
    <spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward
      contextRef="idc151901553f4a18a424d23b910d4ad3_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmM0M2RjYzI3N2IxZjQyMmU4NDcwM2M5MzY4YjVlMGNlL3RhYmxlcmFuZ2U6YzQzZGNjMjc3YjFmNDIyZTg0NzAzYzkzNjhiNWUwY2VfMi0zLTEtMS0xMDAwMzY_a17b0a03-41ed-4148-89f1-b1cfa800e2f9"
      unitRef="usd">147000</spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward
      contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmM0M2RjYzI3N2IxZjQyMmU4NDcwM2M5MzY4YjVlMGNlL3RhYmxlcmFuZ2U6YzQzZGNjMjc3YjFmNDIyZTg0NzAzYzkzNjhiNWUwY2VfMy0xLTEtMS0xMDAwMzY_b9084df6-ad98-44f5-9619-2aa652af1e89"
      unitRef="shares">2549</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward
      contextRef="idc151901553f4a18a424d23b910d4ad3_D20220101-20220331"
      decimals="INF"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOmM0M2RjYzI3N2IxZjQyMmU4NDcwM2M5MzY4YjVlMGNlL3RhYmxlcmFuZ2U6YzQzZGNjMjc3YjFmNDIyZTg0NzAzYzkzNjhiNWUwY2VfMy0zLTEtMS0xMDAwMzY_3b7afc93-ca72-4487-b380-d868f05fdaef"
      unitRef="shares">1698</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward>
    <us-gaap:DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance
      contextRef="i8e28272e86eb4ea5b8c9d7b9f8471840_I20230331"
      decimals="-5"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjc3NQ_cc2fb4e2-434f-492a-a106-9a919155d6ca"
      unitRef="shares">1700000</us-gaap:DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance>
    <us-gaap:ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RleHRyZWdpb246NzdjNTUzNTg1NjI4NDQ0NTk0ZjRiYTkyMWRlMmIyZjlfMjg2MA_15a11d7b-a405-47da-90ae-4ff04f3f9f7d">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The fair value was estimated based on the market price of our common stock at the beginning of the offering period using the following assumptions:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:85.718%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.082%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Life (in years)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.5&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Volatility&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;46.4&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Dividend yield&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#x2014;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Risk-free interest rate&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;2.5&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1
      contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjgzYTVmNDQwNDVjNjQ5MDc4YmQyODkwMDdhN2ZhMjVkL3RhYmxlcmFuZ2U6ODNhNWY0NDA0NWM2NDkwNzhiZDI4OTAwN2E3ZmEyNWRfMC0xLTEtMS0xMDAwMzY_7b17ec7e-4086-4060-abd4-f0d50228d12f">P0Y6M</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate
      contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjgzYTVmNDQwNDVjNjQ5MDc4YmQyODkwMDdhN2ZhMjVkL3RhYmxlcmFuZ2U6ODNhNWY0NDA0NWM2NDkwNzhiZDI4OTAwN2E3ZmEyNWRfMS0xLTEtMS0xMDAwMzY_df53249a-fcab-4ad8-b438-6400842df981"
      unitRef="number">0.464</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate
      contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjgzYTVmNDQwNDVjNjQ5MDc4YmQyODkwMDdhN2ZhMjVkL3RhYmxlcmFuZ2U6ODNhNWY0NDA0NWM2NDkwNzhiZDI4OTAwN2E3ZmEyNWRfMi0xLTEtMS0xMDAwMzY_6f134d7f-ae44-43e8-8376-2fc6d5f0b958"
      unitRef="number">0</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate
      contextRef="ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82NC9mcmFnOjc3YzU1MzU4NTYyODQ0NDU5NGY0YmE5MjFkZTJiMmY5L3RhYmxlOjgzYTVmNDQwNDVjNjQ5MDc4YmQyODkwMDdhN2ZhMjVkL3RhYmxlcmFuZ2U6ODNhNWY0NDA0NWM2NDkwNzhiZDI4OTAwN2E3ZmEyNWRfMy0xLTEtMS0xMDAwMzY_e01b60c9-1453-49ef-aa71-9526714bfba2"
      unitRef="number">0.025</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate>
    <us-gaap:IncomeTaxDisclosureTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl82Ny9mcmFnOjFlZWZkZjZjZTUwNTRmMWQ4M2FiMWEyYmQ4MDMzZDVmL3RleHRyZWdpb246MWVlZmRmNmNlNTA1NGYxZDgzYWIxYTJiZDgwMzNkNWZfOTE5_e6450187-3869-44aa-a879-552620b45bc0">Income TaxesWe record our interim provision for income taxes by applying our estimated annual effective tax rate to our year-to-date pre-tax income and adjust the provision for discrete tax items recorded in the period. Our provisions for income taxes includes current federal, state, and foreign income tax expense, as well as deferred tax expense.Differences between our effective tax rate and statutory tax rates are primarily due to the impact of permanently non-deductible expenses partially offset by the federal research and development credits and tax benefits associated with foreign-derived intangible income. Additionally, excess tax benefits generated upon settlement or exercise of stock awards are recognized as a reduction to income tax expense as a discrete tax item in the quarter that the event occurs, creating potentially significant fluctuation in tax expense by quarter and by year.</us-gaap:IncomeTaxDisclosureTextBlock>
    <us-gaap:OtherNonoperatingIncomeAndExpenseTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RleHRyZWdpb246MjYwZTkzNDU3MjI4NDYzOWJlY2I2MzRiNDJmZmE4NmVfODM_408049df-63b3-4816-ade8-6aa23ba709da">Other Income and Expense&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Other income, net included the following: &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.696%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:72.152%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.969%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.407%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.972%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Investment income&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,127&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;48&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Realized gain from foreign currency on cash and investments held&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;137&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;468&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Other income (expense), net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;12&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(93)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Total other income, net&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,276&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;423&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:OtherNonoperatingIncomeAndExpenseTextBlock>
    <us-gaap:ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RleHRyZWdpb246MjYwZTkzNDU3MjI4NDYzOWJlY2I2MzRiNDJmZmE4NmVfODQ_4b9802e5-c54e-4612-9a20-3e6ae2ce793a">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Other income, net included the following: &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.696%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:72.152%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.969%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.407%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:11.972%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Investment income&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,127&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;48&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Realized gain from foreign currency on cash and investments held&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;137&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;468&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Other income (expense), net&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;12&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;(93)&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 13pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Total other income, net&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;1,276&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;423&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;border-bottom:3pt double #000;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock>
    <us-gaap:InvestmentIncomeNet
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfMi0xLTEtMS0xMDAwMzY_4b03d3f5-69fb-414a-aac5-bb44e65d48cd"
      unitRef="usd">1127000</us-gaap:InvestmentIncomeNet>
    <us-gaap:InvestmentIncomeNet
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfMi0zLTEtMS0xMDAwMzY_57dfbbac-5c47-4239-a510-21039ea7a04e"
      unitRef="usd">48000</us-gaap:InvestmentIncomeNet>
    <us-gaap:ForeignCurrencyTransactionGainLossBeforeTax
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfMy0xLTEtMS0xMDAwMzY_2e306d7c-6c20-43cf-81c7-c19b8bbeff59"
      unitRef="usd">137000</us-gaap:ForeignCurrencyTransactionGainLossBeforeTax>
    <us-gaap:ForeignCurrencyTransactionGainLossBeforeTax
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfMy0zLTEtMS0xMDAwMzY_dd8781fd-77d2-409a-b457-dd07572f88b2"
      unitRef="usd">468000</us-gaap:ForeignCurrencyTransactionGainLossBeforeTax>
    <us-gaap:OtherNonoperatingIncomeExpense
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfNC0xLTEtMS0xMDAwMzY_4abb7e97-e369-40d2-99a6-b6b5e1b4cc2c"
      unitRef="usd">12000</us-gaap:OtherNonoperatingIncomeExpense>
    <us-gaap:OtherNonoperatingIncomeExpense
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfNC0zLTEtMS0xMDAwMzY_4f424e7a-c046-4fbb-bee6-500f1c9c5622"
      unitRef="usd">-93000</us-gaap:OtherNonoperatingIncomeExpense>
    <us-gaap:NonoperatingIncomeExpense
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfNS0xLTEtMS0xMDAwMzY_6d9bdf81-1256-4e99-add7-1d6dc4182026"
      unitRef="usd">1276000</us-gaap:NonoperatingIncomeExpense>
    <us-gaap:NonoperatingIncomeExpense
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83MC9mcmFnOjI2MGU5MzQ1NzIyODQ2MzliZWNiNjM0YjQyZmZhODZlL3RhYmxlOmNlZDJkMmUwMGQ3MTRkMTNhMzA5M2E1YzhmZTAxZTA4L3RhYmxlcmFuZ2U6Y2VkMmQyZTAwZDcxNGQxM2EzMDkzYTVjOGZlMDFlMDhfNS0zLTEtMS0xMDAwMzY_f6474604-0926-4279-8e25-bf5c56f24525"
      unitRef="usd">423000</us-gaap:NonoperatingIncomeExpense>
    <us-gaap:EarningsPerShareTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RleHRyZWdpb246YjQ1YTg0Yjg4YjRlNGZiMzk4Y2M2NWVlYTExOTMyMDVfNDQ_af48b7a0-4ca4-486b-bc54-194e57d7cc13">Net Income Per Share&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The components and computation of basic and diluted net income per share were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.848%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.889%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.101%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.104%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands, except per share amounts)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%"&gt;Numerator&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Net income&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;15,289&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;12,603&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%"&gt;Denominator&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Weighted average common shares outstanding, basic&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;36,427&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;36,136&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Options to purchase common stock&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;307&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;419&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;PSUs, RSUs, RSAs, and DSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;421&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;434&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Weighted average common shares outstanding, diluted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;37,155&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;36,989&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%"&gt;Net income per share&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Basic&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.42&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.35&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Diluted&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.41&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.34&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The number of outstanding potential common shares that were excluded from the calculation of diluted net income per share as they were anti-dilutive was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.545%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.807%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.408%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.143%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Anti-dilutive shares&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;108&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;151&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:EarningsPerShareTextBlock>
    <us-gaap:ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RleHRyZWdpb246YjQ1YTg0Yjg4YjRlNGZiMzk4Y2M2NWVlYTExOTMyMDVfNDY_68ae5732-e9e6-4c62-92a1-7eaeae2fcfd0">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The components and computation of basic and diluted net income per share were as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:12pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.848%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.889%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.101%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.104%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands, except per share amounts)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%"&gt;Numerator&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Net income&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;15,289&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;12,603&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%"&gt;Denominator&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Weighted average common shares outstanding, basic&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;36,427&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;36,136&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Options to purchase common stock&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;307&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;419&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;PSUs, RSUs, RSAs, and DSUs&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;421&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;434&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 10pt;text-align:left;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Weighted average common shares outstanding, diluted&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;37,155&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:middle"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;36,989&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:middle"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:700;line-height:100%"&gt;Net income per share&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="background-color:#ffffff;border-top:3pt double #000;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;&#160;&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Basic&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.42&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td style="background-color:#cceeff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.35&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:2px 1pt 2px 28pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Diluted&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.41&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td style="background-color:#ffffff;padding:2px 0 2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;$&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;0.34&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#ffffff;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock>
    <us-gaap:NetIncomeLoss
      contextRef="ia18cb472d37847b4ae4f0e7c9fcc2093_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfMy0xLTEtMS0xMDAwMzY_82620c20-cf40-4702-84f0-a471c995fc78"
      unitRef="usd">15289000</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfMy0zLTEtMS0xMDAwMzY_0d496217-35f7-48e4-a178-8b2addd5c76a"
      unitRef="usd">12603000</us-gaap:NetIncomeLoss>
    <us-gaap:WeightedAverageNumberOfSharesOutstandingBasic
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNS0xLTEtMS0xMDAwMzY_4a25c50d-ffb0-46d4-a736-81b2324d36d0"
      unitRef="shares">36427000</us-gaap:WeightedAverageNumberOfSharesOutstandingBasic>
    <us-gaap:WeightedAverageNumberOfSharesOutstandingBasic
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNS0xLTEtMS0xMDAwMzY_c84e6d40-cbac-4c7b-a790-1c8c1c25b87d"
      unitRef="shares">36427000</us-gaap:WeightedAverageNumberOfSharesOutstandingBasic>
    <us-gaap:WeightedAverageNumberOfSharesOutstandingBasic
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNS0zLTEtMS0xMDAwMzY_58753cf6-f053-4043-94fb-899997695560"
      unitRef="shares">36136000</us-gaap:WeightedAverageNumberOfSharesOutstandingBasic>
    <us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNi0xLTEtMS0xMDAwMzY_906c31f7-9c39-4089-aa34-842eefbd423a"
      unitRef="shares">307000</us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements>
    <us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNi0zLTEtMS0xMDAwMzY_0b84a1af-dcda-4d45-98d0-c564b11fe8be"
      unitRef="shares">419000</us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements>
    <us-gaap:IncrementalCommonSharesAttributableToContingentlyIssuableShares
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNy0xLTEtMS0xMDAwMzY_b428caa0-d002-40d2-bc47-8d7ae31bc3b6"
      unitRef="shares">421000</us-gaap:IncrementalCommonSharesAttributableToContingentlyIssuableShares>
    <us-gaap:IncrementalCommonSharesAttributableToContingentlyIssuableShares
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfNy0zLTEtMS0xMDAwMzY_3ffbfa5e-57e2-424c-9370-495c75519610"
      unitRef="shares">434000</us-gaap:IncrementalCommonSharesAttributableToContingentlyIssuableShares>
    <us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfOC0xLTEtMS0xMDAwMzY_c9cacfb3-142b-417d-9c4d-2f606cff22e5"
      unitRef="shares">37155000</us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding>
    <us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfOC0xLTEtMS0xMDAwMzY_fa9d9ba7-2aca-4232-8d9b-84c0a1c1b37a"
      unitRef="shares">37155000</us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding>
    <us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfOC0zLTEtMS0xMDAwMzY_c5751d11-6758-48cb-b078-ed9b28e1254d"
      unitRef="shares">36989000</us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding>
    <us-gaap:EarningsPerShareBasic
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfMTAtMS0xLTEtMTAwMDM2_0719e344-6476-4784-9d91-a0f030deaf68"
      unitRef="usdPerShare">0.42</us-gaap:EarningsPerShareBasic>
    <us-gaap:EarningsPerShareBasic
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfMTAtMy0xLTEtMTAwMDM2_f23d5e78-2d7e-45d9-8c58-c97ae58aa4a1"
      unitRef="usdPerShare">0.35</us-gaap:EarningsPerShareBasic>
    <us-gaap:EarningsPerShareDiluted
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfMTEtMS0xLTEtMTAwMDM2_a15b4e1a-3b5f-460b-a419-56495619e1a8"
      unitRef="usdPerShare">0.41</us-gaap:EarningsPerShareDiluted>
    <us-gaap:EarningsPerShareDiluted
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmViYmQ5NGI3MGQ4NDRhZTliMmJhYzc1YjczOGVjNDkwL3RhYmxlcmFuZ2U6ZWJiZDk0YjcwZDg0NGFlOWIyYmFjNzViNzM4ZWM0OTBfMTEtMy0xLTEtMTAwMDM2_f644bfca-8be0-43b0-8275-26c3de0a498e"
      unitRef="usdPerShare">0.34</us-gaap:EarningsPerShareDiluted>
    <us-gaap:ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RleHRyZWdpb246YjQ1YTg0Yjg4YjRlNGZiMzk4Y2M2NWVlYTExOTMyMDVfNDM_a7859407-250b-429b-9bc2-6b8ad322acda">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;The number of outstanding potential common shares that were excluded from the calculation of diluted net income per share as they were anti-dilutive was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-align:center"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:99.545%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.807%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.142%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.408%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.143%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;(in thousands)&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Anti-dilutive shares&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;108&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;151&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock>
    <us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmQ1YjU0NGMyNGFhZDQ3OTZhYjAxN2YxMGE1MGMzZDQzL3RhYmxlcmFuZ2U6ZDViNTQ0YzI0YWFkNDc5NmFiMDE3ZjEwYTUwYzNkNDNfMi0xLTEtMS0xMDAwMzY_4b73c8cb-40c9-4eab-992c-72accae54898"
      unitRef="shares">108000</us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount>
    <us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount
      contextRef="ibc31c76105bb47eeb270b9df01daeb9b_D20220101-20220331"
      decimals="-3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83My9mcmFnOmI0NWE4NGI4OGI0ZTRmYjM5OGNjNjVlZWExMTkzMjA1L3RhYmxlOmQ1YjU0NGMyNGFhZDQ3OTZhYjAxN2YxMGE1MGMzZDQzL3RhYmxlcmFuZ2U6ZDViNTQ0YzI0YWFkNDc5NmFiMDE3ZjEwYTUwYzNkNDNfMi0zLTEtMS0xMDAwMzY_776de757-422b-446d-a746-9bcaa2435d38"
      unitRef="shares">151000</us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount>
    <spsc:GeographicInformationTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RleHRyZWdpb246NzQzNDA2NTlmYmJmNDllZWFhNTBiOGVmODdhODNlYThfMTUx_d6b1e3a3-3831-42d2-aa18-781b00929b39">Geographic Information&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Revenue&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Domestic revenue, which we define as revenue that was attributable to customers based within the U.S., was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Domestic revenue&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;84&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;84&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="margin-top:3pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;No single jurisdiction outside of the U.S. had revenues in excess of 10%. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-style:italic;font-weight:700;line-height:120%"&gt;Property and Equipment&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Property and equipment, net located at subsidiary and office locations outside of the U.S. was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;March 31,&lt;br/&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;International property and equipment&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;14&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;13&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:GeographicInformationTextBlock>
    <us-gaap:ScheduleOfProductInformationTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RleHRyZWdpb246NzQzNDA2NTlmYmJmNDllZWFhNTBiOGVmODdhODNlYThfMTUy_9423f552-1ac0-4a94-adb5-c44fdbe3b6af">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Domestic revenue, which we define as revenue that was attributable to customers based within the U.S., was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top:6pt"&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="9" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;Three Months Ended&lt;br/&gt;March 31,&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:0 1pt"/&gt;&lt;td colspan="3" style="border-top:1pt solid #000;padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;2022&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;Domestic revenue&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;84&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;84&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;td colspan="3" style="display:none"/&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</us-gaap:ScheduleOfProductInformationTableTextBlock>
    <us-gaap:ConcentrationRiskPercentage1
      contextRef="i09c91f829fc14da1b95accd9d3986fac_D20230101-20230331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RhYmxlOjNiZjI0NTUyZTJlMjQ0OGE5NDMzNTc5MzljN2Q1ZmY2L3RhYmxlcmFuZ2U6M2JmMjQ1NTJlMmUyNDQ4YTk0MzM1NzkzOWM3ZDVmZjZfMi0xLTEtMS0xMDAwMzY_af5b410a-daf4-411c-836b-a97372634fbe"
      unitRef="number">0.84</us-gaap:ConcentrationRiskPercentage1>
    <us-gaap:ConcentrationRiskPercentage1
      contextRef="ibdb411029c074e9ea4c1c3c2e805eced_D20220101-20220331"
      decimals="2"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RhYmxlOjNiZjI0NTUyZTJlMjQ0OGE5NDMzNTc5MzljN2Q1ZmY2L3RhYmxlcmFuZ2U6M2JmMjQ1NTJlMmUyNDQ4YTk0MzM1NzkzOWM3ZDVmZjZfMi0zLTEtMS0xMDAwMzY_3ad12008-b2fa-48d2-9824-7f6a8ee2bf5b"
      unitRef="number">0.84</us-gaap:ConcentrationRiskPercentage1>
    <spsc:ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock
      contextRef="i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RleHRyZWdpb246NzQzNDA2NTlmYmJmNDllZWFhNTBiOGVmODdhODNlYThfMTU0_f3720269-c463-4c57-8fb6-5893284d1920">&lt;div style="margin-top:6pt;text-indent:36pt"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:120%"&gt;Property and equipment, net located at subsidiary and office locations outside of the U.S. was as follows:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;display:inline-table;margin-bottom:5pt;vertical-align:text-bottom;width:100.000%"&gt;&lt;tr&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:71.930%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.081%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:0.406%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;td style="width:1.0%"/&gt;&lt;td style="width:12.083%"/&gt;&lt;td style="width:0.1%"/&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#ffffff;padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;March 31,&lt;br/&gt;2023&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="padding:0 1pt"/&gt;&lt;td colspan="3" style="padding:2px 1pt;text-align:center;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:8pt;font-weight:700;line-height:100%"&gt;December 31, 2022&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:2px 1pt;text-align:left;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;International property and equipment&lt;/span&gt;&lt;/td&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;14&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;td colspan="3" style="background-color:#cceeff;padding:0 1pt"/&gt;&lt;td colspan="2" style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 0 2px 1pt;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;13&#160;&lt;/span&gt;&lt;/td&gt;&lt;td style="background-color:#cceeff;border-top:1pt solid #000;padding:2px 1pt 2px 0;text-align:right;vertical-align:bottom"&gt;&lt;span style="color:#000000;font-family:'Times New Roman',sans-serif;font-size:10pt;font-weight:400;line-height:100%"&gt;%&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</spsc:ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock>
    <us-gaap:ConcentrationRiskPercentage1
      contextRef="i62f046dcd2034c77b0a5beb5ec3cff59_D20230101-20230331"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RhYmxlOjJkOGUyOWYwMzM4YzQxNGNiMmYyZmEzNDU5M2NjOTFjL3RhYmxlcmFuZ2U6MmQ4ZTI5ZjAzMzhjNDE0Y2IyZjJmYTM0NTkzY2M5MWNfMS0xLTEtMS0xMDAwMzY_5092ec4b-70e1-462b-8593-366b1746a3ca"
      unitRef="number">0.14</us-gaap:ConcentrationRiskPercentage1>
    <us-gaap:ConcentrationRiskPercentage1
      contextRef="i6f4fecba0c8a4e1786a0301a0c8ea540_D20220101-20221231"
      decimals="3"
      id="id3VybDovL2RvY3MudjEvZG9jOjZkOWE4ZDFhYjFmNTQ1NDg4NWE5OGFhZjllNjA4NzIyL3NlYzo2ZDlhOGQxYWIxZjU0NTQ4ODVhOThhYWY5ZTYwODcyMl83Ni9mcmFnOjc0MzQwNjU5ZmJiZjQ5ZWVhYTUwYjhlZjg3YTgzZWE4L3RhYmxlOjJkOGUyOWYwMzM4YzQxNGNiMmYyZmEzNDU5M2NjOTFjL3RhYmxlcmFuZ2U6MmQ4ZTI5ZjAzMzhjNDE0Y2IyZjJmYTM0NTkzY2M5MWNfMS0zLTEtMS0xMDAwMzY_8a472481-2793-4a8f-a9ca-13ed5b3377d9"
      unitRef="number">0.13</us-gaap:ConcentrationRiskPercentage1>
</xbrl>
</XML>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>EXCEL
<SEQUENCE>78
<FILENAME>Financial_Report.xlsx
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
begin 644 Financial_Report.xlsx
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
M?.]OK-[V[X[OM;6ZZB\W2@+Y#@#?/VAM7VZZU]'#OQ^L_P=02P,$%     @
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
MUTVY[8U%#[99<?AD7_N!.#' ](P!Z0W(M0:T-Z"R@7/&P.X-;,F >&<,G-[
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
M<VAE970X+GAM;*U8;7,;MQ'^*QAF)B\S%-]D.QY;T@PE*ZF;I%;%N.E,IQ_
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
M'?9_.$K(-M>VYL6;,EZ5EL;C.Q,?<ZB!;3# _LH8OWL)"=J[\^(S4$L#!!0
M   ( "2"FE;LV%<]]P8  !D1   9    >&PO=V]R:W-H965T<R]S:&5E=#$P
M+GAM;+U836\CN1']*X0V6.P /?K^G+4-V)/L9@^#&7AF=PY!#E1W22*632HD
M6[+RZ_.*[&ZU;-E(+KE8W22K6/6JWB/;-T?K_O0[HB">2FW\;6\7PO[#8.#S
M'972]^V>#&8VUI4RX-5M!W[O2!;1J-2#\7 X'Y12F=[=31S[XNYN;!6T,O3%
M"5^5I72G!]+V>-L;]9J!1[7=!1X8W-WLY9:^4OA]_\7A;=!Z*51)QBMKA*/-
M;>]^].%ARNOC@C\4'7WG67 F:VO_Y)??BMO>D ,B37E@#Q(_!_I(6K,CA/&O
MVF>OW9(-N\^-]U]B[LAE+3U]M/J[*L+NMK?LB8(VLM+AT1[_3G4^,_:76^WC
M7W%,:Z>+GL@K'VQ9&R."4IGT*Y]J'#H&R^$K!N/:8!SC3AO%*/\J@[R[<?8H
M'*^&-WZ(J49K!*<,%^5K<)A5L MWCW0@4]'-(, 9#PWRVO A&8Y?,9R(3]:$
MG1=_,P45E_8#!-%&,FXB>1B_Z?"3='TQ&65B/!Q/WO W:3.;1'^3MS,3&V=+
M\1&Q.G0 T T[\3'B2D[\XW[MX_@_KP&0_$^O^V>V?/![F=-M#W3PY [4N_OQ
MA]%\^/,;T4_;Z*=O>7^K+O^5H?A.:$Z'CA>V<J!/'/4)C; #+%:#D,ILFSD!
M)$B6_H/XMG-$%^45/RD#*UMY:0K_+I:(_XS%(^65<QTWL/^ETANE-:@;Q%_$
M:#C*YO,EGI;3;#$9B7LC]2FHW(O1.)LLAF(TRL:KN?B,L)R89./Y1(RRV71X
MQ3G6+K+)<"16BVPV7XC/AMX'B,1YP3*.+[+Y>"Z^V2!UFQ]"&<^R90QE-)QE
MH]5$/#9FTE&$19:V0MAA)P-K#HN'CQ.YA1 !41G%Y$C1(J_;JI):GP2P$9JV
M\1FYJZ"!7+"9D!X&6O-O9P_XH*<]-L :>-*\5R8 -#WE.VFV7"/'J'O4!NVE
M<O+]#B9M[%=@BM'Z(.P&8\VLK]8^=VK/&=2=D-=,\"GC*BBM_IU:IE/%[%RS
M+&:92N6K_1ZI(E@$74H#$8\UWSM;5,"M+UH.QD1 DG9.*"^V9( GHX48[=9@
MYT*P4@N@+->:6&^QSA[(-35(+ [D2K&FK3*&$[,F3A<R4,J#XZ\AXXU*60#U
M@U0Z>@7<T5N=>U]\QO+&MT\2D4CS#-<.7%S]\SSR-S)4CK)N4J@A3T:@2V83
M!K&W- ;]DH \KY9,QXNX8EM(DY.^3)[!E(9!DYY;D<.=#'GU:@@,3O[''Y;C
MT>)G82PJ1GWQ3941I8U8HZ!X].(@G4*;K$_GW3@<?F\Q/NWI>8Q(FE2L/3*6
MQ8&C$PB'8\#().W/.W'$3076Q-OOR?$=@HJ^^!6R9%*E>-T5G-MB\):<L#4D
M3B0=[Z;)HP]!GYV$O$DTH6*BP9.-O0W.TQ.5\9EA 0ZB4#[7S"1ETDTF7@G6
MN*;4(? %IA-FRFRMU5;6=+%7&Z()M'^6HI:7+\6I0TM/X7VU%QMB\0'*)0*$
M1DA#4-DT?,G0OOB:3%IO7[LN@).'F*B-RF.L)/,=[V>:Z\^YTCM9-[D4"+Z(
M64L7#%/A6V2IL0;B5YDB\J7= +X />YNJ23,FK-^V OU: 0KYE:D&H#[!\5,
M1//Z@ FIN:P'J2MTZ2<>!C"7;F.)SVG4@9L*DXS3L_C/(,68&6[(< 59D! !
MJ(:*YX&A(WY3LPC'][;4C$V '9H+KR!, %5"V#85<QPME+.\'VJQ.=I*%S'!
M-7)G=AR5?Z$W6-@6H#+<PMQX\: @A_95II&ENJ6RYKCH=LH1!&ZV0ACH1IC*
M+0MPM4<R+7OK)/OBWD.G\UWVHN$<:2!2P,37/,-EEI+#.-U*<E+C4ZW#1QN)
MB%AV"BVF4I $H,OH#P12MH@=DE9TH8]8PR3>F$QXV4>Q T6M_OS)T"RMCTZ^
MQ*MP:B1F;UTL8OW:9M#P4RL)S6.#F"ZW"F#N0/&_W78>I&9AR+IGSZ;)&+>*
M:;9:K=+#=+82OYF#!0F*"^RGV7@VPM_AD*\?+<C=)3]-LM5\\HY_9^/IN_.V
MA,)<;#C+QLM%O?-D&;'CUG1\=.JD89LS*B\Z:4W=.M<JWE:8:\&2F;K\]?4[
M5H:GD/0Y7HNT]!ZDX58""[E+^1)Q!#6H;NHDN 5=,X#ZO*^-( L7NFA?2.HK
M\RW_:[D%M3?@7#H=+L0I<.NBD/R<$]J)R<Y-E5JQ952GK]-5YG(OY:^>4\^Y
M5!]YT:YS0ZF5!V?C]___L5:^"F'G(/:L>DFR8GP67%8<4U&YVA>+][/T^]<^
MA0:=SU5P?AL_RKE:N!6G+]=VM/WNOT^?N^?EZ9\&^&A$%!Y[;6 Z["]FO20R
MS4NP^_CQN[8! A,?=X3KH.,%F-]8&YH7WJ#];\C=?P!02P,$%     @ )(*:
M5C$(!8Y^ @  J 4  !D   !X;"]W;W)K<VAE971S+W-H965T,3$N>&ULC53;
M;MLP#/T5PAN&%C#B:YTT2PPDZ8;VH4#1[O(P[$&QZ5BH+7F27+?[^DERXJ9=
M&O3%)BF>PT/+Y*SCXEZ6B H>ZXK)N5,JU4P]3V8EUD2.>(-,GQ1<U$1I5VP\
MV0@DN075E1?Z?N+5A#(GG=G8C4AGO%4597@C0+9U3<33$BO>S9W V05NZ:94
M)N"ELX9L\ [5]^9&:,\;6'):(Y.4,Q!8S)U%,%W&)M\F_*#8R3T;3"=KSN^-
M<Y7/'=\(P@HS91B(?CW@"JO*$&D9?[:<SE#2 /?M'?M7V[ON94TDKGCUD^:J
MG#L3!W(L2%NI6]Y=XK:?,\.7\4K:)W1];I@XD+52\7H+U@IJROHW>=Q^ASW
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
M=]M-NUG;Y$_F[:BDMJ ',""P)-?X8M@/0+?CIQ6L:GS++Y6E >*/%4ULU,Z
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
M/Q>%SDCVO!'72!>F83FN NH4@_H>@_5//\33Z)=77,@&%[+7T/][ROX'''Q
M*GD#GRJ$7,E&U5Y.E2#< > #W0XT[I%"Q@R42E";FPM2T(AGQ0!O>0VV4JTA
M*^:=3ZC[)/!'@YHYFSUHKHR%-S!;S-UWLH#/3'.V%7AZODCF))&21#R:)5,_
M3B8)W+5-(]"YPP3DS%10$B/@=7>!=7>)8)8(6=4!&M@3]>]EOW$V&L8+4M?
MI&I=A'B=B];I>34$28:HK!RO8_0$><4%MR[0QR ,I(F05A+4>7B,=S7)9GZ,
M%I-SE[=,L#I'Z*[T%]S^!O)I *CM\LKWW37F*+>H#TV8P!=_TV'Q,[LGE!T2
ML+O]C_FSJ"6DXSD\(M.&9HM^]HUF0?WFX@7$!B$;1_!C_[VT)QQ<L$>@6@UE
M:UUSTD7(92LI[(]=X;:4(_V,6T_+\DD6;SUSKUIV*7T#Z6A.L:5%!MDHF\5N
M.J%I-/?3*0G,IC[W,Y>'Z10^*1?XGMI.*V..Q"A'LU%&M?H!#=GGLFFMKPH*
M$E(9OXU':9R^ZS&>.'!6((0T'<7Q!&Y:BHL[/>G<YZZ5\.15D*AW_NTSX />
M/1##[O"\7G:ORE&\>YLI%3M>&V)5DFHTGDT"T-U[URVL:OP;LU667BP_K>@7
M ;43H/-2*7M8. /#3\?Z7U!+ P04    "  D@II6C7-=#H$#  #D!P  &0
M 'AL+W=O<FMS:&5E=',O<VAE970Q-RYX;6R-5=MNVS@0_96!&F1W :\ETW;B
M)+8!ITW1+=!LD/3R4/2!EL86$8E4>8F3?OT.25N1L8G1%XF7.6?.7$A.-TK?
MFQ+1PF-=23-+2FN;\S0U>8DU-WW5H*2=E=(UMS35Z]0T&GD10'65LBP[26LN
M9#*?AK4;/9\J9RLA\4:#<77-]=,E5FHS2P;);N%6K$OK%]+YM.%KO$/[I;G1
M-$M;ED+4*(U0$C2N9LEB<'XY\O;!X*O C>F,P4>R5.K>3_XI9DGF!6&%N?4,
MG'X/^!:KRA.1C)];SJ1UZ8'=\8[]?8B=8EER@V]5]4T4MIPEDP0*7'%7V5NU
M^8#;>,:>+U>5"5_81%M&'G-GK*JW8)K70L8_?]SFH0.89*\ V!; @N[H**A\
MQRV?3[7:@/;6Q.8'(=2 )G%"^J+<64V[@G!V?F=5?E^JJD!M_H"KGT[8IVEJ
MB=GOI_F6Y3*RL%=8AO!)25L:N)(%%OOXE!2ULMA.UB4[2/B)ZSX,!SU@&1L>
MX!NV80X#W_ 5OA@8?%\LC=74"3]>BC%2C%ZF\*?CW#0\QUE"[6]0/V R/WXS
M.,DN#@@<M0)'A]A_NPX'65[6V*4^?C-A@].+K0.X*[E&N,7&Z;RDWH8;K=::
MUP;^==3MBNL"U H*H>D0*6V C( [6RHM?F$!-?6^:"H$J>3?N9*YTQJEA69'
M8Q6=W)9=$6FNZII.H_&B^O .+1>5\4YLB<\X+HMX8+U*VM'HJ+,T#;5RZQ*H
M/_*R;1#8D &0M)6JZ)8QY_"GD&2KG"$B\Q=<K588CC_0(4&X>FR$YN%6"/.8
MAJ^\<@B+Y^CHRNOFIFOUO%S %^G\[YC7S46DIMG_,AMQ>YX>*'2^I.QY1^^=
M=?L(BFRP*PA<JP>LEY2!L+IP:[H:_)C!..ME60:CL][9&8,)7*>+N+&#=HT_
MNNK)CT8[& LHCSF"T2DM3> S%<($G9W2M<58/D&#6J@"-KX7.CG_7&K$O8M@
MOPP]P,<<&QO)8XV):NN+U\I)2[4*!0UBKUV(F'ICB]"=K(=.9A<P8(/>>#2*
MF=TWR16%?=1:'L%@W&/LA!*/FAX<ZC:18Y#0144Y>S V[K-3>.F4IYV;MT:]
M#N^+(<\42[R$V]7V"5O$F_O9/+Y_U-)K(0U4N")HUC\=)Z#CFQ(G5C7A'E\J
M2Z]"&);T#*/V!K2_4LKN)MY!^[#/_P-02P,$%     @ )(*:5LDD$2L&"0
M?A8  !D   !X;"]W;W)K<VAE971S+W-H965T,3@N>&ULG5AK;]LX%OTKA-LI
M$D"1]?*K>0!.V]D=8 <-DFWGPV(_,!9M$Y%$E:3B>'_]GDM*BMP\VLX'RY)(
M7M['N>=>ZFRG])W9"F'90UE4YGRTM;9^/QZ;U5:4W(2J%A5&UDJ7W.)1;\:F
MUH+G;E%9C),HFHY++JO1Q9E[=Z4OSE1C"UF)*\U,4Y9<[R]%H7;GHWC4O;B6
MFZVE%^.+LYIOQ(VP7^HKC:=Q+R67I:B,5!738GT^6L;O+S.:[R9\E6)G!O>,
M++E5ZHX>_LC/1Q$I) JQLB2!X^]>?!!%08*@QK=6YJC?DA8.[SOIOSO;8<LM
M-^*#*OZ2N=V>C^8CEHLU;PI[K7;_%*T]$Y*W4H5Q5[;S<[-TQ%:-L:IL%T.#
M4E;^GS^T?A@LF$<O+$C:!8G3VV_DM/S(+;\XTVK'-,V&-+IQIKK54$Y6%)0;
MJS$JL<Y>W%BUNCNYA%TY^Z!*Q-IP<M?9V$(ZS1FO6DF77E+R@J24_:DJNS7L
M4Y6+_'#]&%KUJB6=:I?)JP+_Y#ID:1RP)$K25^2EO:FIDY>^9.J6:]&:>L7W
M0)9E2ZUYM1'N_C_+6V,U8/+?YXSWLK/G95/JO#<U7XGS$7+#"'TO1A?OWL33
MZ/05S;->\^PUZ;\4I+\GB7UN-!/?&FGW;#5\7Q>\,JS6ZE[F@H$$F-T*MH'7
M+%-K)JL57(>\8KS*6:6J;PTOY%I"O*&MF*I)C D8-VR'W*-_!1':CY_<.E7X
MCNO<D+2BR66U8;70CG @GAF*&VLJ:0T[>O=FGB31Z=7-%^-NX]/C .2 P,F5
M[7=MY76SKV^6K\T^%'U]()K,0I(+K5^8_O%@NE5,E'6A]D+ 9OCCI'MDN=1@
M(J6-D^E]L()K0!]P)KRS5;V?"4!R)0S):TS(_H)_"_,XSJM^FU:INM&K+7SI
M M8K]^GFZJI3SFV;1?'1W3$(Q*ZV3ME";N1M@65<6[F2-:GB]H.R:E/)_XF#
M0!U@0SS0O6!^""\\+')NA8\ 6W.IV3TO&A&R?V^EP7IC&?Y[Z5AW+SRH$'.I
M<H>QW5:2?GC9F^D6 : 4!_O$4X .U($'D,P]2KT.!P]#7/G] EHG:NM6M1;1
M5@5L!!"QE186NQ)%G/3NZH,,V=RR+4<&5,JR#5*AHOU@=Z\N!J!BT%KUG?4H
M3&3,B09[DR<QW'O$+^P<4^.J#Q4*V=(R\"3$=D3) EJ*A-G1)4[".<I&45"\
M7"(!?O=<%IRL()-]S!IPMF:\)K="JQ>9(&0W/T+##AG.BT*M.&68=-X@H.<T
MFCO(JT+FW.<?_L@00V1"XK384L6_IXCB61!?K!7$[<Q[0$@#"<,RPX[<!JHQ
M0+<Y]A[ )0&[&<=06B B#<Q^RY)@$J7N/YXMV&>XU<>XC_H-+X1/3S0H=\(-
M)D%&(H,H3=@UF-TYV[/"/5J:VI6..)C-9KAFLXS]0U007+@Y/$?)EE15'$=.
M@@C3TB!-(Z@18]6<;A9!%$]^[-C;?1LLNZ\%P=JENG/WW_31S9"BH4BV('4R
MZ$C\"D47R12F3Q<+1JS(ID$T35@63-,Y(TYE[WA9GS*B0!9'<_<CRF&3^8)-
MX(N6;CQ%>=*91A,VB1=/[5\Z#!R"N<<R+'P[30=8QM2F&N31#TG*(UR]5N8&
M&4JK7(5 NMV*9Q)6 B&RV#.*+35^)U1IA_G+D8 T0-4-SVAPNSR&ZDDX97M
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
M=D\X]+YIZD'>:2/K8S QJ'G3O]GW8Q]& 5GXBX#X&! [WGTBQ_*6&;9>*GD
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
M-2$:5=@5TPA'T$O\7A*2D([\T2B%"U75#9F\TH$D]/MAY)8D"N$K4F>62N3
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
M&PR.EYJ_-SX(5&LW)&EPYZ.>)-JW[1QV48\?N^WU$$=I7_-"$X,5F?;/8FJ
MJAZ,Z@<C2S>,+*6AT<8M,YHE4=D-]'TEI=D^6(!V.IW_!U!+ P04    "  D
M@II6M>Z[2($#  "]!P  &0   'AL+W=O<FMS:&5E=',O<VAE970S,BYX;6Q]
M5=MNVS@0_96!&F1;P&O)LIPXB6W :5-T%V@V2-+NPV(?:&EL$9%(E9<XV:_?
M(2DK,N#X1>)ESIDSG!ERMI7J29>(!E[J2NAY5!K37,:QSDNLF1[*!@7MK*6J
MF:&IVL2Z4<@*#ZJK.$V2L[AF7$2+F5^[4XN9M*;B N\4:%O73+U>8R6W\V@4
M[1;N^:8T;B%>S!JVP0<T/YH[1;.X8REXC4)S*4#A>AXM1Y?7F;/W!C\Y;G5O
M#"Z2E91/;O)',8\2)P@KS(UC8/1[QL]858Z(9/QJ.:/.I0/VQSOVKSYVBF7%
M-'Z6U=^\,.4\FD90X)K9RMS+[3=LXYDXOEQ6VG]A&VS'202YU4;6+9@4U%R$
M/WMISZ$'F+X'2%M ZG4'1U[E%V;88J;D%I2S)C8W\*%Z-(GCPB7EP2C:Y80S
MBP<C\Z=25@4J_1O<_++<O,+'1[:J4'^:Q89<.,,X;^FN UWZ#MT8ODMA2@TW
MHL!B'Q^3M$Y?NM-WG1XE_,[4$,:C :1).C["-^[B'7N^\3M\;83_+%?:*"J)
M?P_%&"BRPQ2N32YUPW*<1]0'&M4S1HO3#Z.SY.J(P*P3F!UC#PF!>VRLRDLJ
M-UBZNB7-AX0>I3HL]"]+92R9*D"NH>"*ND,J#>0*F#6E5/P_+*"FHN9-A2"D
M^#V7(K=*H3#0*+E1K-9@)+5DIU$2:2[KFMI,._U#^(*&\4H[)Z;$-QP31>A$
MEP7:46BI4A0-E;2;$BC?>=DE'+9D "1M+2NZ/O0E?.2";*751*0_P<UZC;ZO
M@:H?X>:EX8KY=O?SAY(1_B>K+)WC6W1TE_5/N&_UMES #V'=[Y35S56@IEDP
M[J$#;L_3,X7N.L@[^FJ-W4=09".X"R<"M_(9ZQ6=@%]=V@WUO!NG,$D&29)
M=C&XN$AA"K?Q,FSLH'WC/VWUZD;9#I9ZE,.<0'9.2U-XI$1HK[.7NBX9JU=H
M4'%9P-;50N_,'TN%N-?8^VD8 +[DV)A 'G),5*TO5DLK#.7*)]2+O;4^8JJ-
M%J%ZIW[Z89J.TBL8I:/!),O"R>Z;Y)+"/NDL3V T&:3I&1T\*GI)J-IXCEY"
M'Q7D[,'2R3 ]AT-=&_>NU!K5QC\<FCQ3+.%V[5:[MVD9KN0W\_"P44EON-!0
MX9J@R?!\$H$*CT68&-GX"WHE#5WW?EC2^XK*&=#^6DJSFS@'W8N]^!]02P,$
M%     @ )(*:5BD*NI;]!0  M0\  !D   !X;"]W;W)K<VAE971S+W-H965T
M,S,N>&ULG5?;;MLX$/V5@=,6":#*NE_2)("3IKL+;! C;M.'Q3[0%FT+D40M
M2<?)W^\,*3OVUE':?; L\3+7,V?(L[60#VK)N8:GNFK4^6"I=7LZ'*K9DM=,
MN:+E#<[,A:R9QD^Y&*I6<E:8374U##PO&=:L; 879V9L+"_.Q$I79</'$M2J
MKIE\ON256)\/_,%FX*Y<+#4-#"_.6K;@$ZZ_M6.)7\.ME**L>:-*T8#D\_/!
MR#^]S&F]67!?\K7:>0?R9"K$ WW\49P//#*(5WRF20+#OT=^Q:N*!*$9_W0R
M!UN5M''W?2/]B_$=?9DRQ:]$];TL]/)\D V@X'.VJO2=6/_..W]BDC<3E3)/
M6'=KO0',5DJ+NMN,%M1E8__94Q>'G]D0=!L"8[=59*S\S#2[.)-B#9)6HS1Z
M,:Z:W6A<V5!2)EKB;(G[],5$B]G#QTOTJX K46.N%3/A.O[*IA57)V=#C6IH
M\7#6B;RT(H-71(9P(QJ]5'#=%+S8WS]$\[8V!AL;+X->@3=,NA#Z#@1>$/;(
M"[<^AT9>^)K/2R9YY_.8/2/$-(RD9,V"F_>_1E.E)>+E[T/.6]G18=E40Z>J
M93-^/L B45P^\L'%AR,_\3[U6!YM+8_ZI+^>K>LG>N>'[.V5>-A>JV9JU,QV
MU7"K!M9, :LJ,6,:EY0-Z"7'E9COQNYIE*C*PLPJC7\45P5B;L1)OJ2J?N2X
M$[\YH+2Y0'%K=0I?EY+S/03!L5$@5HHUA3HQ**!'@"%0FH1*_LB;%5?P#@(G
M]D+S[Z<YW+9<HN7-8F.Y@@E#5 -*PBJ2#]Q,!DY$(ATO#. .@\#D;&F6%"BX
M$JU!A>^D:8K/*(W@-]Z@X,JL806694F (7Z!V/%P6>B$H8=F^+@KHY?<\?P8
MW@SL]!D6"$0-^KGE("2T%6MLN/]GC(Q*$"VIH0!%.9D3H8WCR3>%AN9!@JXG
M>0YW-) X7A) Y"1AA@,C!1]8W7Z"SS3G>YGY74_&8XBS'&*,1>3YQP\GF&;2
M@S2)H4N\&&(__]'_GA*(MR40OUT"F%@3MA%Q>JF?#^&^5\QAW-^N9.>'C9?M
M&2C_9S)PVX7X^.@$OIMF@(.C1\3)@L/M2F,=- 6BS8$I7Y1-0\!#[")"2U%
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
MA-L8YAW<LH5+7H%+X8N2MC1P*PLLCNU#HM;S2U[X+9-!P"],GT$:CR")DG0
M+^W]33U>^@K>+=.2RYTY\/;[8F.L)GG\..5O"Y>=AG,I<V5JEN,LH)PPJ)\P
MF/_^6SR)_AP@F_5DLR'T^;6J:B516@-,%N"&C65>S6H+2V9X[A=NN&@L%G#J
M,D_Y-'CJ:9\>2H3\F$Y^3&?3TRDZ.I+H\)9.372,C_8>J6$&MDK0@V"NX*'4
MB$>R@?=<@BU58PC-C "?<ZSM 0:K5$,L/GA1N":!NZ9"S:S2/@C=J>\@'H^2
MBTO724:3*(4;E(JRR&_\YC.6CF-/9+KS_E7DBS_# +U@QA(!4LNH<RZ=C++D
MW'WB= )_U<YU U9!W>B\I+>AA[ J?X0T.H<LOH35^BMY<=^U"VK]I=$8LB2&
M+,W>Q.4EO.GY*!Z/'9M+<O'N5+!;B;R#Z"Q+_"<=]V+QLW$[F\& 6L>]6L>#
M:EU3P2@:@4X,"VGY'YXHO;E.N,Z9=>O,[7,N&G?-6ZTJN&8B;T2OHK=*>9#2
MZU*63;4A6#KP(+10*TOJYDS\)_RV9+85+AYQMRXICOD/:I\Y*/S9Y<!1B/:T
M]I:L.-3^<; [SG%T0>J/3UYL>% O*&UVOBH:<IJRJBT=_6Q?>!=MO?EW>UNU
MZ7W><4H"@5LRC<[.Z4)T6PG;@56UKSX;9:F6^6Y)/P^HW09:WRH*>C=P!_2_
M(_-?4$L#!!0    ( "2"FE;Y137 [ (  ,(&   9    >&PO=V]R:W-H965T
M<R]S:&5E=#,V+GAM;'U5WV_:,!#^5TZ9-FT2(A"@JQ@@ >VV/G1#I=T>ICV8
MY$*L)G9J7TK[W^_LA(QNE)<DMN\^?_?=CTQVVMS;#)'@J<B5G08943D.0QMG
M6 C;U24J/DFU*03QTFQ#6QH4B7<J\C#J]<["0D@5S"9^;V5F$UU1+A6N#-BJ
M*(1Y7F"N=].@'^PW;N0V([<1SB:EV.(:Z:Y<&5Z%+4HB"U16:@4&TVDP[X\7
M(V?O#7Y(W-F#;W"1;+2^=XNK9!KT'"',,2:'(/CUB$O,<P?$-!X:S*"]TCD>
M?N_1/_O8.9:-L+C4^4^94#8-S@-(,!553C=Z]Q6;>#S!6.?6/V%7VXX& <25
M)5TTSLR@D*I^BZ=&AP.'\]XK#E'C$'G>]46>Y84@,9L8O0/CK!G-??A0O3>3
MD\HE94V&3R7[T>P+ZJT1929CN%)UCIU8[V_%)D?[81(27^),P[@!7-2 T2N
M [C6BC(+ERK!Y*5_R.1:AM&>X2(Z"7@M3!<&_0Y$O6AP F_01CSP>(-7\&[P
M$56%D!I=P)*Y&JX,5ITR6'J]T<"O^<;Z_=_'!*CQA\?Q71>-;2EBG ;<)A;-
M(P:S=V_Z9[U/)]@/6_;#4^BS==T\H%.X8*J6.'%-1,>HG@9K$4R-T($=%T(&
M.W2%S<8@[/X,*!,L$V\((B,W%;D* =)-E:*QOCT2+Z54;(]PUUUW.[63A53G
M/ +L&&XS@_BB3'QNW2."?SG!^1#>^L<)]4:M>J/3ZO%,2RJF_3V%%9H8%?'D
M\2O#<\[0,\Q5 I</E2QY\A!\0SHFZ^E;6BS!6+C'ZH#B&9OK6! 'S%K::F-E
M(ETVG:%.4QEC;< M:(%'*)^C2_5>R_^DY.;@?+GNN, 8BPW7;M,J$?<SH5$>
M3.10'B4%?:=N?W!<W?!@KG""MWYZ6HAUI:@>,>UN.Z#G]5SZ:UY/=R:ZE1Q4
MCBF[]KH?64)33\QZ0;KT4VJCB:O)?V;\DT'C#/@\U9KV"W=!^]N:_0%02P,$
M%     @ )(*:5ODA(T>. P  <A   !D   !X;"]W;W)K<VAE971S+W-H965T
M,S<N>&ULK9A=;]LV%(;_RH%6#"VP61^6G3BS#<36/E(L6]"LV\6P"T8ZMKE*
MHDI2=O+O>R@IBM7*6HWQ)A8IOB]Y'A$\/)D?A/R@=H@:'K,T5PMGIW5QY;HJ
MWF'&U$@4F-.;C9 9T]246U<5$EE2B;+4#3QOZF:,Y\YR7O7=R>5<E#KE.=Y)
M4&66,?FTPE0<%H[O/'>\X]N=-AWN<EZP+=ZC?E_<26JYK4O",\P5%SE(W"R<
M:_\J\@,CJ$;\R?&@CI[!A/(@Q ?3N$D6CF=6A"G&VE@P^MGC&M/4.-$Z/C:F
M3CNG$1X_/[O_5 5/P3PPA6N1_L43O5LXEPXDN&%EJM^)PR_8!#0Q?K%(5?47
M#O78*0V.2Z5%UHAI!1G/ZU_VV( X$OCA"4'0"(*O%8P;P?ASP>2$(&P$846F
M#J7B$#'-EG,I#B#-:'(S#Q7,2DWA\]Q\]WLMZ2TGG5ZN2D4]2L%U_+'DBIN/
MH>![^(U)R<PG@=<1:L93]89ZW]]'\/K5&W@%/(=;GJ9F]-S5M!!CY\;-I%$]
M:7!BTC'<BESO%/R8)YAT]2X%T$81/$>Q"@8-?X_U"+SP.PB\(.A9SWI8_K9,
M1^#/3LJC8?DMDR,8^Y5\/!#-N/TFX\HO/.'W\UID&<H8X2:/>Y:S&I2;D^)*
M%2S&A4-'@4*Y1V?Y[3?^U/NA#XU-L\B260=;V&(+*_?Q&5L9_OZ5^N!&8Z;^
MZ4,9VD1ITRRR9-9!.6E13@9WX%TIXQV=IE!('F,?MT']N=QJLUEE9A+5?AE.
M1O[<W1_SL#1CA\>TY3$=Y'&+3)42*=]I*%!RD?0Q&?0XE\GP@GQX0B;[MHVE
M170P7;28+@97%6%,=P_:-I0=BLX6@J1$T *R+T "2_ZE-&=Z^I@.3G@N4YMF
MT<47F]8?3=L]V^%WV?*[_&I^J#2G:PTFL&<IP1,;<YU!*:F'Y['(B"=[!*84
MZKX4O!J<ZEQR-LVBRQYRDWYRLY;<;)#<3:Y1_B%9@G#_I,QI;W+GJ(_+H-&Y
M7&R:19;,.@!][^4BZ-E/GXVG)9I6W2);;EV>1Q=K_W_FT,:@D_=FG^>]]? T
M9T.QY-:%$KQ "2PDTO\P.9G\UL/"LUE9<JM9N4=%&MWNMU6QJR 69:[K>JWM
M;0OJZZJ,=%^&U]4X%1Q;3F5:BAN2>J,+NAO)NL"M&UH45<GW(#05D-7C#NEP
ME&8 O=\(H9\;9H+VWPS+3U!+ P04    "  D@II6IC>/;JX#  "/$@  &0
M 'AL+W=O<FMS:&5E=',O<VAE970S."YX;6RM6&N/FS@4_2L66U6MM!TP!$AF
MDTCSV*J5MNIHIH\/U7[PP$U !3NU3=*1]L>O>81'0MQ)Y2\)F'L.]UP?S,7S
M'>/?10(@T<\\HV)A)5)N+FU;1 GD1%RP#5!U9<5X3J0ZY6M;;#B0N +EF>TZ
M3F#G)*76<EZ-W?'EG!4R2RG<<22*/"?\Z1HRMEM8V-H/W*?K1)8#]G*^(6MX
M /EY<\?5F=VRQ&D.5*2,(@ZKA76%+V_PK 14$5]2V(G>,2JE/#+VO3QY'R\L
MI\P(,HAD24'4WQ9N(,M*)I7'CX;4:N]9 OO'>_:WE7@EYI$(N&'9US26R<*:
M6BB&%2DR><]V[Z 1Y)=\$<M$]8MV3:QCH:@0DN4-6&60I[3^)S^;0O0 BF<<
MX#8 ]Q P.0'P&H!7":TSJV3=$DF6<\YVB)?1BJT\J&I3H96:E);3^""YNIHJ
MG%S>PQ9H >@->J@G$K$5:@8%>GS:'R,% I*C5[<@29J]5H#/#[?HU8O7Z 5*
M*?J4L$(0&HNY+55:);D=-2E<URFX)U+PT =&92+0WS2&>(BWE9Q6D[O7=.UJ
M"3\0?H$\_"=R'=<;R>?F^7!7DX[7EMBK^+Q?E/@>(K:F:>7>;_^H(/1>0B[^
M':M8S3@99RP?[4NQ(1$L+/7L"N!;L)8O_\"!\]>87$-D _&35OQ$Q[X7/VJ+
M&AE4R'*YV2ZQZT^#Z=S>]M,?"7-\///:L$%B?IN8_XO$HH+SE*[58G0Z12W'
MN?-@B&P@-VCE!L9-&)@4;XAL(#YLQ8>_;<(:Z??=A4//P0<F/ Z;A7X0CGMP
MVN8UU>;UD<(;J5Z*6@MJ*<Z=!4-D [6S5NW,N 5G)L4;(AN(QT[WHG5^VX0-
MM&^O:=]==?XC46'@!N,>Q+T. &L3>UMDJS3+5&\FT7_H>>NBGO+<B3'%-BR
MVQ7 -6[,AM)4 0RQ#0O0-2A8VP+HK>D=+Y .#H[>TB-QTTGHX1/N[/H'K&\@
MKBC)GF0:B>=[4TMX]M088AO*[[H4[)OWIM&NQ13;L !=WX*UG8'>F\&Q-UTO
M= ZM.1*&W=FIA;/K*K"^K?@H$^#/MZ66[.Q9,<0VE-XU+GAJWI9&.QE3;,,"
M=+T,UG8+>EO.CKY8/#?P#EUY'(7]B7-@2KOW:9\#7U<['@)%K*"R_B)N1]M=
ME:MJ+^%@_+K<;:FV##J:>JM&?>^N4RI0!BM%Z5R$ZD'A]>Y'?2+9IMI >&12
MLKPZ3(#$P,L =7W%F-R?E#=H]Z"6_P-02P,$%     @ )(*:5B?NFJ[Q @
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
M6 '%:[RKU7:2@ZWD27"4\ Z+*Q3Z%RCP@K!'S_1T>'!$3MAE,+1\X6D9_/'
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
M'0P>;F%.-NQQ)X*#P/$.#6L*\SW\B&&[A@4/=RP?DH1&T!&M:"<ESZDLS8W
M,.#)3VLDM+[\K@O"P5,:=]2F:"RT?BFZM@@/MANG&S<T[13PD7$-8<YL>FA<
M>V^?JS\RJ,WD+<T%2B%1><YYJ'S"ZWU[/9"LJ+:^-TRJC71UN $2 ]<!ZGK"
MF'P8Z-UT^_5D^1-02P,$%     @ )(*:5@0LY2?+ @  E@8  !D   !X;"]W
M;W)K<VAE971S+W-H965T-#4N>&ULC97?;YLP$,?_%8M54RNUA9 ?I%V"E*3K
MUH=.5;)N#],>'+@$J\9FM@GM?[^S25BV4;87P/;=UY^S[XY))=63S@ ,><ZY
MT%,O,Z:X]GV=9)!3?2D+$+BRD2JG!H=JZ^M" 4V=4\[], A&?DZ9\.*)FWM0
M\426AC,!#XKH,L^I>ID#E]74ZWF'B27;9L9.^/&DH%M8@7DL'A2._$8E93D(
MS:0@"C93;]:[GD?6WAE\85#IHV]B(UE+^60'=^G4"RP0<$B,5:#XVL$".+="
MB/%CK^DU6UK'X^^#^JV+'6-94PT+R;^RU&13;^R1%#:TY&8IJX^PCV=H]1+)
MM7N2:F\;>"0IM9'YWAD)<B;J-WW>G\.10QB^XA#N'4+'76_D*&^HH?%$R8HH
M:XUJ]L.%ZKP1C@E[*2NC<)6AGXD_2)E6C'-"14KNA*%BR]8<R$QK,/J<?,*\
MN" KS(6TQ&FY(8L,;4 3)MSB@BKUPL26S')9"F,M&LW3&S"4\3-R8JT_9[+4
MN(V>^ ;)[?Y^LJ><UY3A*Y1]<B^%R31Y+U)(?_?W,>(F[/ 0]CSL%+RGZI+T
M>^<D#,(^>5S=D-.3LP[=?G.<?:?;_]=Q?EM*?&+B5%2EW]LBKH4&[4*V%J]U
M01.8>EAL&M0.O/CMF]XH>->!.6@P!UWJ\9QR*A(X)VO8,B'L]>&]%:"83-M8
M:[614[-EOHM[5U$X'DS\70O%L*$8=E+@Z6#1"$QSI4 D+\0H*C2GMES;*&JU
MX1'%1=1K1Q@U"*-.A"7D0'6I\(6YNU$R)X62.V9[#N6D*%628<UC\TAL=MN#
MHB[/V_A&?_'UHO&X'3!J */_NRG ^NR\HZCECJZ"X,\#\H]Z10YJZSJB)BZ\
MNFTTLTW3G=6]YI=YW;&QB#![-.&P0=?@,L+05=T%ZX&1A>L\:VFPC[G/#'\<
MH*P!KF^D-(>!W:#Y%<4_ 5!+ P04    "  D@II6"M><\($$   :%   &0
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
M2TW%#RMJ^ZA= .VOE;*'B>LLPQ])_A-02P,$%     @ )(*:5K2W XK; @
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
MO"?C@'(@=Y!FW M0)7(;T82\O0))PT@<XXS[\15Y^_J8O"9A0KX&+!,T\<7
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
M/CPF/P\["1^8ZD,TN( P"*,.OJ@I9N3XHK>*F3.%O>7_Q9PIJLP*Z6,VL#S
M:=R"'=SR;,]4"C_NB1+N#!;Z9UN!*OUAN[Z]P%=ZPQ*<>G1#-:H=>O'[=X-1
M\*DCNV&3W;"+/;[G&<(9+^& 3.GS-GO=!%&%A$$ 1760X1!2=M =YBX;<Y>=
MW,]24*D%-X<V7Q5V4'T'MD_MXJ ??1Q/_%V+YJC1''5JWO =3[%,X<!1I&VZ
M%7X0G.JV:XX;S7&GYB/7ZUZF$('35:-#-J#H0K:)C]N2#H;A/P;\D^91H%JY
M%JDAD=O25'VD66VZ\*QJ/G_"JQ9.]VG%Z<H+S @:],=4=U6UQ6IBY,:UHJ4T
MU-C<,*<_"2H;0/N9E.8XL0+-ORG^#5!+ P04    "  D@II6%Y1=U$T#   A
M"P  &0   'AL+W=O<FMS:&5E=',O<VAE970U.2YX;6RUEE%/VS 0@/_**4,3
M2-#$2=NTK(U$86Q[F(:H8,^FN;86B=W9;KM)^_&SG9!V-(F :2])[/CNOCO?
MV3?:"OFHEH@:?N895V-OJ?7JW/?5;(DY51VQ0F[^S(7,J39#N?#52B)-G5">
M^6$0]/V<,NXE(S=W(Y.16.N,<;R1H-9Y3N6O"69B._:(]S1QRQ9+;2?\9+2B
M"YRBOEO=2#/R*RTIRY$K)CA(G(^]"W(^(5TKX%;<,]RJO6^PKCP(\6@'7]*Q
M%U@BS'"FK0IJ7AN\Q"RSF@S'CU*I5]FT@OO?3]JOG?/&F0>J\%)DWUFJEV-O
MX$&*<[K.]*W8?L;2H9[5-Q.9<D_8EFL##V9KI45>"AN"G/'B37^6@=@3B,(&
M@; 4"!UW8<A17E%-DY$46Y!VM=%F/YRK3MK ,6YW9:JE^<N,G$ZF6LP>SR;&
MKQ0N16XV6U$7KC.XF=Z=PFWQN#@%RE.XFM[!\15JRK*3QA4C7QLPJ]Z?E1"3
M B)L@(C@J^!ZJ> C3S']6]XW#E5>A4]>3<)6A5^I[$!$3B$,P@B.P >UI!)5
M^6JQ$%5QBYR%J,'"NSHO"Y%NO8BMKW.UHC,<>Z: %,H->LG[=Z0??&@!ZE9
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
M:&5E=',O<VAE970V-2YX;6RU5MN.TS 0_14K2 @D:*[;5J6-M&VXK,2*55?
M ^+!FTZ3J(D=;+==_IZQDX:V2J-=%%X2>SSG>.;X-M,]%QN9 BCR6.1,SJQ4
MJ7)BVS).H:!RP$M@.++FHJ *NR*Q92F K@RHR&W/<89V03-FA5-CNQ/AE&]5
MGC&X$T1NBX**WW/(^7YFN=;!L,R25&F#'4Y+FL ]J*_EG<">W;"LL@*8S#@C
M M8SZ]J=1&/M;QR^9;"71VVB,WG@?*,[-ZN9Y>B ((=8:0:*OQTL(,\U$8;Q
MJ^:TFBDU\+A]8/]@<L=<'JB$!<^_9RN5SJRQ15:PIMM<+?G^$]3Y7&F^F.?2
M?,F^]G4L$F^EXD4-Q@B*C%5_^ECK< 1 GG: 5P.\<T!P >#7 /\<,+P "&I
M8)2I4C$Z1%31<"KXG@CMC6RZ8<0T:$P_8WK9[Y7 T0QQ*OP(/!&T3+.8W+!J
M%^GE>$ONJWU ^)I$O "IT&,).V!;(*\B4#3+7Z/;P30'%J<(V*#MB'/!60Q,
MB8IUF<G-U%88MI[<CNL0YU6(WH40?7++F4HE><]6L&K!1]UXU^L@L%&O1C3O
M(-K<ZV2\I6) ?/<-\1S/;PEH\72XUY9/-SR"^!+\)!N_V0*^X0LN\9TM;]L*
M=3+HJVDB2QK#S,*[1X+8@16^?.$.G7=MZO1)%O5$=J)<T"@7&';_DG*9I$DB
M(*FV]Y=U<QQ^?$97<J.@D#_;] SZU+-/LJ@GLA,]KQH]KSIWXNEM(?"V>$-*
M$-J&3U";CA6?ZQA"_<3M0F<P#J;V[EB@)WE%G;']8^;#)O-A9^;XAN$+Q=I2
M[ 0^=ZOT21;U1'8BV*@1;/2?CMZH3SW[)(MZ(CO1<]SH.>[YZ(W;#I5[?O0Z
M9WVN0.U3^LV45>;V4354@$A,52E)S+=,56]\8VT*UVM3KYW9Y^YD4=6??VFJ
M:AA?\"1CDN2P1DIG,,*[0U059M51O#0UUP-76,&99HI%.0CM@.-KSM6AHR=H
MROSP#U!+ P04    "  D@II622-L8SL#  #L$P  #0   'AL+W-T>6QE<RYX
M;6S=6%UOVC 4_2M1NDZM-#5 UI2L@+0A59JT397:A[U5ACC!DF-GCNE@OWZ^
M=@@?]46L#QLLJ,2^Q^?<8_NF<3NH]9+3AQFE.EB47-3#<*9U]2&*ZNF,EJ2^
MDA45!LFE*HDV755$=:4HR6H@E3SJ=3I)5!(FPM% S,N[4M?!5,Z%'H9)&PK<
M[7,V#+O)^S!P<F.9T6'X=/'VQUSJVS>!NY^].SOK/%W>[L8O+' 91E[1ZP-$
MKSH=7!A 3#PY3'R?-B9]<Y#T'F5,N+\M;$>?&QW'.\=HJ8=F[*^9T+'DJ-GM
MT2"78KWI<>@"1IV4-'@F?!B."6<3Q8"5DY+QI0OW(#"57*I FVHSZ;H0J7\Y
MN.MZ4(B-3LF$5#:WR^"^)\WP'6#5 X.,\]9@+W2!T: B6E,E[DS'#K;!%U#0
MM!^7E7%8*++L]J[#-<'>3)*)5!E5;9INN J-!ISF8$>Q8@9W+:L(0*UE:1H9
M(X44Q'I8,9J&D9U2SA_@*?V>;VDO\HU]Z\"NB;9I##5-)^,ZH+^IYK0W9>-7
MZ085>Y;ZT]Q,1]@^U">]5S1G"]M?Y*T!3+V+JY.JXLN/G!6BI&[R!R<<#<B*
M%\RD8K],-BB5J0E0%0;/5&DVW8S\5*1ZI N]*J=%CGONG:#GO[O.!154$;YI
MVM3^,:_RJQW'-__*LOVMLFO8Z[%Y]1Z[R>M3,)F<@LF3J,G^\9N,T^/WV!S=
MCLYDU!PR-DXR6^>8-AK >7$8?H/3)U\G#29SQC4336_&LHR*%\<9(Z_)Q/PI
MLZ5OQF<T)W.N'UMP&*[;7VG&YF7:CKJ'A6A&K=M?8'K=I#VLFEQ,9'1!LW'3
M5<7$-@/3,%F;"PB[R)V]_ C&<9@? 0S+@SG .(Z%Y?F?YM-'Y^,PS%O?B_11
M3A_E.)8/&=L/EL?/2<WEGVF:QG&28"LZ'GL=C+%U2Q+X\:MAWH"!Y8%,?[;6
M^&[C%;*_#K ]W5<AV$SQ2L1FBJ\U(/YU T::^G<;RP,,;!>PVH'\_CQ04WY.
M',.N8MZP)QA'TA1#H!;]-9HDR.HD\/'O#_:4Q'&:^A' _ [B&$/@:<01S %X
MP) XMN_!G?=1M'I/1>O_[XU^ U!+ P04    "  D@II6EXJ[',     3 @
M"P   %]R96QS+RYR96QSG9*Y;L,P#$!_Q=">, ?0(8@S9?$6!/D!5J(/V!(%
MBD6=OZ_:I7&0"QEY/3P2W!YI0.TXI+:+J1C]$%)I6M6X 4BV)8]ISI%"KM0L
M'C6'TD!$VV-#L%HL/D N&6:WO606IW.D5XA<UYVE/=LO3T%O@*\Z3'%":4A+
M,P[PS=)_,O?S##5%Y4HCE5L:>-/E_G;@2=&A(E@6FD7)TZ(=I7\=Q_:0T^FO
M8R*T>EOH^7%H5 J.W&,EC'%BM/XU@LD/['X 4$L#!!0    ( "2"FE;6)VGR
MX@0  /,J   /    >&PO=V]R:V)O;VLN>&ULQ9K;;MLX$$!_A?#+=H%Z;>O6
M-H@#Y++-!FA3(VZSCPM:&MM$*-)+4KGTZY>2[99RY<&^3/1DBY+IHY'$,QSJ
M]$F;AX76#^RYE,I.!VOG-B>CD<W74'+[A]Z \GN6VI3<^4VS&MF- 5[8-8 K
MY2@:C[-1R84:G)WN^YJ94;BA'>1.:.4;ZX9[ 4_VY_YZDST**Q9""O<R'33?
M)0Q8*90HQ7<HIH/Q@-FU?OI+&_%=*\?E/#=:RNE@LMUQ#\:)_)?F>0WYE2]L
MT^+XXHY[D.D@&_L.E\)8UQS1],\]XR/X@[=;E=,?A71@KKB#:Z.KC5"KNAM_
M%J/@-)HX[#^W03PQ_R>,>KD4.5SIO"I!N6T<#<@:4-FUV-@!4[R$Z>!2/X*I
MS\?_P4VQ/3?GH8)(F1/A=YB;HL&C1%$%* L%\]^LEJ+P' 6[X)*K'%@ &2&0
M48^0_T0!9(Q QKU SFL<_], ,D$@DQXA6Y%,$<BT3\@X@,P0R*Q/R"2 ?(=
MOJ.%O 8%ALL YCT"\YX6YJ*R0H&U[#S_M_)_WAP0H'U T#[0HMW!(Z@*PB%Y
MC(W)8UJ<*UB",<VM95T8H@EJ"F)5?.3"L'LN*V"?@=O*U,-:&P]SQ(18$N=2
MZJ=&6O[G[-*'3SCV25L++43,$!-B1?C$:>/3FA?&5<'^] _!IO[!6W8++D3$
M_# A%L2UUL63D+)!O/%YF5K5!.S<Q]'9MR$F9H@)N2+*4KCF_FM(_1CL?#8'
M*A?MRXT98D*LB+G3^<-:RP*,_:VYWNXE9,/$,"$V0\,VO.!;@96^)]L<%/)A
MKI@0R^)&Y;H$]I4_MZ\G)HD)L26^N#48MB-K'N'G.FZA-B),&Q&Q-OPPLJ>;
M>=#YFIL6&R:/B%@>UZ!7AF_6(O>(VQ[:=UN$SB^(W;'+D]B;F4_DZB'D]Y ,
M4T9$K(P?9'X:*P^X,$]$Q)[894R=7)@8(F(QM%.G3CQ,"1&Q$H[D4'O.$!.S
M0T1L!R27JE%#3$P2$;$DD'SJ$!/S1D3L#32G:I<O,'W$Q/I <RKV)L3$3!(3
MFZ0KJ^IZSF-,*#&Q4(ZE5SO0$!,M61';Y5A&TX&)R28FEDU78M-YR3'SQ,3F
MZ<YP.C$Q \7$!NJLPK AN^7&^*-#3,Q ,;&!]OG%D,VKLN3FA>DEVS5:M@@Q
M,0/%Q ;ZB;F+WZ._,:_ <2%;5QS33_PZQ:UV*'_D27=A81K33_*J1:^N*":8
M=I)^JE_[J(:8F'B2_JI@=4A#3$P\27^5L$-,=+6DSVI8:R4BP=234*L'Q0S7
M(A),/0FQ>G#,-,3$U),0JP?/@X<A)J:>A%@]*&9K5I%@]DF([8-CAH]0BMDG
M[7/RTWJ$4LQ"*?ER/889/D(I9J'T-:8_AW.TX2YQOPN']Q2S4$ILH6.8=?,!
M)F:AE-A"1R>3VZPSQ$17[8DMA&#6NT),S$+I:ZS*',-LOP*!62CM:8'&8_X-
M8A5B8A9*B2V$8,[FW\+UPA2S4$IL(>RB^_0]?*4$LU!&;"$$LYY_A)B8A3)B
M"QTO&S63MA 3LU!&;*'.LM&P":Q6K3>R,LQ"&;&%CF#.?==%U2K"99B%,NJY
M4'=]:U]5"#$Q"V6-A4;-P?;LM("E4%#<^K^POCWG,I\95G]L7RA)TGK)=UE)
M>>G;OJA/FA?[=S;W[YN>_0=02P,$%     @ )(*:5K5Q8'P6 @  JB8  !H
M  !X;"]?<F5L<R]W;W)K8F]O:RYX;6PN<F5L<\W9.V[;0!2%X:T(7(!']S6V
M \M5&K>!-T#(HP<LB02'0>S=1Y +Z1 ITA@\%3$D>/DW_$ ,GWZ50SONNU/=
M[?NZ^#@>3G75[,:Q_Y%27>_*L:UW75].YRN;;CBVXWDY;%/?KM_;;4FZ7.8T
MW,YHGI]N9RY>/_OR/Q.[S6:_+C^[]>]C.8W_&)S^=,-[W94R-HO7=MB6<=6D
MC\/U=$V7@]R=)S>+E[=5,[R\29/F#E((TOF##()L_B"'()\_*" HY@_*$)3G
M#[J'H/OY@QX@Z&'^H$<(>IP_2)8HXY(@:8(U@=:"7 N!UX)@"X'8@F0+@=F"
M: N!VH)L"X';@G +@=R"= N!W8)X"X'>BGHK@=Z*>BN!WCKYV";06U%O)=!;
M46\ET%M1;R706U%O)=!;46\ET%M1;R706U%O)=#;4&\CT-M0;R/0VU!O(]#;
M)ILE!'H;ZFT$>AOJ;01Z&^IM!'H;ZFT$>AOJ;01Z&^IM!'H[ZNT$>COJ[01Z
M.^KM!'H[ZNT$>OMDLYM ;T>]G4!O1[V=0&]'O9U ;T>]G4!O1[V=0.] O8-
M[T"]@T#O0+V#0.] O8- [T"]@T#OF/RL)- [4.\@T#M0[R#0.U#O(- [4.\@
MT#NCWIE [XQZ9P*],^J="?3.J'<FT#NCWIE [XQZY^_4NXZ?AU*O/5]K?/YW
M4CV>[RW7QU^67R<G+]0%YW1;49__ E!+ P04    "  D@II6TC1D%.P!   '
M)@  $P   %M#;VYT96YT7U1Y<&5S72YX;6S-VEU/PC 4!N"_0G9K6.G7_(AP
MH]ZJ%_Z!NAUD85N;MB#\>[L!)AHE&DQ\;UB@[7G/>I+GBNNGK:,PVK1-%Z;9
M(D9WQ5@H%]2:D%M'75J96]^:F+[Z%^9,N30OQ,1D4K#2=I&Z.(Y]C6QV?4MS
MLVKBZ&Z3?@ZU[::9IR9DHYO=QCYKFAGGFKHT,:VS=5=]2AGO$_)T<M@3%K4+
M9VE#QKY,Z%>^#]B?>UB3]W5%HT?CX[UITRZV:5B(VX9"?KS$%SW:^;PNJ;+E
MJDU'\N \F2HLB&+;Y+NB9\>38[IAVGWRD_.',L<"T\Y';UU($_/T^[C#2/K3
M8Y<*D8_U\5=\3TRE3WX_ZJ==4?7#['2]K]8OAWD$-CQ.O^./,WZO_\L^!$@?
M$J0/!=*'!NFC .GC'*2/"Y ^+D'ZX!.41E!$Y2BD<A13.0JJ'$55CL(J1W&5
MH\#*4605*+(*%%D%BJP"15:!(JM D56@R"I09!4HL@H4626*K!)%5HDBJT21
M5:+(*E%DE2BR2A19)8JL$D56A2*K0I%5H<BJ4&15*+(J%%D5BJP*15:%(JM"
MD56CR*I19-4HLFH4636*K!I%5HTBJT:15:/(JE%D+5!D+5!D+5!D+5!D+5!D
M+?Y3UF=KEW\</SSSUM3=(9\-__^:O0%02P$"% ,4    "  D@II6!T%-8H$
M  "Q    $               @ $     9&]C4')O<',O87!P+GAM;%!+ 0(4
M Q0    ( "2"FE:/J:D%[@   "L"   1              "  :\   !D;V-0
M<F]P<R]C;W)E+GAM;%!+ 0(4 Q0    ( "2"FE:97)PC$ 8  )PG   3
M          "  <P!  !X;"]T:&5M92]T:&5M93$N>&UL4$L! A0#%     @
M)(*:5L<KM\;J!0  OA\  !@              ("!#0@  'AL+W=O<FMS:&5E
M=',O<VAE970Q+GAM;%!+ 0(4 Q0    ( "2"FE9L1<@J,@<  (H@   8
M          " @2T.  !X;"]W;W)K<VAE971S+W-H965T,BYX;6Q02P$"% ,4
M    "  D@II6##>( "D#   8"P  &               @(&5%0  >&PO=V]R
M:W-H965T<R]S:&5E=#,N>&UL4$L! A0#%     @ )(*:5N@/\%7S!0  +!@
M !@              ("!]!@  'AL+W=O<FMS:&5E=',O<VAE970T+GAM;%!+
M 0(4 Q0    ( "2"FE9JHK:C+ ,   H)   8              " @1T?  !X
M;"]W;W)K<VAE971S+W-H965T-2YX;6Q02P$"% ,4    "  D@II605RKR[,(
M  #/2   &               @(%_(@  >&PO=V]R:W-H965T<R]S:&5E=#8N
M>&UL4$L! A0#%     @ )(*:5G8SL).;!0  ;!8  !@              ("!
M:"L  'AL+W=O<FMS:&5E=',O<VAE970W+GAM;%!+ 0(4 Q0    ( "2"FE8)
M%DUGZ0<  /L2   8              " @3DQ  !X;"]W;W)K<VAE971S+W-H
M965T."YX;6Q02P$"% ,4    "  D@II6"UQUPDP$  !'"P  &
M    @(%8.0  >&PO=V]R:W-H965T<R]S:&5E=#DN>&UL4$L! A0#%     @
M)(*:5NS85SWW!@  &1$  !D              ("!VCT  'AL+W=O<FMS:&5E
M=',O<VAE970Q,"YX;6Q02P$"% ,4    "  D@II6,0@%CGX"  "H!0  &0
M            @($(10  >&PO=V]R:W-H965T<R]S:&5E=#$Q+GAM;%!+ 0(4
M Q0    ( "2"FE;#X##)3 ,  )8'   9              " @;U'  !X;"]W
M;W)K<VAE971S+W-H965T,3(N>&UL4$L! A0#%     @ )(*:5E7)%2ZA @
M#P8  !D              ("!0$L  'AL+W=O<FMS:&5E=',O<VAE970Q,RYX
M;6Q02P$"% ,4    "  D@II6EDOK^.\"  "&!@  &0              @($8
M3@  >&PO=V]R:W-H965T<R]S:&5E=#$T+GAM;%!+ 0(4 Q0    ( "2"FE;:
MF&6]& 0  &D)   9              " @3Y1  !X;"]W;W)K<VAE971S+W-H
M965T,34N>&UL4$L! A0#%     @ )(*:5D6UNON8 P  @ @  !D
M     ("!C54  'AL+W=O<FMS:&5E=',O<VAE970Q-BYX;6Q02P$"% ,4
M"  D@II6C7-=#H$#  #D!P  &0              @(%<60  >&PO=V]R:W-H
M965T<R]S:&5E=#$W+GAM;%!+ 0(4 Q0    ( "2"FE;))!$K!@D  'X6   9
M              " @11=  !X;"]W;W)K<VAE971S+W-H965T,3@N>&UL4$L!
M A0#%     @ )(*:5L "[E2C P  #@@  !D              ("!468  'AL
M+W=O<FMS:&5E=',O<VAE970Q.2YX;6Q02P$"% ,4    "  D@II6@<]148H"
M  #8!0  &0              @($K:@  >&PO=V]R:W-H965T<R]S:&5E=#(P
M+GAM;%!+ 0(4 Q0    ( "2"FE;2$JA[-0,  (L'   9              "
M@>QL  !X;"]W;W)K<VAE971S+W-H965T,C$N>&UL4$L! A0#%     @ )(*:
M5NDF#C#@ @  C 8  !D              ("!6'   'AL+W=O<FMS:&5E=',O
M<VAE970R,BYX;6Q02P$"% ,4    "  D@II6Q(+Q(0 '  ##$0  &0
M        @(%O<P  >&PO=V]R:W-H965T<R]S:&5E=#(S+GAM;%!+ 0(4 Q0
M   ( "2"FE:<AZCN= ,  +X'   9              " @:9Z  !X;"]W;W)K
M<VAE971S+W-H965T,C0N>&UL4$L! A0#%     @ )(*:5F&%Z&QK P  [P<
M !D              ("!47X  'AL+W=O<FMS:&5E=',O<VAE970R-2YX;6Q0
M2P$"% ,4    "  D@II6$M90Z94"  #0!0  &0              @('S@0
M>&PO=V]R:W-H965T<R]S:&5E=#(V+GAM;%!+ 0(4 Q0    ( "2"FE94^<(Q
M6@,  'H'   9              " @;^$  !X;"]W;W)K<VAE971S+W-H965T
M,C<N>&UL4$L! A0#%     @ )(*:5F3G\B&\ @  -08  !D
M ("!4(@  'AL+W=O<FMS:&5E=',O<VAE970R."YX;6Q02P$"% ,4    "  D
M@II6I_43-_4"  !U!@  &0              @(%#BP  >&PO=V]R:W-H965T
M<R]S:&5E=#(Y+GAM;%!+ 0(4 Q0    ( "2"FE:A]7! ;P0  -$*   9
M          " @6^.  !X;"]W;W)K<VAE971S+W-H965T,S N>&UL4$L! A0#
M%     @ )(*:5E0V&G8"!   J0H  !D              ("!%9,  'AL+W=O
M<FMS:&5E=',O<VAE970S,2YX;6Q02P$"% ,4    "  D@II6M>Z[2($#  "]
M!P  &0              @(%.EP  >&PO=V]R:W-H965T<R]S:&5E=#,R+GAM
M;%!+ 0(4 Q0    ( "2"FE8I"KJ6_04  +4/   9              " @0:;
M  !X;"]W;W)K<VAE971S+W-H965T,S,N>&UL4$L! A0#%     @ )(*:5E%0
M<O*= @  U@4  !D              ("!.J$  'AL+W=O<FMS:&5E=',O<VAE
M970S-"YX;6Q02P$"% ,4    "  D@II6&,SY=7 #  ":"   &0
M    @($.I   >&PO=V]R:W-H965T<R]S:&5E=#,U+GAM;%!+ 0(4 Q0    (
M "2"FE;Y137 [ (  ,(&   9              " @;6G  !X;"]W;W)K<VAE
M971S+W-H965T,S8N>&UL4$L! A0#%     @ )(*:5ODA(T>. P  <A   !D
M             ("!V*H  'AL+W=O<FMS:&5E=',O<VAE970S-RYX;6Q02P$"
M% ,4    "  D@II6IC>/;JX#  "/$@  &0              @(&=K@  >&PO
M=V]R:W-H965T<R]S:&5E=#,X+GAM;%!+ 0(4 Q0    ( "2"FE8G[IJN\0(
M '8*   9              " @8*R  !X;"]W;W)K<VAE971S+W-H965T,SDN
M>&UL4$L! A0#%     @ )(*:5C,1\NCK @  Y@<  !D              ("!
MJK4  'AL+W=O<FMS:&5E=',O<VAE970T,"YX;6Q02P$"% ,4    "  D@II6
M, &G;;H"  ":!P  &0              @(',N   >&PO=V]R:W-H965T<R]S
M:&5E=#0Q+GAM;%!+ 0(4 Q0    ( "2"FE8JWJEX2 0  $\6   9
M      " @;V[  !X;"]W;W)K<VAE971S+W-H965T-#(N>&UL4$L! A0#%
M  @ )(*:5D_1K2[> @  R <  !D              ("!/,   'AL+W=O<FMS
M:&5E=',O<VAE970T,RYX;6Q02P$"% ,4    "  D@II6W2F"Y*P#  !)$0
M&0              @(%1PP  >&PO=V]R:W-H965T<R]S:&5E=#0T+GAM;%!+
M 0(4 Q0    ( "2"FE8$+.4GRP(  )8&   9              " @33'  !X
M;"]W;W)K<VAE971S+W-H965T-#4N>&UL4$L! A0#%     @ )(*:5@K7G/"!
M!   &A0  !D              ("!-LH  'AL+W=O<FMS:&5E=',O<VAE970T
M-BYX;6Q02P$"% ,4    "  D@II6=\X[^_<"  #H"0  &0
M@('NS@  >&PO=V]R:W-H965T<R]S:&5E=#0W+GAM;%!+ 0(4 Q0    ( "2"
MFE8>8OG:J@(  !4'   9              " @1S2  !X;"]W;W)K<VAE971S
M+W-H965T-#@N>&UL4$L! A0#%     @ )(*:5AP\?+>G @  +08  !D
M         ("!_=0  'AL+W=O<FMS:&5E=',O<VAE970T.2YX;6Q02P$"% ,4
M    "  D@II6= 6EK80"  !4!@  &0              @(';UP  >&PO=V]R
M:W-H965T<R]S:&5E=#4P+GAM;%!+ 0(4 Q0    ( "2"FE:TMP.*VP(  +0'
M   9              " @9;:  !X;"]W;W)K<VAE971S+W-H965T-3$N>&UL
M4$L! A0#%     @ )(*:5B :11<6 @  3 0  !D              ("!J-T
M 'AL+W=O<FMS:&5E=',O<VAE970U,BYX;6Q02P$"% ,4    "  D@II6)!3Y
M/WL#  #_#@  &0              @('UWP  >&PO=V]R:W-H965T<R]S:&5E
M=#4S+GAM;%!+ 0(4 Q0    ( "2"FE8G<)&?Q (  $,'   9
M  " @:?C  !X;"]W;W)K<VAE971S+W-H965T-30N>&UL4$L! A0#%     @
M)(*:5G-!&='$!0  82@  !D              ("!HN8  'AL+W=O<FMS:&5E
M=',O<VAE970U-2YX;6Q02P$"% ,4    "  D@II6TR23O@T%  #6(@  &0
M            @(&=[   >&PO=V]R:W-H965T<R]S:&5E=#4V+GAM;%!+ 0(4
M Q0    ( "2"FE9 2\5P: ,  )X+   9              " @>'Q  !X;"]W
M;W)K<VAE971S+W-H965T-3<N>&UL4$L! A0#%     @ )(*:5J-R;W?  @
MIP8  !D              ("!@/4  'AL+W=O<FMS:&5E=',O<VAE970U."YX
M;6Q02P$"% ,4    "  D@II6%Y1=U$T#   A"P  &0              @(%W
M^   >&PO=V]R:W-H965T<R]S:&5E=#4Y+GAM;%!+ 0(4 Q0    ( "2"FE9S
MZ9Q*_P(  "T(   9              " @?O[  !X;"]W;W)K<VAE971S+W-H
M965T-C N>&UL4$L! A0#%     @ )(*:5IZ63>#. @  N@8  !D
M     ("!,?\  'AL+W=O<FMS:&5E=',O<VAE970V,2YX;6Q02P$"% ,4
M"  D@II6OSLJ_M,"  "[!P  &0              @($V @$ >&PO=V]R:W-H
M965T<R]S:&5E=#8R+GAM;%!+ 0(4 Q0    ( "2"FE8SN']AC ,  #,,   9
M              " @4 % 0!X;"]W;W)K<VAE971S+W-H965T-C,N>&UL4$L!
M A0#%     @ )(*:5M/,]**$ @  $P8  !D              ("! PD! 'AL
M+W=O<FMS:&5E=',O<VAE970V-"YX;6Q02P$"% ,4    "  D@II6\ILAV_ "
M  #R"P  &0              @(&^"P$ >&PO=V]R:W-H965T<R]S:&5E=#8U
M+GAM;%!+ 0(4 Q0    ( "2"FE9)(VQC.P,  .P3   -              "
M >4. 0!X;"]S='EL97,N>&UL4$L! A0#%     @ )(*:5I>*NQS     $P(
M  L              ( !2Q(! %]R96QS+RYR96QS4$L! A0#%     @ )(*:
M5M8G:?+B!   \RH   \              ( !-!,! 'AL+W=O<FMB;V]K+GAM
M;%!+ 0(4 Q0    ( "2"FE:U<6!\%@(  *HF   :              "  4,8
M 0!X;"]?<F5L<R]W;W)K8F]O:RYX;6PN<F5L<U!+ 0(4 Q0    ( "2"FE;2
M-&04[ $   <F   3              "  9$: 0!;0V]N=&5N=%]4>7!E<UTN
9>&UL4$L%!@    !) $D ]A,  *X< 0    $!

end
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>79
<FILENAME>Show.js
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
// Edgar(tm) Renderer was created by staff of the U.S. Securities and Exchange Commission.  Data and content created by government employees within the scope of their employment are not subject to domestic copyright protection. 17 U.S.C. 105.
var Show={};Show.LastAR=null,Show.showAR=function(a,r,w){if(Show.LastAR)Show.hideAR();var e=a;while(e&&e.nodeName!='TABLE')e=e.nextSibling;if(!e||e.nodeName!='TABLE'){var ref=((window)?w.document:document).getElementById(r);if(ref){e=ref.cloneNode(!0);
e.removeAttribute('id');a.parentNode.appendChild(e)}}
if(e)e.style.display='block';Show.LastAR=e};Show.hideAR=function(){Show.LastAR.style.display='none'};Show.toggleNext=function(a){var e=a;while(e.nodeName!='DIV')e=e.nextSibling;if(!e.style){}else if(!e.style.display){}else{var d,p_;if(e.style.display=='none'){d='block';p='-'}else{d='none';p='+'}
e.style.display=d;if(a.textContent){a.textContent=p+a.textContent.substring(1)}else{a.innerText=p+a.innerText.substring(1)}}}
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>80
<FILENAME>report.css
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
/* Updated 2009-11-04 */
/* v2.2.0.24 */

/* DefRef Styles */
..report table.authRefData{
	background-color: #def;
	border: 2px solid #2F4497;
	font-size: 1em;
	position: absolute;
}

..report table.authRefData a {
	display: block;
	font-weight: bold;
}

..report table.authRefData p {
	margin-top: 0px;
}

..report table.authRefData .hide {
	background-color: #2F4497;
	padding: 1px 3px 0px 0px;
	text-align: right;
}

..report table.authRefData .hide a:hover {
	background-color: #2F4497;
}

..report table.authRefData .body {
	height: 150px;
	overflow: auto;
	width: 400px;
}

..report table.authRefData table{
	font-size: 1em;
}

/* Report Styles */
..pl a, .pl a:visited {
	color: black;
	text-decoration: none;
}

/* table */
..report {
	background-color: white;
	border: 2px solid #acf;
	clear: both;
	color: black;
	font: normal 8pt Helvetica, Arial, san-serif;
	margin-bottom: 2em;
}

..report hr {
	border: 1px solid #acf;
}

/* Top labels */
..report th {
	background-color: #acf;
	color: black;
	font-weight: bold;
	text-align: center;
}

..report th.void	{
	background-color: transparent;
	color: #000000;
	font: bold 10pt Helvetica, Arial, san-serif;
	text-align: left;
}

..report .pl {
	text-align: left;
	vertical-align: top;
	white-space: normal;
	width: 200px;
	white-space: normal; /* word-wrap: break-word; */
}

..report td.pl a.a {
	cursor: pointer;
	display: block;
	width: 200px;
	overflow: hidden;
}

..report td.pl div.a {
	width: 200px;
}

..report td.pl a:hover {
	background-color: #ffc;
}

/* Header rows... */
..report tr.rh {
	background-color: #acf;
	color: black;
	font-weight: bold;
}

/* Calendars... */
..report .rc {
	background-color: #f0f0f0;
}

/* Even rows... */
..report .re, .report .reu {
	background-color: #def;
}

..report .reu td {
	border-bottom: 1px solid black;
}

/* Odd rows... */
..report .ro, .report .rou {
	background-color: white;
}

..report .rou td {
	border-bottom: 1px solid black;
}

..report .rou table td, .report .reu table td {
	border-bottom: 0px solid black;
}

/* styles for footnote marker */
..report .fn {
	white-space: nowrap;
}

/* styles for numeric types */
..report .num, .report .nump {
	text-align: right;
	white-space: nowrap;
}

..report .nump {
	padding-left: 2em;
}

..report .nump {
	padding: 0px 0.4em 0px 2em;
}

/* styles for text types */
..report .text {
	text-align: left;
	white-space: normal;
}

..report .text .big {
	margin-bottom: 1em;
	width: 17em;
}

..report .text .more {
	display: none;
}

..report .text .note {
	font-style: italic;
	font-weight: bold;
}

..report .text .small {
	width: 10em;
}

..report sup {
	font-style: italic;
}

..report .outerFootnotes {
	font-size: 1em;
}
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>XML
<SEQUENCE>81
<FILENAME>FilingSummary.xml
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<XML>
<?xml version='1.0' encoding='utf-8'?>
<FilingSummary>
  <Version>3.23.1</Version>
  <ProcessingTime/>
  <ReportFormat>html</ReportFormat>
  <ContextCount>120</ContextCount>
  <ElementCount>269</ElementCount>
  <EntityCount>1</EntityCount>
  <FootnotesReported>false</FootnotesReported>
  <SegmentCount>45</SegmentCount>
  <ScenarioCount>0</ScenarioCount>
  <TuplesReported>false</TuplesReported>
  <UnitCount>4</UnitCount>
  <MyReports>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R1.htm</HtmlFileName>
      <LongName>0000001 - Document - Cover</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/Cover</Role>
      <ShortName>Cover</ShortName>
      <MenuCategory>Cover</MenuCategory>
      <Position>1</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R2.htm</HtmlFileName>
      <LongName>0000002 - Statement - Condensed Consolidated Balance Sheets</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets</Role>
      <ShortName>Condensed Consolidated Balance Sheets</ShortName>
      <MenuCategory>Statements</MenuCategory>
      <Position>2</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R3.htm</HtmlFileName>
      <LongName>0000003 - Statement - Condensed Consolidated Balance Sheets (Parenthetical)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical</Role>
      <ShortName>Condensed Consolidated Balance Sheets (Parenthetical)</ShortName>
      <MenuCategory>Statements</MenuCategory>
      <Position>3</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R4.htm</HtmlFileName>
      <LongName>0000004 - Statement - Condensed Consolidated Statements of Comprehensive Income</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome</Role>
      <ShortName>Condensed Consolidated Statements of Comprehensive Income</ShortName>
      <MenuCategory>Statements</MenuCategory>
      <Position>4</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R5.htm</HtmlFileName>
      <LongName>0000005 - Statement - Condensed Consolidated Statements of Comprehensive Income (Parenthetical)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncomeParenthetical</Role>
      <ShortName>Condensed Consolidated Statements of Comprehensive Income (Parenthetical)</ShortName>
      <MenuCategory>Statements</MenuCategory>
      <Position>5</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R6.htm</HtmlFileName>
      <LongName>0000006 - Statement - Condensed Consolidated Statements of Stockholders' Equity</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity</Role>
      <ShortName>Condensed Consolidated Statements of Stockholders' Equity</ShortName>
      <MenuCategory>Statements</MenuCategory>
      <Position>6</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R7.htm</HtmlFileName>
      <LongName>0000007 - Statement - Condensed Consolidated Statements of Cash Flows</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows</Role>
      <ShortName>Condensed Consolidated Statements of Cash Flows</ShortName>
      <MenuCategory>Statements</MenuCategory>
      <Position>7</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R8.htm</HtmlFileName>
      <LongName>0000008 - Disclosure - General</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/General</Role>
      <ShortName>General</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>8</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R9.htm</HtmlFileName>
      <LongName>0000009 - Disclosure - Business Acquisitions</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/BusinessAcquisitions</Role>
      <ShortName>Business Acquisitions</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>9</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R10.htm</HtmlFileName>
      <LongName>0000010 - Disclosure - Revenue</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/Revenue</Role>
      <ShortName>Revenue</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>10</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R11.htm</HtmlFileName>
      <LongName>0000011 - Disclosure - Deferred Costs</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/DeferredCosts</Role>
      <ShortName>Deferred Costs</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>11</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R12.htm</HtmlFileName>
      <LongName>0000012 - Disclosure - Fair Value Measurements</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/FairValueMeasurements</Role>
      <ShortName>Fair Value Measurements</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>12</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R13.htm</HtmlFileName>
      <LongName>0000013 - Disclosure - Allowance for Credit Losses</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/AllowanceforCreditLosses</Role>
      <ShortName>Allowance for Credit Losses</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>13</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R14.htm</HtmlFileName>
      <LongName>0000014 - Disclosure - Property and Equipment, Net</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/PropertyandEquipmentNet</Role>
      <ShortName>Property and Equipment, Net</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>14</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R15.htm</HtmlFileName>
      <LongName>0000015 - Disclosure - Goodwill and Intangible Assets, Net</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNet</Role>
      <ShortName>Goodwill and Intangible Assets, Net</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>15</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R16.htm</HtmlFileName>
      <LongName>0000016 - Disclosure - Commitments and Contingencies</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CommitmentsandContingencies</Role>
      <ShortName>Commitments and Contingencies</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>16</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R17.htm</HtmlFileName>
      <LongName>0000017 - Disclosure - Stockholders' Equity</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockholdersEquity</Role>
      <ShortName>Stockholders' Equity</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>17</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R18.htm</HtmlFileName>
      <LongName>0000018 - Disclosure - Stock-Based Compensation</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockBasedCompensation</Role>
      <ShortName>Stock-Based Compensation</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>18</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R19.htm</HtmlFileName>
      <LongName>0000019 - Disclosure - Income Taxes</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/IncomeTaxes</Role>
      <ShortName>Income Taxes</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>19</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R20.htm</HtmlFileName>
      <LongName>0000020 - Disclosure - Other Income and Expense</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/OtherIncomeandExpense</Role>
      <ShortName>Other Income and Expense</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>20</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R21.htm</HtmlFileName>
      <LongName>0000021 - Disclosure - Net Income Per Share</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/NetIncomePerShare</Role>
      <ShortName>Net Income Per Share</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>21</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R22.htm</HtmlFileName>
      <LongName>0000022 - Disclosure - Geographic Information</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/GeographicInformation</Role>
      <ShortName>Geographic Information</ShortName>
      <MenuCategory>Notes</MenuCategory>
      <Position>22</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R23.htm</HtmlFileName>
      <LongName>0000023 - Disclosure - General (Policies)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/GeneralPolicies</Role>
      <ShortName>General (Policies)</ShortName>
      <MenuCategory>Policies</MenuCategory>
      <Position>23</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R24.htm</HtmlFileName>
      <LongName>0000024 - Disclosure - General (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/GeneralTables</Role>
      <ShortName>General (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/General</ParentRole>
      <Position>24</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R25.htm</HtmlFileName>
      <LongName>0000025 - Disclosure - Revenue (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/RevenueTables</Role>
      <ShortName>Revenue (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/Revenue</ParentRole>
      <Position>25</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R26.htm</HtmlFileName>
      <LongName>0000026 - Disclosure - Deferred Costs (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/DeferredCostsTables</Role>
      <ShortName>Deferred Costs (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/DeferredCosts</ParentRole>
      <Position>26</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R27.htm</HtmlFileName>
      <LongName>0000027 - Disclosure - Fair Value Measurements (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/FairValueMeasurementsTables</Role>
      <ShortName>Fair Value Measurements (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/FairValueMeasurements</ParentRole>
      <Position>27</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R28.htm</HtmlFileName>
      <LongName>0000028 - Disclosure - Allowance for Credit Losses (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/AllowanceforCreditLossesTables</Role>
      <ShortName>Allowance for Credit Losses (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/AllowanceforCreditLosses</ParentRole>
      <Position>28</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R29.htm</HtmlFileName>
      <LongName>0000029 - Disclosure - Property and Equipment, Net (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/PropertyandEquipmentNetTables</Role>
      <ShortName>Property and Equipment, Net (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/PropertyandEquipmentNet</ParentRole>
      <Position>29</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R30.htm</HtmlFileName>
      <LongName>0000030 - Disclosure - Goodwill and Intangible Assets, Net (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetTables</Role>
      <ShortName>Goodwill and Intangible Assets, Net (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNet</ParentRole>
      <Position>30</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R31.htm</HtmlFileName>
      <LongName>0000031 - Disclosure - Commitments and Contingencies (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CommitmentsandContingenciesTables</Role>
      <ShortName>Commitments and Contingencies (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/CommitmentsandContingencies</ParentRole>
      <Position>31</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R32.htm</HtmlFileName>
      <LongName>0000032 - Disclosure - Stockholders' Equity (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockholdersEquityTables</Role>
      <ShortName>Stockholders' Equity (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/StockholdersEquity</ParentRole>
      <Position>32</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R33.htm</HtmlFileName>
      <LongName>0000033 - Disclosure - Stock-Based Compensation (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockBasedCompensationTables</Role>
      <ShortName>Stock-Based Compensation (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/StockBasedCompensation</ParentRole>
      <Position>33</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R34.htm</HtmlFileName>
      <LongName>0000034 - Disclosure - Other Income and Expense (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/OtherIncomeandExpenseTables</Role>
      <ShortName>Other Income and Expense (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/OtherIncomeandExpense</ParentRole>
      <Position>34</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R35.htm</HtmlFileName>
      <LongName>0000035 - Disclosure - Net Income Per Share (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/NetIncomePerShareTables</Role>
      <ShortName>Net Income Per Share (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/NetIncomePerShare</ParentRole>
      <Position>35</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R36.htm</HtmlFileName>
      <LongName>0000036 - Disclosure - Geographic Information (Tables)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/GeographicInformationTables</Role>
      <ShortName>Geographic Information (Tables)</ShortName>
      <MenuCategory>Tables</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/GeographicInformation</ParentRole>
      <Position>36</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R37.htm</HtmlFileName>
      <LongName>0000037 - Disclosure - Business Acquisitions - Narrative (Details)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails</Role>
      <ShortName>Business Acquisitions - Narrative (Details)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>37</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R38.htm</HtmlFileName>
      <LongName>0000038 - Disclosure - Revenue - Summary of Revenues by Revenue Stream (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail</Role>
      <ShortName>Revenue - Summary of Revenues by Revenue Stream (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>38</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R39.htm</HtmlFileName>
      <LongName>0000039 - Disclosure - Revenue - Narrative (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/RevenueNarrativeDetail</Role>
      <ShortName>Revenue - Narrative (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>39</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R40.htm</HtmlFileName>
      <LongName>0000040 - Disclosure - Revenue - Summary of Deferred Revenue Liability Relating to Set-Up Fees (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail</Role>
      <ShortName>Revenue - Summary of Deferred Revenue Liability Relating to Set-Up Fees (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>40</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R41.htm</HtmlFileName>
      <LongName>0000041 - Disclosure - Deferred Costs (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/DeferredCostsDetail</Role>
      <ShortName>Deferred Costs (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/DeferredCostsTables</ParentRole>
      <Position>41</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R42.htm</HtmlFileName>
      <LongName>0000042 - Disclosure - Fair Value Measurements - Summary of Cash Equivalents and Investments (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail</Role>
      <ShortName>Fair Value Measurements - Summary of Cash Equivalents and Investments (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>42</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R43.htm</HtmlFileName>
      <LongName>0000043 - Disclosure - Allowance for Credit Losses (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/AllowanceforCreditLossesDetail</Role>
      <ShortName>Allowance for Credit Losses (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/AllowanceforCreditLossesTables</ParentRole>
      <Position>43</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R44.htm</HtmlFileName>
      <LongName>0000044 - Disclosure - Property and Equipment, Net (Details)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/PropertyandEquipmentNetDetails</Role>
      <ShortName>Property and Equipment, Net (Details)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/PropertyandEquipmentNetTables</ParentRole>
      <Position>44</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R45.htm</HtmlFileName>
      <LongName>0000045 - Disclosure - Goodwill and Intangible Assets, Net - Schedule of Changes in Net Carrying Amount of Goodwill (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetScheduleofChangesinNetCarryingAmountofGoodwillDetail</Role>
      <ShortName>Goodwill and Intangible Assets, Net - Schedule of Changes in Net Carrying Amount of Goodwill (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>45</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R46.htm</HtmlFileName>
      <LongName>0000046 - Disclosure - Goodwill and Intangible Assets, Net - Intangible Assets (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail</Role>
      <ShortName>Goodwill and Intangible Assets, Net - Intangible Assets (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>46</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R47.htm</HtmlFileName>
      <LongName>0000047 - Disclosure - Goodwill and Intangible Assets, Net - Estimated Future Annual Amortization Expense Related to Intangible Assets Subject to Amortization (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail</Role>
      <ShortName>Goodwill and Intangible Assets, Net - Estimated Future Annual Amortization Expense Related to Intangible Assets Subject to Amortization (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>47</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R48.htm</HtmlFileName>
      <LongName>0000048 - Disclosure - Commitments and Contingencies - Components of Lease Expense (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail</Role>
      <ShortName>Commitments and Contingencies - Components of Lease Expense (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>48</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R49.htm</HtmlFileName>
      <LongName>0000049 - Disclosure - Commitments and Contingencies - Schedule of Supplemental Cash Flow Information Related to Leases (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalCashFlowInformationRelatedtoLeasesDetail</Role>
      <ShortName>Commitments and Contingencies - Schedule of Supplemental Cash Flow Information Related to Leases (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>49</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R50.htm</HtmlFileName>
      <LongName>0000050 - Disclosure - Commitments and Contingencies - Schedule of Supplemental Balance Sheet Information Related to Leases (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalBalanceSheetInformationRelatedtoLeasesDetail</Role>
      <ShortName>Commitments and Contingencies - Schedule of Supplemental Balance Sheet Information Related to Leases (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>50</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R51.htm</HtmlFileName>
      <LongName>0000051 - Disclosure - Commitments and Contingencies - Schedule of Future Minimum Payments Under Operating Leases (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail</Role>
      <ShortName>Commitments and Contingencies - Schedule of Future Minimum Payments Under Operating Leases (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>51</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R52.htm</HtmlFileName>
      <LongName>0000052 - Disclosure - Commitments and Contingencies - Narrative (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/CommitmentsandContingenciesNarrativeDetail</Role>
      <ShortName>Commitments and Contingencies - Narrative (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>52</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R53.htm</HtmlFileName>
      <LongName>0000053 - Disclosure - Stockholders' Equity - Share Repurchase Plan (Details)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails</Role>
      <ShortName>Stockholders' Equity - Share Repurchase Plan (Details)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>53</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R54.htm</HtmlFileName>
      <LongName>0000054 - Disclosure - Stockholders' Equity - Stock Repurchase Activity (Details)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockholdersEquityStockRepurchaseActivityDetails</Role>
      <ShortName>Stockholders' Equity - Stock Repurchase Activity (Details)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>54</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R55.htm</HtmlFileName>
      <LongName>0000055 - Disclosure - Stock-Based Compensation - Narrative (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail</Role>
      <ShortName>Stock-Based Compensation - Narrative (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>55</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R56.htm</HtmlFileName>
      <LongName>0000056 - Disclosure - Stock-Based Compensation - Stock-Based Compensation Expense (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail</Role>
      <ShortName>Stock-Based Compensation - Stock-Based Compensation Expense (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>56</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R57.htm</HtmlFileName>
      <LongName>0000057 - Disclosure - Stock-Based Compensation - Stock Option Activity (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail</Role>
      <ShortName>Stock-Based Compensation - Stock Option Activity (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>57</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R58.htm</HtmlFileName>
      <LongName>0000058 - Disclosure - Stock-Based Compensation - Weighted Average Grant Date Fair Value of Options Granted, Assumptions (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail</Role>
      <ShortName>Stock-Based Compensation - Weighted Average Grant Date Fair Value of Options Granted, Assumptions (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>58</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R59.htm</HtmlFileName>
      <LongName>0000059 - Disclosure - Stock-Based Compensation - PSU, RSU, RSA, and DSU (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail</Role>
      <ShortName>Stock-Based Compensation - PSU, RSU, RSA, and DSU (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>59</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R60.htm</HtmlFileName>
      <LongName>0000060 - Disclosure - Stock-Based Compensation - Summary of ESPP Activity (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail</Role>
      <ShortName>Stock-Based Compensation - Summary of ESPP Activity (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>60</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R61.htm</HtmlFileName>
      <LongName>0000061 - Disclosure - Stock-Based Compensation - Fair Value Estimation of Common Stock Using Black-Scholes Option Pricing Model, Assumptions (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail</Role>
      <ShortName>Stock-Based Compensation - Fair Value Estimation of Common Stock Using Black-Scholes Option Pricing Model, Assumptions (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>61</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R62.htm</HtmlFileName>
      <LongName>0000062 - Disclosure - Other Income and Expense (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/OtherIncomeandExpenseDetail</Role>
      <ShortName>Other Income and Expense (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <ParentRole>http://www.spscommerce.com/role/OtherIncomeandExpenseTables</ParentRole>
      <Position>62</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R63.htm</HtmlFileName>
      <LongName>0000063 - Disclosure - Net Income Per Share - Components and Computation of Basic and Diluted Net Income Per Share (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail</Role>
      <ShortName>Net Income Per Share - Components and Computation of Basic and Diluted Net Income Per Share (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>63</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R64.htm</HtmlFileName>
      <LongName>0000064 - Disclosure - Net Income Per Share - Schedule of Anti-dilutive Common Shares Excluded from Calculation of Diluted Net Income Per Share (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/NetIncomePerShareScheduleofAntidilutiveCommonSharesExcludedfromCalculationofDilutedNetIncomePerShareDetail</Role>
      <ShortName>Net Income Per Share - Schedule of Anti-dilutive Common Shares Excluded from Calculation of Diluted Net Income Per Share (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>64</Position>
    </Report>
    <Report instance="spsc-20230331.htm">
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <HtmlFileName>R65.htm</HtmlFileName>
      <LongName>0000065 - Disclosure - Geographic Information - Summary of Domestic Revenue (Detail)</LongName>
      <ReportType>Sheet</ReportType>
      <Role>http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail</Role>
      <ShortName>Geographic Information - Summary of Domestic Revenue (Detail)</ShortName>
      <MenuCategory>Details</MenuCategory>
      <Position>65</Position>
    </Report>
    <Report>
      <IsDefault>false</IsDefault>
      <HasEmbeddedReports>false</HasEmbeddedReports>
      <LongName>All Reports</LongName>
      <ReportType>Book</ReportType>
      <ShortName>All Reports</ShortName>
    </Report>
  </MyReports>
  <Logs>
    <Log type="Warning">[dq-0542-Deprecated-Concept] Concept TreasuryStockMember in us-gaap/2022 used in 10 facts was deprecated in us-gaap/2023 as of 2023 and should not be used. spsc-20230331.htm 4</Log>
  </Logs>
  <InputFiles>
    <File doctype="10-Q" original="spsc-20230331.htm">spsc-20230331.htm</File>
    <File>q1_2023exhibitex311ceo.htm</File>
    <File>q1_2023exhibitex312cfo.htm</File>
    <File>q1_2023exhibitex321ceocfo.htm</File>
    <File>spsc-20230331.xsd</File>
    <File>spsc-20230331_cal.xml</File>
    <File>spsc-20230331_def.xml</File>
    <File>spsc-20230331_lab.xml</File>
    <File>spsc-20230331_pre.xml</File>
  </InputFiles>
  <SupplementalFiles>
    <File>spsc-20230331_g1.jpg</File>
    <File>spsc-20230331_g2.jpg</File>
  </SupplementalFiles>
  <BaseTaxonomies>
    <BaseTaxonomy items="509">http://fasb.org/us-gaap/2022</BaseTaxonomy>
    <BaseTaxonomy items="30">http://xbrl.sec.gov/dei/2022</BaseTaxonomy>
  </BaseTaxonomies>
  <HasPresentationLinkbase>true</HasPresentationLinkbase>
  <HasCalculationLinkbase>true</HasCalculationLinkbase>
</FilingSummary>
</XML>
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>JSON
<SEQUENCE>84
<FILENAME>MetaLinks.json
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
{
 "instance": {
  "spsc-20230331.htm": {
   "axisCustom": 0,
   "axisStandard": 17,
   "baseTaxonomies": {
    "http://fasb.org/us-gaap/2022": 509,
    "http://xbrl.sec.gov/dei/2022": 30
   },
   "contextCount": 120,
   "dts": {
    "calculationLink": {
     "local": [
      "spsc-20230331_cal.xml"
     ]
    },
    "definitionLink": {
     "local": [
      "spsc-20230331_def.xml"
     ]
    },
    "inline": {
     "local": [
      "spsc-20230331.htm"
     ]
    },
    "labelLink": {
     "local": [
      "spsc-20230331_lab.xml"
     ]
    },
    "presentationLink": {
     "local": [
      "spsc-20230331_pre.xml"
     ]
    },
    "schema": {
     "local": [
      "spsc-20230331.xsd"
     ],
     "remote": [
      "http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd",
      "http://www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd",
      "http://www.xbrl.org/2003/xl-2003-12-31.xsd",
      "http://www.xbrl.org/2003/xlink-2003-12-31.xsd",
      "http://www.xbrl.org/2005/xbrldt-2005.xsd",
      "http://www.xbrl.org/2006/ref-2006-02-27.xsd",
      "http://www.xbrl.org/lrr/role/negated-2009-12-16.xsd",
      "http://www.xbrl.org/lrr/role/net-2009-12-16.xsd",
      "http://www.xbrl.org/lrr/role/reference-2009-12-16.xsd",
      "https://www.xbrl.org/2020/extensible-enumerations-2.0.xsd",
      "https://www.xbrl.org/dtr/type/2020-01-21/types.xsd",
      "https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd",
      "https://xbrl.fasb.org/srt/2022/elts/srt-roles-2022.xsd",
      "https://xbrl.fasb.org/srt/2022/elts/srt-types-2022.xsd",
      "https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd",
      "https://xbrl.fasb.org/us-gaap/2022/elts/us-roles-2022.xsd",
      "https://xbrl.fasb.org/us-gaap/2022/elts/us-types-2022.xsd",
      "https://xbrl.sec.gov/country/2022/country-2022.xsd",
      "https://xbrl.sec.gov/dei/2022/dei-2022.xsd"
     ]
    }
   },
   "elementCount": 416,
   "entityCount": 1,
   "hidden": {
    "http://xbrl.sec.gov/dei/2022": 5,
    "total": 5
   },
   "keyCustom": 25,
   "keyStandard": 244,
   "memberCustom": 17,
   "memberStandard": 28,
   "nsprefix": "spsc",
   "nsuri": "http://www.spscommerce.com/20230331",
   "report": {
    "R1": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "dei:DocumentType",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "document",
     "isDefault": "true",
     "longName": "0000001 - Document - Cover",
     "menuCat": "Cover",
     "order": "1",
     "role": "http://www.spscommerce.com/role/Cover",
     "shortName": "Cover",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "dei:DocumentType",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R10": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:RevenueFromContractWithCustomerTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000010 - Disclosure - Revenue",
     "menuCat": "Notes",
     "order": "10",
     "role": "http://www.spscommerce.com/role/Revenue",
     "shortName": "Revenue",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:RevenueFromContractWithCustomerTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R11": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "spsc:DeferredCostsDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000011 - Disclosure - Deferred Costs",
     "menuCat": "Notes",
     "order": "11",
     "role": "http://www.spscommerce.com/role/DeferredCosts",
     "shortName": "Deferred Costs",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "spsc:DeferredCostsDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R12": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:FinancialInstrumentsDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000012 - Disclosure - Fair Value Measurements",
     "menuCat": "Notes",
     "order": "12",
     "role": "http://www.spscommerce.com/role/FairValueMeasurements",
     "shortName": "Fair Value Measurements",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:FinancialInstrumentsDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R13": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:AllowanceForCreditLossesTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000013 - Disclosure - Allowance for Credit Losses",
     "menuCat": "Notes",
     "order": "13",
     "role": "http://www.spscommerce.com/role/AllowanceforCreditLosses",
     "shortName": "Allowance for Credit Losses",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:AllowanceForCreditLossesTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R14": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:PropertyPlantAndEquipmentDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000014 - Disclosure - Property and Equipment, Net",
     "menuCat": "Notes",
     "order": "14",
     "role": "http://www.spscommerce.com/role/PropertyandEquipmentNet",
     "shortName": "Property and Equipment, Net",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:PropertyPlantAndEquipmentDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R15": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:GoodwillAndIntangibleAssetsDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000015 - Disclosure - Goodwill and Intangible Assets, Net",
     "menuCat": "Notes",
     "order": "15",
     "role": "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNet",
     "shortName": "Goodwill and Intangible Assets, Net",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:GoodwillAndIntangibleAssetsDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R16": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:CommitmentsAndContingenciesDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000016 - Disclosure - Commitments and Contingencies",
     "menuCat": "Notes",
     "order": "16",
     "role": "http://www.spscommerce.com/role/CommitmentsandContingencies",
     "shortName": "Commitments and Contingencies",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:CommitmentsAndContingenciesDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R17": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:StockholdersEquityNoteDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000017 - Disclosure - Stockholders' Equity",
     "menuCat": "Notes",
     "order": "17",
     "role": "http://www.spscommerce.com/role/StockholdersEquity",
     "shortName": "Stockholders' Equity",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:StockholdersEquityNoteDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R18": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000018 - Disclosure - Stock-Based Compensation",
     "menuCat": "Notes",
     "order": "18",
     "role": "http://www.spscommerce.com/role/StockBasedCompensation",
     "shortName": "Stock-Based Compensation",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R19": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:IncomeTaxDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000019 - Disclosure - Income Taxes",
     "menuCat": "Notes",
     "order": "19",
     "role": "http://www.spscommerce.com/role/IncomeTaxes",
     "shortName": "Income Taxes",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:IncomeTaxDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R2": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:CashAndCashEquivalentsAtCarryingValue",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "statement",
     "isDefault": "false",
     "longName": "0000002 - Statement - Condensed Consolidated Balance Sheets",
     "menuCat": "Statements",
     "order": "2",
     "role": "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets",
     "shortName": "Condensed Consolidated Balance Sheets",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:CashAndCashEquivalentsAtCarryingValue",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R20": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:OtherNonoperatingIncomeAndExpenseTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000020 - Disclosure - Other Income and Expense",
     "menuCat": "Notes",
     "order": "20",
     "role": "http://www.spscommerce.com/role/OtherIncomeandExpense",
     "shortName": "Other Income and Expense",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:OtherNonoperatingIncomeAndExpenseTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R21": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:EarningsPerShareTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000021 - Disclosure - Net Income Per Share",
     "menuCat": "Notes",
     "order": "21",
     "role": "http://www.spscommerce.com/role/NetIncomePerShare",
     "shortName": "Net Income Per Share",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:EarningsPerShareTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R22": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "spsc:GeographicInformationTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000022 - Disclosure - Geographic Information",
     "menuCat": "Notes",
     "order": "22",
     "role": "http://www.spscommerce.com/role/GeographicInformation",
     "shortName": "Geographic Information",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "spsc:GeographicInformationTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R23": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "spsc:BusinessDescriptionPolicyPolicyTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000023 - Disclosure - General (Policies)",
     "menuCat": "Policies",
     "order": "23",
     "role": "http://www.spscommerce.com/role/GeneralPolicies",
     "shortName": "General (Policies)",
     "subGroupType": "policies",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "spsc:BusinessDescriptionPolicyPolicyTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R24": {
     "firstAnchor": {
      "ancestors": [
       "div",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000024 - Disclosure - General (Tables)",
     "menuCat": "Tables",
     "order": "24",
     "role": "http://www.spscommerce.com/role/GeneralTables",
     "shortName": "General (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "div",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R25": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:DisaggregationOfRevenueTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000025 - Disclosure - Revenue (Tables)",
     "menuCat": "Tables",
     "order": "25",
     "role": "http://www.spscommerce.com/role/RevenueTables",
     "shortName": "Revenue (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:DisaggregationOfRevenueTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R26": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "spsc:DeferredCostsAndAmortizationTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000026 - Disclosure - Deferred Costs (Tables)",
     "menuCat": "Tables",
     "order": "26",
     "role": "http://www.spscommerce.com/role/DeferredCostsTables",
     "shortName": "Deferred Costs (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "spsc:DeferredCostsAndAmortizationTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R27": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000027 - Disclosure - Fair Value Measurements (Tables)",
     "menuCat": "Tables",
     "order": "27",
     "role": "http://www.spscommerce.com/role/FairValueMeasurementsTables",
     "shortName": "Fair Value Measurements (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R28": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000028 - Disclosure - Allowance for Credit Losses (Tables)",
     "menuCat": "Tables",
     "order": "28",
     "role": "http://www.spscommerce.com/role/AllowanceforCreditLossesTables",
     "shortName": "Allowance for Credit Losses (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R29": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:PropertyPlantAndEquipmentTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000029 - Disclosure - Property and Equipment, Net (Tables)",
     "menuCat": "Tables",
     "order": "29",
     "role": "http://www.spscommerce.com/role/PropertyandEquipmentNetTables",
     "shortName": "Property and Equipment, Net (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:PropertyPlantAndEquipmentTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R3": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "INF",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:PreferredStockParOrStatedValuePerShare",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usdPerShare",
      "xsiNil": "false"
     },
     "groupType": "statement",
     "isDefault": "false",
     "longName": "0000003 - Statement - Condensed Consolidated Balance Sheets (Parenthetical)",
     "menuCat": "Statements",
     "order": "3",
     "role": "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical",
     "shortName": "Condensed Consolidated Balance Sheets (Parenthetical)",
     "subGroupType": "parenthetical",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "INF",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:PreferredStockParOrStatedValuePerShare",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usdPerShare",
      "xsiNil": "false"
     }
    },
    "R30": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfGoodwillTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000030 - Disclosure - Goodwill and Intangible Assets, Net (Tables)",
     "menuCat": "Tables",
     "order": "30",
     "role": "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetTables",
     "shortName": "Goodwill and Intangible Assets, Net (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfGoodwillTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R31": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:LeaseCostTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000031 - Disclosure - Commitments and Contingencies (Tables)",
     "menuCat": "Tables",
     "order": "31",
     "role": "http://www.spscommerce.com/role/CommitmentsandContingenciesTables",
     "shortName": "Commitments and Contingencies (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:LeaseCostTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R32": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfTreasuryStockByClassTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000032 - Disclosure - Stockholders' Equity (Tables)",
     "menuCat": "Tables",
     "order": "32",
     "role": "http://www.spscommerce.com/role/StockholdersEquityTables",
     "shortName": "Stockholders' Equity (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfTreasuryStockByClassTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R33": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000033 - Disclosure - Stock-Based Compensation (Tables)",
     "menuCat": "Tables",
     "order": "33",
     "role": "http://www.spscommerce.com/role/StockBasedCompensationTables",
     "shortName": "Stock-Based Compensation (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R34": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000034 - Disclosure - Other Income and Expense (Tables)",
     "menuCat": "Tables",
     "order": "34",
     "role": "http://www.spscommerce.com/role/OtherIncomeandExpenseTables",
     "shortName": "Other Income and Expense (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R35": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000035 - Disclosure - Net Income Per Share (Tables)",
     "menuCat": "Tables",
     "order": "35",
     "role": "http://www.spscommerce.com/role/NetIncomePerShareTables",
     "shortName": "Net Income Per Share (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R36": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfProductInformationTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000036 - Disclosure - Geographic Information (Tables)",
     "menuCat": "Tables",
     "order": "36",
     "role": "http://www.spscommerce.com/role/GeographicInformationTables",
     "shortName": "Geographic Information (Tables)",
     "subGroupType": "tables",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ScheduleOfProductInformationTableTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R37": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i494bbf45b93640b8b137b284e56fea8c_D20220719-20220719",
      "decimals": "-5",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:BusinessCombinationConsiderationTransferred1",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000037 - Disclosure - Business Acquisitions - Narrative (Details)",
     "menuCat": "Details",
     "order": "37",
     "role": "http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails",
     "shortName": "Business Acquisitions - Narrative (Details)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i494bbf45b93640b8b137b284e56fea8c_D20220719-20220719",
      "decimals": "-5",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:BusinessCombinationConsiderationTransferred1",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R38": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax",
      "reportCount": 1,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000038 - Disclosure - Revenue - Summary of Revenues by Revenue Stream (Detail)",
     "menuCat": "Details",
     "order": "38",
     "role": "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail",
     "shortName": "Revenue - Summary of Revenues by Revenue Stream (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:DisaggregationOfRevenueTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "ic7f5ba10540447178ab71b4bb94aec7a_D20230101-20230331",
      "decimals": "-3",
      "lang": "en-US",
      "name": "us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R39": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "spsc:RecurringRevenuesTimingOfBillingsLatestPeriod",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000039 - Disclosure - Revenue - Narrative (Detail)",
     "menuCat": "Details",
     "order": "39",
     "role": "http://www.spscommerce.com/role/RevenueNarrativeDetail",
     "shortName": "Revenue - Narrative (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "spsc:RecurringRevenuesTimingOfBillingsLatestPeriod",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R4": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax",
      "reportCount": 1,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "statement",
     "isDefault": "false",
     "longName": "0000004 - Statement - Condensed Consolidated Statements of Comprehensive Income",
     "menuCat": "Statements",
     "order": "4",
     "role": "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome",
     "shortName": "Condensed Consolidated Statements of Comprehensive Income",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "lang": "en-US",
      "name": "us-gaap:CostOfRevenue",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R40": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ContractWithCustomerAssetAndLiabilityTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i33903016b04043ff8f3b903207f93675_I20221231",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ContractWithCustomerLiability",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000040 - Disclosure - Revenue - Summary of Deferred Revenue Liability Relating to Set-Up Fees (Detail)",
     "menuCat": "Details",
     "order": "40",
     "role": "http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail",
     "shortName": "Revenue - Summary of Deferred Revenue Liability Relating to Set-Up Fees (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ContractWithCustomerAssetAndLiabilityTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i33903016b04043ff8f3b903207f93675_I20221231",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ContractWithCustomerLiability",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R41": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "spsc:DeferredCostsAndAmortizationTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i074918b0d14149a8b0f12b21ce312a7c_I20221231",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:DeferredCostsCurrentAndNoncurrent",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000041 - Disclosure - Deferred Costs (Detail)",
     "menuCat": "Details",
     "order": "41",
     "role": "http://www.spscommerce.com/role/DeferredCostsDetail",
     "shortName": "Deferred Costs (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "spsc:DeferredCostsAndAmortizationTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i074918b0d14149a8b0f12b21ce312a7c_I20221231",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:DeferredCostsCurrentAndNoncurrent",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R42": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000042 - Disclosure - Fair Value Measurements - Summary of Cash Equivalents and Investments (Detail)",
     "menuCat": "Details",
     "order": "42",
     "role": "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail",
     "shortName": "Fair Value Measurements - Summary of Cash Equivalents and Investments (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:AvailableForSaleDebtSecuritiesAmortizedCostBasis",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R43": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i074918b0d14149a8b0f12b21ce312a7c_I20221231",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent",
      "reportCount": 1,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000043 - Disclosure - Allowance for Credit Losses (Detail)",
     "menuCat": "Details",
     "order": "43",
     "role": "http://www.spscommerce.com/role/AllowanceforCreditLossesDetail",
     "shortName": "Allowance for Credit Losses (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "id23181cd6ae24a028a249a4d25818065_I20211231",
      "decimals": "-3",
      "lang": "en-US",
      "name": "us-gaap:AllowanceForDoubtfulAccountsReceivableCurrent",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R44": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "us-gaap:PropertyPlantAndEquipmentTextBlock",
       "ix:continuation",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:PropertyPlantAndEquipmentGross",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000044 - Disclosure - Property and Equipment, Net (Details)",
     "menuCat": "Details",
     "order": "44",
     "role": "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails",
     "shortName": "Property and Equipment, Net (Details)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "us-gaap:PropertyPlantAndEquipmentTextBlock",
       "ix:continuation",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:PropertyPlantAndEquipmentGross",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R45": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i074918b0d14149a8b0f12b21ce312a7c_I20221231",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:Goodwill",
      "reportCount": 1,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000045 - Disclosure - Goodwill and Intangible Assets, Net - Schedule of Changes in Net Carrying Amount of Goodwill (Detail)",
     "menuCat": "Details",
     "order": "45",
     "role": "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetScheduleofChangesinNetCarryingAmountofGoodwillDetail",
     "shortName": "Goodwill and Intangible Assets, Net - Schedule of Changes in Net Carrying Amount of Goodwill (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfGoodwillTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "lang": "en-US",
      "name": "us-gaap:GoodwillForeignCurrencyTranslationGainLoss",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R46": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:FiniteLivedIntangibleAssetsGross",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000046 - Disclosure - Goodwill and Intangible Assets, Net - Intangible Assets (Detail)",
     "menuCat": "Details",
     "order": "46",
     "role": "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail",
     "shortName": "Goodwill and Intangible Assets, Net - Intangible Assets (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:FiniteLivedIntangibleAssetsGross",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R47": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000047 - Disclosure - Goodwill and Intangible Assets, Net - Estimated Future Annual Amortization Expense Related to Intangible Assets Subject to Amortization (Detail)",
     "menuCat": "Details",
     "order": "47",
     "role": "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail",
     "shortName": "Goodwill and Intangible Assets, Net - Estimated Future Annual Amortization Expense Related to Intangible Assets Subject to Amortization (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R48": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:LeaseCostTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:OperatingLeaseCost",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000048 - Disclosure - Commitments and Contingencies - Components of Lease Expense (Detail)",
     "menuCat": "Details",
     "order": "48",
     "role": "http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail",
     "shortName": "Commitments and Contingencies - Components of Lease Expense (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:LeaseCostTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:OperatingLeaseCost",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R49": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "spsc:ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:OperatingLeasePayments",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000049 - Disclosure - Commitments and Contingencies - Schedule of Supplemental Cash Flow Information Related to Leases (Detail)",
     "menuCat": "Details",
     "order": "49",
     "role": "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalCashFlowInformationRelatedtoLeasesDetail",
     "shortName": "Commitments and Contingencies - Schedule of Supplemental Cash Flow Information Related to Leases (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "spsc:ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:OperatingLeasePayments",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R5": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "statement",
     "isDefault": "false",
     "longName": "0000005 - Statement - Condensed Consolidated Statements of Comprehensive Income (Parenthetical)",
     "menuCat": "Statements",
     "order": "5",
     "role": "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncomeParenthetical",
     "shortName": "Condensed Consolidated Statements of Comprehensive Income (Parenthetical)",
     "subGroupType": "parenthetical",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R50": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "spsc:ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:OperatingLeaseWeightedAverageRemainingLeaseTerm1",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000050 - Disclosure - Commitments and Contingencies - Schedule of Supplemental Balance Sheet Information Related to Leases (Detail)",
     "menuCat": "Details",
     "order": "50",
     "role": "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalBalanceSheetInformationRelatedtoLeasesDetail",
     "shortName": "Commitments and Contingencies - Schedule of Supplemental Balance Sheet Information Related to Leases (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "spsc:ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:OperatingLeaseWeightedAverageRemainingLeaseTerm1",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R51": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:LesseeOperatingLeaseLiabilityMaturityTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000051 - Disclosure - Commitments and Contingencies - Schedule of Future Minimum Payments Under Operating Leases (Detail)",
     "menuCat": "Details",
     "order": "51",
     "role": "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail",
     "shortName": "Commitments and Contingencies - Schedule of Future Minimum Payments Under Operating Leases (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:LesseeOperatingLeaseLiabilityMaturityTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R52": {
     "firstAnchor": {
      "ancestors": [
       "ix:continuation",
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-5",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:PurchaseCommitmentRemainingMinimumAmountCommitted",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000052 - Disclosure - Commitments and Contingencies - Narrative (Detail)",
     "menuCat": "Details",
     "order": "52",
     "role": "http://www.spscommerce.com/role/CommitmentsandContingenciesNarrativeDetail",
     "shortName": "Commitments and Contingencies - Narrative (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "ix:continuation",
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-5",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:PurchaseCommitmentRemainingMinimumAmountCommitted",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R53": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:TreasuryStockCommonValue",
      "reportCount": 1,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000053 - Disclosure - Stockholders' Equity - Share Repurchase Plan (Details)",
     "menuCat": "Details",
     "order": "53",
     "role": "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails",
     "shortName": "Stockholders' Equity - Share Repurchase Plan (Details)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfTreasuryStockByClassTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "ic66b2fe6cc7a4bf9b038a88eb9c4f953_I20230331",
      "decimals": "-7",
      "lang": "en-US",
      "name": "us-gaap:StockRepurchaseProgramAuthorizedAmount1",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R54": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfTreasuryStockByClassTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "INF",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:TreasuryStockSharesAcquired",
      "reportCount": 1,
      "unitRef": "shares",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000054 - Disclosure - Stockholders' Equity - Stock Repurchase Activity (Details)",
     "menuCat": "Details",
     "order": "54",
     "role": "http://www.spscommerce.com/role/StockholdersEquityStockRepurchaseActivityDetails",
     "shortName": "Stockholders' Equity - Stock Repurchase Activity (Details)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfTreasuryStockByClassTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "2",
      "lang": "en-US",
      "name": "us-gaap:TreasuryStockAcquiredAverageCostPerShare",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usdPerShare",
      "xsiNil": "false"
     }
    },
    "R55": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-5",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant",
      "reportCount": 1,
      "unique": true,
      "unitRef": "shares",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000055 - Disclosure - Stock-Based Compensation - Narrative (Detail)",
     "menuCat": "Details",
     "order": "55",
     "role": "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
     "shortName": "Stock-Based Compensation - Narrative (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i3c3314e4b6ab4b059373b9922fd89803_I20230331",
      "decimals": "-5",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant",
      "reportCount": 1,
      "unique": true,
      "unitRef": "shares",
      "xsiNil": "false"
     }
    },
    "R56": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "ix:continuation",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:AllocatedShareBasedCompensationExpense",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000056 - Disclosure - Stock-Based Compensation - Stock-Based Compensation Expense (Detail)",
     "menuCat": "Details",
     "order": "56",
     "role": "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail",
     "shortName": "Stock-Based Compensation - Stock-Based Compensation Expense (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "ix:continuation",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:AllocatedShareBasedCompensationExpense",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R57": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i074918b0d14149a8b0f12b21ce312a7c_I20221231",
      "decimals": "INF",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber",
      "reportCount": 1,
      "unique": true,
      "unitRef": "shares",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000057 - Disclosure - Stock-Based Compensation - Stock Option Activity (Detail)",
     "menuCat": "Details",
     "order": "57",
     "role": "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail",
     "shortName": "Stock-Based Compensation - Stock Option Activity (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i074918b0d14149a8b0f12b21ce312a7c_I20221231",
      "decimals": "INF",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber",
      "reportCount": 1,
      "unique": true,
      "unitRef": "shares",
      "xsiNil": "false"
     }
    },
    "R58": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000058 - Disclosure - Stock-Based Compensation - Weighted Average Grant Date Fair Value of Options Granted, Assumptions (Detail)",
     "menuCat": "Details",
     "order": "58",
     "role": "http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail",
     "shortName": "Stock-Based Compensation - Weighted Average Grant Date Fair Value of Options Granted, Assumptions (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i8bfedaaee3a94a9090f3613fc3299847_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R59": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i8eae6a60d667472db9b3b0b29fa91b99_I20221231",
      "decimals": "INF",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber",
      "reportCount": 1,
      "unique": true,
      "unitRef": "shares",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000059 - Disclosure - Stock-Based Compensation - PSU, RSU, RSA, and DSU (Detail)",
     "menuCat": "Details",
     "order": "59",
     "role": "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail",
     "shortName": "Stock-Based Compensation - PSU, RSU, RSA, and DSU (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i8eae6a60d667472db9b3b0b29fa91b99_I20221231",
      "decimals": "INF",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber",
      "reportCount": 1,
      "unique": true,
      "unitRef": "shares",
      "xsiNil": "false"
     }
    },
    "R6": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i6c4d0a1e68ca4de9a8b11e4ce719a889_I20211231",
      "decimals": "INF",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:CommonStockSharesOutstanding",
      "reportCount": 1,
      "unique": true,
      "unitRef": "shares",
      "xsiNil": "false"
     },
     "groupType": "statement",
     "isDefault": "false",
     "longName": "0000006 - Statement - Condensed Consolidated Statements of Stockholders' Equity",
     "menuCat": "Statements",
     "order": "6",
     "role": "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity",
     "shortName": "Condensed Consolidated Statements of Stockholders' Equity",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i6c4d0a1e68ca4de9a8b11e4ce719a889_I20211231",
      "decimals": "INF",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:CommonStockSharesOutstanding",
      "reportCount": 1,
      "unique": true,
      "unitRef": "shares",
      "xsiNil": "false"
     }
    },
    "R60": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000060 - Disclosure - Stock-Based Compensation - Summary of ESPP Activity (Detail)",
     "menuCat": "Details",
     "order": "60",
     "role": "http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail",
     "shortName": "Stock-Based Compensation - Summary of ESPP Activity (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "spsc:ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R61": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000061 - Disclosure - Stock-Based Compensation - Fair Value Estimation of Common Stock Using Black-Scholes Option Pricing Model, Assumptions (Detail)",
     "menuCat": "Details",
     "order": "61",
     "role": "http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail",
     "shortName": "Stock-Based Compensation - Fair Value Estimation of Common Stock Using Black-Scholes Option Pricing Model, Assumptions (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "ib25032b5986f435ab3c714e9ca244ca6_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R62": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:InvestmentIncomeNet",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000062 - Disclosure - Other Income and Expense (Detail)",
     "menuCat": "Details",
     "order": "62",
     "role": "http://www.spscommerce.com/role/OtherIncomeandExpenseDetail",
     "shortName": "Other Income and Expense (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:InvestmentIncomeNet",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R63": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:NetIncomeLoss",
      "reportCount": 1,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000063 - Disclosure - Net Income Per Share - Components and Computation of Basic and Diluted Net Income Per Share (Detail)",
     "menuCat": "Details",
     "order": "63",
     "role": "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail",
     "shortName": "Net Income Per Share - Components and Computation of Basic and Diluted Net Income Per Share (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "lang": "en-US",
      "name": "us-gaap:IncrementalCommonSharesAttributableToShareBasedPaymentArrangements",
      "reportCount": 1,
      "unique": true,
      "unitRef": "shares",
      "xsiNil": "false"
     }
    },
    "R64": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount",
      "reportCount": 1,
      "unique": true,
      "unitRef": "shares",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000064 - Disclosure - Net Income Per Share - Schedule of Anti-dilutive Common Shares Excluded from Calculation of Diluted Net Income Per Share (Detail)",
     "menuCat": "Details",
     "order": "64",
     "role": "http://www.spscommerce.com/role/NetIncomePerShareScheduleofAntidilutiveCommonSharesExcludedfromCalculationofDilutedNetIncomePerShareDetail",
     "shortName": "Net Income Per Share - Schedule of Anti-dilutive Common Shares Excluded from Calculation of Diluted Net Income Per Share (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount",
      "reportCount": 1,
      "unique": true,
      "unitRef": "shares",
      "xsiNil": "false"
     }
    },
    "R65": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfProductInformationTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i09c91f829fc14da1b95accd9d3986fac_D20230101-20230331",
      "decimals": "2",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ConcentrationRiskPercentage1",
      "reportCount": 1,
      "unique": true,
      "unitRef": "number",
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000065 - Disclosure - Geographic Information - Summary of Domestic Revenue (Detail)",
     "menuCat": "Details",
     "order": "65",
     "role": "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail",
     "shortName": "Geographic Information - Summary of Domestic Revenue (Detail)",
     "subGroupType": "details",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "us-gaap:ScheduleOfProductInformationTableTextBlock",
       "ix:continuation",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i09c91f829fc14da1b95accd9d3986fac_D20230101-20230331",
      "decimals": "2",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:ConcentrationRiskPercentage1",
      "reportCount": 1,
      "unique": true,
      "unitRef": "number",
      "xsiNil": "false"
     }
    },
    "R7": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:NetIncomeLoss",
      "reportCount": 1,
      "unitRef": "usd",
      "xsiNil": "false"
     },
     "groupType": "statement",
     "isDefault": "false",
     "longName": "0000007 - Statement - Condensed Consolidated Statements of Cash Flows",
     "menuCat": "Statements",
     "order": "7",
     "role": "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows",
     "shortName": "Condensed Consolidated Statements of Cash Flows",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "td",
       "tr",
       "table",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": "-3",
      "lang": "en-US",
      "name": "us-gaap:DeferredIncomeTaxExpenseBenefit",
      "reportCount": 1,
      "unique": true,
      "unitRef": "usd",
      "xsiNil": "false"
     }
    },
    "R8": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000008 - Disclosure - General",
     "menuCat": "Notes",
     "order": "8",
     "role": "http://www.spscommerce.com/role/General",
     "shortName": "General",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    },
    "R9": {
     "firstAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:BusinessCombinationDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     },
     "groupType": "disclosure",
     "isDefault": "false",
     "longName": "0000009 - Disclosure - Business Acquisitions",
     "menuCat": "Notes",
     "order": "9",
     "role": "http://www.spscommerce.com/role/BusinessAcquisitions",
     "shortName": "Business Acquisitions",
     "subGroupType": "",
     "uniqueAnchor": {
      "ancestors": [
       "span",
       "div",
       "body",
       "html"
      ],
      "baseRef": "spsc-20230331.htm",
      "contextRef": "i82344f46a362411d8be3fffa3e5d24c0_D20230101-20230331",
      "decimals": null,
      "first": true,
      "lang": "en-US",
      "name": "us-gaap:BusinessCombinationDisclosureTextBlock",
      "reportCount": 1,
      "unique": true,
      "unitRef": null,
      "xsiNil": "false"
     }
    }
   },
   "segmentCount": 45,
   "tag": {
    "dei_AmendmentFlag": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Boolean flag that is true when the XBRL content amends previously-filed or accepted submission.",
        "label": "Amendment Flag",
        "terseLabel": "Amendment Flag"
       }
      }
     },
     "localname": "AmendmentFlag",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "booleanItemType"
    },
    "dei_CityAreaCode": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Area code of city",
        "label": "City Area Code",
        "terseLabel": "City Area Code"
       }
      }
     },
     "localname": "CityAreaCode",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "normalizedStringItemType"
    },
    "dei_CoverAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Cover page.",
        "label": "Cover [Abstract]",
        "terseLabel": "Cover [Abstract]"
       }
      }
     },
     "localname": "CoverAbstract",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "xbrltype": "stringItemType"
    },
    "dei_CurrentFiscalYearEndDate": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "End date of current fiscal year in the format --MM-DD.",
        "label": "Current Fiscal Year End Date",
        "terseLabel": "Current Fiscal Year End Date"
       }
      }
     },
     "localname": "CurrentFiscalYearEndDate",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "gMonthDayItemType"
    },
    "dei_DocumentFiscalPeriodFocus": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Fiscal period values are FY, Q1, Q2, and Q3.  1st, 2nd and 3rd quarter 10-Q or 10-QT statements have value Q1, Q2, and Q3 respectively, with 10-K, 10-KT or other fiscal year statements having FY.",
        "label": "Document Fiscal Period Focus",
        "verboseLabel": "Document Fiscal Period Focus"
       }
      }
     },
     "localname": "DocumentFiscalPeriodFocus",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "fiscalPeriodItemType"
    },
    "dei_DocumentFiscalYearFocus": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "This is focus fiscal year of the document report in YYYY format. For a 2006 annual report, which may also provide financial information from prior periods, fiscal 2006 should be given as the fiscal year focus. Example: 2006.",
        "label": "Document Fiscal Year Focus",
        "terseLabel": "Document Fiscal Year Focus"
       }
      }
     },
     "localname": "DocumentFiscalYearFocus",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "gYearItemType"
    },
    "dei_DocumentPeriodEndDate": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "For the EDGAR submission types of Form 8-K: the date of the report, the date of the earliest event reported; for the EDGAR submission types of Form N-1A: the filing date; for all other submission types: the end of the reporting or transition period.  The format of the date is YYYY-MM-DD.",
        "label": "Document Period End Date",
        "terseLabel": "Document Period End Date"
       }
      }
     },
     "localname": "DocumentPeriodEndDate",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "dateItemType"
    },
    "dei_DocumentQuarterlyReport": {
     "auth_ref": [
      "r517"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Boolean flag that is true only for a form used as an quarterly report.",
        "label": "Document Quarterly Report",
        "terseLabel": "Document Quarterly Report"
       }
      }
     },
     "localname": "DocumentQuarterlyReport",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "booleanItemType"
    },
    "dei_DocumentTransitionReport": {
     "auth_ref": [
      "r518"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Boolean flag that is true only for a form used as a transition report.",
        "label": "Document Transition Report",
        "terseLabel": "Document Transition Report"
       }
      }
     },
     "localname": "DocumentTransitionReport",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "booleanItemType"
    },
    "dei_DocumentType": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The type of document being provided (such as 10-K, 10-Q, 485BPOS, etc). The document type is limited to the same value as the supporting SEC submission type, or the word 'Other'.",
        "label": "Document Type",
        "verboseLabel": "Document Type"
       }
      }
     },
     "localname": "DocumentType",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "submissionTypeItemType"
    },
    "dei_EntityAddressAddressLine1": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Address Line 1 such as Attn, Building Name, Street Name",
        "label": "Entity Address, Address Line One",
        "terseLabel": "Entity Address, Address Line One"
       }
      }
     },
     "localname": "EntityAddressAddressLine1",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "normalizedStringItemType"
    },
    "dei_EntityAddressAddressLine2": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Address Line 2 such as Street or Suite number",
        "label": "Entity Address, Address Line Two",
        "terseLabel": "Entity Address, Address Line Two"
       }
      }
     },
     "localname": "EntityAddressAddressLine2",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "normalizedStringItemType"
    },
    "dei_EntityAddressCityOrTown": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Name of the City or Town",
        "label": "Entity Address, City or Town",
        "terseLabel": "Entity Address, City or Town"
       }
      }
     },
     "localname": "EntityAddressCityOrTown",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "normalizedStringItemType"
    },
    "dei_EntityAddressPostalZipCode": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Code for the postal or zip code",
        "label": "Entity Address, Postal Zip Code",
        "terseLabel": "Entity Address, Postal Zip Code"
       }
      }
     },
     "localname": "EntityAddressPostalZipCode",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "normalizedStringItemType"
    },
    "dei_EntityAddressStateOrProvince": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Name of the state or province.",
        "label": "Entity Address, State or Province",
        "terseLabel": "Entity Address, State or Province"
       }
      }
     },
     "localname": "EntityAddressStateOrProvince",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "stateOrProvinceItemType"
    },
    "dei_EntityCentralIndexKey": {
     "auth_ref": [
      "r515"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "A unique 10-digit SEC-issued value to identify entities that have filed disclosures with the SEC. It is commonly abbreviated as CIK.",
        "label": "Entity Central Index Key",
        "terseLabel": "Entity Central Index Key"
       }
      }
     },
     "localname": "EntityCentralIndexKey",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "centralIndexKeyItemType"
    },
    "dei_EntityCommonStockSharesOutstanding": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Indicate number of shares or other units outstanding of each of registrant's classes of capital or common stock or other ownership interests, if and as stated on cover of related periodic report. Where multiple classes or units exist define each class/interest by adding class of stock items such as Common Class A [Member], Common Class B [Member] or Partnership Interest [Member] onto the Instrument [Domain] of the Entity Listings, Instrument.",
        "label": "Entity Common Stock, Shares Outstanding",
        "terseLabel": "Entity Common Stock, Shares Outstanding"
       }
      }
     },
     "localname": "EntityCommonStockSharesOutstanding",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "sharesItemType"
    },
    "dei_EntityCurrentReportingStatus": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Indicate 'Yes' or 'No' whether registrants (1) have filed all reports required to be filed by Section 13 or 15(d) of the Securities Exchange Act of 1934 during the preceding 12 months (or for such shorter period that registrants were required to file such reports), and (2) have been subject to such filing requirements for the past 90 days. This information should be based on the registrant's current or most recent filing containing the related disclosure.",
        "label": "Entity Current Reporting Status",
        "terseLabel": "Entity Current Reporting Status"
       }
      }
     },
     "localname": "EntityCurrentReportingStatus",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "yesNoItemType"
    },
    "dei_EntityEmergingGrowthCompany": {
     "auth_ref": [
      "r515"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Indicate if registrant meets the emerging growth company criteria.",
        "label": "Entity Emerging Growth Company",
        "terseLabel": "Entity Emerging Growth Company"
       }
      }
     },
     "localname": "EntityEmergingGrowthCompany",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "booleanItemType"
    },
    "dei_EntityFileNumber": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Commission file number. The field allows up to 17 characters. The prefix may contain 1-3 digits, the sequence number may contain 1-8 digits, the optional suffix may contain 1-4 characters, and the fields are separated with a hyphen.",
        "label": "Entity File Number",
        "terseLabel": "Entity File Number"
       }
      }
     },
     "localname": "EntityFileNumber",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "fileNumberItemType"
    },
    "dei_EntityFilerCategory": {
     "auth_ref": [
      "r515"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Indicate whether the registrant is one of the following: Large Accelerated Filer, Accelerated Filer, Non-accelerated Filer. Definitions of these categories are stated in Rule 12b-2 of the Exchange Act. This information should be based on the registrant's current or most recent filing containing the related disclosure.",
        "label": "Entity Filer Category",
        "terseLabel": "Entity Filer Category"
       }
      }
     },
     "localname": "EntityFilerCategory",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "filerCategoryItemType"
    },
    "dei_EntityIncorporationStateCountryCode": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Two-character EDGAR code representing the state or country of incorporation.",
        "label": "Entity Incorporation, State or Country Code",
        "terseLabel": "Entity Incorporation, State or Country Code"
       }
      }
     },
     "localname": "EntityIncorporationStateCountryCode",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "edgarStateCountryItemType"
    },
    "dei_EntityInteractiveDataCurrent": {
     "auth_ref": [
      "r519"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Boolean flag that is true when the registrant has submitted electronically every Interactive Data File required to be submitted pursuant to Rule 405 of Regulation S-T during the preceding 12 months (or for such shorter period that the registrant was required to submit such files).",
        "label": "Entity Interactive Data Current",
        "terseLabel": "Entity Interactive Data Current"
       }
      }
     },
     "localname": "EntityInteractiveDataCurrent",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "yesNoItemType"
    },
    "dei_EntityRegistrantName": {
     "auth_ref": [
      "r515"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The exact name of the entity filing the report as specified in its charter, which is required by forms filed with the SEC.",
        "label": "Entity Registrant Name",
        "terseLabel": "Entity Registrant Name"
       }
      }
     },
     "localname": "EntityRegistrantName",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "normalizedStringItemType"
    },
    "dei_EntityShellCompany": {
     "auth_ref": [
      "r515"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Boolean flag that is true when the registrant is a shell company as defined in Rule 12b-2 of the Exchange Act.",
        "label": "Entity Shell Company",
        "terseLabel": "Entity Shell Company"
       }
      }
     },
     "localname": "EntityShellCompany",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "booleanItemType"
    },
    "dei_EntitySmallBusiness": {
     "auth_ref": [
      "r515"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Indicates that the company is a Smaller Reporting Company (SRC).",
        "label": "Entity Small Business",
        "terseLabel": "Entity Small Business"
       }
      }
     },
     "localname": "EntitySmallBusiness",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "booleanItemType"
    },
    "dei_EntityTaxIdentificationNumber": {
     "auth_ref": [
      "r515"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The Tax Identification Number (TIN), also known as an Employer Identification Number (EIN), is a unique 9-digit value assigned by the IRS.",
        "label": "Entity Tax Identification Number",
        "terseLabel": "Entity Tax Identification Number"
       }
      }
     },
     "localname": "EntityTaxIdentificationNumber",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "employerIdItemType"
    },
    "dei_LocalPhoneNumber": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Local phone number for entity.",
        "label": "Local Phone Number",
        "terseLabel": "Local Phone Number"
       }
      }
     },
     "localname": "LocalPhoneNumber",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "normalizedStringItemType"
    },
    "dei_Security12bTitle": {
     "auth_ref": [
      "r514"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Title of a 12(b) registered security.",
        "label": "Title of 12(b) Security",
        "terseLabel": "Title of 12(b) Security"
       }
      }
     },
     "localname": "Security12bTitle",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "securityTitleItemType"
    },
    "dei_SecurityExchangeName": {
     "auth_ref": [
      "r516"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Name of the Exchange on which a security is registered.",
        "label": "Security Exchange Name",
        "terseLabel": "Security Exchange Name"
       }
      }
     },
     "localname": "SecurityExchangeName",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "edgarExchangeCodeItemType"
    },
    "dei_TradingSymbol": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Trading symbol of an instrument as listed on an exchange.",
        "label": "Trading Symbol",
        "terseLabel": "Trading Symbol"
       }
      }
     },
     "localname": "TradingSymbol",
     "nsuri": "http://xbrl.sec.gov/dei/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Cover"
     ],
     "xbrltype": "tradingSymbolItemType"
    },
    "spsc_A2021StockRepurchaseProgramMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "2021 Stock Repurchase Program",
        "label": "2021 Stock Repurchase Program [Member]",
        "terseLabel": "2021 Share Repurchase Program"
       }
      }
     },
     "localname": "A2021StockRepurchaseProgramMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_A2022StockRepurchaseProgramMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "2022 Stock Repurchase Program",
        "label": "2022 Stock Repurchase Program [Member]",
        "terseLabel": "2022 Stock Repurchase Program"
       }
      }
     },
     "localname": "A2022StockRepurchaseProgramMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_AnalyticsMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Analytics.",
        "label": "Analytics [Member]",
        "terseLabel": "Analytics"
       }
      }
     },
     "localname": "AnalyticsMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_BusinessCombinationMeasurementPeriod": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Business Combination, Measurement Period",
        "label": "Business Combination, Measurement Period",
        "terseLabel": "Measurement period"
       }
      }
     },
     "localname": "BusinessCombinationMeasurementPeriod",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails"
     ],
     "xbrltype": "durationItemType"
    },
    "spsc_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets": {
     "auth_ref": [],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Business Combination, Provisional Information, Initial Accounting Incomplete, Adjustment, Deferred Income Tax Assets",
        "label": "Business Combination, Provisional Information, Initial Accounting Incomplete, Adjustment, Deferred Income Tax Assets",
        "negatedTerseLabel": "Decrease in estimated value of deferred income tax assets"
       }
      }
     },
     "localname": "BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentDeferredIncomeTaxAssets",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails"
     ],
     "xbrltype": "monetaryItemType"
    },
    "spsc_BusinessDescriptionPolicyPolicyTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Business description policy.",
        "label": "Business Description Policy [Policy Text Block]",
        "terseLabel": "Business Description"
       }
      }
     },
     "localname": "BusinessDescriptionPolicyPolicyTextBlock",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/GeneralPolicies"
     ],
     "xbrltype": "textBlockItemType"
    },
    "spsc_CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Cash paid for amounts included in the measurement of lease liabilities.",
        "label": "Cash Paid For Amounts Included In Measurement Of Lease Liabilities [Abstract]",
        "terseLabel": "Cash paid for amounts included in the measurement of lease liabilities"
       }
      }
     },
     "localname": "CashPaidForAmountsIncludedInMeasurementOfLeaseLiabilitiesAbstract",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalCashFlowInformationRelatedtoLeasesDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "spsc_ContractTermMaximum": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Contract Term Maximum",
        "label": "Contract Term Maximum",
        "terseLabel": "Contract term maximum"
       }
      }
     },
     "localname": "ContractTermMaximum",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueNarrativeDetail"
     ],
     "xbrltype": "durationItemType"
    },
    "spsc_CustomerContractCancellationPeriod": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Customer contract cancellation period.",
        "label": "Customer Contract Cancellation Period",
        "terseLabel": "Customer contract cancellation period"
       }
      }
     },
     "localname": "CustomerContractCancellationPeriod",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueNarrativeDetail"
     ],
     "xbrltype": "durationItemType"
    },
    "spsc_DeferredCostsAmortized": {
     "auth_ref": [],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Deferred costs amortized.",
        "label": "Deferred Costs Amortized",
        "terseLabel": "Amortized deferred costs"
       }
      }
     },
     "localname": "DeferredCostsAmortized",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/DeferredCostsDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "spsc_DeferredCostsAndAmortizationTableTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Deferred costs and amortization.",
        "label": "Deferred Costs And Amortization [Table Text Block]",
        "terseLabel": "Summary of Deferred Costs and Amortization of Deferred Costs"
       }
      }
     },
     "localname": "DeferredCostsAndAmortizationTableTextBlock",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/DeferredCostsTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "spsc_DeferredCostsDisclosureTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Deferred costs.",
        "label": "Deferred Costs Disclosure [Text Block]",
        "terseLabel": "Deferred Costs"
       }
      }
     },
     "localname": "DeferredCostsDisclosureTextBlock",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/DeferredCosts"
     ],
     "xbrltype": "textBlockItemType"
    },
    "spsc_DeferredCostsIncurred": {
     "auth_ref": [],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Deferred costs incurred.",
        "label": "Deferred Costs Incurred",
        "terseLabel": "Incurred deferred costs"
       }
      }
     },
     "localname": "DeferredCostsIncurred",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/DeferredCostsDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "spsc_DeferredCostsRollForward": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Deferred Costs",
        "label": "Deferred Costs [Roll Forward]",
        "terseLabel": "Deferred Costs [Roll Forward]"
       }
      }
     },
     "localname": "DeferredCostsRollForward",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/DeferredCostsDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "spsc_DeferredRevenueAmortizedSetUpFees": {
     "auth_ref": [],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Deferred revenue amortized set up fees.",
        "label": "Deferred Revenue Amortized Set Up Fees",
        "negatedLabel": "Recognized set-up fees"
       }
      }
     },
     "localname": "DeferredRevenueAmortizedSetUpFees",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "spsc_DeferredRevenueArrangementRollForward": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Deferred Revenue Arrangement",
        "label": "Deferred Revenue Arrangement [Roll Forward]",
        "terseLabel": "Deferred Revenue Arrangement [Roll Forward]"
       }
      }
     },
     "localname": "DeferredRevenueArrangementRollForward",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "spsc_DeferredRevenueInvoicedSetUpFees": {
     "auth_ref": [],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Deferred revenue Invoiced set up fees.",
        "label": "Deferred Revenue Invoiced Set Up Fees",
        "terseLabel": "Invoiced set-up fees"
       }
      }
     },
     "localname": "DeferredRevenueInvoicedSetUpFees",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "spsc_EarningsPerShareBasicAndDilutedEPSAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Earnings Per Share, Basic And Diluted EPS",
        "label": "Earnings Per Share, Basic And Diluted EPS [Abstract]",
        "terseLabel": "Net income per share"
       }
      }
     },
     "localname": "EarningsPerShareBasicAndDilutedEPSAbstract",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "spsc_EmployeeStockPurchasePlanMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Employee stock purchase plan.",
        "label": "Employee Stock Purchase Plan [Member]",
        "verboseLabel": "ESPP"
       }
      }
     },
     "localname": "EmployeeStockPurchasePlanMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss": {
     "auth_ref": [],
     "calculation": {
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail": {
       "order": 3.0,
       "parentTag": "us-gaap_FiniteLivedIntangibleAssetsNet",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Finite lived intangible assets accumulated foreign currency translation gain (loss).",
        "label": "Finite Lived Intangible Assets Accumulated Foreign Currency Translation Gain Loss",
        "terseLabel": "Foreign Currency Translation"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsAccumulatedForeignCurrencyTranslationGainLoss",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "spsc_FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour": {
     "auth_ref": [],
     "calculation": {
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail": {
       "order": 6.0,
       "parentTag": "us-gaap_FiniteLivedIntangibleAssetsNet",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Finite lived intangible assets, amortization expense after year four.",
        "label": "Finite Lived Intangible Assets Amortization Expense After Year Four",
        "terseLabel": "Thereafter"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsAmortizationExpenseAfterYearFour",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "spsc_FourZeroOneKStockMatchMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Four zero one (k) stock match.",
        "label": "Four Zero One K Stock Match [Member]",
        "terseLabel": "401(k) stock match"
       }
      }
     },
     "localname": "FourZeroOneKStockMatchMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_FulfillmentMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Fulfillment.",
        "label": "Fulfillment [Member]",
        "terseLabel": "Fulfillment"
       }
      }
     },
     "localname": "FulfillmentMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_GCommerceIncMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "GCommerce Inc",
        "label": "GCommerce Inc [Member]",
        "terseLabel": "GCommerce Inc"
       }
      }
     },
     "localname": "GCommerceIncMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_GeographicInformationTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure of geographic information.",
        "label": "Geographic Information [Text Block]",
        "terseLabel": "Geographic Information"
       }
      }
     },
     "localname": "GeographicInformationTextBlock",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformation"
     ],
     "xbrltype": "textBlockItemType"
    },
    "spsc_IncreaseDecreaseInOperatingLeases": {
     "auth_ref": [],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 15.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Increase decrease in operating leases.",
        "label": "Increase (Decrease) In Operating Leases",
        "terseLabel": "Operating leases"
       }
      }
     },
     "localname": "IncreaseDecreaseInOperatingLeases",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "spsc_InterTradeSystemsIncMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "InterTrade Systems Inc.",
        "label": "InterTrade Systems Inc. [Member]",
        "terseLabel": "InterTrade Systems Inc."
       }
      }
     },
     "localname": "InterTradeSystemsIncMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_InternallyDevelopedSoftwareMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Internally Developed Software",
        "label": "Internally Developed Software [Member]",
        "terseLabel": "Internally developed software"
       }
      }
     },
     "localname": "InternallyDevelopedSoftwareMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_MarketableSecuritiesMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Marketable Securities",
        "label": "Marketable Securities [Member]",
        "terseLabel": "Marketable Securities"
       }
      }
     },
     "localname": "MarketableSecuritiesMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_MaximumRecognitionPeriodForMiscellaneousOneTimeFee": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Maximum recognition period for miscellaneous one-time fee.",
        "label": "Maximum Recognition Period For Miscellaneous One Time Fee",
        "terseLabel": "Maximum recognition period for miscellaneous one-time fee"
       }
      }
     },
     "localname": "MaximumRecognitionPeriodForMiscellaneousOneTimeFee",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueNarrativeDetail"
     ],
     "xbrltype": "durationItemType"
    },
    "spsc_OfficeEquipmentAndFurnitureMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Office Equipment And Furniture",
        "label": "Office Equipment And Furniture [Member]",
        "terseLabel": "Office equipment and furniture"
       }
      }
     },
     "localname": "OfficeEquipmentAndFurnitureMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_OneTimeRevenuesMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "One time revenues.",
        "label": "One Time Revenues [Member]",
        "terseLabel": "One-time revenues"
       }
      }
     },
     "localname": "OneTimeRevenuesMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_OtherMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Other.",
        "label": "Other [Member]",
        "terseLabel": "Other"
       }
      }
     },
     "localname": "OtherMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Performance share units, restricted stock units, restricted stock awards, and deferred stock units.",
        "label": "Performance Share Units Restricted Stock Units Restricted Stock Awards And Deferred Stock Units [Member]",
        "terseLabel": "PSU, RSU, RSA, and DSU",
        "verboseLabel": "PSU, RSU, RSA, and DSU"
       }
      }
     },
     "localname": "PerformanceShareUnitsRestrictedStockUnitsRestrictedStockAwardsAndDeferredStockUnitsMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_RecurringRevenuesMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Recurring revenues.",
        "label": "Recurring Revenues [Member]",
        "terseLabel": "Recurring revenues"
       }
      }
     },
     "localname": "RecurringRevenuesMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_RecurringRevenuesTimingOfBillingsLatestPeriod": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Recurring revenues timing of billings latest period.",
        "label": "Recurring Revenues Timing Of Billings Latest Period",
        "terseLabel": "Latest timing of billings"
       }
      }
     },
     "localname": "RecurringRevenuesTimingOfBillingsLatestPeriod",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueNarrativeDetail"
     ],
     "xbrltype": "durationItemType"
    },
    "spsc_RestrictedStockUnitsAndDeferredStockUnitsMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Restricted stock units and deferred stock units member.",
        "label": "Restricted Stock Units And Deferred Stock Units [Member]",
        "terseLabel": "RSAs &amp; DSUs"
       }
      }
     },
     "localname": "RestrictedStockUnitsAndDeferredStockUnitsMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_RevenueRecognitionLineItems": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Revenue recognition.",
        "label": "Revenue Recognition [Line Items]",
        "terseLabel": "Revenue Recognition [Line Items]"
       }
      }
     },
     "localname": "RevenueRecognitionLineItems",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "spsc_RevenueRecognitionTable": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Revenue Recognition.",
        "label": "Revenue Recognition [Table]",
        "terseLabel": "Revenue Recognition [Table]"
       }
      }
     },
     "localname": "RevenueRecognitionTable",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "spsc_ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Schedule Of Percentage Of Property And Equipment Net",
        "label": "Schedule Of Percentage Of Property And Equipment Net [Table Text Block]",
        "terseLabel": "Schedule Of Percentage Of Property And Equipment Net"
       }
      }
     },
     "localname": "ScheduleOfPercentageOfPropertyAndEquipmentNetTableTextBlock",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "spsc_ScheduleOfStockholdersEquityLineItems": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Schedule of stockholders equity.",
        "label": "Schedule Of Stockholders Equity [Line Items]",
        "terseLabel": "Schedule Of Stockholders Equity [Line Items]"
       }
      }
     },
     "localname": "ScheduleOfStockholdersEquityLineItems",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "stringItemType"
    },
    "spsc_ScheduleOfStockholdersEquityTable": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Schedule of stockholders equity.",
        "label": "Schedule Of Stockholders Equity [Table]",
        "terseLabel": "Schedule Of Stockholders Equity [Table]"
       }
      }
     },
     "localname": "ScheduleOfStockholdersEquityTable",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "stringItemType"
    },
    "spsc_ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Schedule of supplemental balance sheet information related to leases.",
        "label": "Schedule Of Supplemental Balance Sheet Information Related To Leases Table [Table Text Block]",
        "terseLabel": "Schedule of Supplemental Balance Sheet Information Related to Leases"
       }
      }
     },
     "localname": "ScheduleOfSupplementalBalanceSheetInformationRelatedToLeasesTableTableTextBlock",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "spsc_ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Schedule of supplemental cash flow information related to leases.",
        "label": "Schedule Of Supplemental Cash Flow Information Related To Leases Table [Table Text Block]",
        "terseLabel": "Schedule of Supplemental Cash Flow Information Related to Leases"
       }
      }
     },
     "localname": "ScheduleOfSupplementalCashFlowInformationRelatedToLeasesTableTableTextBlock",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "spsc_SetUpFeesMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Set up fees.",
        "label": "Set Up Fees [Member]",
        "terseLabel": "Set-Up Fees"
       }
      }
     },
     "localname": "SetUpFeesMember",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "spsc_SetUpFeesRecognizedPeriod": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Set up fees recognized period.",
        "label": "Set Up Fees Recognized Period",
        "terseLabel": "Set up fees recognized period"
       }
      }
     },
     "localname": "SetUpFeesRecognizedPeriod",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueNarrativeDetail"
     ],
     "xbrltype": "durationItemType"
    },
    "spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Share-Based Compensation Arrangement By Share-Based Payment Award, Equity Instruments Other Than Options, Vested At Period End",
        "label": "Share-Based Compensation Arrangement By Share-Based Payment Award, Equity Instruments Other Than Options, Vested At Period End",
        "terseLabel": "Vested at period end (in shares)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedAtPeriodEnd",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "spsc_ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward": {
     "auth_ref": [],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Share-based compensation arrangement by share-based payment award value purchased for award.",
        "label": "Share Based Compensation Arrangement By Share Based Payment Award Value Purchased For Award",
        "terseLabel": "Share Based Compensation Arrangement By Share Based Payment Award Value Purchased For Award"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardValuePurchasedForAward",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "spsc_SignificantAccountingPoliciesPolicyPolicyTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Significant accounting policies.",
        "label": "Significant Accounting Policies Policy [Policy Text Block]",
        "terseLabel": "Significant Accounting Policies"
       }
      }
     },
     "localname": "SignificantAccountingPoliciesPolicyPolicyTextBlock",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/GeneralPolicies"
     ],
     "xbrltype": "textBlockItemType"
    },
    "spsc_TreasuryStockUnusedAndExpiredRepurchaseValue": {
     "auth_ref": [],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Treasury Stock, Unused and Expired Repurchase Value",
        "label": "Treasury Stock, Unused and Expired Repurchase Value",
        "terseLabel": "Unused &amp; Expired Share Repurchase Value"
       }
      }
     },
     "localname": "TreasuryStockUnusedAndExpiredRepurchaseValue",
     "nsuri": "http://www.spscommerce.com/20230331",
     "presentation": [
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "monetaryItemType"
    },
    "srt_MaximumMember": {
     "auth_ref": [
      "r269",
      "r270",
      "r271",
      "r272",
      "r314",
      "r436",
      "r452",
      "r465",
      "r466",
      "r496",
      "r508",
      "r513",
      "r555",
      "r568",
      "r569",
      "r570",
      "r571",
      "r572",
      "r573"
     ],
     "lang": {
      "en-us": {
       "role": {
        "label": "Maximum [Member]",
        "terseLabel": "Maximum"
       }
      }
     },
     "localname": "MaximumMember",
     "nsuri": "http://fasb.org/srt/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "srt_MinimumMember": {
     "auth_ref": [
      "r269",
      "r270",
      "r271",
      "r272",
      "r314",
      "r436",
      "r452",
      "r465",
      "r466",
      "r496",
      "r508",
      "r513",
      "r555",
      "r568",
      "r569",
      "r570",
      "r571",
      "r572",
      "r573"
     ],
     "lang": {
      "en-us": {
       "role": {
        "label": "Minimum [Member]",
        "terseLabel": "Minimum"
       }
      }
     },
     "localname": "MinimumMember",
     "nsuri": "http://fasb.org/srt/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueNarrativeDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "srt_ProductOrServiceAxis": {
     "auth_ref": [
      "r234",
      "r438",
      "r497",
      "r512",
      "r550",
      "r551",
      "r557",
      "r576"
     ],
     "lang": {
      "en-us": {
       "role": {
        "label": "Product and Service [Axis]",
        "terseLabel": "Product and Service"
       }
      }
     },
     "localname": "ProductOrServiceAxis",
     "nsuri": "http://fasb.org/srt/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "srt_ProductsAndServicesDomain": {
     "auth_ref": [
      "r234",
      "r438",
      "r497",
      "r512",
      "r550",
      "r551",
      "r557",
      "r576"
     ],
     "lang": {
      "en-us": {
       "role": {
        "label": "Product and Service [Domain]",
        "terseLabel": "Product and Service"
       }
      }
     },
     "localname": "ProductsAndServicesDomain",
     "nsuri": "http://fasb.org/srt/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "srt_RangeAxis": {
     "auth_ref": [
      "r269",
      "r270",
      "r271",
      "r272",
      "r313",
      "r314",
      "r342",
      "r343",
      "r344",
      "r412",
      "r436",
      "r452",
      "r465",
      "r466",
      "r496",
      "r508",
      "r513",
      "r549",
      "r555",
      "r569",
      "r570",
      "r571",
      "r572",
      "r573"
     ],
     "lang": {
      "en-us": {
       "role": {
        "label": "Statistical Measurement [Axis]",
        "terseLabel": "Statistical Measurement"
       }
      }
     },
     "localname": "RangeAxis",
     "nsuri": "http://fasb.org/srt/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "srt_RangeMember": {
     "auth_ref": [
      "r269",
      "r270",
      "r271",
      "r272",
      "r313",
      "r314",
      "r342",
      "r343",
      "r344",
      "r412",
      "r436",
      "r452",
      "r465",
      "r466",
      "r496",
      "r508",
      "r513",
      "r549",
      "r555",
      "r569",
      "r570",
      "r571",
      "r572",
      "r573"
     ],
     "lang": {
      "en-us": {
       "role": {
        "label": "Statistical Measurement [Domain]",
        "terseLabel": "Statistical Measurement"
       }
      }
     },
     "localname": "RangeMember",
     "nsuri": "http://fasb.org/srt/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_AccountsPayableCurrent": {
     "auth_ref": [
      "r9",
      "r511"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 1.0,
       "parentTag": "us-gaap_LiabilitiesCurrent",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Carrying value as of the balance sheet date of liabilities incurred (and for which invoices have typically been received) and payable to vendors for goods and services received that are used in an entity's business. Used to reflect the current portion of the liabilities (due within one year or within the normal operating cycle if longer).",
        "label": "Accounts Payable, Current",
        "terseLabel": "Accounts payable"
       }
      }
     },
     "localname": "AccountsPayableCurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AccountsReceivableGrossCurrent": {
     "auth_ref": [
      "r151",
      "r237",
      "r238",
      "r486"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 1.0,
       "parentTag": "us-gaap_AccountsReceivableNetCurrent",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount, before allowance for credit loss, of right to consideration from customer for product sold and service rendered in normal course of business, classified as current.",
        "label": "Accounts Receivable, before Allowance for Credit Loss, Current",
        "terseLabel": "Accounts receivable"
       }
      }
     },
     "localname": "AccountsReceivableGrossCurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AccountsReceivableNetCurrent": {
     "auth_ref": [
      "r237",
      "r238"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 3.0,
       "parentTag": "us-gaap_AssetsCurrent",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount, after allowance for credit loss, of right to consideration from customer for product sold and service rendered in normal course of business, classified as current.",
        "label": "Accounts Receivable, after Allowance for Credit Loss, Current",
        "totalLabel": "Accounts receivable, net"
       }
      }
     },
     "localname": "AccountsReceivableNetCurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AccruedLiabilitiesCurrent": {
     "auth_ref": [
      "r11"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 3.0,
       "parentTag": "us-gaap_LiabilitiesCurrent",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Carrying value as of the balance sheet date of obligations incurred and payable, pertaining to costs that are statutory in nature, are incurred on contractual obligations, or accumulate over time and for which invoices have not yet been received or will not be rendered. Examples include taxes, interest, rent and utilities. Used to reflect the current portion of the liabilities (due within one year or within the normal operating cycle if longer).",
        "label": "Accrued Liabilities, Current",
        "terseLabel": "Accrued expenses"
       }
      }
     },
     "localname": "AccruedLiabilitiesCurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment": {
     "auth_ref": [
      "r71",
      "r146"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails": {
       "order": 2.0,
       "parentTag": "us-gaap_PropertyPlantAndEquipmentNet",
       "weight": -1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of accumulated depreciation, depletion and amortization for physical assets used in the normal conduct of business to produce goods and services.",
        "label": "Accumulated Depreciation, Depletion and Amortization, Property, Plant, and Equipment",
        "negatedTerseLabel": "Less: accumulated depreciation and amortization"
       }
      }
     },
     "localname": "AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AccumulatedOtherComprehensiveIncomeLossNetOfTax": {
     "auth_ref": [
      "r19",
      "r21",
      "r22",
      "r152",
      "r448",
      "r457",
      "r458"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 6.0,
       "parentTag": "us-gaap_StockholdersEquity",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Accumulated change in equity from transactions and other events and circumstances from non-owner sources, net of tax effect, at period end. Excludes Net Income (Loss), and accumulated changes in equity from transactions resulting from investments by owners and distributions to owners. Includes foreign currency translation items, certain pension adjustments, unrealized gains and losses on certain investments in debt and equity securities, other than temporary impairment (OTTI) losses related to factors other than credit losses on available-for-sale and held-to-maturity debt securities that an entity does not intend to sell and it is not more likely than not that the entity will be required to sell before recovery of the amortized cost basis, as well as changes in the fair value of derivatives related to the effective portion of a designated cash flow hedge.",
        "label": "Accumulated Other Comprehensive Income (Loss), Net of Tax",
        "terseLabel": "Accumulated other comprehensive loss"
       }
      }
     },
     "localname": "AccumulatedOtherComprehensiveIncomeLossNetOfTax",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AccumulatedOtherComprehensiveIncomeMember": {
     "auth_ref": [
      "r18",
      "r22",
      "r111",
      "r405",
      "r453",
      "r454",
      "r522",
      "r523",
      "r524",
      "r528",
      "r529",
      "r530"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Accumulated increase (decrease) in equity from transactions and other events and circumstances from non-owner sources, attributable to the parent. Excludes net income (loss), and accumulated changes in equity from transactions resulting from investments by owners and distributions to owners.",
        "label": "AOCI Attributable to Parent [Member]",
        "terseLabel": "Accumulated Other Comprehensive Loss"
       }
      }
     },
     "localname": "AccumulatedOtherComprehensiveIncomeMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_AdditionalPaidInCapitalCommonStock": {
     "auth_ref": [
      "r4"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 4.0,
       "parentTag": "us-gaap_StockholdersEquity",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Value received from shareholders in common stock-related transactions that are in excess of par value or stated value and amounts received from other stock-related transactions. Includes only common stock transactions (excludes preferred stock transactions). May be called contributed capital, capital in excess of par, capital surplus, or paid-in capital.",
        "label": "Additional Paid in Capital, Common Stock",
        "terseLabel": "Additional paid-in capital"
       }
      }
     },
     "localname": "AdditionalPaidInCapitalCommonStock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AdditionalPaidInCapitalMember": {
     "auth_ref": [
      "r351",
      "r352",
      "r353",
      "r528",
      "r529",
      "r530",
      "r561"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Excess of issue price over par or stated value of the entity's capital stock and amounts received from other transactions involving the entity's stock or stockholders.",
        "label": "Additional Paid-in Capital [Member]",
        "terseLabel": "Additional Paid-in Capital"
       }
      }
     },
     "localname": "AdditionalPaidInCapitalMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue": {
     "auth_ref": [
      "r94",
      "r95",
      "r316"
     ],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of increase to additional paid-in capital (APIC) for recognition of cost for award under share-based payment arrangement.",
        "label": "APIC, Share-Based Payment Arrangement, Increase for Cost Recognition",
        "terseLabel": "Stock-based compensation"
       }
      }
     },
     "localname": "AdjustmentsToAdditionalPaidInCapitalSharebasedCompensationRequisiteServicePeriodRecognitionValue",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Adjustments to Reconcile Net Income (Loss) to Cash Provided by (Used in) Operating Activities [Abstract]",
        "terseLabel": "Reconciliation of net income to net cash provided by operating activities"
       }
      }
     },
     "localname": "AdjustmentsToReconcileNetIncomeLossToCashProvidedByUsedInOperatingActivitiesAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_AllocatedShareBasedCompensationExpense": {
     "auth_ref": [
      "r346"
     ],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of expense for award under share-based payment arrangement. Excludes amount capitalized.",
        "label": "Share-Based Payment Arrangement, Expense",
        "terseLabel": "Stock-based compensation expense"
       }
      }
     },
     "localname": "AllocatedShareBasedCompensationExpense",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AllowanceForCreditLossAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Allowance for Credit Loss [Abstract]",
        "terseLabel": "Allowance for Credit Loss [Abstract]"
       }
      }
     },
     "localname": "AllowanceForCreditLossAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock": {
     "auth_ref": [
      "r57",
      "r537"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of allowance for credit loss on financing receivable.",
        "label": "Financing Receivable, Allowance for Credit Loss [Table Text Block]",
        "terseLabel": "Schedule of Allowance for Credit Losses Activity Included in Accounts Receivable Net"
       }
      }
     },
     "localname": "AllowanceForCreditLossesOnFinancingReceivablesTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/AllowanceforCreditLossesTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_AllowanceForCreditLossesTextBlock": {
     "auth_ref": [
      "r59"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure for allowance for credit losses.",
        "label": "Allowance for Credit Losses [Text Block]",
        "terseLabel": "Allowance for Credit Losses"
       }
      }
     },
     "localname": "AllowanceForCreditLossesTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/AllowanceforCreditLosses"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_AllowanceForDoubtfulAccountsReceivableCurrent": {
     "auth_ref": [
      "r153",
      "r239",
      "r247"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 2.0,
       "parentTag": "us-gaap_AccountsReceivableNetCurrent",
       "weight": -1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of allowance for credit loss on accounts receivable, classified as current.",
        "label": "Accounts Receivable, Allowance for Credit Loss, Current",
        "negatedLabel": "Allowance for credit losses",
        "periodEndLabel": "Balance, end of period",
        "periodStartLabel": "Balance, beginning of period"
       }
      }
     },
     "localname": "AllowanceForDoubtfulAccountsReceivableCurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/AllowanceforCreditLossesDetail",
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AllowanceForDoubtfulAccountsReceivableRollforward": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "A roll forward is a reconciliation of a concept from the beginning of a period to the end of a period.",
        "label": "Accounts Receivable, Allowance for Credit Loss [Roll Forward]",
        "terseLabel": "Accounts Receivable, Allowance for Credit Loss [Roll Forward]"
       }
      }
     },
     "localname": "AllowanceForDoubtfulAccountsReceivableRollforward",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/AllowanceforCreditLossesDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_AllowanceForDoubtfulAccountsReceivableWriteOffs": {
     "auth_ref": [
      "r250"
     ],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of direct write-downs of accounts receivable charged against the allowance.",
        "label": "Accounts Receivable, Allowance for Credit Loss, Writeoff",
        "negatedLabel": "Write-offs, net of recoveries"
       }
      }
     },
     "localname": "AllowanceForDoubtfulAccountsReceivableWriteOffs",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/AllowanceforCreditLossesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AmortizationOfIntangibleAssets": {
     "auth_ref": [
      "r42",
      "r63",
      "r67"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 4.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": 1.0
      },
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 4.0,
       "parentTag": "us-gaap_OperatingExpenses",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The aggregate expense charged against earnings to allocate the cost of intangible assets (nonphysical assets not used in production) in a systematic and rational manner to the periods expected to benefit from such assets. As a noncash expense, this element is added back to net income when calculating cash provided by or used in operations using the indirect method.",
        "label": "Amortization of Intangible Assets",
        "terseLabel": "Amortization of intangible assets"
       }
      }
     },
     "localname": "AmortizationOfIntangibleAssets",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount": {
     "auth_ref": [
      "r211"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Securities (including those issuable pursuant to contingent stock agreements) that could potentially dilute basic earnings per share (EPS) or earnings per unit (EPU) in the future that were not included in the computation of diluted EPS or EPU because to do so would increase EPS or EPU amounts or decrease loss per share or unit amounts for the period presented.",
        "label": "Antidilutive Securities Excluded from Computation of Earnings Per Share, Amount",
        "terseLabel": "Antidilutive shares (in shares)"
       }
      }
     },
     "localname": "AntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareAmount",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/NetIncomePerShareScheduleofAntidilutiveCommonSharesExcludedfromCalculationofDilutedNetIncomePerShareDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_ArrangementsAndNonarrangementTransactionsMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Collaborative arrangement and arrangement other than collaborative applicable to revenue-generating activity or operations.",
        "label": "Collaborative Arrangement and Arrangement Other than Collaborative [Domain]",
        "terseLabel": "Collaborative Arrangement and Arrangement Other than Collaborative"
       }
      }
     },
     "localname": "ArrangementsAndNonarrangementTransactionsMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_Assets": {
     "auth_ref": [
      "r120",
      "r131",
      "r150",
      "r177",
      "r225",
      "r228",
      "r232",
      "r245",
      "r273",
      "r274",
      "r275",
      "r276",
      "r277",
      "r278",
      "r279",
      "r280",
      "r281",
      "r375",
      "r377",
      "r384",
      "r511",
      "r553",
      "r554",
      "r566"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Sum of the carrying amounts as of the balance sheet date of all assets that are recognized. Assets are probable future economic benefits obtained or controlled by an entity as a result of past transactions or events.",
        "label": "Assets",
        "totalLabel": "Total assets"
       }
      }
     },
     "localname": "Assets",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AssetsAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Assets [Abstract]",
        "terseLabel": "ASSETS"
       }
      }
     },
     "localname": "AssetsAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_AssetsCurrent": {
     "auth_ref": [
      "r142",
      "r155",
      "r177",
      "r245",
      "r273",
      "r274",
      "r275",
      "r276",
      "r277",
      "r278",
      "r279",
      "r280",
      "r281",
      "r375",
      "r377",
      "r384",
      "r511",
      "r553",
      "r554",
      "r566"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 1.0,
       "parentTag": "us-gaap_Assets",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Sum of the carrying amounts as of the balance sheet date of all assets that are expected to be realized in cash, sold, or consumed within one year (or the normal operating cycle, if longer). Assets are probable future economic benefits obtained or controlled by an entity as a result of past transactions or events.",
        "label": "Assets, Current",
        "totalLabel": "Total current assets"
       }
      }
     },
     "localname": "AssetsCurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AssetsCurrentAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Assets, Current [Abstract]",
        "terseLabel": "Current assets"
       }
      }
     },
     "localname": "AssetsCurrentAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis": {
     "auth_ref": [
      "r241",
      "r255"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amortized cost of investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale).",
        "label": "Debt Securities, Available-for-Sale, Amortized Cost",
        "totalLabel": "Amortized Cost"
       }
      }
     },
     "localname": "AvailableForSaleDebtSecuritiesAmortizedCostBasis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AvailableForSaleSecuritiesDebtSecurities": {
     "auth_ref": [
      "r61",
      "r240",
      "r255",
      "r442"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail": {
       "order": 2.0,
       "parentTag": "us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale).",
        "label": "Debt Securities, Available-for-Sale",
        "terseLabel": "Fair Value"
       }
      }
     },
     "localname": "AvailableForSaleSecuritiesDebtSecurities",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_AwardTypeAxis": {
     "auth_ref": [
      "r320",
      "r321",
      "r322",
      "r323",
      "r324",
      "r325",
      "r326",
      "r327",
      "r328",
      "r329",
      "r330",
      "r331",
      "r332",
      "r333",
      "r334",
      "r335",
      "r336",
      "r337",
      "r338",
      "r339",
      "r340",
      "r341",
      "r342",
      "r343",
      "r344",
      "r345"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by type of award under share-based payment arrangement.",
        "label": "Award Type [Axis]",
        "terseLabel": "Award Type"
       }
      }
     },
     "localname": "AwardTypeAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_BalanceSheetLocationAxis": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by location on balance sheet (statement of financial position).",
        "label": "Balance Sheet Location [Axis]",
        "terseLabel": "Balance Sheet Location [Axis]"
       }
      }
     },
     "localname": "BalanceSheetLocationAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_BalanceSheetLocationDomain": {
     "auth_ref": [
      "r113",
      "r114"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Location in the balance sheet (statement of financial position).",
        "label": "Balance Sheet Location [Domain]",
        "terseLabel": "Balance Sheet Location [Domain]"
       }
      }
     },
     "localname": "BalanceSheetLocationDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_BasisOfAccountingPolicyPolicyTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Disclosure of accounting policy for basis of accounting, or basis of presentation, used to prepare the financial statements (for example, US Generally Accepted Accounting Principles, Other Comprehensive Basis of Accounting, IFRS).",
        "label": "Basis of Accounting, Policy [Policy Text Block]",
        "terseLabel": "Basis of Presentation"
       }
      }
     },
     "localname": "BasisOfAccountingPolicyPolicyTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeneralPolicies"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_BusinessAcquisitionAcquireeDomain": {
     "auth_ref": [
      "r373",
      "r506",
      "r507"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Identification of the acquiree in a material business combination (or series of individually immaterial business combinations), which may include the name or other type of identification of the acquiree.",
        "label": "Business Acquisition, Acquiree [Domain]",
        "terseLabel": "Business Acquisition, Acquiree"
       }
      }
     },
     "localname": "BusinessAcquisitionAcquireeDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_BusinessAcquisitionAxis": {
     "auth_ref": [
      "r99",
      "r100",
      "r373",
      "r506",
      "r507"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by business combination or series of individually immaterial business combinations.",
        "label": "Business Acquisition [Axis]",
        "terseLabel": "Business Acquisition"
       }
      }
     },
     "localname": "BusinessAcquisitionAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_BusinessAcquisitionLineItems": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.",
        "label": "Business Acquisition [Line Items]",
        "terseLabel": "Business Acquisition [Line Items]"
       }
      }
     },
     "localname": "BusinessAcquisitionLineItems",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_BusinessCombinationAndAssetAcquisitionAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Business Combination and Asset Acquisition [Abstract]"
       }
      }
     },
     "localname": "BusinessCombinationAndAssetAcquisitionAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_BusinessCombinationConsiderationTransferred1": {
     "auth_ref": [
      "r104",
      "r105",
      "r106"
     ],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of consideration transferred, consisting of acquisition-date fair value of assets transferred by the acquirer, liabilities incurred by the acquirer, and equity interest issued by the acquirer.",
        "label": "Business Combination, Consideration Transferred",
        "terseLabel": "Purchase price"
       }
      }
     },
     "localname": "BusinessCombinationConsiderationTransferred1",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_BusinessCombinationDisclosureTextBlock": {
     "auth_ref": [
      "r107",
      "r374"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure for a business combination (or series of individually immaterial business combinations) completed during the period, including background, timing, and recognized assets and liabilities. The disclosure may include leverage buyout transactions (as applicable).",
        "label": "Business Combination Disclosure [Text Block]",
        "terseLabel": "Business Acquisitions"
       }
      }
     },
     "localname": "BusinessCombinationDisclosureTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/BusinessAcquisitions"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred": {
     "auth_ref": [
      "r101"
     ],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "This element represents the amount of any measurement period adjustment (as defined) realized during the reporting period to items of consideration transferred in connection with a business combination for which the initial accounting was incomplete.",
        "label": "Business Combination, Provisional Information, Initial Accounting Incomplete, Adjustment, Consideration Transferred",
        "negatedTerseLabel": "Decrease in purchase price due to measurement period adjustment"
       }
      }
     },
     "localname": "BusinessCombinationProvisionalInformationInitialAccountingIncompleteAdjustmentConsiderationTransferred",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_CashAndCashEquivalentsAtCarryingValue": {
     "auth_ref": [
      "r44",
      "r144",
      "r485"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 1.0,
       "parentTag": "us-gaap_AssetsCurrent",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of currency on hand as well as demand deposits with banks or financial institutions. Includes other kinds of accounts that have the general characteristics of demand deposits. Also includes short-term, highly liquid investments that are both readily convertible to known amounts of cash and so near their maturity that they present insignificant risk of changes in value because of changes in interest rates. Excludes cash and cash equivalents within disposal group and discontinued operation.",
        "label": "Cash and Cash Equivalents, at Carrying Value",
        "terseLabel": "Cash and cash equivalents"
       }
      }
     },
     "localname": "CashAndCashEquivalentsAtCarryingValue",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations": {
     "auth_ref": [
      "r39",
      "r44",
      "r45"
     ],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of cash and cash equivalents, and cash and cash equivalents restricted to withdrawal or usage; including, but not limited to, disposal group and discontinued operations. Cash includes, but is not limited to, currency on hand, demand deposits with banks or financial institutions, and other accounts with general characteristics of demand deposits. Cash equivalents include, but are not limited to, short-term, highly liquid investments that are both readily convertible to known amounts of cash and so near their maturity that they present insignificant risk of changes in value because of changes in interest rates.",
        "label": "Cash, Cash Equivalents, Restricted Cash, and Restricted Cash Equivalents, Including Disposal Group and Discontinued Operations",
        "periodEndLabel": "Cash and cash equivalents at end of period",
        "periodStartLabel": "Cash and cash equivalents at beginning of period"
       }
      }
     },
     "localname": "CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect": {
     "auth_ref": [
      "r39",
      "r117"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of increase (decrease) in cash, cash equivalents, and cash and cash equivalents restricted to withdrawal or usage; including effect from exchange rate change. Cash includes, but is not limited to, currency on hand, demand deposits with banks or financial institutions, and other accounts with general characteristics of demand deposits. Cash equivalents include, but are not limited to, short-term, highly liquid investments that are both readily convertible to known amounts of cash and so near their maturity that they present insignificant risk of changes in value because of changes in interest rates.",
        "label": "Cash, Cash Equivalents, Restricted Cash, and Restricted Cash Equivalents, Period Increase (Decrease), Including Exchange Rate Effect",
        "totalLabel": "Net increase (decrease) in cash and cash equivalents"
       }
      }
     },
     "localname": "CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_CashEquivalentsMember": {
     "auth_ref": [
      "r144"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Short-term, highly liquid investments that are both readily convertible to known amounts of cash and so near their maturity that they present insignificant risk of changes in value because of changes in interest rates.",
        "label": "Cash Equivalents [Member]",
        "terseLabel": "Cash Equivalents"
       }
      }
     },
     "localname": "CashEquivalentsMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_CertificatesOfDepositMember": {
     "auth_ref": [
      "r128"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Short to medium-term investment available at banks and savings and loan institutions where a customer agrees to lend money to the institution for a certain amount of time and is paid a predetermined rate of interest. Certificates of deposit (CD) are typically Federal Deposit Insurance Corporation (FDIC) insured.",
        "label": "Certificates of Deposit [Member]",
        "terseLabel": "Investments:"
       }
      }
     },
     "localname": "CertificatesOfDepositMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_CommercialPaperMember": {
     "auth_ref": [
      "r75"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Unsecured promissory note (generally negotiable) that provides institutions with short-term funds.",
        "label": "Commercial Paper [Member]",
        "terseLabel": "Commercial paper"
       }
      }
     },
     "localname": "CommercialPaperMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_CommitmentsAndContingencies": {
     "auth_ref": [
      "r13",
      "r125",
      "r136"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 2.0,
       "parentTag": "us-gaap_LiabilitiesAndStockholdersEquity",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Represents the caption on the face of the balance sheet to indicate that the entity has entered into (1) purchase or supply arrangements that will require expending a portion of its resources to meet the terms thereof, and (2) is exposed to potential losses or, less frequently, gains, arising from (a) possible claims against a company's resources due to future performance under contract terms, and (b) possible losses or likely gains from uncertainties that will ultimately be resolved when one or more future events that are deemed likely to occur do occur or fail to occur.",
        "label": "Commitments and Contingencies",
        "terseLabel": "Commitments and contingencies"
       }
      }
     },
     "localname": "CommitmentsAndContingencies",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_CommitmentsAndContingenciesDisclosureAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Commitments and Contingencies Disclosure [Abstract]",
        "terseLabel": "Commitments and Contingencies Disclosure [Abstract]"
       }
      }
     },
     "localname": "CommitmentsAndContingenciesDisclosureAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_CommitmentsAndContingenciesDisclosureTextBlock": {
     "auth_ref": [
      "r74",
      "r267",
      "r268",
      "r461",
      "r552"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure for commitments and contingencies.",
        "label": "Commitments and Contingencies Disclosure [Text Block]",
        "terseLabel": "Commitments and Contingencies"
       }
      }
     },
     "localname": "CommitmentsAndContingenciesDisclosureTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingencies"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_CommonStockMember": {
     "auth_ref": [
      "r528",
      "r529",
      "r561"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Stock that is subordinate to all other stock of the issuer.",
        "label": "Common Stock [Member]",
        "terseLabel": "Common Stock"
       }
      }
     },
     "localname": "CommonStockMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity",
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_CommonStockParOrStatedValuePerShare": {
     "auth_ref": [
      "r3"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Face amount or stated value per share of common stock.",
        "label": "Common Stock, Par or Stated Value Per Share",
        "terseLabel": "Common stock, par value (in dollars per share)"
       }
      }
     },
     "localname": "CommonStockParOrStatedValuePerShare",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_CommonStockSharesAuthorized": {
     "auth_ref": [
      "r3"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The maximum number of common shares permitted to be issued by an entity's charter and bylaws.",
        "label": "Common Stock, Shares Authorized",
        "terseLabel": "Common stock, shares authorized (in shares)"
       }
      }
     },
     "localname": "CommonStockSharesAuthorized",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_CommonStockSharesIssued": {
     "auth_ref": [
      "r3"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Total number of common shares of an entity that have been sold or granted to shareholders (includes common shares that were issued, repurchased and remain in the treasury). These shares represent capital invested by the firm's shareholders and owners, and may be all or only a portion of the number of shares authorized. Shares issued include shares outstanding and shares held in the treasury.",
        "label": "Common Stock, Shares, Issued",
        "terseLabel": "Common stock, shares issued (in shares)"
       }
      }
     },
     "localname": "CommonStockSharesIssued",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_CommonStockSharesOutstanding": {
     "auth_ref": [
      "r3",
      "r76"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Number of shares of common stock outstanding. Common stock represent the ownership interest in a corporation.",
        "label": "Common Stock, Shares, Outstanding",
        "periodEndLabel": "Ending balance (in shares)",
        "periodStartLabel": "Beginning balance (in shares)",
        "terseLabel": "Common stock, shares outstanding (in shares)"
       }
      }
     },
     "localname": "CommonStockSharesOutstanding",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_CommonStockValue": {
     "auth_ref": [
      "r3",
      "r511"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 2.0,
       "parentTag": "us-gaap_StockholdersEquity",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Aggregate par or stated value of issued nonredeemable common stock (or common stock redeemable solely at the option of the issuer). This item includes treasury stock repurchased by the entity. Note: elements for number of nonredeemable common shares, par value and other disclosure concepts are in another section within stockholders' equity.",
        "label": "Common Stock, Value, Issued",
        "terseLabel": "Common stock, $0.001 par value; 110,000,000 shares authorized; 38,683,854 and 38,309,144 shares issued; and 36,532,756 and 36,158,046 shares outstanding, respectively"
       }
      }
     },
     "localname": "CommonStockValue",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_ComprehensiveIncomeNetOfTax": {
     "auth_ref": [
      "r24",
      "r162",
      "r164",
      "r168",
      "r443",
      "r449"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount after tax of increase (decrease) in equity from transactions and other events and circumstances from net income and other comprehensive income, attributable to parent entity. Excludes changes in equity resulting from investments by owners and distributions to owners.",
        "label": "Comprehensive Income (Loss), Net of Tax, Attributable to Parent",
        "totalLabel": "Comprehensive income"
       }
      }
     },
     "localname": "ComprehensiveIncomeNetOfTax",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_ComputerEquipmentMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Long lived, depreciable assets that are used in the creation, maintenance and utilization of information systems.",
        "label": "Computer Equipment [Member]",
        "terseLabel": "Computer equipment"
       }
      }
     },
     "localname": "ComputerEquipmentMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_ConcentrationRiskBenchmarkDomain": {
     "auth_ref": [
      "r52",
      "r53",
      "r115",
      "r116",
      "r236",
      "r460"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The denominator in a calculation of a disclosed concentration risk percentage.",
        "label": "Concentration Risk Benchmark [Domain]",
        "terseLabel": "Concentration Risk Benchmark"
       }
      }
     },
     "localname": "ConcentrationRiskBenchmarkDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_ConcentrationRiskByBenchmarkAxis": {
     "auth_ref": [
      "r52",
      "r53",
      "r115",
      "r116",
      "r236",
      "r459",
      "r460"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by benchmark of concentration risk.",
        "label": "Concentration Risk Benchmark [Axis]",
        "terseLabel": "Concentration Risk Benchmark"
       }
      }
     },
     "localname": "ConcentrationRiskByBenchmarkAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ConcentrationRiskByTypeAxis": {
     "auth_ref": [
      "r52",
      "r53",
      "r115",
      "r116",
      "r236",
      "r460",
      "r577"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by type of concentration risk, for example, but not limited to, asset, liability, net assets, geographic, customer, employees, supplier, lender.",
        "label": "Concentration Risk Type [Axis]",
        "terseLabel": "Concentration Risk Type"
       }
      }
     },
     "localname": "ConcentrationRiskByTypeAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ConcentrationRiskPercentage1": {
     "auth_ref": [
      "r52",
      "r53",
      "r115",
      "r116",
      "r236"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "For an entity that discloses a concentration risk in relation to quantitative amount, which serves as the \"benchmark\" (or denominator) in the equation, this concept represents the concentration percentage derived from the division.",
        "label": "Concentration Risk, Percentage",
        "terseLabel": "Concentration risk, percentage"
       }
      }
     },
     "localname": "ConcentrationRiskPercentage1",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail"
     ],
     "xbrltype": "percentItemType"
    },
    "us-gaap_ConcentrationRiskTypeDomain": {
     "auth_ref": [
      "r52",
      "r53",
      "r115",
      "r116",
      "r236",
      "r460"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "For an entity that discloses a concentration risk as a percentage of some financial balance or benchmark, identifies the type (for example, asset, liability, net assets, geographic, customer, employees, supplier, lender) of the concentration.",
        "label": "Concentration Risk Type [Domain]",
        "terseLabel": "Concentration Risk Type"
       }
      }
     },
     "localname": "ConcentrationRiskTypeDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_ContractWithCustomerAssetAndLiabilityTableTextBlock": {
     "auth_ref": [
      "r556"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of receivable, contract asset, and contract liability from contract with customer. Includes, but is not limited to, change in contract asset and contract liability.",
        "label": "Contract with Customer, Contract Asset, Contract Liability, and Receivable [Table Text Block]",
        "terseLabel": "Summary of Deferred Revenue Liability Relating to Set-Up Fees"
       }
      }
     },
     "localname": "ContractWithCustomerAssetAndLiabilityTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ContractWithCustomerDurationAxis": {
     "auth_ref": [
      "r501",
      "r557"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by duration of contract with customer. Includes, but is not limited to, short-term and long-term contracts.",
        "label": "Contract with Customer, Duration [Axis]",
        "terseLabel": "Contract with Customer, Duration"
       }
      }
     },
     "localname": "ContractWithCustomerDurationAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ContractWithCustomerDurationDomain": {
     "auth_ref": [
      "r501",
      "r557"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Duration of contract with customer. Includes, but is not limited to, short-term and long-term contracts.",
        "label": "Contract with Customer, Duration [Domain]",
        "terseLabel": "Contract with Customer, Duration"
       }
      }
     },
     "localname": "ContractWithCustomerDurationDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_ContractWithCustomerLiability": {
     "auth_ref": [
      "r298",
      "r299",
      "r310"
     ],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of obligation to transfer good or service to customer for which consideration has been received or is receivable.",
        "label": "Contract with Customer, Liability",
        "periodEndLabel": "Balance, end of period",
        "periodStartLabel": "Balance, beginning of period"
       }
      }
     },
     "localname": "ContractWithCustomerLiability",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_ContractWithCustomerLiabilityCurrent": {
     "auth_ref": [
      "r298",
      "r299",
      "r310"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 4.0,
       "parentTag": "us-gaap_LiabilitiesCurrent",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of obligation to transfer good or service to customer for which consideration has been received or is receivable, classified as current.",
        "label": "Contract with Customer, Liability, Current",
        "terseLabel": "Deferred revenue"
       }
      }
     },
     "localname": "ContractWithCustomerLiabilityCurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_ContractWithCustomerLiabilityNoncurrent": {
     "auth_ref": [
      "r298",
      "r299",
      "r310"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 2.0,
       "parentTag": "us-gaap_Liabilities",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of obligation to transfer good or service to customer for which consideration has been received or is receivable, classified as noncurrent.",
        "label": "Contract with Customer, Liability, Noncurrent",
        "terseLabel": "Deferred revenue, non-current"
       }
      }
     },
     "localname": "ContractWithCustomerLiabilityNoncurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_CostOfRevenue": {
     "auth_ref": [
      "r29",
      "r177",
      "r245",
      "r273",
      "r274",
      "r275",
      "r276",
      "r277",
      "r278",
      "r279",
      "r280",
      "r281",
      "r384",
      "r553"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 2.0,
       "parentTag": "us-gaap_GrossProfit",
       "weight": -1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The aggregate cost of goods produced and sold and services rendered during the reporting period.",
        "label": "Cost of Revenue",
        "terseLabel": "Cost of revenues"
       }
      }
     },
     "localname": "CostOfRevenue",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_CostOfSalesMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Primary financial statement caption encompassing cost of sales.",
        "label": "Cost of Sales [Member]",
        "terseLabel": "Cost of revenues"
       }
      }
     },
     "localname": "CostOfSalesMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_CustomerRelationshipsMember": {
     "auth_ref": [
      "r103"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Customer relationship that exists between an entity and its customer, for example, but not limited to, tenant relationships.",
        "label": "Customer Relationships [Member]",
        "terseLabel": "Subscriber relationships"
       }
      }
     },
     "localname": "CustomerRelationshipsMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax": {
     "auth_ref": [],
     "calculation": {
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail": {
       "order": 1.0,
       "parentTag": "us-gaap_AvailableForSaleDebtSecuritiesAmortizedCostBasis",
       "weight": -1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount, before tax, of unrealized gain (loss) in accumulated other comprehensive income (AOCI) on investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale).",
        "label": "Debt Securities, Available-for-Sale, Accumulated Gross Unrealized Gain (Loss), before Tax",
        "terseLabel": "Unrealized Gains (Losses), net"
       }
      }
     },
     "localname": "DebtSecuritiesAvailableForSaleAccumulatedGrossUnrealizedGainLossBeforeTax",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_DebtSecuritiesAvailableForSaleTable": {
     "auth_ref": [
      "r244"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Disclosure of information about investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale).",
        "label": "Debt Securities, Available-for-Sale [Table]",
        "terseLabel": "Schedule Of Financial Instruments [Table]"
       }
      }
     },
     "localname": "DebtSecuritiesAvailableForSaleTable",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Number of common shares reserved for future issuance related to deferred compensation arrangements with individuals.",
        "label": "Deferred Compensation Arrangement with Individual, Common Stock Reserved for Future Issuance",
        "terseLabel": "Common stock reserved for future issuance (in shares)"
       }
      }
     },
     "localname": "DeferredCompensationArrangementWithIndividualCommonStockReservedForFutureIssuance",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_DeferredCosts": {
     "auth_ref": [
      "r119",
      "r130",
      "r520"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 6.0,
       "parentTag": "us-gaap_Assets",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of deferred cost, excluding capitalized cost related to contract with customer; classified as noncurrent.",
        "label": "Deferred Costs, Noncurrent",
        "terseLabel": "Deferred costs, non-current"
       }
      }
     },
     "localname": "DeferredCosts",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_DeferredCostsAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Deferred Costs [Abstract]",
        "terseLabel": "Deferred Costs [Abstract]"
       }
      }
     },
     "localname": "DeferredCostsAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_DeferredCostsCurrent": {
     "auth_ref": [
      "r521"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 4.0,
       "parentTag": "us-gaap_AssetsCurrent",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Sum of the carrying amounts as of the balance sheet date of deferred costs capitalized at the end of the reporting period that are expected to be charged against earnings within one year or the normal operating cycle, if longer.",
        "label": "Deferred Costs, Current",
        "terseLabel": "Deferred costs"
       }
      }
     },
     "localname": "DeferredCostsCurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_DeferredCostsCurrentAndNoncurrent": {
     "auth_ref": [],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The carrying amount of deferred costs.",
        "label": "Deferred Costs",
        "periodEndLabel": "Balance, end of period",
        "periodStartLabel": "Balance, beginning of period"
       }
      }
     },
     "localname": "DeferredCostsCurrentAndNoncurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/DeferredCostsDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_DeferredIncomeTaxAssetsNet": {
     "auth_ref": [
      "r355",
      "r356"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 7.0,
       "parentTag": "us-gaap_Assets",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount, after allocation of valuation allowances and deferred tax liability, of deferred tax asset attributable to deductible differences and carryforwards, with jurisdictional netting.",
        "label": "Deferred Income Tax Assets, Net",
        "terseLabel": "Deferred income tax assets"
       }
      }
     },
     "localname": "DeferredIncomeTaxAssetsNet",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_DeferredIncomeTaxExpenseBenefit": {
     "auth_ref": [
      "r42",
      "r97",
      "r361",
      "r366",
      "r367",
      "r527"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 2.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of deferred income tax expense (benefit) pertaining to income (loss) from continuing operations.",
        "label": "Deferred Income Tax Expense (Benefit)",
        "terseLabel": "Deferred income taxes"
       }
      }
     },
     "localname": "DeferredIncomeTaxExpenseBenefit",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_DeferredIncomeTaxLiabilitiesNet": {
     "auth_ref": [
      "r355",
      "r356"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 4.0,
       "parentTag": "us-gaap_Liabilities",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount, after deferred tax asset, of deferred tax liability attributable to taxable differences with jurisdictional netting.",
        "label": "Deferred Income Tax Liabilities, Net",
        "terseLabel": "Deferred income tax liabilities"
       }
      }
     },
     "localname": "DeferredIncomeTaxLiabilitiesNet",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_DeferredRevenueArrangementByTypeTable": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Schedule of deferred revenue disclosure which includes the type of arrangements and the corresponding amount that comprise the current and noncurrent balance of deferred revenue as of the balance sheet date.",
        "label": "Deferred Revenue Arrangement, by Type [Table]",
        "terseLabel": "Deferred Revenue Arrangement By Type [Table]"
       }
      }
     },
     "localname": "DeferredRevenueArrangementByTypeTable",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_DeferredRevenueArrangementLineItems": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.",
        "label": "Deferred Revenue Arrangement [Line Items]",
        "terseLabel": "Deferred Revenue Arrangement [Line Items]"
       }
      }
     },
     "localname": "DeferredRevenueArrangementLineItems",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_DepreciationDepletionAndAmortization": {
     "auth_ref": [
      "r42",
      "r223"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 3.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The aggregate expense recognized in the current period that allocates the cost of tangible assets, intangible assets, or depleting assets to periods that benefit from use of the assets.",
        "label": "Depreciation, Depletion and Amortization",
        "terseLabel": "Depreciation and amortization of property and equipment"
       }
      }
     },
     "localname": "DepreciationDepletionAndAmortization",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_DisaggregationOfRevenueLineItems": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.",
        "label": "Disaggregation of Revenue [Line Items]",
        "terseLabel": "Disaggregation Of Revenue [Line Items]"
       }
      }
     },
     "localname": "DisaggregationOfRevenueLineItems",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail",
      "http://www.spscommerce.com/role/RevenueNarrativeDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_DisaggregationOfRevenueTable": {
     "auth_ref": [
      "r309",
      "r497",
      "r498",
      "r499",
      "r500",
      "r501",
      "r502",
      "r503"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Disclosure of information about disaggregation of revenue into categories depicting how nature, amount, timing, and uncertainty of revenue and cash flows are affected by economic factor.",
        "label": "Disaggregation of Revenue [Table]",
        "terseLabel": "Disaggregation Of Revenue [Table]"
       }
      }
     },
     "localname": "DisaggregationOfRevenueTable",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail",
      "http://www.spscommerce.com/role/RevenueNarrativeDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_DisaggregationOfRevenueTableTextBlock": {
     "auth_ref": [
      "r557"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of disaggregation of revenue into categories depicting how nature, amount, timing, and uncertainty of revenue and cash flows are affected by economic factor.",
        "label": "Disaggregation of Revenue [Table Text Block]",
        "terseLabel": "Summary of Revenues by Revenue Stream"
       }
      }
     },
     "localname": "DisaggregationOfRevenueTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock": {
     "auth_ref": [
      "r319",
      "r347",
      "r348",
      "r350",
      "r354",
      "r509"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure for share-based payment arrangement.",
        "label": "Share-Based Payment Arrangement [Text Block]",
        "terseLabel": "Stock-Based Compensation"
       }
      }
     },
     "localname": "DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensation"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Share-Based Payment Arrangement [Abstract]",
        "terseLabel": "Share-based Payment Arrangement [Abstract]"
       }
      }
     },
     "localname": "DisclosureOfCompensationRelatedCostsSharebasedPaymentsAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_EarningsPerShareAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Earnings Per Share [Abstract]",
        "terseLabel": "Net income per share"
       }
      }
     },
     "localname": "EarningsPerShareAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_EarningsPerShareBasic": {
     "auth_ref": [
      "r169",
      "r185",
      "r186",
      "r187",
      "r188",
      "r189",
      "r193",
      "r195",
      "r208",
      "r209",
      "r210",
      "r214",
      "r382",
      "r383",
      "r444",
      "r450",
      "r488"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The amount of net income (loss) for the period per each share of common stock or unit outstanding during the reporting period.",
        "label": "Earnings Per Share, Basic",
        "terseLabel": "Basic (in dollars per share)"
       }
      }
     },
     "localname": "EarningsPerShareBasic",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome",
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_EarningsPerShareDiluted": {
     "auth_ref": [
      "r169",
      "r185",
      "r186",
      "r187",
      "r188",
      "r189",
      "r195",
      "r208",
      "r209",
      "r210",
      "r214",
      "r382",
      "r383",
      "r444",
      "r450",
      "r488"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The amount of net income (loss) for the period available to each share of common stock or common unit outstanding during the reporting period and to each share or unit that would have been outstanding assuming the issuance of common shares or units for all dilutive potential common shares or units outstanding during the reporting period.",
        "label": "Earnings Per Share, Diluted",
        "terseLabel": "Diluted (in dollars per share)"
       }
      }
     },
     "localname": "EarningsPerShareDiluted",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome",
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_EarningsPerShareTextBlock": {
     "auth_ref": [
      "r211",
      "r212",
      "r213",
      "r215"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure for earnings per share.",
        "label": "Earnings Per Share [Text Block]",
        "terseLabel": "Net Income Per Share"
       }
      }
     },
     "localname": "EarningsPerShareTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/NetIncomePerShare"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations": {
     "auth_ref": [
      "r563"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 4.0,
       "parentTag": "us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of increase (decrease) from effect of exchange rate changes on cash and cash equivalents, and cash and cash equivalents restricted to withdrawal or usage; held in foreign currencies; including, but not limited to, disposal group and discontinued operations. Cash includes, but is not limited to, currency on hand, demand deposits with banks or financial institutions, and other accounts with general characteristics of demand deposits. Cash equivalents include, but are not limited to, short-term, highly liquid investments that are both readily convertible to known amounts of cash and so near their maturity that they present insignificant risk of changes in value because of changes in interest rates.",
        "label": "Effect of Exchange Rate on Cash, Cash Equivalents, Restricted Cash, and Restricted Cash Equivalents, Including Disposal Group and Discontinued Operations",
        "terseLabel": "Effect of foreign currency exchange rate changes"
       }
      }
     },
     "localname": "EffectOfExchangeRateOnCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsIncludingDisposalGroupAndDiscontinuedOperations",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_EmployeeRelatedLiabilitiesCurrent": {
     "auth_ref": [
      "r11"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 2.0,
       "parentTag": "us-gaap_LiabilitiesCurrent",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Total of the carrying values as of the balance sheet date of obligations incurred through that date and payable for obligations related to services received from employees, such as accrued salaries and bonuses, payroll taxes and fringe benefits. Used to reflect the current portion of the liabilities (due within one year or within the normal operating cycle if longer).",
        "label": "Employee-related Liabilities, Current",
        "terseLabel": "Accrued compensation"
       }
      }
     },
     "localname": "EmployeeRelatedLiabilitiesCurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.",
        "label": "Share-Based Payment Arrangement, Expensed and Capitalized, Amount [Line Items]",
        "terseLabel": "Share-based Compensation Arrangement by Share-based Payment Award, Compensation Cost [Line Items]"
       }
      }
     },
     "localname": "EmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsLineItems",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized": {
     "auth_ref": [
      "r349"
     ],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of cost not yet recognized for nonvested award under share-based payment arrangement.",
        "label": "Share-Based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Amount",
        "terseLabel": "Unrecognized stock-based compensation expense"
       }
      }
     },
     "localname": "EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognized",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1": {
     "auth_ref": [
      "r349"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Weighted-average period over which cost not yet recognized is expected to be recognized for award under share-based payment arrangement, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents reported fact of one year, five months, and thirteen days.",
        "label": "Share-Based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Period for Recognition",
        "terseLabel": "Unrecognized stock-based compensation, expected to be recognized, weighted average period"
       }
      }
     },
     "localname": "EmployeeServiceShareBasedCompensationNonvestedAwardsTotalCompensationCostNotYetRecognizedPeriodForRecognition1",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail"
     ],
     "xbrltype": "durationItemType"
    },
    "us-gaap_EmployeeStockMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "An Employee Stock Purchase Plan is a tax-efficient means by which employees of a corporation can purchase the corporation's stock.",
        "label": "Employee Stock [Member]",
        "terseLabel": "Employee Stock Purchase Plan"
       }
      }
     },
     "localname": "EmployeeStockMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_EmployeeStockOptionMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Share-based payment arrangement granting right, subject to vesting and other restrictions, to purchase or sell certain number of shares at predetermined price for specified period of time.",
        "label": "Share-Based Payment Arrangement, Option [Member]",
        "terseLabel": "Stock options"
       }
      }
     },
     "localname": "EmployeeStockOptionMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_EquityAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Equity [Abstract]",
        "terseLabel": "Equity [Abstract]"
       }
      }
     },
     "localname": "EquityAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_EquityComponentDomain": {
     "auth_ref": [
      "r76",
      "r140",
      "r165",
      "r166",
      "r167",
      "r180",
      "r181",
      "r182",
      "r184",
      "r190",
      "r192",
      "r216",
      "r246",
      "r297",
      "r351",
      "r352",
      "r353",
      "r362",
      "r363",
      "r381",
      "r389",
      "r390",
      "r391",
      "r392",
      "r393",
      "r394",
      "r405",
      "r453",
      "r454",
      "r455"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Components of equity are the parts of the total Equity balance including that which is allocated to common, preferred, treasury stock, retained earnings, etc.",
        "label": "Equity Component [Domain]",
        "terseLabel": "Equity Component"
       }
      }
     },
     "localname": "EquityComponentDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity",
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_FairValueDisclosuresAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Fair Value Disclosures [Abstract]",
        "terseLabel": "Fair Value Disclosures [Abstract]"
       }
      }
     },
     "localname": "FairValueDisclosuresAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_FinancialInstrumentAxis": {
     "auth_ref": [
      "r242",
      "r243",
      "r248",
      "r251",
      "r252",
      "r253",
      "r254",
      "r256",
      "r257",
      "r258",
      "r282",
      "r295",
      "r379",
      "r406",
      "r407",
      "r408",
      "r409",
      "r410",
      "r411",
      "r412",
      "r413",
      "r414",
      "r415",
      "r416",
      "r417",
      "r418",
      "r419",
      "r420",
      "r421",
      "r422",
      "r423",
      "r424",
      "r425",
      "r426",
      "r427",
      "r428",
      "r429",
      "r430",
      "r431",
      "r432",
      "r433",
      "r434",
      "r435",
      "r494",
      "r533",
      "r534",
      "r535",
      "r578",
      "r579",
      "r580",
      "r581",
      "r582",
      "r583",
      "r584"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by type of financial instrument.",
        "label": "Financial Instrument [Axis]",
        "terseLabel": "Financial Instrument [Axis]"
       }
      }
     },
     "localname": "FinancialInstrumentAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_FinancialInstrumentsDisclosureTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure for financial instruments. This disclosure includes, but is not limited to, fair value measurements of short and long term marketable securities, international currencies forward contracts, and auction rate securities. Financial instruments may include hedging and non-hedging currency exchange instruments, derivatives, securitizations and securities available for sale at fair value. Also included are investment results, realized and unrealized gains and losses as well as impairments and risk management disclosures.",
        "label": "Financial Instruments Disclosure [Text Block]",
        "terseLabel": "Fair Value Measurements"
       }
      }
     },
     "localname": "FinancialInstrumentsDisclosureTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurements"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_FiniteLivedIntangibleAssetsAccumulatedAmortization": {
     "auth_ref": [
      "r148",
      "r263"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail": {
       "order": 2.0,
       "parentTag": "us-gaap_FiniteLivedIntangibleAssetsNet",
       "weight": -1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Accumulated amount of amortization of assets, excluding financial assets and goodwill, lacking physical substance with a finite life.",
        "label": "Finite-Lived Intangible Assets, Accumulated Amortization",
        "negatedLabel": "Accumulated Amortization"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsAccumulatedAmortization",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths": {
     "auth_ref": [
      "r68"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail": {
       "order": 2.0,
       "parentTag": "us-gaap_FiniteLivedIntangibleAssetsNet",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of amortization for assets, excluding financial assets and goodwill, lacking physical substance with finite life expected to be recognized in next fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).",
        "label": "Finite-Lived Intangible Asset, Expected Amortization, Year One",
        "terseLabel": "2024"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsAmortizationExpenseNextTwelveMonths",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear": {
     "auth_ref": [],
     "calculation": {
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail": {
       "order": 1.0,
       "parentTag": "us-gaap_FiniteLivedIntangibleAssetsNet",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of amortization for assets, excluding financial assets and goodwill, lacking physical substance with finite life expected to be recognized in remainder of current fiscal year.",
        "label": "Finite-Lived Intangible Asset, Expected Amortization, Remainder of Fiscal Year",
        "terseLabel": "Remainder of 2023"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsAmortizationExpenseRemainderOfFiscalYear",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearFour": {
     "auth_ref": [
      "r68"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail": {
       "order": 5.0,
       "parentTag": "us-gaap_FiniteLivedIntangibleAssetsNet",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of amortization for assets, excluding financial assets and goodwill, lacking physical substance with finite life expected to be recognized in fourth fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).",
        "label": "Finite-Lived Intangible Asset, Expected Amortization, Year Four",
        "terseLabel": "2027"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsAmortizationExpenseYearFour",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearThree": {
     "auth_ref": [
      "r68"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail": {
       "order": 4.0,
       "parentTag": "us-gaap_FiniteLivedIntangibleAssetsNet",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of amortization for assets, excluding financial assets and goodwill, lacking physical substance with finite life expected to be recognized in third fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).",
        "label": "Finite-Lived Intangible Asset, Expected Amortization, Year Three",
        "terseLabel": "2026"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsAmortizationExpenseYearThree",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo": {
     "auth_ref": [
      "r68"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail": {
       "order": 3.0,
       "parentTag": "us-gaap_FiniteLivedIntangibleAssetsNet",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of amortization for assets, excluding financial assets and goodwill, lacking physical substance with finite life expected to be recognized in second fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).",
        "label": "Finite-Lived Intangible Asset, Expected Amortization, Year Two",
        "terseLabel": "2025"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsAmortizationExpenseYearTwo",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_FiniteLivedIntangibleAssetsByMajorClassAxis": {
     "auth_ref": [
      "r261",
      "r262",
      "r263",
      "r264",
      "r439",
      "r440"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by major type or class of finite-lived intangible assets.",
        "label": "Finite-Lived Intangible Assets by Major Class [Axis]",
        "terseLabel": "Finite Lived Intangible Assets by Major Class [Axis]"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsByMajorClassAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_FiniteLivedIntangibleAssetsGross": {
     "auth_ref": [
      "r66",
      "r440"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail": {
       "order": 1.0,
       "parentTag": "us-gaap_FiniteLivedIntangibleAssetsNet",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount before amortization of assets, excluding financial assets and goodwill, lacking physical substance with a finite life.",
        "label": "Finite-Lived Intangible Assets, Gross",
        "terseLabel": "Gross Carrying Amount"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsGross",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_FiniteLivedIntangibleAssetsLineItems": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.",
        "label": "Finite-Lived Intangible Assets [Line Items]",
        "terseLabel": "Finite-Lived Intangible Assets [Line Items]"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsLineItems",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_FiniteLivedIntangibleAssetsMajorClassNameDomain": {
     "auth_ref": [
      "r64",
      "r65"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The major class of finite-lived intangible asset (for example, patents, trademarks, copyrights, etc.) A major class is composed of intangible assets that can be grouped together because they are similar, either by their nature or by their use in the operations of a company.",
        "label": "Finite-Lived Intangible Assets, Major Class Name [Domain]",
        "terseLabel": "Finite Lived Intangible Assets, Major Class Name [Domain]"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsMajorClassNameDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_FiniteLivedIntangibleAssetsNet": {
     "auth_ref": [
      "r66",
      "r439"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 5.0,
       "parentTag": "us-gaap_Assets",
       "weight": 1.0
      },
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      },
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount after amortization of assets, excluding financial assets and goodwill, lacking physical substance with a finite life.",
        "label": "Finite-Lived Intangible Assets, Net",
        "terseLabel": "Intangible assets, net",
        "totalLabel": "Net"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsNet",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets",
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetEstimatedFutureAnnualAmortizationExpenseRelatedtoIntangibleAssetsSubjecttoAmortizationDetail",
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1": {
     "auth_ref": [
      "r439"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Remaining amortization period of finite-lived intangible assets, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents the reported fact of one year, five months, and thirteen days.",
        "label": "Finite-Lived Intangible Assets, Remaining Amortization Period",
        "terseLabel": "Weighted Average Remaining Amortization Period"
       }
      }
     },
     "localname": "FiniteLivedIntangibleAssetsRemainingAmortizationPeriod1",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"
     ],
     "xbrltype": "durationItemType"
    },
    "us-gaap_ForeignCurrencyTransactionGainLossBeforeTax": {
     "auth_ref": [
      "r385",
      "r386",
      "r387",
      "r388"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/OtherIncomeandExpenseDetail": {
       "order": 2.0,
       "parentTag": "us-gaap_NonoperatingIncomeExpense",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount before tax of foreign currency transaction realized and unrealized gain (loss) recognized in the income statement.",
        "label": "Foreign Currency Transaction Gain (Loss), before Tax",
        "terseLabel": "Realized gain from foreign currency on cash and investments held"
       }
      }
     },
     "localname": "ForeignCurrencyTransactionGainLossBeforeTax",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/OtherIncomeandExpenseDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_GeneralAndAdministrativeExpense": {
     "auth_ref": [
      "r30"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 3.0,
       "parentTag": "us-gaap_OperatingExpenses",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The aggregate total of expenses of managing and administering the affairs of an entity, including affiliates of the reporting entity, which are not directly or indirectly associated with the manufacture, sale or creation of a product or product line.",
        "label": "General and Administrative Expense",
        "terseLabel": "General and administrative"
       }
      }
     },
     "localname": "GeneralAndAdministrativeExpense",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_GeneralAndAdministrativeExpenseMember": {
     "auth_ref": [
      "r27"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Primary financial statement caption encompassing general and administrative expense.",
        "label": "General and Administrative Expense [Member]",
        "terseLabel": "General and administrative"
       }
      }
     },
     "localname": "GeneralAndAdministrativeExpenseMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_GeographicConcentrationRiskMember": {
     "auth_ref": [
      "r51",
      "r460"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Reflects the percentage that a specified dollar value on the balance sheet or income statement in the period from one or more specified geographic areas is to a corresponding consolidated, segment, or product line amount. Risk is the materially adverse effects of economic decline or antagonistic political actions resulting in loss of assets, sales volume, labor supply, or source of materials and supplies in a US state or a specified country, continent, or region such as EMEA (Europe, Middle East, Africa).",
        "label": "Geographic Concentration Risk [Member]",
        "terseLabel": "Geographic Concentration Risk"
       }
      }
     },
     "localname": "GeographicConcentrationRiskMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_GeographicDistributionAxis": {
     "auth_ref": [
      "r445",
      "r446",
      "r467",
      "r468",
      "r469",
      "r470",
      "r471",
      "r472",
      "r473",
      "r474",
      "r475",
      "r476",
      "r477",
      "r478",
      "r479",
      "r480",
      "r481",
      "r482",
      "r483",
      "r484",
      "r491"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by geographic distribution of business activity identified as either domestic or foreign. Excludes names of countries, states and provinces, and cities.",
        "label": "Geographic Distribution [Axis]",
        "terseLabel": "Geographic Distribution"
       }
      }
     },
     "localname": "GeographicDistributionAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_GeographicDistributionDomain": {
     "auth_ref": [
      "r445",
      "r446",
      "r467",
      "r468",
      "r469",
      "r470",
      "r471",
      "r472",
      "r473",
      "r474",
      "r475",
      "r476",
      "r477",
      "r478",
      "r479",
      "r480",
      "r481",
      "r482",
      "r483",
      "r484"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Allocation of business activity identified as domestic or foreign. Excludes names of countries, states and provinces, and cities.",
        "label": "Geographic Distribution [Domain]",
        "terseLabel": "Geographic Distribution"
       }
      }
     },
     "localname": "GeographicDistributionDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_GeographicDistributionDomesticMember": {
     "auth_ref": [
      "r467",
      "r468",
      "r469",
      "r470",
      "r471",
      "r472",
      "r473",
      "r474",
      "r475",
      "r476",
      "r477",
      "r478",
      "r479",
      "r480",
      "r481",
      "r482",
      "r483",
      "r484",
      "r492"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Allocation of business activity identified as domestic.",
        "label": "Geographic Distribution, Domestic [Member]",
        "terseLabel": "Domestic Revenue"
       }
      }
     },
     "localname": "GeographicDistributionDomesticMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_GeographicDistributionForeignMember": {
     "auth_ref": [
      "r445",
      "r446",
      "r467",
      "r468",
      "r469",
      "r470",
      "r471",
      "r472",
      "r473",
      "r474",
      "r475",
      "r476",
      "r477",
      "r478",
      "r479",
      "r480",
      "r481",
      "r482",
      "r483",
      "r484",
      "r493"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Allocation of business activity identified as foreign.",
        "label": "Geographic Distribution, Foreign [Member]",
        "terseLabel": "Foreign"
       }
      }
     },
     "localname": "GeographicDistributionForeignMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_Goodwill": {
     "auth_ref": [
      "r147",
      "r259",
      "r441",
      "r495",
      "r511",
      "r538",
      "r545"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 4.0,
       "parentTag": "us-gaap_Assets",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount after accumulated impairment loss of an asset representing future economic benefits arising from other assets acquired in a business combination that are not individually identified and separately recognized.",
        "label": "Goodwill",
        "periodEndLabel": "Balance, end of period",
        "periodStartLabel": "Balance, beginning of period",
        "terseLabel": "Goodwill"
       }
      }
     },
     "localname": "Goodwill",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets",
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetScheduleofChangesinNetCarryingAmountofGoodwillDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_GoodwillAndIntangibleAssetsDisclosureAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Goodwill and Intangible Assets Disclosure [Abstract]",
        "terseLabel": "Goodwill and Intangible Assets Disclosure [Abstract]"
       }
      }
     },
     "localname": "GoodwillAndIntangibleAssetsDisclosureAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_GoodwillAndIntangibleAssetsDisclosureTextBlock": {
     "auth_ref": [
      "r69"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure for goodwill and intangible assets.",
        "label": "Goodwill and Intangible Assets Disclosure [Text Block]",
        "terseLabel": "Goodwill and Intangible Assets, Net"
       }
      }
     },
     "localname": "GoodwillAndIntangibleAssetsDisclosureTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNet"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_GoodwillForeignCurrencyTranslationGainLoss": {
     "auth_ref": [
      "r260"
     ],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of foreign currency translation gain (loss) which increases (decreases) an asset representing future economic benefits from other assets acquired in a business combination that are not individually identified and separately recognized.",
        "label": "Goodwill, Foreign Currency Translation Gain (Loss)",
        "terseLabel": "Foreign currency translation"
       }
      }
     },
     "localname": "GoodwillForeignCurrencyTranslationGainLoss",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetScheduleofChangesinNetCarryingAmountofGoodwillDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_GoodwillPurchaseAccountingAdjustments": {
     "auth_ref": [
      "r98",
      "r544"
     ],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of increase (decrease) from adjustments after acquisition date under purchase accounting of an asset representing the future economic benefits arising from other assets acquired in a business combination that are not individually identified and separately recognized.",
        "label": "Goodwill, Purchase Accounting Adjustments",
        "terseLabel": "Remeasurement from provisional purchase accounting amount"
       }
      }
     },
     "localname": "GoodwillPurchaseAccountingAdjustments",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetScheduleofChangesinNetCarryingAmountofGoodwillDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_GoodwillRollForward": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "A roll forward is a reconciliation of a concept from the beginning of a period to the end of a period.",
        "label": "Goodwill [Roll Forward]",
        "terseLabel": "Goodwill [Roll Forward]"
       }
      }
     },
     "localname": "GoodwillRollForward",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetScheduleofChangesinNetCarryingAmountofGoodwillDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_GrossProfit": {
     "auth_ref": [
      "r28",
      "r177",
      "r225",
      "r227",
      "r231",
      "r233",
      "r245",
      "r273",
      "r274",
      "r275",
      "r276",
      "r277",
      "r278",
      "r279",
      "r280",
      "r281",
      "r384",
      "r490",
      "r553"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 1.0,
       "parentTag": "us-gaap_OperatingIncomeLoss",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Aggregate revenue less cost of goods and services sold or operating expenses directly attributable to the revenue generation activity.",
        "label": "Gross Profit",
        "totalLabel": "Gross profit"
       }
      }
     },
     "localname": "GrossProfit",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest": {
     "auth_ref": [
      "r25",
      "r118",
      "r126",
      "r138",
      "r225",
      "r227",
      "r231",
      "r233",
      "r446",
      "r490"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 1.0,
       "parentTag": "us-gaap_NetIncomeLoss",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of income (loss) from continuing operations, including income (loss) from equity method investments, before deduction of income tax expense (benefit), and income (loss) attributable to noncontrolling interest.",
        "label": "Income (Loss) from Continuing Operations before Income Taxes, Noncontrolling Interest",
        "totalLabel": "Income before income taxes"
       }
      }
     },
     "localname": "IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_IncomeStatementAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Income Statement [Abstract]",
        "terseLabel": "Income Statement [Abstract]"
       }
      }
     },
     "localname": "IncomeStatementAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_IncomeStatementLocationAxis": {
     "auth_ref": [
      "r265",
      "r266"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by location in the income statement.",
        "label": "Income Statement Location [Axis]",
        "terseLabel": "Income Statement Location"
       }
      }
     },
     "localname": "IncomeStatementLocationAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_IncomeStatementLocationDomain": {
     "auth_ref": [
      "r266"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Location in the income statement.",
        "label": "Income Statement Location [Domain]",
        "terseLabel": "Income Statement Location"
       }
      }
     },
     "localname": "IncomeStatementLocationDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_IncomeTaxDisclosureAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Income Tax Disclosure [Abstract]",
        "terseLabel": "Income Tax Disclosure [Abstract]"
       }
      }
     },
     "localname": "IncomeTaxDisclosureAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_IncomeTaxDisclosureTextBlock": {
     "auth_ref": [
      "r178",
      "r358",
      "r359",
      "r360",
      "r364",
      "r368",
      "r370",
      "r371",
      "r372"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure for income taxes. Disclosures may include net deferred tax liability or asset recognized in an enterprise's statement of financial position, net change during the year in the total valuation allowance, approximate tax effect of each type of temporary difference and carryforward that gives rise to a significant portion of deferred tax liabilities and deferred tax assets, utilization of a tax carryback, and tax uncertainties information.",
        "label": "Income Tax Disclosure [Text Block]",
        "terseLabel": "Income Taxes"
       }
      }
     },
     "localname": "IncomeTaxDisclosureTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/IncomeTaxes"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_IncomeTaxExpenseBenefit": {
     "auth_ref": [
      "r179",
      "r191",
      "r192",
      "r224",
      "r357",
      "r365",
      "r369",
      "r451"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 2.0,
       "parentTag": "us-gaap_NetIncomeLoss",
       "weight": -1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of current income tax expense (benefit) and deferred income tax expense (benefit) pertaining to continuing operations.",
        "label": "Income Tax Expense (Benefit)",
        "terseLabel": "Income tax expense"
       }
      }
     },
     "localname": "IncomeTaxExpenseBenefit",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_IncreaseDecreaseInAccountsPayable": {
     "auth_ref": [
      "r41"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 11.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The increase (decrease) during the reporting period in the aggregate amount of liabilities incurred (and for which invoices have typically been received) and payable to vendors for goods and services received that are used in an entity's business.",
        "label": "Increase (Decrease) in Accounts Payable",
        "terseLabel": "Accounts payable"
       }
      }
     },
     "localname": "IncreaseDecreaseInAccountsPayable",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_IncreaseDecreaseInAccountsReceivable": {
     "auth_ref": [
      "r41"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 8.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": -1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The increase (decrease) during the reporting period in amount due within one year (or one business cycle) from customers for the credit sale of goods and services.",
        "label": "Increase (Decrease) in Accounts Receivable",
        "negatedLabel": "Accounts receivable"
       }
      }
     },
     "localname": "IncreaseDecreaseInAccountsReceivable",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_IncreaseDecreaseInAccruedLiabilities": {
     "auth_ref": [
      "r41"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 13.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The increase (decrease) during the reporting period in the aggregate amount of expenses incurred but not yet paid.",
        "label": "Increase (Decrease) in Accrued Liabilities",
        "terseLabel": "Accrued expenses"
       }
      }
     },
     "localname": "IncreaseDecreaseInAccruedLiabilities",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_IncreaseDecreaseInContractWithCustomerLiability": {
     "auth_ref": [
      "r437",
      "r525"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 14.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of increase (decrease) in obligation to transfer good or service to customer for which consideration has been received or is receivable.",
        "label": "Increase (Decrease) in Contract with Customer, Liability",
        "terseLabel": "Deferred revenue"
       }
      }
     },
     "localname": "IncreaseDecreaseInContractWithCustomerLiability",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_IncreaseDecreaseInDeferredCharges": {
     "auth_ref": [
      "r41"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 9.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": -1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The increase (decrease) during the reporting period in the value of expenditures made during the current reporting period for benefits that will be received over a period of years. Deferred charges differ from prepaid expenses in that they usually extend over a long period of time and may or may not be regularly recurring costs of operation.",
        "label": "Increase (Decrease) in Deferred Charges",
        "negatedLabel": "Deferred costs"
       }
      }
     },
     "localname": "IncreaseDecreaseInDeferredCharges",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_IncreaseDecreaseInEmployeeRelatedLiabilities": {
     "auth_ref": [
      "r41"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 12.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The increase (decrease) during the reporting period in the aggregate amount of obligations related to services received from employees, such as accrued salaries and bonuses, payroll taxes and fringe benefits.",
        "label": "Increase (Decrease) in Employee Related Liabilities",
        "terseLabel": "Accrued compensation"
       }
      }
     },
     "localname": "IncreaseDecreaseInEmployeeRelatedLiabilities",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_IncreaseDecreaseInOperatingCapitalAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Increase (Decrease) in Operating Capital [Abstract]",
        "terseLabel": "Changes in assets and liabilities"
       }
      }
     },
     "localname": "IncreaseDecreaseInOperatingCapitalAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_IncreaseDecreaseInOtherOperatingAssets": {
     "auth_ref": [
      "r41"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 10.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": -1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of increase (decrease) in operating assets classified as other.",
        "label": "Increase (Decrease) in Other Operating Assets",
        "negatedLabel": "Other current and non-current assets"
       }
      }
     },
     "localname": "IncreaseDecreaseInOtherOperatingAssets",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_IncreaseDecreaseInStockholdersEquityRollForward": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "A roll forward is a reconciliation of a concept from the beginning of a period to the end of a period.",
        "label": "Increase (Decrease) in Stockholders' Equity [Roll Forward]",
        "terseLabel": "Increase (Decrease) in Stockholders' Equity [Roll Forward]"
       }
      }
     },
     "localname": "IncreaseDecreaseInStockholdersEquityRollForward",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_IncrementalCommonSharesAttributableToContingentlyIssuableShares": {
     "auth_ref": [
      "r197",
      "r198",
      "r200",
      "r201",
      "r202",
      "r203",
      "r204",
      "r205",
      "r206",
      "r210"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail": {
       "order": 3.0,
       "parentTag": "us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding",
       "weight": 1.0
      }
     },
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Additional shares included in the calculation of diluted EPS as a result of the potentially dilutive effect of contingently issuable shares. Contingently issuable shares are those shares that are issuable for little or no cash contingent on certain conditions being met.",
        "label": "Incremental Common Shares Attributable to Dilutive Effect of Contingently Issuable Shares",
        "terseLabel": "PSUs, RSUs, RSAs, and DSUs (in shares)"
       }
      }
     },
     "localname": "IncrementalCommonSharesAttributableToContingentlyIssuableShares",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_IncrementalCommonSharesAttributableToShareBasedPaymentArrangements": {
     "auth_ref": [
      "r196",
      "r197",
      "r199",
      "r210",
      "r318"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail": {
       "order": 2.0,
       "parentTag": "us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding",
       "weight": 1.0
      }
     },
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Additional shares included in the calculation of diluted EPS as a result of the potentially dilutive effect of share based payment arrangements using the treasury stock method.",
        "label": "Incremental Common Shares Attributable to Dilutive Effect of Share-Based Payment Arrangements",
        "terseLabel": "Options to purchase common stock (in shares)"
       }
      }
     },
     "localname": "IncrementalCommonSharesAttributableToShareBasedPaymentArrangements",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_InvestmentIncomeNet": {
     "auth_ref": [
      "r31",
      "r33"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/OtherIncomeandExpenseDetail": {
       "order": 1.0,
       "parentTag": "us-gaap_NonoperatingIncomeExpense",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount after accretion (amortization) of discount (premium), and investment expense, of interest income and dividend income on nonoperating securities.",
        "label": "Investment Income, Net",
        "terseLabel": "Investment income"
       }
      }
     },
     "localname": "InvestmentIncomeNet",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/OtherIncomeandExpenseDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_LeaseCost": {
     "auth_ref": [
      "r403",
      "r510"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of lease cost recognized by lessee for lease contract.",
        "label": "Lease, Cost",
        "totalLabel": "Lease expense"
       }
      }
     },
     "localname": "LeaseCost",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_LeaseCostTableTextBlock": {
     "auth_ref": [
      "r564"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of lessee's lease cost. Includes, but is not limited to, interest expense for finance lease, amortization of right-of-use asset for finance lease, operating lease cost, short-term lease cost, variable lease cost and sublease income.",
        "label": "Lease, Cost [Table Text Block]",
        "terseLabel": "Components of Lease Expense"
       }
      }
     },
     "localname": "LeaseCostTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_LeaseholdImprovementsMember": {
     "auth_ref": [
      "r70"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Additions or improvements to assets held under a lease arrangement.",
        "label": "Leasehold Improvements [Member]",
        "terseLabel": "Leasehold improvements"
       }
      }
     },
     "localname": "LeaseholdImprovementsMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_LesseeOperatingLeaseLiabilityMaturityTableTextBlock": {
     "auth_ref": [
      "r565"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of undiscounted cash flows of lessee's operating lease liability. Includes, but is not limited to, reconciliation of undiscounted cash flows to operating lease liability recognized in statement of financial position.",
        "label": "Lessee, Operating Lease, Liability, Maturity [Table Text Block]",
        "terseLabel": "Schedule of Future Minimum Payments Under Operating Leases"
       }
      }
     },
     "localname": "LesseeOperatingLeaseLiabilityMaturityTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue": {
     "auth_ref": [
      "r404"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      },
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of lessee's undiscounted obligation for lease payment for operating lease.",
        "label": "Lessee, Operating Lease, Liability, to be Paid",
        "totalLabel": "Total future gross payments"
       }
      }
     },
     "localname": "LesseeOperatingLeaseLiabilityPaymentsDue",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths": {
     "auth_ref": [
      "r404"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1": {
       "order": 2.0,
       "parentTag": "us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of lessee's undiscounted obligation for lease payment for operating lease to be paid in next fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).",
        "label": "Lessee, Operating Lease, Liability, to be Paid, Year One",
        "terseLabel": "2024"
       }
      }
     },
     "localname": "LesseeOperatingLeaseLiabilityPaymentsDueNextTwelveMonths",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearFour": {
     "auth_ref": [
      "r404"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1": {
       "order": 5.0,
       "parentTag": "us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of lessee's undiscounted obligation for lease payment for operating lease to be paid in fourth fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).",
        "label": "Lessee, Operating Lease, Liability, to be Paid, Year Four",
        "terseLabel": "2027"
       }
      }
     },
     "localname": "LesseeOperatingLeaseLiabilityPaymentsDueYearFour",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearThree": {
     "auth_ref": [
      "r404"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1": {
       "order": 4.0,
       "parentTag": "us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of lessee's undiscounted obligation for lease payment for operating lease to be paid in third fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).",
        "label": "Lessee, Operating Lease, Liability, to be Paid, Year Three",
        "terseLabel": "2026"
       }
      }
     },
     "localname": "LesseeOperatingLeaseLiabilityPaymentsDueYearThree",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_LesseeOperatingLeaseLiabilityPaymentsDueYearTwo": {
     "auth_ref": [
      "r404"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1": {
       "order": 3.0,
       "parentTag": "us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of lessee's undiscounted obligation for lease payment for operating lease to be paid in second fiscal year following current fiscal year. Excludes interim and annual periods when interim periods are reported from current statement of financial position date (rolling approach).",
        "label": "Lessee, Operating Lease, Liability, to be Paid, Year Two",
        "terseLabel": "2025"
       }
      }
     },
     "localname": "LesseeOperatingLeaseLiabilityPaymentsDueYearTwo",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear": {
     "auth_ref": [
      "r565"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail_1": {
       "order": 1.0,
       "parentTag": "us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of lessee's undiscounted obligation for lease payment for operating lease having initial or remaining lease term in excess of one year to be paid in remainder of current fiscal year.",
        "label": "Lessee, Operating Lease, Liability, to be Paid, Remainder of Fiscal Year",
        "terseLabel": "Remainder of 2023"
       }
      }
     },
     "localname": "LesseeOperatingLeaseLiabilityPaymentsRemainderOfFiscalYear",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_LesseeOperatingLeaseLiabilityUndiscountedExcessAmount": {
     "auth_ref": [
      "r404"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail": {
       "order": 1.0,
       "parentTag": "us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of lessee's undiscounted obligation for lease payments in excess of discounted obligation for lease payments for operating lease.",
        "label": "Lessee, Operating Lease, Liability, Undiscounted Excess Amount",
        "negatedLabel": "Less: imputed interest"
       }
      }
     },
     "localname": "LesseeOperatingLeaseLiabilityUndiscountedExcessAmount",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_Liabilities": {
     "auth_ref": [
      "r10",
      "r177",
      "r245",
      "r273",
      "r274",
      "r275",
      "r276",
      "r277",
      "r278",
      "r279",
      "r280",
      "r281",
      "r376",
      "r377",
      "r378",
      "r384",
      "r489",
      "r553",
      "r566",
      "r567"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 1.0,
       "parentTag": "us-gaap_LiabilitiesAndStockholdersEquity",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Sum of the carrying amounts as of the balance sheet date of all liabilities that are recognized. Liabilities are probable future sacrifices of economic benefits arising from present obligations of an entity to transfer assets or provide services to other entities in the future.",
        "label": "Liabilities",
        "totalLabel": "Total liabilities"
       }
      }
     },
     "localname": "Liabilities",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_LiabilitiesAndStockholdersEquity": {
     "auth_ref": [
      "r8",
      "r122",
      "r134",
      "r511",
      "r526",
      "r536",
      "r562"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of liabilities and equity items, including the portion of equity attributable to noncontrolling interests, if any.",
        "label": "Liabilities and Equity",
        "totalLabel": "Total liabilities and stockholders\u2019 equity"
       }
      }
     },
     "localname": "LiabilitiesAndStockholdersEquity",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_LiabilitiesAndStockholdersEquityAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Liabilities and Equity [Abstract]",
        "terseLabel": "LIABILITIES AND STOCKHOLDERS\u2019 EQUITY"
       }
      }
     },
     "localname": "LiabilitiesAndStockholdersEquityAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_LiabilitiesCurrent": {
     "auth_ref": [
      "r12",
      "r143",
      "r177",
      "r245",
      "r273",
      "r274",
      "r275",
      "r276",
      "r277",
      "r278",
      "r279",
      "r280",
      "r281",
      "r376",
      "r377",
      "r378",
      "r384",
      "r511",
      "r553",
      "r566",
      "r567"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 1.0,
       "parentTag": "us-gaap_Liabilities",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Total obligations incurred as part of normal operations that are expected to be paid during the following twelve months or within one business cycle, if longer.",
        "label": "Liabilities, Current",
        "totalLabel": "Total current liabilities"
       }
      }
     },
     "localname": "LiabilitiesCurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_LiabilitiesCurrentAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Liabilities, Current [Abstract]",
        "terseLabel": "Current liabilities"
       }
      }
     },
     "localname": "LiabilitiesCurrentAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_MoneyMarketFundsMember": {
     "auth_ref": [
      "r558"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Fund that invests in short-term money-market instruments, for example, but not limited to, commercial paper, banker's acceptances, repurchase agreements, government securities, certificates of deposit, and other highly liquid securities.",
        "label": "Money Market Funds [Member]",
        "terseLabel": "Money market funds"
       }
      }
     },
     "localname": "MoneyMarketFundsMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_NetCashProvidedByUsedInFinancingActivities": {
     "auth_ref": [
      "r175"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 3.0,
       "parentTag": "us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of cash inflow (outflow) from financing activities, including discontinued operations. Financing activity cash flows include obtaining resources from owners and providing them with a return on, and a return of, their investment; borrowing money and repaying amounts borrowed, or settling the obligation; and obtaining and paying for other resources obtained from creditors on long-term credit.",
        "label": "Net Cash Provided by (Used in) Financing Activities",
        "totalLabel": "Net cash provided by (used in) financing activities"
       }
      }
     },
     "localname": "NetCashProvidedByUsedInFinancingActivities",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_NetCashProvidedByUsedInFinancingActivitiesAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Net Cash Provided by (Used in) Financing Activities [Abstract]",
        "terseLabel": "Cash flows from financing activities"
       }
      }
     },
     "localname": "NetCashProvidedByUsedInFinancingActivitiesAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_NetCashProvidedByUsedInInvestingActivities": {
     "auth_ref": [
      "r175"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 2.0,
       "parentTag": "us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of cash inflow (outflow) from investing activities, including discontinued operations. Investing activity cash flows include making and collecting loans and acquiring and disposing of debt or equity instruments and property, plant, and equipment and other productive assets.",
        "label": "Net Cash Provided by (Used in) Investing Activities",
        "totalLabel": "Net cash provided by (used in) investing activities"
       }
      }
     },
     "localname": "NetCashProvidedByUsedInInvestingActivities",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_NetCashProvidedByUsedInInvestingActivitiesAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Net Cash Provided by (Used in) Investing Activities [Abstract]",
        "terseLabel": "Cash flows from investing activities"
       }
      }
     },
     "localname": "NetCashProvidedByUsedInInvestingActivitiesAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_NetCashProvidedByUsedInOperatingActivities": {
     "auth_ref": [
      "r39",
      "r40",
      "r43"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 1.0,
       "parentTag": "us-gaap_CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect",
       "weight": 1.0
      }
     },
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of cash inflow (outflow) from operating activities, including discontinued operations. Operating activity cash flows include transactions, adjustments, and changes in value not defined as investing or financing activities.",
        "label": "Net Cash Provided by (Used in) Operating Activities",
        "totalLabel": "Net cash provided by operating activities"
       }
      }
     },
     "localname": "NetCashProvidedByUsedInOperatingActivities",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_NetCashProvidedByUsedInOperatingActivitiesAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Net Cash Provided by (Used in) Operating Activities [Abstract]",
        "terseLabel": "Cash flows from operating activities"
       }
      }
     },
     "localname": "NetCashProvidedByUsedInOperatingActivitiesAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_NetIncomeLoss": {
     "auth_ref": [
      "r26",
      "r43",
      "r127",
      "r137",
      "r141",
      "r160",
      "r163",
      "r167",
      "r177",
      "r183",
      "r185",
      "r186",
      "r187",
      "r188",
      "r191",
      "r192",
      "r207",
      "r225",
      "r227",
      "r231",
      "r233",
      "r245",
      "r273",
      "r274",
      "r275",
      "r276",
      "r277",
      "r278",
      "r279",
      "r280",
      "r281",
      "r383",
      "r384",
      "r490",
      "r553"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 1.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": 1.0
      },
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 1.0,
       "parentTag": "us-gaap_ComprehensiveIncomeNetOfTax",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The portion of profit or loss for the period, net of income taxes, which is attributable to the parent.",
        "label": "Net Income (Loss) Attributable to Parent",
        "terseLabel": "Net income",
        "totalLabel": "Net income",
        "verboseLabel": "Net income"
       }
      }
     },
     "localname": "NetIncomeLoss",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity",
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_NetIncomeLossAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Net Income (Loss) Attributable to Parent [Abstract]",
        "terseLabel": "Numerator"
       }
      }
     },
     "localname": "NetIncomeLossAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_NonoperatingIncomeExpense": {
     "auth_ref": [
      "r32"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 2.0,
       "parentTag": "us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest",
       "weight": 1.0
      },
      "http://www.spscommerce.com/role/OtherIncomeandExpenseDetail": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The aggregate amount of income or expense from ancillary business-related activities (that is to say, excluding major activities considered part of the normal operations of the business).",
        "label": "Nonoperating Income (Expense)",
        "terseLabel": "Other income, net",
        "totalLabel": "Total other income, net"
       }
      }
     },
     "localname": "NonoperatingIncomeExpense",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome",
      "http://www.spscommerce.com/role/OtherIncomeandExpenseDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OperatingExpenses": {
     "auth_ref": [],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 2.0,
       "parentTag": "us-gaap_OperatingIncomeLoss",
       "weight": -1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Generally recurring costs associated with normal operations except for the portion of these expenses which can be clearly related to production and included in cost of sales or services. Includes selling, general and administrative expense.",
        "label": "Operating Expenses",
        "totalLabel": "Total operating expenses"
       }
      }
     },
     "localname": "OperatingExpenses",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OperatingExpensesAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Operating Expenses [Abstract]",
        "terseLabel": "Operating expenses"
       }
      }
     },
     "localname": "OperatingExpensesAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_OperatingIncomeLoss": {
     "auth_ref": [
      "r225",
      "r227",
      "r231",
      "r233",
      "r490"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 1.0,
       "parentTag": "us-gaap_IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The net result for the period of deducting operating expenses from operating revenues.",
        "label": "Operating Income (Loss)",
        "totalLabel": "Income from operations"
       }
      }
     },
     "localname": "OperatingIncomeLoss",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OperatingLeaseCost": {
     "auth_ref": [
      "r398",
      "r510"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail": {
       "order": 1.0,
       "parentTag": "us-gaap_LeaseCost",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of single lease cost, calculated by allocation of remaining cost of lease over remaining lease term. Includes, but is not limited to, single lease cost, after impairment of right-of-use asset, calculated by amortization of remaining right-of-use asset and accretion of lease liability.",
        "label": "Operating Lease, Cost",
        "terseLabel": "Operating lease cost"
       }
      }
     },
     "localname": "OperatingLeaseCost",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OperatingLeaseLiability": {
     "auth_ref": [
      "r396"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail": {
       "order": 2.0,
       "parentTag": "us-gaap_LesseeOperatingLeaseLiabilityPaymentsDue",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Present value of lessee's discounted obligation for lease payments from operating lease.",
        "label": "Operating Lease, Liability",
        "terseLabel": "Total operating lease liabilities"
       }
      }
     },
     "localname": "OperatingLeaseLiability",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofFutureMinimumPaymentsUnderOperatingLeasesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OperatingLeaseLiabilityCurrent": {
     "auth_ref": [
      "r396"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 5.0,
       "parentTag": "us-gaap_LiabilitiesCurrent",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Present value of lessee's discounted obligation for lease payments from operating lease, classified as current.",
        "label": "Operating Lease, Liability, Current",
        "terseLabel": "Operating lease liabilities"
       }
      }
     },
     "localname": "OperatingLeaseLiabilityCurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OperatingLeaseLiabilityNoncurrent": {
     "auth_ref": [
      "r396"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 3.0,
       "parentTag": "us-gaap_Liabilities",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Present value of lessee's discounted obligation for lease payments from operating lease, classified as noncurrent.",
        "label": "Operating Lease, Liability, Noncurrent",
        "terseLabel": "Operating lease liabilities, non-current"
       }
      }
     },
     "localname": "OperatingLeaseLiabilityNoncurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OperatingLeasePayments": {
     "auth_ref": [
      "r397",
      "r400"
     ],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of cash outflow from operating lease, excluding payments to bring another asset to condition and location necessary for its intended use.",
        "label": "Operating Lease, Payments",
        "terseLabel": "Operating cash flows from operating leases"
       }
      }
     },
     "localname": "OperatingLeasePayments",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalCashFlowInformationRelatedtoLeasesDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OperatingLeaseRightOfUseAsset": {
     "auth_ref": [
      "r395"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 3.0,
       "parentTag": "us-gaap_Assets",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of lessee's right to use underlying asset under operating lease.",
        "label": "Operating Lease, Right-of-Use Asset",
        "terseLabel": "Operating lease right-of-use assets"
       }
      }
     },
     "localname": "OperatingLeaseRightOfUseAsset",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OperatingLeaseWeightedAverageDiscountRatePercent": {
     "auth_ref": [
      "r402",
      "r510"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Weighted average discount rate for operating lease calculated at point in time.",
        "label": "Operating Lease, Weighted Average Discount Rate, Percent",
        "terseLabel": "Weighted-average discount rate"
       }
      }
     },
     "localname": "OperatingLeaseWeightedAverageDiscountRatePercent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalBalanceSheetInformationRelatedtoLeasesDetail"
     ],
     "xbrltype": "percentItemType"
    },
    "us-gaap_OperatingLeaseWeightedAverageRemainingLeaseTerm1": {
     "auth_ref": [
      "r401",
      "r510"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Weighted average remaining lease term for operating lease, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents reported fact of one year, five months, and thirteen days.",
        "label": "Operating Lease, Weighted Average Remaining Lease Term",
        "terseLabel": "Weighted-average remaining lease term"
       }
      }
     },
     "localname": "OperatingLeaseWeightedAverageRemainingLeaseTerm1",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesScheduleofSupplementalBalanceSheetInformationRelatedtoLeasesDetail"
     ],
     "xbrltype": "durationItemType"
    },
    "us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Organization, Consolidation and Presentation of Financial Statements [Abstract]",
        "terseLabel": "Organization, Consolidation and Presentation of Financial Statements [Abstract]"
       }
      }
     },
     "localname": "OrganizationConsolidationAndPresentationOfFinancialStatementsAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock": {
     "auth_ref": [
      "r0",
      "r112"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure for organization, consolidation and basis of presentation of financial statements disclosure.",
        "label": "Organization, Consolidation and Presentation of Financial Statements Disclosure [Text Block]",
        "terseLabel": "General"
       }
      }
     },
     "localname": "OrganizationConsolidationAndPresentationOfFinancialStatementsDisclosureTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/General"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_OtherAssetsCurrent": {
     "auth_ref": [
      "r154",
      "r511"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 5.0,
       "parentTag": "us-gaap_AssetsCurrent",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of current assets classified as other.",
        "label": "Other Assets, Current",
        "terseLabel": "Other assets"
       }
      }
     },
     "localname": "OtherAssetsCurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OtherAssetsNoncurrent": {
     "auth_ref": [
      "r149"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 8.0,
       "parentTag": "us-gaap_Assets",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of noncurrent assets classified as other.",
        "label": "Other Assets, Noncurrent",
        "terseLabel": "Other assets, non-current"
       }
      }
     },
     "localname": "OtherAssetsNoncurrent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OtherAssetsNoncurrentAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Other Assets, Noncurrent [Abstract]",
        "terseLabel": "Other assets"
       }
      }
     },
     "localname": "OtherAssetsNoncurrentAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax": {
     "auth_ref": [
      "r17",
      "r19"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 1.0,
       "parentTag": "us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount before tax, after reclassification adjustments of gain (loss) on foreign currency translation adjustments, foreign currency transactions designated and effective as economic hedges of a net investment in a foreign entity and intra-entity foreign currency transactions that are of a long-term-investment nature.",
        "label": "Other Comprehensive Income (Loss), Foreign Currency Transaction and Translation Adjustment, before Tax",
        "terseLabel": "Foreign currency translation adjustments"
       }
      }
     },
     "localname": "OtherComprehensiveIncomeLossForeignCurrencyTransactionAndTranslationAdjustmentBeforeTax",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncomeParenthetical",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent": {
     "auth_ref": [
      "r108",
      "r109",
      "r110",
      "r161",
      "r164"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 2.0,
       "parentTag": "us-gaap_ComprehensiveIncomeNetOfTax",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount after tax of other comprehensive income (loss) attributable to parent entity.",
        "label": "Other Comprehensive Income (Loss), Net of Tax, Portion Attributable to Parent",
        "totalLabel": "Total other comprehensive income (expense)"
       }
      }
     },
     "localname": "OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Other Comprehensive Income (Loss), Net of Tax, Portion Attributable to Parent [Abstract]",
        "terseLabel": "Other comprehensive income (expense)"
       }
      }
     },
     "localname": "OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParentAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax": {
     "auth_ref": [
      "r19",
      "r23",
      "r62",
      "r159"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 3.0,
       "parentTag": "us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent",
       "weight": -1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount after tax of reclassification adjustment from accumulated other comprehensive income for unrealized gain (loss) realized upon the sale of available-for-sale securities.",
        "label": "Other Comprehensive Income (Loss), Reclassification Adjustment from AOCI for Sale of Securities, Net of Tax",
        "negatedLabel": "Reclassification of (gain) loss on investments into earnings, net of tax of ($125) and $4, respectively",
        "negatedTerseLabel": "Reclassification of (gain) loss on investments into earnings, net of tax"
       }
      }
     },
     "localname": "OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesNetOfTax",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncomeParenthetical",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax": {
     "auth_ref": [
      "r20",
      "r62"
     ],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of tax expense (benefit) of reclassification adjustment from accumulated other comprehensive income for unrealized gain (loss) realized upon the sale of available-for-sale securities.",
        "label": "Other Comprehensive Income (Loss), Reclassification Adjustment from AOCI for Sale of Securities, Tax",
        "negatedTerseLabel": "Reclassification of (gain) loss on investments into earnings, tax"
       }
      }
     },
     "localname": "OtherComprehensiveIncomeLossReclassificationAdjustmentFromAOCIForSaleOfSecuritiesTax",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncomeParenthetical"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax": {
     "auth_ref": [
      "r156",
      "r158"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 2.0,
       "parentTag": "us-gaap_OtherComprehensiveIncomeLossNetOfTaxPortionAttributableToParent",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount, after tax and before adjustment, of unrealized holding gain (loss) on investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale). Excludes unrealized gain (loss) on investment in debt security measured at amortized cost (held-to-maturity) from transfer to available-for-sale.",
        "label": "OCI, Debt Securities, Available-for-Sale, Unrealized Holding Gain (Loss), before Adjustment, after Tax",
        "terseLabel": "Unrealized gain (loss) on investments, net of tax of $133 and ($1), respectively",
        "verboseLabel": "Unrealized gain (loss) on investments, net of tax"
       }
      }
     },
     "localname": "OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodNetOfTax",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncomeParenthetical",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax": {
     "auth_ref": [
      "r20",
      "r157"
     ],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount, before adjustment, of tax expense (benefit) for unrealized holding gain (loss) on investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale). Excludes tax expense (benefit) for unrealized gain (loss) on investment in debt security measured at amortized cost (held-to-maturity) from transfer to available-for-sale.",
        "label": "OCI, Debt Securities, Available-for-Sale, Unrealized Holding Gain (Loss), before Adjustment, Tax",
        "terseLabel": "Unrealized gain (loss) on investments, tax"
       }
      }
     },
     "localname": "OtherComprehensiveIncomeUnrealizedHoldingGainLossOnSecuritiesArisingDuringPeriodTax",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncomeParenthetical"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OtherIncomeAndExpensesAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Other Income and Expenses [Abstract]",
        "terseLabel": "Other Income and Expenses [Abstract]"
       }
      }
     },
     "localname": "OtherIncomeAndExpensesAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_OtherLiabilitiesNoncurrentAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Other Liabilities, Noncurrent [Abstract]",
        "terseLabel": "Other liabilities"
       }
      }
     },
     "localname": "OtherLiabilitiesNoncurrentAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_OtherNoncashIncomeExpense": {
     "auth_ref": [
      "r43"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 7.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": -1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of income (expense) included in net income that results in no cash inflow (outflow), classified as other.",
        "label": "Other Noncash Income (Expense)",
        "negatedLabel": "Other, net"
       }
      }
     },
     "localname": "OtherNoncashIncomeExpense",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_OtherNonoperatingIncomeAndExpenseTextBlock": {
     "auth_ref": [
      "r171",
      "r172"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure for the components of non-operating income or non-operating expense, including, but not limited to, amounts earned from dividends, interest on securities, gain (loss) on securities sold, equity earnings of unconsolidated affiliates, gain (loss) on sales of business, interest expense and other miscellaneous income or expense items.",
        "label": "Other Nonoperating Income and Expense [Text Block]",
        "terseLabel": "Other Income and Expense"
       }
      }
     },
     "localname": "OtherNonoperatingIncomeAndExpenseTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/OtherIncomeandExpense"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_OtherNonoperatingIncomeExpense": {
     "auth_ref": [
      "r34"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/OtherIncomeandExpenseDetail": {
       "order": 3.0,
       "parentTag": "us-gaap_NonoperatingIncomeExpense",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of income (expense) related to nonoperating activities, classified as other.",
        "label": "Other Nonoperating Income (Expense)",
        "terseLabel": "Other income (expense), net"
       }
      }
     },
     "localname": "OtherNonoperatingIncomeExpense",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/OtherIncomeandExpenseDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_PaymentsForRepurchaseOfCommonStock": {
     "auth_ref": [
      "r38"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 1.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInFinancingActivities",
       "weight": -1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The cash outflow to reacquire common stock during the period.",
        "label": "Payments for Repurchase of Common Stock",
        "negatedLabel": "Repurchases of common stock"
       }
      }
     },
     "localname": "PaymentsForRepurchaseOfCommonStock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_PaymentsToAcquireOtherInvestments": {
     "auth_ref": [
      "r36"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 2.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInInvestingActivities",
       "weight": -1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of cash outflow to acquire investments classified as other.",
        "label": "Payments to Acquire Other Investments",
        "negatedLabel": "Purchases of investments"
       }
      }
     },
     "localname": "PaymentsToAcquireOtherInvestments",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_PaymentsToAcquirePropertyPlantAndEquipment": {
     "auth_ref": [
      "r35"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 1.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInInvestingActivities",
       "weight": -1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The cash outflow associated with the acquisition of long-lived, physical assets that are used in the normal conduct of business to produce goods and services and not intended for resale; includes cash outflows to pay for construction of self-constructed assets.",
        "label": "Payments to Acquire Property, Plant, and Equipment",
        "negatedLabel": "Purchases of property and equipment"
       }
      }
     },
     "localname": "PaymentsToAcquirePropertyPlantAndEquipment",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_PerformanceSharesMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Share-based payment arrangement awarded for meeting performance target.",
        "label": "Performance Shares [Member]",
        "terseLabel": "Performance Share Unit",
        "verboseLabel": "PSUs"
       }
      }
     },
     "localname": "PerformanceSharesMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_PreferredStockParOrStatedValuePerShare": {
     "auth_ref": [
      "r2",
      "r283"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Face amount or stated value per share of preferred stock nonredeemable or redeemable solely at the option of the issuer.",
        "label": "Preferred Stock, Par or Stated Value Per Share",
        "terseLabel": "Preferred stock, par value (in dollars per share)"
       }
      }
     },
     "localname": "PreferredStockParOrStatedValuePerShare",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_PreferredStockSharesAuthorized": {
     "auth_ref": [
      "r2"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The maximum number of nonredeemable preferred shares (or preferred stock redeemable solely at the option of the issuer) permitted to be issued by an entity's charter and bylaws.",
        "label": "Preferred Stock, Shares Authorized",
        "terseLabel": "Preferred stock, shares authorized (in shares)"
       }
      }
     },
     "localname": "PreferredStockSharesAuthorized",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_PreferredStockSharesIssued": {
     "auth_ref": [
      "r2",
      "r283"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Total number of nonredeemable preferred shares (or preferred stock redeemable solely at the option of the issuer) issued to shareholders (includes related preferred shares that were issued, repurchased, and remain in the treasury). May be all or portion of the number of preferred shares authorized. Excludes preferred shares that are classified as debt.",
        "label": "Preferred Stock, Shares Issued",
        "terseLabel": "Preferred stock, shares issued (in shares)"
       }
      }
     },
     "localname": "PreferredStockSharesIssued",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_PreferredStockSharesOutstanding": {
     "auth_ref": [
      "r2"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Aggregate share number for all nonredeemable preferred stock (or preferred stock redeemable solely at the option of the issuer) held by stockholders. Does not include preferred shares that have been repurchased.",
        "label": "Preferred Stock, Shares Outstanding",
        "terseLabel": "Preferred stock, shares outstanding (in shares)"
       }
      }
     },
     "localname": "PreferredStockSharesOutstanding",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_PreferredStockValue": {
     "auth_ref": [
      "r2",
      "r511"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 1.0,
       "parentTag": "us-gaap_StockholdersEquity",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Aggregate par or stated value of issued nonredeemable preferred stock (or preferred stock redeemable solely at the option of the issuer). This item includes treasury stock repurchased by the entity. Note: elements for number of nonredeemable preferred shares, par value and other disclosure concepts are in another section within stockholders' equity.",
        "label": "Preferred Stock, Value, Issued",
        "terseLabel": "Preferred stock, $0.001 par value; 5,000,000 shares authorized; 0 shares issued and outstanding"
       }
      }
     },
     "localname": "PreferredStockValue",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities": {
     "auth_ref": [
      "r60",
      "r173",
      "r174"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 3.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInInvestingActivities",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of cash inflow from sale, maturity, prepayment and call of investment in debt security measured at fair value with change in fair value recognized in other comprehensive income (available-for-sale).",
        "label": "Proceeds from Sale and Maturity of Debt Securities, Available-for-Sale",
        "terseLabel": "Maturities of investments"
       }
      }
     },
     "localname": "ProceedsFromSaleAndMaturityOfAvailableForSaleSecurities",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_ProceedsFromStockOptionsExercised": {
     "auth_ref": [
      "r37",
      "r92"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 2.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInFinancingActivities",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of cash inflow from exercise of option under share-based payment arrangement.",
        "label": "Proceeds from Stock Options Exercised",
        "terseLabel": "Net proceeds from exercise of options to purchase common stock"
       }
      }
     },
     "localname": "ProceedsFromStockOptionsExercised",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_ProceedsFromStockPlans": {
     "auth_ref": [
      "r37"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 3.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInFinancingActivities",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The cash inflow associated with the amount received from the stock plan during the period.",
        "label": "Proceeds from Stock Plans",
        "terseLabel": "Net proceeds from employee stock purchase plan activity"
       }
      }
     },
     "localname": "ProceedsFromStockPlans",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_PropertyPlantAndEquipmentAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Property, Plant and Equipment [Abstract]"
       }
      }
     },
     "localname": "PropertyPlantAndEquipmentAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_PropertyPlantAndEquipmentByTypeAxis": {
     "auth_ref": [
      "r72"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by type of long-lived, physical assets used to produce goods and services and not intended for resale.",
        "label": "Long-Lived Tangible Asset [Axis]",
        "terseLabel": "Long-Lived Tangible Asset [Axis]"
       }
      }
     },
     "localname": "PropertyPlantAndEquipmentByTypeAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_PropertyPlantAndEquipmentDisclosureTextBlock": {
     "auth_ref": [
      "r73",
      "r462",
      "r463",
      "r464"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure for long-lived, physical asset used in normal conduct of business and not intended for resale. Includes, but is not limited to, work of art, historical treasure, and similar asset classified as collections.",
        "label": "Property, Plant and Equipment Disclosure [Text Block]",
        "terseLabel": "Property and Equipment, Net"
       }
      }
     },
     "localname": "PropertyPlantAndEquipmentDisclosureTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/PropertyandEquipmentNet"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_PropertyPlantAndEquipmentGross": {
     "auth_ref": [
      "r70",
      "r145"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails": {
       "order": 1.0,
       "parentTag": "us-gaap_PropertyPlantAndEquipmentNet",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount before accumulated depreciation, depletion and amortization of physical assets used in the normal conduct of business and not intended for resale. Examples include, but are not limited to, land, buildings, machinery and equipment, office equipment, and furniture and fixtures.",
        "label": "Property, Plant and Equipment, Gross",
        "terseLabel": "Property and equipment, cost"
       }
      }
     },
     "localname": "PropertyPlantAndEquipmentGross",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_PropertyPlantAndEquipmentLineItems": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.",
        "label": "Property, Plant and Equipment [Line Items]",
        "terseLabel": "Property, Plant and Equipment [Line Items]"
       }
      }
     },
     "localname": "PropertyPlantAndEquipmentLineItems",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_PropertyPlantAndEquipmentNet": {
     "auth_ref": [
      "r72",
      "r135",
      "r447",
      "r511"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 2.0,
       "parentTag": "us-gaap_Assets",
       "weight": 1.0
      },
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount after accumulated depreciation, depletion and amortization of physical assets used in the normal conduct of business to produce goods and services and not intended for resale. Examples include, but are not limited to, land, buildings, machinery and equipment, office equipment, and furniture and fixtures.",
        "label": "Property, Plant and Equipment, Net",
        "terseLabel": "Property and equipment, net",
        "totalLabel": "Property and equipment, net"
       }
      }
     },
     "localname": "PropertyPlantAndEquipmentNet",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets",
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_PropertyPlantAndEquipmentTextBlock": {
     "auth_ref": [
      "r72"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of physical assets used in the normal conduct of business and not intended for resale. Includes, but is not limited to, balances by class of assets, depreciation and depletion expense and method used, including composite depreciation, and accumulated deprecation.",
        "label": "Property, Plant and Equipment [Table Text Block]",
        "terseLabel": "Property, Plant and Equipment"
       }
      }
     },
     "localname": "PropertyPlantAndEquipmentTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/PropertyandEquipmentNetTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_PropertyPlantAndEquipmentTypeDomain": {
     "auth_ref": [
      "r70"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Listing of long-lived, physical assets that are used in the normal conduct of business to produce goods and services and not intended for resale. Examples include land, buildings, machinery and equipment, and other types of furniture and equipment including, but not limited to, office equipment, furniture and fixtures, and computer equipment and software.",
        "label": "Long-Lived Tangible Asset [Domain]",
        "terseLabel": "Long-Lived Tangible Asset [Domain]"
       }
      }
     },
     "localname": "PropertyPlantAndEquipmentTypeDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_ProvisionForDoubtfulAccounts": {
     "auth_ref": [
      "r170",
      "r249"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 5.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of expense (reversal of expense) for expected credit loss on accounts receivable.",
        "label": "Accounts Receivable, Credit Loss Expense (Reversal)",
        "terseLabel": "Provision for credit losses"
       }
      }
     },
     "localname": "ProvisionForDoubtfulAccounts",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/AllowanceforCreditLossesDetail",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_PurchaseCommitmentRemainingMinimumAmountCommitted": {
     "auth_ref": [
      "r1",
      "r121",
      "r132"
     ],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Minimum amount to be expended to satisfy the terms of arrangements in which the entity has agreed to expend funds to procure goods or services, excluding long-term purchase commitments or unconditional purchase obligations.",
        "label": "Purchase Commitment, Remaining Minimum Amount Committed",
        "terseLabel": "Remaining purchase commitment"
       }
      }
     },
     "localname": "PurchaseCommitmentRemainingMinimumAmountCommitted",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesNarrativeDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_ResearchAndDevelopmentExpense": {
     "auth_ref": [
      "r96",
      "r139",
      "r574"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 2.0,
       "parentTag": "us-gaap_OperatingExpenses",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The aggregate costs incurred (1) in a planned search or critical investigation aimed at discovery of new knowledge with the hope that such knowledge will be useful in developing a new product or service, a new process or technique, or in bringing about a significant improvement to an existing product or process; or (2) to translate research findings or other knowledge into a plan or design for a new product or process or for a significant improvement to an existing product or process whether intended for sale or the entity's use, during the reporting period charged to research and development projects, including the costs of developing computer software up to the point in time of achieving technological feasibility, and costs allocated in accounting for a business combination to in-process projects deemed to have no alternative future use.",
        "label": "Research and Development Expense",
        "terseLabel": "Research and development"
       }
      }
     },
     "localname": "ResearchAndDevelopmentExpense",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_ResearchAndDevelopmentExpenseMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Primary financial statement caption in which the reported facts about research and development expense have been included.",
        "label": "Research and Development Expense [Member]",
        "terseLabel": "Research and development"
       }
      }
     },
     "localname": "ResearchAndDevelopmentExpenseMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_RestrictedStockUnitsRSUMember": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Share instrument which is convertible to stock or an equivalent amount of cash, after a specified period of time or when specified performance conditions are met.",
        "label": "Restricted Stock Units (RSUs) [Member]",
        "verboseLabel": "RSUs"
       }
      }
     },
     "localname": "RestrictedStockUnitsRSUMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_RetainedEarningsAccumulatedDeficit": {
     "auth_ref": [
      "r5",
      "r77",
      "r133",
      "r456",
      "r458",
      "r511"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 5.0,
       "parentTag": "us-gaap_StockholdersEquity",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The cumulative amount of the reporting entity's undistributed earnings or deficit.",
        "label": "Retained Earnings (Accumulated Deficit)",
        "terseLabel": "Retained earnings"
       }
      }
     },
     "localname": "RetainedEarningsAccumulatedDeficit",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_RetainedEarningsMember": {
     "auth_ref": [
      "r140",
      "r180",
      "r181",
      "r182",
      "r184",
      "r190",
      "r192",
      "r246",
      "r351",
      "r352",
      "r353",
      "r362",
      "r363",
      "r381",
      "r453",
      "r455"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The cumulative amount of the reporting entity's undistributed earnings or deficit.",
        "label": "Retained Earnings [Member]",
        "terseLabel": "Retained Earnings"
       }
      }
     },
     "localname": "RetainedEarningsMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_RevenueFromContractWithCustomerAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Revenue from Contract with Customer [Abstract]",
        "terseLabel": "Revenue from Contract with Customer [Abstract]"
       }
      }
     },
     "localname": "RevenueFromContractWithCustomerAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax": {
     "auth_ref": [
      "r221",
      "r222",
      "r226",
      "r229",
      "r230",
      "r234",
      "r235",
      "r236",
      "r308",
      "r309",
      "r438"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 1.0,
       "parentTag": "us-gaap_GrossProfit",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount, excluding tax collected from customer, of revenue from satisfaction of performance obligation by transferring promised good or service to customer. Tax collected from customer is tax assessed by governmental authority that is both imposed on and concurrent with specific revenue-producing transaction, including, but not limited to, sales, use, value added and excise.",
        "label": "Revenue from Contract with Customer, Excluding Assessed Tax",
        "terseLabel": "Revenues"
       }
      }
     },
     "localname": "RevenueFromContractWithCustomerExcludingAssessedTax",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome",
      "http://www.spscommerce.com/role/RevenueSummaryofRevenuesbyRevenueStreamDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_RevenueFromContractWithCustomerTextBlock": {
     "auth_ref": [
      "r300",
      "r301",
      "r302",
      "r303",
      "r304",
      "r305",
      "r306",
      "r307",
      "r311",
      "r312"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure of revenue from contract with customer to transfer good or service and to transfer nonfinancial asset. Includes, but is not limited to, disaggregation of revenue, credit loss recognized from contract with customer, judgment and change in judgment related to contract with customer, and asset recognized from cost incurred to obtain or fulfill contract with customer. Excludes insurance and lease contracts.",
        "label": "Revenue from Contract with Customer [Text Block]",
        "terseLabel": "Revenue"
       }
      }
     },
     "localname": "RevenueFromContractWithCustomerTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/Revenue"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_SaleOfStockNameOfTransactionDomain": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Sale of the entity's stock, including, but not limited to, initial public offering (IPO) and private placement.",
        "label": "Sale of Stock [Domain]",
        "terseLabel": "Sale of Stock"
       }
      }
     },
     "localname": "SaleOfStockNameOfTransactionDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_SalesRevenueNetMember": {
     "auth_ref": [
      "r236",
      "r532"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Revenue from sale of product and rendering of service and other sources of income, when it serves as benchmark in concentration of risk calculation.",
        "label": "Revenue Benchmark [Member]",
        "terseLabel": "Revenue Benchmark"
       }
      }
     },
     "localname": "SalesRevenueNetMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationSummaryofDomesticRevenueDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock": {
     "auth_ref": [
      "r48"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of securities (including those issuable pursuant to contingent stock agreements) that could potentially dilute basic earnings per share (EPS) in the future that were not included in the computation of diluted EPS because to do so would increase EPS amounts or decrease loss per share amounts for the period presented, by antidilutive securities.",
        "label": "Schedule of Antidilutive Securities Excluded from Computation of Earnings Per Share [Table Text Block]",
        "terseLabel": "Schedule of Anti-dilutive Common Shares Excluded from Calculation of Diluted Net Income Per Share"
       }
      }
     },
     "localname": "ScheduleOfAntidilutiveSecuritiesExcludedFromComputationOfEarningsPerShareTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/NetIncomePerShareTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfAvailableForSaleSecuritiesLineItems": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.",
        "label": "Debt Securities, Available-for-Sale [Line Items]",
        "terseLabel": "Schedule of Financial Instruments [Line Items]"
       }
      }
     },
     "localname": "ScheduleOfAvailableForSaleSecuritiesLineItems",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ScheduleOfBusinessAcquisitionsByAcquisitionTable": {
     "auth_ref": [
      "r99",
      "r100",
      "r373"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Schedule reflecting each material business combination (or series of individually immaterial business combinations) completed during the period, including background, timing, and recognized assets and liabilities.",
        "label": "Schedule of Business Acquisitions, by Acquisition [Table]",
        "terseLabel": "Schedule of Business Acquisitions, by Acquisition [Table]"
       }
      }
     },
     "localname": "ScheduleOfBusinessAcquisitionsByAcquisitionTable",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/BusinessAcquisitionsNarrativeDetails"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of the components of cash, cash equivalents, and investments.",
        "label": "Cash, Cash Equivalents and Investments [Table Text Block]",
        "terseLabel": "Summary of Cash Equivalents and Investments"
       }
      }
     },
     "localname": "ScheduleOfCashCashEquivalentsAndShortTermInvestmentsTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock": {
     "auth_ref": [
      "r531"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of an entity's basic and diluted earnings per share calculations, including a reconciliation of numerators and denominators of the basic and diluted per-share computations for income from continuing operations.",
        "label": "Schedule of Earnings Per Share, Basic and Diluted [Table Text Block]",
        "terseLabel": "Components and Computation of Basic and Diluted Net Income Per Share"
       }
      }
     },
     "localname": "ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/NetIncomePerShareTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable": {
     "auth_ref": [
      "r90",
      "r93"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Disclosure of information about amount recognized for award under share-based payment arrangement. Includes, but is not limited to, amount expensed in statement of income or comprehensive income, amount capitalized in statement of financial position, and corresponding reporting line item in financial statements.",
        "label": "Share-Based Payment Arrangement, Expensed and Capitalized, Amount [Table]",
        "terseLabel": "Schedule Of Employee Service Share Based Compensation Allocation Of Recognized Period Costs [Table]"
       }
      }
     },
     "localname": "ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTable",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock": {
     "auth_ref": [
      "r90"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of allocation of amount expensed and capitalized for award under share-based payment arrangement to statement of income or comprehensive income and statement of financial position. Includes, but is not limited to, corresponding line item in financial statement.",
        "label": "Share-Based Payment Arrangement, Expensed and Capitalized, Amount [Table Text Block]",
        "terseLabel": "Stock-Based Compensation Expense"
       }
      }
     },
     "localname": "ScheduleOfEmployeeServiceShareBasedCompensationAllocationOfRecognizedPeriodCostsTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTable": {
     "auth_ref": [
      "r64",
      "r65",
      "r439"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Schedule of assets, excluding financial assets and goodwill, lacking physical substance with a finite life.",
        "label": "Schedule of Finite-Lived Intangible Assets [Table]",
        "terseLabel": "Schedule of Finite Lived Intangible Assets [Table]"
       }
      }
     },
     "localname": "ScheduleOfFiniteLivedIntangibleAssetsTable",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock": {
     "auth_ref": [
      "r64",
      "r65"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of assets, excluding financial assets and goodwill, lacking physical substance with a finite life, by either major class or business segment.",
        "label": "Schedule of Finite-Lived Intangible Assets [Table Text Block]",
        "terseLabel": "Intangible Assets"
       }
      }
     },
     "localname": "ScheduleOfFiniteLivedIntangibleAssetsTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfGoodwillTextBlock": {
     "auth_ref": [
      "r495",
      "r538",
      "r539",
      "r540",
      "r541",
      "r542",
      "r543",
      "r544",
      "r545",
      "r546",
      "r547",
      "r548"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of goodwill by reportable segment and in total which includes a rollforward schedule.",
        "label": "Schedule of Goodwill [Table Text Block]",
        "terseLabel": "Schedule of Changes in Net Carrying Amount of Goodwill"
       }
      }
     },
     "localname": "ScheduleOfGoodwillTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock": {
     "auth_ref": [
      "r46",
      "r47",
      "r49",
      "r50"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of changes in accounting principles, including adoption of new accounting pronouncements, that describes the new methods, amount and effects on financial statement line items.",
        "label": "Accounting Standards Update and Change in Accounting Principle [Table Text Block]",
        "terseLabel": "Accounting Pronouncements Note Yet Adopted"
       }
      }
     },
     "localname": "ScheduleOfNewAccountingPronouncementsAndChangesInAccountingPrinciplesTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeneralTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of the components of non-operating income or non-operating expense that may include amounts earned from dividends, interest on securities, gains (losses) on securities sold, equity earnings of unconsolidated affiliates, net gain (loss) on sales of business, interest expense and other miscellaneous income or expense items.",
        "label": "Schedule of Other Nonoperating Income (Expense) [Table Text Block]",
        "terseLabel": "Summary of Other Income (Expense), Net"
       }
      }
     },
     "localname": "ScheduleOfOtherNonoperatingIncomeExpenseTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/OtherIncomeandExpenseTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfProductInformationTableTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of product information that are included in the discussion of the nature of an entity's operations.",
        "label": "Schedule of Product Information [Table Text Block]",
        "terseLabel": "Summary of Domestic Revenue"
       }
      }
     },
     "localname": "ScheduleOfProductInformationTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeographicInformationTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfPropertyPlantAndEquipmentTable": {
     "auth_ref": [
      "r72"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Disclosure of information about physical assets used in the normal conduct of business and not intended for resale. Includes, but is not limited to, balances by class of assets, depreciation and depletion expense and method used, including composite depreciation, and accumulated deprecation.",
        "label": "Property, Plant and Equipment [Table]",
        "terseLabel": "Property, Plant and Equipment [Table]"
       }
      }
     },
     "localname": "ScheduleOfPropertyPlantAndEquipmentTable",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/PropertyandEquipmentNetDetails"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable": {
     "auth_ref": [
      "r315",
      "r317",
      "r320",
      "r321",
      "r322",
      "r323",
      "r324",
      "r325",
      "r326",
      "r327",
      "r328",
      "r329",
      "r330",
      "r331",
      "r332",
      "r333",
      "r334",
      "r335",
      "r336",
      "r337",
      "r338",
      "r339",
      "r340",
      "r341",
      "r342",
      "r343",
      "r344",
      "r345"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Disclosure of information about share-based payment arrangement.",
        "label": "Schedule of Share-Based Compensation Arrangements by Share-Based Payment Award [Table]",
        "terseLabel": "Schedule Of Share Based Compensation Arrangements By Share Based Payment Award [Table]"
       }
      }
     },
     "localname": "ScheduleOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTable",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock": {
     "auth_ref": [
      "r89"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of employee stock purchase plan activity.",
        "label": "Schedule of Share-Based Compensation, Employee Stock Purchase Plan, Activity [Table Text Block]",
        "terseLabel": "Summary of ESPP Activity"
       }
      }
     },
     "localname": "ScheduleOfShareBasedCompensationEmployeeStockPurchasePlanActivityTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock": {
     "auth_ref": [
      "r83",
      "r84",
      "r86"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure for stock option plans. Includes, but is not limited to, outstanding awards at beginning and end of year, grants, exercises, forfeitures, and weighted-average grant date fair value.",
        "label": "Share-Based Payment Arrangement, Option, Activity [Table Text Block]",
        "terseLabel": "Stock Option Activity"
       }
      }
     },
     "localname": "ScheduleOfShareBasedCompensationStockOptionsActivityTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock": {
     "auth_ref": [
      "r88"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of the significant assumptions used during the year to estimate the fair value of employee stock purchase plans, including, but not limited to: (a) expected term, (b) expected volatility of the entity's shares, (c) expected dividends, (d) risk-free rate(s), and (e) discount for post-vesting restrictions.",
        "label": "Schedule of Share-Based Payment Award, Employee Stock Purchase Plan, Valuation Assumptions [Table Text Block]",
        "terseLabel": "Fair Value Estimation of Common Stock Using Black-Scholes Option Pricing Model, Assumptions"
       }
      }
     },
     "localname": "ScheduleOfShareBasedPaymentAwardEmployeeStockPurchasePlanValuationAssumptionsTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock": {
     "auth_ref": [
      "r88"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of the significant assumptions used during the year to estimate the fair value of stock options, including, but not limited to: (a) expected term of share options and similar instruments, (b) expected volatility of the entity's shares, (c) expected dividends, (d) risk-free rate(s), and (e) discount for post-vesting restrictions.",
        "label": "Schedule of Share-Based Payment Award, Stock Options, Valuation Assumptions [Table Text Block]",
        "terseLabel": "Weighted Average Grant Date Fair Value of Options Granted, Assumptions"
       }
      }
     },
     "localname": "ScheduleOfShareBasedPaymentAwardStockOptionsValuationAssumptionsTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Disclosure of the number and weighted-average grant date fair value for restricted stock and restricted stock units that were outstanding at the beginning and end of the year, and the number of restricted stock and restricted stock units that were granted, vested, or forfeited during the year.",
        "label": "Share-Based Payment Arrangement, Restricted Stock and Restricted Stock Unit, Activity [Table Text Block]",
        "terseLabel": "PSU, RSU, RSA, and DSU"
       }
      }
     },
     "localname": "ScheduleOfSharebasedCompensationRestrictedStockAndRestrictedStockUnitsActivityTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleOfTreasuryStockByClassTextBlock": {
     "auth_ref": [
      "r78",
      "r79",
      "r80",
      "r81"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of treasury stock, including, but not limited to, average cost per share, description of share repurchase program, shares repurchased, shares held for each class of treasury stock.",
        "label": "Class of Treasury Stock [Table Text Block]",
        "terseLabel": "Stock Repurchase Activity"
       }
      }
     },
     "localname": "ScheduleOfTreasuryStockByClassTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockholdersEquityTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock": {
     "auth_ref": [
      "r65"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Tabular disclosure of the amount of amortization expense expected to be recorded in succeeding fiscal years for finite-lived intangible assets.",
        "label": "Schedule of Finite-Lived Intangible Assets, Future Amortization Expense [Table Text Block]",
        "terseLabel": "Estimated Future Annual Amortization Expense Related to Intangible Assets Subject to Amortization"
       }
      }
     },
     "localname": "ScheduleofFiniteLivedIntangibleAssetsFutureAmortizationExpenseTableTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetTables"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_SellingAndMarketingExpense": {
     "auth_ref": [],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome": {
       "order": 1.0,
       "parentTag": "us-gaap_OperatingExpenses",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The aggregate total amount of expenses directly related to the marketing or selling of products or services.",
        "label": "Selling and Marketing Expense",
        "terseLabel": "Sales and marketing"
       }
      }
     },
     "localname": "SellingAndMarketingExpense",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_SellingAndMarketingExpenseMember": {
     "auth_ref": [
      "r27"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Primary financial statement caption encompassing selling and marketing expense.",
        "label": "Selling and Marketing Expense [Member]",
        "terseLabel": "Sales and marketing"
       }
      }
     },
     "localname": "SellingAndMarketingExpenseMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_ShareBasedCompensation": {
     "auth_ref": [
      "r41"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows": {
       "order": 6.0,
       "parentTag": "us-gaap_NetCashProvidedByUsedInOperatingActivities",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of noncash expense for share-based payment arrangement.",
        "label": "Share-Based Payment Arrangement, Noncash Expense",
        "terseLabel": "Stock-based compensation"
       }
      }
     },
     "localname": "ShareBasedCompensation",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofCashFlows"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1": {
     "auth_ref": [
      "r509"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Period over which grantee's right to exercise award under share-based payment arrangement is no longer contingent on satisfaction of service or performance condition, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents reported fact of one year, five months, and thirteen days. Includes, but is not limited to, combination of market, performance or service condition.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Award Vesting Period",
        "terseLabel": "Vesting period"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardAwardVestingPeriod1",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail"
     ],
     "xbrltype": "durationItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod": {
     "auth_ref": [
      "r336"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The number of equity-based payment instruments, excluding stock (or unit) options, that were forfeited during the reporting period.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Forfeited in Period",
        "negatedLabel": "Forfeited (in shares)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeitedInPeriod",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue": {
     "auth_ref": [
      "r336"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Weighted average fair value as of the grant date of equity-based award plans other than stock (unit) option plans that were not exercised or put into effect as a result of the occurrence of a terminating event.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Forfeitures, Weighted Average Grant Date Fair Value",
        "terseLabel": "Forfeited (in dollars per share)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresWeightedAverageGrantDateFairValue",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod": {
     "auth_ref": [
      "r334"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The number of grants made during the period on other than stock (or unit) option plans (for example, phantom stock or unit plan, stock or unit appreciation rights plan, performance target plan).",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Grants in Period",
        "terseLabel": "Granted (in shares)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriod",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue": {
     "auth_ref": [
      "r334"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The weighted average fair value at grant date for nonvested equity-based awards issued during the period on other than stock (or unit) option plans (for example, phantom stock or unit plan, stock or unit appreciation rights plan, performance target plan).",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Grants in Period, Weighted Average Grant Date Fair Value",
        "terseLabel": "Granted (in dollars per share)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsGrantsInPeriodWeightedAverageGrantDateFairValue",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber": {
     "auth_ref": [
      "r331",
      "r332"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The number of non-vested equity-based payment instruments, excluding stock (or unit) options, that validly exist and are outstanding as of the balance sheet date.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Nonvested, Number",
        "periodEndLabel": "Outstanding, end of period (in shares)",
        "periodStartLabel": "Outstanding, beginning of period (in shares)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedNumber",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "A roll forward is a reconciliation of a concept from the beginning of a period to the end of a period.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Nonvested, Number of Shares [Roll Forward]",
        "terseLabel": "#"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedRollForward",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue": {
     "auth_ref": [
      "r331",
      "r332"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Per share or unit weighted-average fair value of nonvested award under share-based payment arrangement. Excludes share and unit options.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Nonvested, Weighted Average Grant Date Fair Value",
        "periodEndLabel": "Outstanding, end of period (in dollars per share)",
        "periodStartLabel": "Outstanding, beginning of period (in dollars per share)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValue",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Nonvested, Weighted Average Grant Date Fair Value [Abstract]",
        "terseLabel": "Weighted Average Grant Date Fair Value ($/share)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsNonvestedWeightedAverageGrantDateFairValueRollForward",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod": {
     "auth_ref": [
      "r335"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The number of equity-based payment instruments, excluding stock (or unit) options, that vested during the reporting period.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Vested in Period",
        "negatedLabel": "Vested and common stock issued (in shares)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriod",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue": {
     "auth_ref": [
      "r335"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The weighted average fair value as of grant date pertaining to an equity-based award plan other than a stock (or unit) option plan for which the grantee gained the right during the reporting period, by satisfying service and performance requirements, to receive or retain shares or units, other instruments, or cash in accordance with the terms of the arrangement.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Equity Instruments Other than Options, Vested in Period, Weighted Average Grant Date Fair Value",
        "terseLabel": "Vested and common stock issued (in dollars per share)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardEquityInstrumentsOtherThanOptionsVestedInPeriodWeightedAverageGrantDateFairValue",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate": {
     "auth_ref": [
      "r343"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The estimated dividend rate (a percentage of the share price) to be paid (expected dividends) to holders of the underlying shares over the option's term.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Fair Value Assumptions, Expected Dividend Rate",
        "terseLabel": "Dividend yield"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail"
     ],
     "xbrltype": "percentItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate": {
     "auth_ref": [
      "r342"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The estimated measure of the percentage by which a share price is expected to fluctuate during a period. Volatility also may be defined as a probability-weighted measure of the dispersion of returns about the mean. The volatility of a share price is the standard deviation of the continuously compounded rates of return on the share over a specified period. That is the same as the standard deviation of the differences in the natural logarithms of the stock prices plus dividends, if any, over the period.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Fair Value Assumptions, Expected Volatility Rate",
        "terseLabel": "Volatility"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail"
     ],
     "xbrltype": "percentItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate": {
     "auth_ref": [
      "r344"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The risk-free interest rate assumption that is used in valuing an option on its own shares.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Fair Value Assumptions, Risk Free Interest Rate",
        "terseLabel": "Risk-free interest rate"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail"
     ],
     "xbrltype": "percentItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate": {
     "auth_ref": [
      "r342"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Rate of weighted-average expected volatility for award under share-based payment arrangement.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Fair Value Assumptions, Weighted Average Volatility Rate",
        "terseLabel": "Volatility"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsWeightedAverageVolatilityRate",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail"
     ],
     "xbrltype": "percentItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award [Line Items]",
        "terseLabel": "Share-based Compensation Arrangement by Share-based Payment Award [Line Items]"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardLineItems",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant": {
     "auth_ref": [
      "r91"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The difference between the maximum number of shares (or other type of equity) authorized for issuance under the plan (including the effects of amendments and adjustments), and the sum of: 1) the number of shares (or other type of equity) already issued upon exercise of options or other equity-based awards under the plan; and 2) shares (or other type of equity) reserved for issuance on granting of outstanding awards, net of cancellations and forfeitures, if applicable.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Number of Shares Available for Grant",
        "terseLabel": "Shares available for grant (in shares)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardNumberOfSharesAvailableForGrant",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber": {
     "auth_ref": [
      "r325"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The number of shares into which fully or partially vested stock options outstanding as of the balance sheet date can be currently converted under the option plan.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Exercisable, Number",
        "terseLabel": "Outstanding and exercisable options (in shares)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableNumber",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice": {
     "auth_ref": [
      "r325"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The weighted-average price as of the balance sheet date at which grantees can acquire the shares reserved for issuance on vested portions of options outstanding and currently exercisable under the stock option plan.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Exercisable, Weighted Average Exercise Price",
        "terseLabel": "Weighted average exercise price (in dollars per share)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExercisableWeightedAverageExercisePrice",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod": {
     "auth_ref": [
      "r329"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The number of shares under options that were cancelled during the reporting period as a result of occurrence of a terminating event specified in contractual agreements pertaining to the stock option plan.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Forfeitures in Period",
        "negatedLabel": "Forfeited (in shares)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsForfeituresInPeriod",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross": {
     "auth_ref": [
      "r327"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Gross number of share options (or share units) granted during the period.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Grants in Period, Gross",
        "terseLabel": "Granted (in shares)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue": {
     "auth_ref": [
      "r337"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The weighted average grant-date fair value of options granted during the reporting period as calculated by applying the disclosed option pricing methodology.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Grants in Period, Weighted Average Grant Date Fair Value",
        "terseLabel": "Weighted average fair value per share of options granted (in dollars per share)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageGrantDateFairValue",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber": {
     "auth_ref": [
      "r323",
      "r324"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Number of options outstanding, including both vested and non-vested options.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding, Number",
        "periodEndLabel": "Outstanding, end of period (in shares)",
        "periodStartLabel": "Outstanding, beginning of period (in shares)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "A roll forward is a reconciliation of a concept from the beginning of a period to the end of a period.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding [Roll Forward]",
        "terseLabel": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding [Roll Forward]"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingRollForward",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice": {
     "auth_ref": [
      "r323",
      "r324"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Weighted average price at which grantees can acquire the shares reserved for issuance under the stock option plan.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding, Weighted Average Exercise Price",
        "periodEndLabel": "Outstanding, end of period (in dollars per share)",
        "periodStartLabel": "Outstanding, beginning of period (in dollars per share)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding, Weighted Average Exercise Price [Abstract]",
        "terseLabel": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding, Weighted Average Exercise Price [Abstract]"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePriceRollforward",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod": {
     "auth_ref": [
      "r91"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Number of shares issued under share-based payment arrangement.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Shares Issued in Period",
        "terseLabel": "Shares issued (in shares)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesIssuedInPeriod",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward": {
     "auth_ref": [
      "r559"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Number of shares purchased for issuance under share-based payment arrangement.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Shares Purchased for Award",
        "terseLabel": "Share-Based Compensation Arrangement by Share-Based Payment Award, Shares Purchased for Award"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementByShareBasedPaymentAwardSharesPurchasedForAward",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain": {
     "auth_ref": [
      "r320",
      "r321",
      "r322",
      "r323",
      "r324",
      "r325",
      "r326",
      "r327",
      "r328",
      "r329",
      "r330",
      "r331",
      "r332",
      "r333",
      "r334",
      "r335",
      "r336",
      "r337",
      "r338",
      "r339",
      "r340",
      "r341",
      "r342",
      "r343",
      "r344",
      "r345"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Award under share-based payment arrangement.",
        "label": "Award Type [Domain]",
        "terseLabel": "Award Type"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementsByShareBasedPaymentAwardAwardTypeAndPlanNameDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationPSURSURSAandDSUDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationStockBasedCompensationExpenseDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice": {
     "auth_ref": [
      "r328"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Weighted average price at which option holders acquired shares when converting their stock options into shares.",
        "label": "Share-Based Compensation Arrangements by Share-Based Payment Award, Options, Exercises in Period, Weighted Average Exercise Price",
        "terseLabel": "Exercised (in dollars per share)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice": {
     "auth_ref": [
      "r329"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Weighted average price at which grantees could have acquired the underlying shares with respect to stock options that were terminated.",
        "label": "Share-Based Compensation Arrangements by Share-Based Payment Award, Options, Forfeitures in Period, Weighted Average Exercise Price",
        "terseLabel": "Forfeited (in dollars per share)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsForfeituresInPeriodWeightedAverageExercisePrice",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice": {
     "auth_ref": [
      "r327"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Weighted average per share amount at which grantees can acquire shares of common stock by exercise of options.",
        "label": "Share-Based Compensation Arrangements by Share-Based Payment Award, Options, Grants in Period, Weighted Average Exercise Price",
        "terseLabel": "Granted (in dollars per share)"
       }
      }
     },
     "localname": "ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_ShareRepurchaseProgramAxis": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by share repurchase program.",
        "label": "Share Repurchase Program [Axis]",
        "terseLabel": "Share Repurchase Program"
       }
      }
     },
     "localname": "ShareRepurchaseProgramAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_ShareRepurchaseProgramDomain": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Name of the share repurchase program.",
        "label": "Share Repurchase Program [Domain]",
        "terseLabel": "Share Repurchase Program"
       }
      }
     },
     "localname": "ShareRepurchaseProgramDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1": {
     "auth_ref": [
      "r341"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Expected term of award under share-based payment arrangement, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents reported fact of one year, five months, and thirteen days.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Fair Value Assumptions, Expected Term",
        "terseLabel": "Life (in years)"
       }
      }
     },
     "localname": "SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationWeightedAverageGrantDateFairValueofOptionsGrantedAssumptionsDetail"
     ],
     "xbrltype": "durationItemType"
    },
    "us-gaap_SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2": {
     "auth_ref": [
      "r87"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Weighted average remaining contractual term for option awards outstanding, in 'PnYnMnDTnHnMnS' format, for example, 'P1Y5M13D' represents the reported fact of one year, five months, and thirteen days.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Outstanding, Weighted Average Remaining Contractual Term",
        "terseLabel": "Weighted average remaining contractual life"
       }
      }
     },
     "localname": "SharebasedCompensationArrangementBySharebasedPaymentAwardOptionsOutstandingWeightedAverageRemainingContractualTerm2",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail"
     ],
     "xbrltype": "durationItemType"
    },
    "us-gaap_ShortTermInvestments": {
     "auth_ref": [
      "r123",
      "r124",
      "r129",
      "r521"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 2.0,
       "parentTag": "us-gaap_AssetsCurrent",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of investments including trading securities, available-for-sale securities, held-to-maturity securities, and short-term investments classified as other and current.",
        "label": "Short-Term Investments",
        "terseLabel": "Short-term investments"
       }
      }
     },
     "localname": "ShortTermInvestments",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_StatementEquityComponentsAxis": {
     "auth_ref": [
      "r15",
      "r76",
      "r140",
      "r165",
      "r166",
      "r167",
      "r180",
      "r181",
      "r182",
      "r184",
      "r190",
      "r192",
      "r216",
      "r246",
      "r297",
      "r351",
      "r352",
      "r353",
      "r362",
      "r363",
      "r381",
      "r389",
      "r390",
      "r391",
      "r392",
      "r393",
      "r394",
      "r405",
      "r453",
      "r454",
      "r455"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by component of equity.",
        "label": "Equity Components [Axis]",
        "terseLabel": "Equity Components [Axis]"
       }
      }
     },
     "localname": "StatementEquityComponentsAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity",
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_StatementLineItems": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Line items represent financial concepts included in a table. These concepts are used to disclose reportable information associated with domain members defined in one or many axes to the table.",
        "label": "Statement [Line Items]",
        "terseLabel": "Statement [Line Items]"
       }
      }
     },
     "localname": "StatementLineItems",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_StatementOfCashFlowsAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Statement of Cash Flows [Abstract]",
        "terseLabel": "Statement of Cash Flows [Abstract]"
       }
      }
     },
     "localname": "StatementOfCashFlowsAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_StatementOfFinancialPositionAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Statement of Financial Position [Abstract]",
        "terseLabel": "Statement of Financial Position [Abstract]"
       }
      }
     },
     "localname": "StatementOfFinancialPositionAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_StatementOfStockholdersEquityAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Statement of Stockholders' Equity [Abstract]",
        "terseLabel": "Statement of Stockholders' Equity [Abstract]"
       }
      }
     },
     "localname": "StatementOfStockholdersEquityAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "xbrltype": "stringItemType"
    },
    "us-gaap_StatementTable": {
     "auth_ref": [
      "r180",
      "r181",
      "r182",
      "r216",
      "r438"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Schedule reflecting a Statement of Income, Statement of Cash Flows, Statement of Financial Position, Statement of Shareholders' Equity and Other Comprehensive Income, or other statement as needed.",
        "label": "Statement [Table]",
        "terseLabel": "Statement [Table]"
       }
      }
     },
     "localname": "StatementTable",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans": {
     "auth_ref": [
      "r2",
      "r3",
      "r76",
      "r77"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Number of shares issued during the period as a result of an employee stock purchase plan.",
        "label": "Stock Issued During Period, Shares, Employee Stock Purchase Plans",
        "terseLabel": "Employee stock purchase plan activity (in shares)"
       }
      }
     },
     "localname": "StockIssuedDuringPeriodSharesEmployeeStockPurchasePlans",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_StockIssuedDuringPeriodSharesShareBasedCompensation": {
     "auth_ref": [
      "r2",
      "r3",
      "r76",
      "r77"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Number, after forfeiture, of shares or units issued under share-based payment arrangement. Excludes shares or units issued under employee stock ownership plan (ESOP).",
        "label": "Shares Issued, Shares, Share-Based Payment Arrangement, after Forfeiture",
        "terseLabel": "Shares issued pursuant to stock awards (in shares)"
       }
      }
     },
     "localname": "StockIssuedDuringPeriodSharesShareBasedCompensation",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_StockIssuedDuringPeriodSharesStockOptionsExercised": {
     "auth_ref": [
      "r2",
      "r3",
      "r76",
      "r77",
      "r328"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Number of share options (or share units) exercised during the current period.",
        "label": "Share-Based Compensation Arrangement by Share-Based Payment Award, Options, Exercises in Period",
        "negatedLabel": "Exercised (in shares)"
       }
      }
     },
     "localname": "StockIssuedDuringPeriodSharesStockOptionsExercised",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationStockOptionActivityDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_StockIssuedDuringPeriodValueEmployeeStockPurchasePlan": {
     "auth_ref": [
      "r2",
      "r3",
      "r76",
      "r77"
     ],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Aggregate change in value for stock issued during the period as a result of employee stock purchase plan.",
        "label": "Stock Issued During Period, Value, Employee Stock Purchase Plan",
        "terseLabel": "Employee stock purchase plan activity"
       }
      }
     },
     "localname": "StockIssuedDuringPeriodValueEmployeeStockPurchasePlan",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_StockIssuedDuringPeriodValueShareBasedCompensation": {
     "auth_ref": [
      "r2",
      "r3",
      "r77",
      "r85"
     ],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Value, after forfeiture, of shares issued under share-based payment arrangement. Excludes employee stock ownership plan (ESOP).",
        "label": "Shares Issued, Value, Share-Based Payment Arrangement, after Forfeiture",
        "terseLabel": "Shares issued pursuant to stock awards"
       }
      }
     },
     "localname": "StockIssuedDuringPeriodValueShareBasedCompensation",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_StockRepurchaseProgramAuthorizedAmount1": {
     "auth_ref": [],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of stock repurchase plan authorized.",
        "label": "Stock Repurchase Program, Authorized Amount",
        "terseLabel": "Share Value Authorized for Repurchase"
       }
      }
     },
     "localname": "StockRepurchaseProgramAuthorizedAmount1",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1": {
     "auth_ref": [],
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount remaining of a stock repurchase plan authorized.",
        "label": "Stock Repurchase Program, Remaining Authorized Repurchase Amount",
        "terseLabel": "Share Value Available for Future Repurchase"
       }
      }
     },
     "localname": "StockRepurchaseProgramRemainingAuthorizedRepurchaseAmount1",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_StockholdersEquity": {
     "auth_ref": [
      "r3",
      "r6",
      "r7",
      "r58",
      "r511",
      "r526",
      "r536",
      "r562"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 3.0,
       "parentTag": "us-gaap_LiabilitiesAndStockholdersEquity",
       "weight": 1.0
      }
     },
     "crdr": "credit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Total of all stockholders' equity (deficit) items, net of receivables from officers, directors, owners, and affiliates of the entity which are attributable to the parent. The amount of the economic entity's stockholders' equity attributable to the parent excludes the amount of stockholders' equity which is allocable to that ownership interest in subsidiary equity which is not attributable to the parent (noncontrolling interest, minority interest). This excludes temporary equity and is sometimes called permanent equity.",
        "label": "Stockholders' Equity Attributable to Parent",
        "periodEndLabel": "Ending balance",
        "periodStartLabel": "Beginning balance",
        "totalLabel": "Total stockholders\u2019 equity"
       }
      }
     },
     "localname": "StockholdersEquity",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_StockholdersEquityAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Stockholders' Equity Attributable to Parent [Abstract]",
        "terseLabel": "Stockholders' equity"
       }
      }
     },
     "localname": "StockholdersEquityAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_StockholdersEquityNoteDisclosureTextBlock": {
     "auth_ref": [
      "r82",
      "r176",
      "r284",
      "r285",
      "r286",
      "r287",
      "r288",
      "r289",
      "r290",
      "r291",
      "r292",
      "r293",
      "r294",
      "r296",
      "r297",
      "r380"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The entire disclosure for shareholders' equity comprised of portions attributable to the parent entity and noncontrolling interest, including other comprehensive income. Includes, but is not limited to, balances of common stock, preferred stock, additional paid-in capital, other capital and retained earnings, accumulated balance for each classification of other comprehensive income and amount of comprehensive income.",
        "label": "Stockholders' Equity Note Disclosure [Text Block]",
        "terseLabel": "Stockholders' Equity"
       }
      }
     },
     "localname": "StockholdersEquityNoteDisclosureTextBlock",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockholdersEquity"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_SubsidiarySaleOfStockAxis": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by type of sale of the entity's stock.",
        "label": "Sale of Stock [Axis]",
        "terseLabel": "Sale of Stock"
       }
      }
     },
     "localname": "SubsidiarySaleOfStockAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockBasedCompensationFairValueEstimationofCommonStockUsingBlackScholesOptionPricingModelAssumptionsDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationNarrativeDetail",
      "http://www.spscommerce.com/role/StockBasedCompensationSummaryofESPPActivityDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_TechnologyBasedIntangibleAssetsMember": {
     "auth_ref": [
      "r102"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Technology-based intangible assets, including, but not limited to, patented technology, unpatented technology, and developed technology rights.",
        "label": "Technology-Based Intangible Assets [Member]",
        "terseLabel": "Acquired technology"
       }
      }
     },
     "localname": "TechnologyBasedIntangibleAssetsMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GoodwillandIntangibleAssetsNetIntangibleAssetsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain": {
     "auth_ref": [
      "r242",
      "r243",
      "r282",
      "r295",
      "r379",
      "r406",
      "r407",
      "r408",
      "r409",
      "r410",
      "r411",
      "r412",
      "r413",
      "r414",
      "r415",
      "r416",
      "r417",
      "r418",
      "r419",
      "r420",
      "r421",
      "r422",
      "r423",
      "r424",
      "r425",
      "r426",
      "r427",
      "r428",
      "r429",
      "r430",
      "r431",
      "r432",
      "r433",
      "r434",
      "r435",
      "r533",
      "r534",
      "r535",
      "r578",
      "r579",
      "r580",
      "r581",
      "r582",
      "r583",
      "r584"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Instrument or contract that imposes a contractual obligation to deliver cash or another financial instrument or to exchange other financial instruments on potentially unfavorable terms and conveys a contractual right to receive cash or another financial instrument or to exchange other financial instruments on potentially favorable terms.",
        "label": "Financial Instruments [Domain]",
        "terseLabel": "Financial Instruments [Domain]"
       }
      }
     },
     "localname": "TransfersAndServicingOfFinancialInstrumentsTypesOfFinancialInstrumentsDomain",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_TreasuryStockAcquiredAverageCostPerShare": {
     "auth_ref": [
      "r78"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Total cost of shares repurchased divided by the total number of shares repurchased.",
        "label": "Treasury Stock Acquired, Average Cost Per Share",
        "terseLabel": "Average price per repurchased share (in dollars per share)"
       }
      }
     },
     "localname": "TreasuryStockAcquiredAverageCostPerShare",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/StockholdersEquityStockRepurchaseActivityDetails"
     ],
     "xbrltype": "perShareItemType"
    },
    "us-gaap_TreasuryStockCommonShares": {
     "auth_ref": [
      "r78"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Number of previously issued common shares repurchased by the issuing entity and held in treasury.",
        "label": "Treasury Stock, Common, Shares",
        "periodEndLabel": "Ending balance (in shares)",
        "periodStartLabel": "Beginning balance (in shares)",
        "terseLabel": "Treasury stock, shares (in shares)"
       }
      }
     },
     "localname": "TreasuryStockCommonShares",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheetsParenthetical",
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_TreasuryStockCommonValue": {
     "auth_ref": [
      "r16",
      "r78",
      "r81"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets": {
       "order": 3.0,
       "parentTag": "us-gaap_StockholdersEquity",
       "weight": -1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount allocated to previously issued common shares repurchased by the issuing entity and held in treasury.",
        "label": "Treasury Stock, Common, Value",
        "negatedLabel": "Treasury Stock, at cost; 2,151,098 shares",
        "terseLabel": "Share Value Repurchased"
       }
      }
     },
     "localname": "TreasuryStockCommonValue",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedBalanceSheets",
      "http://www.spscommerce.com/role/StockholdersEquityShareRepurchasePlanDetails"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_TreasuryStockMember": {
     "auth_ref": [
      "r14",
      "r78"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Shares of an entity that have been repurchased by the entity. This stock has no voting rights and receives no dividends. Note that treasury stock may be recorded at its total cost or separately as par (or stated) value and additional paid in capital. Classified within stockholders' equity if nonredeemable or redeemable solely at the option of the issuer. Classified within temporary equity if redemption is outside the control of the issuer.",
        "label": "Treasury Stock [Member]",
        "terseLabel": "Treasury Stock"
       }
      }
     },
     "localname": "TreasuryStockMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_TreasuryStockSharesAcquired": {
     "auth_ref": [
      "r3",
      "r76",
      "r77"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Number of shares that have been repurchased during the period and are being held in treasury.",
        "label": "Treasury Stock, Shares, Acquired",
        "negatedTerseLabel": "Repurchases of common stock (in shares)",
        "verboseLabel": "Number of shares repurchased (in shares)"
       }
      }
     },
     "localname": "TreasuryStockSharesAcquired",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity",
      "http://www.spscommerce.com/role/StockholdersEquityStockRepurchaseActivityDetails"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_TreasuryStockValueAcquiredCostMethod": {
     "auth_ref": [
      "r76",
      "r77",
      "r78"
     ],
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Equity impact of the cost of common and preferred stock that were repurchased during the period. Recorded using the cost method.",
        "label": "Treasury Stock, Value, Acquired, Cost Method",
        "negatedLabel": "Repurchases of common stock",
        "verboseLabel": "Shares repurchased cost"
       }
      }
     },
     "localname": "TreasuryStockValueAcquiredCostMethod",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofStockholdersEquity",
      "http://www.spscommerce.com/role/StockholdersEquityStockRepurchaseActivityDetails"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_TypeOfArrangementAxis": {
     "auth_ref": [
      "r560"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Information by collaborative arrangement and arrangement other than collaborative applicable to revenue-generating activity or operations.",
        "label": "Collaborative Arrangement and Arrangement Other than Collaborative [Axis]",
        "terseLabel": "Collaborative Arrangement and Arrangement Other than Collaborative"
       }
      }
     },
     "localname": "TypeOfArrangementAxis",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/RevenueSummaryofDeferredRevenueLiabilityRelatingtoSetUpFeesDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_USTreasurySecuritiesMember": {
     "auth_ref": [
      "r487",
      "r504",
      "r505",
      "r575"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "This category includes information about debt securities issued by the United States Department of the Treasury and backed by the United States government. Such securities primarily consist of treasury bills (short-term maturities - one year or less), treasury notes (intermediate term maturities - two to ten years), and treasury bonds (long-term maturities - ten to thirty years).",
        "label": "US Treasury Securities [Member]",
        "terseLabel": "U.S. treasury securities"
       }
      }
     },
     "localname": "USTreasurySecuritiesMember",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/FairValueMeasurementsSummaryofCashEquivalentsandInvestmentsDetail"
     ],
     "xbrltype": "domainItemType"
    },
    "us-gaap_UseOfEstimates": {
     "auth_ref": [
      "r54",
      "r55",
      "r56",
      "r217",
      "r218",
      "r219",
      "r220"
     ],
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Disclosure of accounting policy for the use of estimates in the preparation of financial statements in conformity with generally accepted accounting principles.",
        "label": "Use of Estimates, Policy [Policy Text Block]",
        "terseLabel": "Use of Estimates"
       }
      }
     },
     "localname": "UseOfEstimates",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/GeneralPolicies"
     ],
     "xbrltype": "textBlockItemType"
    },
    "us-gaap_VariableLeaseCost": {
     "auth_ref": [
      "r399",
      "r510"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail": {
       "order": 2.0,
       "parentTag": "us-gaap_LeaseCost",
       "weight": 1.0
      }
     },
     "crdr": "debit",
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Amount of variable lease cost, excluded from lease liability, recognized when obligation for payment is incurred for finance and operating leases.",
        "label": "Variable Lease, Cost",
        "terseLabel": "Variable lease cost"
       }
      }
     },
     "localname": "VariableLeaseCost",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CommitmentsandContingenciesComponentsofLeaseExpenseDetail"
     ],
     "xbrltype": "monetaryItemType"
    },
    "us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding": {
     "auth_ref": [
      "r194",
      "r210"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail": {
       "order": null,
       "parentTag": null,
       "root": true,
       "weight": null
      }
     },
     "lang": {
      "en-us": {
       "role": {
        "documentation": "The average number of shares or units issued and outstanding that are used in calculating diluted EPS or earnings per unit (EPU), determined based on the timing of issuance of shares or units in the period.",
        "label": "Weighted Average Number of Shares Outstanding, Diluted",
        "terseLabel": "Diluted (in shares)",
        "totalLabel": "Weighted average common shares outstanding, diluted (in shares)"
       }
      }
     },
     "localname": "WeightedAverageNumberOfDilutedSharesOutstanding",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome",
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail"
     ],
     "xbrltype": "sharesItemType"
    },
    "us-gaap_WeightedAverageNumberOfSharesOutstandingAbstract": {
     "auth_ref": [],
     "lang": {
      "en-us": {
       "role": {
        "label": "Weighted Average Number of Shares Outstanding, Diluted [Abstract]",
        "terseLabel": "Weighted average common shares used to compute net income per share",
        "verboseLabel": "Denominator"
       }
      }
     },
     "localname": "WeightedAverageNumberOfSharesOutstandingAbstract",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome",
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail"
     ],
     "xbrltype": "stringItemType"
    },
    "us-gaap_WeightedAverageNumberOfSharesOutstandingBasic": {
     "auth_ref": [
      "r193",
      "r210"
     ],
     "calculation": {
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail": {
       "order": 1.0,
       "parentTag": "us-gaap_WeightedAverageNumberOfDilutedSharesOutstanding",
       "weight": 1.0
      }
     },
     "lang": {
      "en-us": {
       "role": {
        "documentation": "Number of [basic] shares or units, after adjustment for contingently issuable shares or units and other shares or units not deemed outstanding, determined by relating the portion of time within a reporting period that common shares or units have been outstanding to the total time in that period.",
        "label": "Weighted Average Number of Shares Outstanding, Basic",
        "terseLabel": "Basic (in shares)",
        "verboseLabel": "Weighted average common shares outstanding, basic (in shares)"
       }
      }
     },
     "localname": "WeightedAverageNumberOfSharesOutstandingBasic",
     "nsuri": "http://fasb.org/us-gaap/2022",
     "presentation": [
      "http://www.spscommerce.com/role/CondensedConsolidatedStatementsofComprehensiveIncome",
      "http://www.spscommerce.com/role/NetIncomePerShareComponentsandComputationofBasicandDilutedNetIncomePerShareDetail"
     ],
     "xbrltype": "sharesItemType"
    }
   },
   "unitCount": 4
  }
 },
 "std_ref": {
  "r0": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "205",
   "URI": "https://asc.fasb.org/topic&trid=2122149",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r1": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(25))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r10": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02.19-26)",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r100": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "805",
   "URI": "https://asc.fasb.org/extlink&oid=79982066&loc=d3e1486-128463",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r101": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4A",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(c)",
   "Topic": "805",
   "URI": "https://asc.fasb.org/extlink&oid=128092470&loc=SL65897772-128472",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r102": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "20",
   "Topic": "805",
   "URI": "https://asc.fasb.org/extlink&oid=123410050&loc=d3e5227-128473",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r103": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "20",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "20",
   "Subparagraph": "(c)",
   "Topic": "805",
   "URI": "https://asc.fasb.org/extlink&oid=123410050&loc=d3e5333-128473",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r104": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "7",
   "Publisher": "FASB",
   "Section": "30",
   "SubTopic": "30",
   "Topic": "805",
   "URI": "https://asc.fasb.org/extlink&oid=126966197&loc=d3e6578-128477",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r105": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "8",
   "Publisher": "FASB",
   "Section": "30",
   "SubTopic": "30",
   "Topic": "805",
   "URI": "https://asc.fasb.org/extlink&oid=126966197&loc=d3e6613-128477",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r106": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(b)",
   "Topic": "805",
   "URI": "https://asc.fasb.org/extlink&oid=126975305&loc=d3e6927-128479",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r107": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "805",
   "URI": "https://asc.fasb.org/topic&trid=2303972",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r108": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "19",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "810",
   "URI": "https://asc.fasb.org/extlink&oid=126929396&loc=SL4569616-111683",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r109": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "20",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "810",
   "URI": "https://asc.fasb.org/extlink&oid=126929396&loc=SL4569643-111683",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r11": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02.20)",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r110": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1A",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(3)",
   "Topic": "810",
   "URI": "https://asc.fasb.org/extlink&oid=109239629&loc=SL4573702-111684",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r111": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1A",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c),(3)",
   "Topic": "810",
   "URI": "https://asc.fasb.org/extlink&oid=109239629&loc=SL4573702-111684",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r112": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "810",
   "URI": "https://asc.fasb.org/topic&trid=2197479",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r113": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4A",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "815",
   "URI": "https://asc.fasb.org/extlink&oid=125515794&loc=SL5618551-113959",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r114": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4B",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "815",
   "URI": "https://asc.fasb.org/extlink&oid=125515794&loc=SL5624163-113959",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r115": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "20",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "825",
   "URI": "https://asc.fasb.org/extlink&oid=123594938&loc=d3e13531-108611",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r116": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "21",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "825",
   "URI": "https://asc.fasb.org/extlink&oid=123594938&loc=d3e13537-108611",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r117": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "230",
   "Topic": "830",
   "URI": "https://asc.fasb.org/extlink&oid=123444420&loc=d3e33268-110906",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r118": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "25",
   "SubTopic": "20",
   "Topic": "940",
   "URI": "https://asc.fasb.org/extlink&oid=126941158&loc=d3e41242-110953",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r119": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.9-03(10))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=126897435&loc=d3e534808-122878",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r12": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02.21)",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r120": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.9-03(11))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=126897435&loc=d3e534808-122878",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r121": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.9-03(17))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=126897435&loc=d3e534808-122878",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r122": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.9-03(23))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=126897435&loc=d3e534808-122878",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r123": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.9-03(4))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=126897435&loc=d3e534808-122878",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r124": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.9-03(5))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=126897435&loc=d3e534808-122878",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r125": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.9-03.17)",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=126897435&loc=d3e534808-122878",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r126": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "220",
   "Subparagraph": "(SX 210.9-04(15))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=120399700&loc=SL114874048-224260",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r127": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "220",
   "Subparagraph": "(SX 210.9-04(22))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=120399700&loc=SL114874048-224260",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r128": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "405",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=116652737&loc=d3e64164-112818",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r129": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.7-03(a)(1)(g))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=126734703&loc=d3e572229-122910",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r13": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02.25)",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r130": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.7-03(a)(10))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=126734703&loc=d3e572229-122910",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r131": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.7-03(a)(12))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=126734703&loc=d3e572229-122910",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r132": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.7-03(a)(19))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=126734703&loc=d3e572229-122910",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r133": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.7-03(a)(23)(a)(4))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=126734703&loc=d3e572229-122910",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r134": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.7-03(a)(25))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=126734703&loc=d3e572229-122910",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r135": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.7-03(a)(8))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=126734703&loc=d3e572229-122910",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r136": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.7-03.(a),19)",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=126734703&loc=d3e572229-122910",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r137": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "220",
   "Subparagraph": "(SX 210.7-04(18))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=120400993&loc=SL114874131-224263",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r138": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "220",
   "Subparagraph": "(SX 210.7-04(8))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=120400993&loc=SL114874131-224263",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r139": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "985",
   "URI": "https://asc.fasb.org/extlink&oid=6501960&loc=d3e128462-111756",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r14": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02.29,30)",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r140": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "6",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "105",
   "URI": "https://asc.fasb.org/extlink&oid=126987489&loc=SL124442142-165695",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r141": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "7",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "205",
   "URI": "https://asc.fasb.org/extlink&oid=109222650&loc=SL51721683-107760",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r142": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=124098289&loc=d3e6676-107765",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r143": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=124098289&loc=d3e6904-107765",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r144": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(1))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r145": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(13))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r146": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(14))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r147": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(15))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r148": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(16))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r149": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(17))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r15": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02.29-31)",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r150": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(18))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r151": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(3)(a)(1))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r152": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(30)(a)(4))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r153": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(4))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r154": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(8))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r155": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(9))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r156": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "10A",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(e)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=SL7669646-108580",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r157": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "10A",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(f)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=SL7669646-108580",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r158": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "11",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=d3e637-108580",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r159": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "17A",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=SL34724391-108580",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r16": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02.30)",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r160": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1A",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=SL7669619-108580",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r161": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1A",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=SL7669619-108580",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r162": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1A",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=SL7669619-108580",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r163": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1B",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=SL7669625-108580",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r164": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1B",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=SL7669625-108580",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r165": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=124431353&loc=SL124442407-227067",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r166": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=124431353&loc=SL124442411-227067",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r167": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "6",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=124431353&loc=SL124452729-227067",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r168": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03(24))",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r169": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03(25))",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r17": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "10A",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=SL7669646-108580",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r170": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03(5))",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r171": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03(7))",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r172": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03(9))",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r173": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "11",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3151-108585",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r174": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3179-108585",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r175": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "24",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3521-108585",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r176": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.4-08(e)(1))",
   "Topic": "235",
   "URI": "https://asc.fasb.org/extlink&oid=120395691&loc=d3e23780-122690",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r177": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.4-08(g)(1)(ii))",
   "Topic": "235",
   "URI": "https://asc.fasb.org/extlink&oid=120395691&loc=d3e23780-122690",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r178": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.4-08(h)(2))",
   "Topic": "235",
   "URI": "https://asc.fasb.org/extlink&oid=120395691&loc=d3e23780-122690",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r179": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.4-08(h))",
   "Topic": "235",
   "URI": "https://asc.fasb.org/extlink&oid=120395691&loc=d3e23780-122690",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r18": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "10A",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=SL7669646-108580",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r180": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "23",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124436220&loc=d3e21914-107793",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r181": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "24",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124436220&loc=d3e21930-107793",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r182": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124436220&loc=d3e21711-107793",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r183": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)(2)",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124431687&loc=d3e22499-107794",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r184": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)(3)",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124431687&loc=d3e22499-107794",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r185": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "11",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124431687&loc=d3e22694-107794",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r186": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "11",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124431687&loc=d3e22694-107794",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r187": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124431687&loc=d3e22583-107794",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r188": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124431687&loc=d3e22595-107794",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r189": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "7",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124431687&loc=d3e22644-107794",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r19": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "11",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=d3e637-108580",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r190": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "7",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124431687&loc=d3e22644-107794",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r191": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "8",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124431687&loc=d3e22658-107794",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r192": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "9",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124431687&loc=d3e22663-107794",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r193": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "10",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e1448-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r194": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "16",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e1505-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r195": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e1252-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r196": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "22",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e1707-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r197": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "23",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e1757-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r198": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "26",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e1828-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r199": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "28A",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e1500-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r2": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(28))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r20": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=d3e640-108580",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r200": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "44",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e2062-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r201": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "48",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e2538-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r202": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "48",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e2538-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r203": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "51",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e2574-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r204": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "52",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e2597-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r205": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "53",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e2600-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r206": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "54",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e2603-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r207": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "60B",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=SL5780133-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r208": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "60B",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=SL5780133-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r209": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "7",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=126958026&loc=d3e1337-109256",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r21": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "14",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=d3e681-108580",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r210": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=124432515&loc=d3e3550-109257",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r211": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=124432515&loc=d3e3550-109257",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r212": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=124432515&loc=d3e3630-109257",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r213": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=109243012&loc=SL65017193-207537",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r214": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "15",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=128363288&loc=d3e3842-109258",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r215": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "260",
   "URI": "https://asc.fasb.org/topic&trid=2144383",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r216": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "272",
   "URI": "https://asc.fasb.org/extlink&oid=125520817&loc=d3e70191-108054",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r217": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "275",
   "URI": "https://asc.fasb.org/extlink&oid=99393423&loc=d3e5967-108592",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r218": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "275",
   "URI": "https://asc.fasb.org/extlink&oid=99393423&loc=d3e5967-108592",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r219": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "11",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "275",
   "URI": "https://asc.fasb.org/extlink&oid=99393423&loc=d3e6161-108592",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r22": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "14A",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=SL7669686-108580",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r220": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "275",
   "URI": "https://asc.fasb.org/extlink&oid=99393423&loc=d3e6191-108592",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r221": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "22",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8736-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r222": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "22",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8736-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r223": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "22",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(e)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8736-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r224": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "22",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(h)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8736-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r225": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "22",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8736-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r226": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "30",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8906-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r227": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "30",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8906-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r228": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "30",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8906-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r229": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "32",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8933-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r23": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "15",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=d3e689-108580",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r230": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "32",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8933-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r231": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "32",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8933-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r232": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "32",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8933-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r233": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "32",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(f)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8933-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r234": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "40",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e9031-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r235": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "41",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e9038-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r236": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "42",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e9054-108599",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r237": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "310",
   "URI": "https://asc.fasb.org/extlink&oid=124259787&loc=d3e4428-111522",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r238": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "9",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "310",
   "URI": "https://asc.fasb.org/extlink&oid=124259787&loc=d3e4531-111522",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r239": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "310",
   "URI": "https://asc.fasb.org/extlink&oid=123577603&loc=d3e5074-111524",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r24": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126968391&loc=d3e557-108580",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r240": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "320",
   "URI": "https://asc.fasb.org/extlink&oid=124260329&loc=d3e26610-111562",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r241": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "320",
   "URI": "https://asc.fasb.org/extlink&oid=126970911&loc=d3e27161-111563",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r242": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "320",
   "URI": "https://asc.fasb.org/extlink&oid=126970911&loc=d3e27232-111563",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r243": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5A",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "320",
   "URI": "https://asc.fasb.org/extlink&oid=126970911&loc=SL120269820-111563",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r244": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "320",
   "URI": "https://asc.fasb.org/topic&trid=2196928",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r245": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "323",
   "URI": "https://asc.fasb.org/extlink&oid=114001798&loc=d3e33918-111571",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r246": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=122640432&loc=SL121648383-210437",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r247": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "20",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124255206&loc=SL82895884-210446",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r248": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "11",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124255953&loc=SL82919244-210447",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r249": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124255953&loc=SL82919249-210447",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r25": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03(10))",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r250": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(d)",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124255953&loc=SL82919249-210447",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r251": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124255953&loc=SL82919249-210447",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r252": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "14",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124255953&loc=SL82919253-210447",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r253": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "16",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124255953&loc=SL82919258-210447",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r254": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124255953&loc=SL82919230-210447",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r255": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "30",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124258926&loc=SL82898722-210454",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r256": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124269663&loc=SL82922888-210455",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r257": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "7",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124269663&loc=SL82922895-210455",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r258": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "9",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124269663&loc=SL82922900-210455",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r259": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "20",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=99380562&loc=d3e13770-109266",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r26": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03(20))",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r260": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(f)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=121556970&loc=d3e13816-109267",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r261": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(a)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=66006027&loc=d3e16265-109275",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r262": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(d)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=66006027&loc=d3e16265-109275",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r263": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(a)(1)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=66006027&loc=d3e16323-109275",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r264": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(d)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=66006027&loc=d3e16323-109275",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r265": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "360",
   "URI": "https://asc.fasb.org/extlink&oid=109226691&loc=d3e2941-110230",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r266": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "420",
   "URI": "https://asc.fasb.org/extlink&oid=6394359&loc=d3e17939-110869",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r267": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "440",
   "URI": "https://asc.fasb.org/extlink&oid=123406679&loc=d3e25336-109308",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r268": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "440",
   "URI": "https://asc.fasb.org/extlink&oid=123406679&loc=d3e25336-109308",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r269": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)",
   "Topic": "450",
   "URI": "https://asc.fasb.org/extlink&oid=121557415&loc=d3e14435-108349",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r27": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03(4))",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r270": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "9",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)",
   "Topic": "450",
   "URI": "https://asc.fasb.org/extlink&oid=121557415&loc=d3e14557-108349",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r271": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "20",
   "Subparagraph": "(SAB Topic 5.Y.Q2)",
   "Topic": "450",
   "URI": "https://asc.fasb.org/extlink&oid=27011672&loc=d3e149879-122751",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r272": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "20",
   "Subparagraph": "(SAB Topic 5.Y.Q4)",
   "Topic": "450",
   "URI": "https://asc.fasb.org/extlink&oid=27011672&loc=d3e149879-122751",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r273": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1A",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.13-01(a)(4)(i))",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=126975872&loc=SL124442526-122756",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r274": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1A",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.13-01(a)(4)(iii)(A))",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=126975872&loc=SL124442526-122756",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r275": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1A",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.13-01(a)(4)(iv))",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=126975872&loc=SL124442526-122756",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r276": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1A",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.13-01(a)(5))",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=126975872&loc=SL124442526-122756",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r277": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1B",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.13-02(a)(4)(i))",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=126975872&loc=SL124442552-122756",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r278": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1B",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.13-02(a)(4)(iii)(A))",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=126975872&loc=SL124442552-122756",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r279": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1B",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.13-02(a)(4)(iii)(B))",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=126975872&loc=SL124442552-122756",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r28": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03.1,2)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r280": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1B",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.13-02(a)(4)(iv))",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=126975872&loc=SL124442552-122756",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r281": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1B",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.13-02(a)(5))",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=126975872&loc=SL124442552-122756",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r282": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1I",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(c)",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=123466505&loc=SL123495371-112611",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r283": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496158-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r284": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496158-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r285": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(g)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496158-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r286": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(h)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496158-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r287": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(i)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496158-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r288": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496158-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r289": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "14",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496171-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r29": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03.2)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r290": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "14",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496171-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r291": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "14",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496171-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r292": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "16",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496180-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r293": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "18",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496189-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r294": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "18",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496189-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r295": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "18",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496189-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r296": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "18",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496189-112644",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r297": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.3-04)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=120397183&loc=d3e187085-122770",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r298": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126919976&loc=SL49130531-203044",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r299": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126919976&loc=SL49130532-203044",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r3": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(29))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r30": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03.4)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r300": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "10",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130551-203045",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r301": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130554-203045",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r302": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130554-203045",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r303": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130554-203045",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r304": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130554-203045",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r305": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(e)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130554-203045",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r306": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)(2)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130556-203045",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r307": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "15",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130558-203045",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r308": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130543-203045",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r309": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130545-203045",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r31": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03.7(a),(b))",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r310": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "8",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130549-203045",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r311": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "9",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130550-203045",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r312": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "606",
   "URI": "https://asc.fasb.org/topic&trid=49130388",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r313": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(d)(i)",
   "Topic": "715",
   "URI": "https://asc.fasb.org/extlink&oid=123447040&loc=d3e1928-114920",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r314": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "80",
   "Subparagraph": "(d)",
   "Topic": "715",
   "URI": "https://asc.fasb.org/extlink&oid=65877416&loc=SL14450657-114947",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r315": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1D",
   "Publisher": "FASB",
   "Section": "35",
   "SubTopic": "10",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=126961718&loc=SL116886442-113899",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r316": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "35",
   "SubTopic": "10",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=126961718&loc=d3e4534-113899",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r317": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "35",
   "SubTopic": "10",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=126961718&loc=d3e4549-113899",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r318": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=126962052&loc=d3e4991-113900",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r319": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r32": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03.7)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r320": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)(1)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r321": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)(2)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r322": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)(3)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r323": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(1)(i)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r324": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(1)(ii)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r325": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(1)(iii)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r326": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(1)(iv)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r327": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(1)(iv)(01)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r328": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(1)(iv)(02)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r329": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(1)(iv)(03)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r33": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03.8)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r330": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(1)(iv)(04)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r331": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(2)(i)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r332": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(2)(ii)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r333": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(2)(iii)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r334": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(2)(iii)(01)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r335": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(2)(iii)(02)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r336": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(2)(iii)(03)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r337": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)(1)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r338": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)(2)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r339": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(e)(1)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r34": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-03.9)",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=126953954&loc=SL114868664-224227",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r340": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(e)(2)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r341": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(f)(2)(i)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r342": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(f)(2)(ii)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r343": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(f)(2)(iii)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r344": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(f)(2)(iv)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r345": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(f)(2)(v)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r346": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(h)(1)(i)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r347": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(h)(2)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r348": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(h)(2)(i)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r349": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(i)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r35": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3213-108585",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r350": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(l)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r351": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "15",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "10",
   "Subparagraph": "(e)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128097895&loc=SL121327923-165333",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r352": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "15",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "10",
   "Subparagraph": "(f)(1)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128097895&loc=SL121327923-165333",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r353": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "15",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "10",
   "Subparagraph": "(f)(2)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128097895&loc=SL121327923-165333",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r354": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "718",
   "URI": "https://asc.fasb.org/topic&trid=2228938",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r355": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=123427490&loc=d3e31917-109318",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r356": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "6",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=123427490&loc=d3e31931-109318",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r357": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "10",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=121826272&loc=d3e32672-109319",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r358": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "14",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=121826272&loc=d3e32705-109319",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r359": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "17",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=121826272&loc=d3e32809-109319",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r36": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3213-108585",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r360": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "21",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=121826272&loc=d3e32857-109319",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r361": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "9",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=121826272&loc=d3e32639-109319",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r362": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "8",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "10",
   "Subparagraph": "(d)(2)",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=126983759&loc=SL121830611-158277",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r363": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "8",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "10",
   "Subparagraph": "(d)(3)",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=126983759&loc=SL121830611-158277",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r364": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SAB TOPIC 6.I.5.Q1)",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=122134291&loc=d3e330036-122817",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r365": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SAB TOPIC 6.I.7)",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=122134291&loc=d3e330036-122817",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r366": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SAB Topic 6.I.Fact.1)",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=122134291&loc=d3e330036-122817",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r367": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SAB Topic 6.I.Fact.2)",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=122134291&loc=d3e330036-122817",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r368": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SAB Topic 11.C)",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=122134291&loc=d3e330215-122817",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r369": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "20",
   "Subparagraph": "(a)",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=123586238&loc=d3e38679-109324",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r37": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "14",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3255-108585",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r370": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "270",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=6424409&loc=d3e44925-109338",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r371": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(a)",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=6424122&loc=d3e41874-109331",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r372": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "740",
   "URI": "https://asc.fasb.org/topic&trid=2144680",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r373": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(a)",
   "Topic": "805",
   "URI": "https://asc.fasb.org/extlink&oid=128092470&loc=d3e4946-128472",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r374": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)",
   "Topic": "805",
   "URI": "https://asc.fasb.org/extlink&oid=128092470&loc=d3e4946-128472",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r375": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "25",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "810",
   "URI": "https://asc.fasb.org/extlink&oid=116870748&loc=SL6758485-165988",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r376": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "25",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "810",
   "URI": "https://asc.fasb.org/extlink&oid=116870748&loc=SL6758485-165988",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r377": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(bb)",
   "Topic": "810",
   "URI": "https://asc.fasb.org/extlink&oid=123419778&loc=d3e5710-111685",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r378": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "810",
   "URI": "https://asc.fasb.org/extlink&oid=123419778&loc=d3e5710-111685",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r379": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "40",
   "Subparagraph": "(f)",
   "Topic": "815",
   "URI": "https://asc.fasb.org/extlink&oid=126731327&loc=d3e90205-114008",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r38": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "15",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3291-108585",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r380": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "6",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "40",
   "Subparagraph": "(a)",
   "Topic": "815",
   "URI": "https://asc.fasb.org/extlink&oid=126731327&loc=SL126733271-114008",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r381": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "40",
   "Subparagraph": "(e)(3)",
   "Topic": "815",
   "URI": "https://asc.fasb.org/extlink&oid=126732423&loc=SL123482106-238011",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r382": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "40",
   "Subparagraph": "(e)(4)",
   "Topic": "815",
   "URI": "https://asc.fasb.org/extlink&oid=126732423&loc=SL123482106-238011",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r383": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "40",
   "Subparagraph": "(f)",
   "Topic": "815",
   "URI": "https://asc.fasb.org/extlink&oid=126732423&loc=SL123482106-238011",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r384": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "28",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(f)",
   "Topic": "825",
   "URI": "https://asc.fasb.org/extlink&oid=123596393&loc=d3e14064-108612",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r385": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "17",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "830",
   "URI": "https://asc.fasb.org/extlink&oid=126980362&loc=d3e28228-110885",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r386": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "35",
   "SubTopic": "20",
   "Topic": "830",
   "URI": "https://asc.fasb.org/extlink&oid=123602790&loc=d3e30226-110892",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r387": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "20",
   "Topic": "830",
   "URI": "https://asc.fasb.org/extlink&oid=125521441&loc=d3e30690-110894",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r388": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "830",
   "URI": "https://asc.fasb.org/extlink&oid=124440516&loc=d3e30840-110895",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r389": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "17",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "30",
   "Topic": "830",
   "URI": "https://asc.fasb.org/extlink&oid=118261656&loc=d3e32136-110900",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r39": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "24",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3521-108585",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r390": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "20",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "30",
   "Subparagraph": "(a)",
   "Topic": "830",
   "URI": "https://asc.fasb.org/extlink&oid=118261656&loc=d3e32211-110900",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r391": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "20",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "30",
   "Subparagraph": "(b)",
   "Topic": "830",
   "URI": "https://asc.fasb.org/extlink&oid=118261656&loc=d3e32211-110900",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r392": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "20",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "30",
   "Subparagraph": "(c)",
   "Topic": "830",
   "URI": "https://asc.fasb.org/extlink&oid=118261656&loc=d3e32211-110900",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r393": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "20",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "30",
   "Subparagraph": "(d)",
   "Topic": "830",
   "URI": "https://asc.fasb.org/extlink&oid=118261656&loc=d3e32211-110900",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r394": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Topic": "830",
   "URI": "https://asc.fasb.org/extlink&oid=6450520&loc=d3e32583-110901",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r395": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "20",
   "Subparagraph": "(a)",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=123391704&loc=SL77918627-209977",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r396": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "20",
   "Subparagraph": "(b)",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=123391704&loc=SL77918627-209977",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r397": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "20",
   "Subparagraph": "(c)",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=123391704&loc=SL77918643-209977",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r398": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=128292326&loc=SL77918686-209980",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r399": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(d)",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=128292326&loc=SL77918686-209980",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r4": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(30)(a)(1))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r40": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "25",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3536-108585",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r400": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(g)(1)",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=128292326&loc=SL77918686-209980",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r401": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(g)(3)",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=128292326&loc=SL77918686-209980",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r402": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(g)(4)",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=128292326&loc=SL77918686-209980",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r403": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=128292326&loc=SL77918686-209980",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r404": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "6",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=128292326&loc=SL77918701-209980",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r405": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "10",
   "Subparagraph": "(a)(3)(iii)(03)",
   "Topic": "848",
   "URI": "https://asc.fasb.org/extlink&oid=125980421&loc=SL125981372-237846",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r406": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)(2)(i)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107207-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r407": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)(2)(ii)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107207-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r408": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)(3)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107207-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r409": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(bb)(1)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107207-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r41": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "28",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3602-108585",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r410": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(bb)(2)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107207-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r411": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(bb)(3)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107207-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r412": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(c)(1)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107207-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r413": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(c)(2)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107207-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r414": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(c)(3)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107207-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r415": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)(1)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107314-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r416": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)(2)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107314-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r417": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)(3)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107314-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r418": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(c)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107314-111719",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r419": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "30",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=66007379&loc=d3e113888-111728",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r42": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "28",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3602-108585",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r420": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "7",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(a)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=109249958&loc=SL34722452-111729",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r421": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(a)(1)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122625-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r422": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(a)(2)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122625-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r423": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(a)(3)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122625-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r424": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(a)(4)(i)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122625-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r425": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(a)(1)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122739-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r426": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(a)(2)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122739-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r427": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(a)(3)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122739-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r428": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(a)(4)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122739-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r429": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(a)(5)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122739-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r43": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "28",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3602-108585",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r430": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(a)(6)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122739-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r431": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(a)(7)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122739-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r432": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(b)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122739-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r433": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(e)(1)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122739-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r434": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(e)(2)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122739-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r435": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "50",
   "Subparagraph": "(e)(3)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=128311188&loc=d3e122739-111746",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r436": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "6",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "910",
   "URI": "https://asc.fasb.org/extlink&oid=126937589&loc=SL119991595-234733",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r437": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "11",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "310",
   "Subparagraph": "(b)",
   "Topic": "912",
   "URI": "https://asc.fasb.org/extlink&oid=126938201&loc=d3e55415-109406",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r438": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SAB Topic 11.L)",
   "Topic": "924",
   "URI": "https://asc.fasb.org/extlink&oid=6472922&loc=d3e499488-122856",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r439": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "926",
   "URI": "https://asc.fasb.org/extlink&oid=120154696&loc=d3e54445-107959",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r44": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3044-108585",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r440": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "340",
   "Topic": "928",
   "URI": "https://asc.fasb.org/extlink&oid=6473545&loc=d3e61844-108004",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r441": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.9-03(10)(1))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=126897435&loc=d3e534808-122878",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r442": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.9-03(6))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=126897435&loc=d3e534808-122878",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r443": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "220",
   "Subparagraph": "(SX 210.9-04(26))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=120399700&loc=SL114874048-224260",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r444": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "220",
   "Subparagraph": "(SX 210.9-04(27))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=120399700&loc=SL114874048-224260",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r445": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "235",
   "Subparagraph": "(SX 210.9-05(b)(1))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=120399901&loc=d3e537907-122884",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r446": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "235",
   "Subparagraph": "(SX 210.9-05(b)(2))",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=120399901&loc=d3e537907-122884",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r447": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "360",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=124429447&loc=SL124453093-239630",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r448": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "210",
   "Subparagraph": "(SX 210.7-03(a)(23)(a)(3))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=126734703&loc=d3e572229-122910",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r449": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "220",
   "Subparagraph": "(SX 210.7-04(22))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=120400993&loc=SL114874131-224263",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r45": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "8",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126999549&loc=SL98516268-108586",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r450": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "220",
   "Subparagraph": "(SX 210.7-04(23))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=120400993&loc=SL114874131-224263",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r451": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "220",
   "Subparagraph": "(SX 210.7-04(9))",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=120400993&loc=SL114874131-224263",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r452": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "7A",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "40",
   "Subparagraph": "(d)",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=124506351&loc=SL117782755-158439",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r453": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "40",
   "Subparagraph": "(e)",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=124501264&loc=SL117420844-207641",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r454": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "40",
   "Subparagraph": "(f)(1)",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=124501264&loc=SL117420844-207641",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r455": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "40",
   "Subparagraph": "(f)(2)",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=124501264&loc=SL117420844-207641",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r456": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "40",
   "Subparagraph": "(g)(2)(i)",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=124501264&loc=SL117420844-207641",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r457": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "40",
   "Subparagraph": "(g)(2)(ii)",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=124501264&loc=SL117420844-207641",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r458": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "40",
   "Subparagraph": "(h)(2)",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=124501264&loc=SL117420844-207641",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r459": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1B",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "825",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=123600520&loc=SL75241803-196195",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r46": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124431687&loc=d3e22499-107794",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r460": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "310",
   "Topic": "954",
   "URI": "https://asc.fasb.org/extlink&oid=126942805&loc=d3e3115-115594",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r461": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "440",
   "Subparagraph": "(a)",
   "Topic": "954",
   "URI": "https://asc.fasb.org/extlink&oid=6491277&loc=d3e6429-115629",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r462": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "360",
   "Subparagraph": "(d)",
   "Topic": "958",
   "URI": "https://asc.fasb.org/extlink&oid=126982197&loc=d3e99779-112916",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r463": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "6",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "360",
   "Topic": "958",
   "URI": "https://asc.fasb.org/extlink&oid=126982197&loc=d3e99893-112916",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r464": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "7",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "360",
   "Topic": "958",
   "URI": "https://asc.fasb.org/extlink&oid=126982197&loc=SL120174063-112916",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r465": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "310",
   "Subparagraph": "(c)",
   "Topic": "976",
   "URI": "https://asc.fasb.org/extlink&oid=6497875&loc=d3e22274-108663",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r466": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "310",
   "Subparagraph": "(b)",
   "Topic": "978",
   "URI": "https://asc.fasb.org/extlink&oid=126945304&loc=d3e27327-108691",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r467": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(a)",
   "Publisher": "SEC",
   "Section": "1402",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r468": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(b)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(1)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r469": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(b)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(2)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r47": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124431687&loc=d3e22583-107794",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r470": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(b)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(3)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r471": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(b)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(4)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r472": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(b)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(5)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r473": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(c)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(1)(i)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r474": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(c)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(1)(ii)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r475": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(c)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(2)(i)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r476": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(c)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(2)(ii)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r477": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(c)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(2)(iii)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r478": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Publisher": "SEC",
   "Section": "1402",
   "Subsection": "Instruction 5",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r479": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(a)",
   "Publisher": "SEC",
   "Section": "1406",
   "Subparagraph": "(1)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r48": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=124432515&loc=d3e3550-109257",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r480": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(a)",
   "Publisher": "SEC",
   "Section": "1406",
   "Subparagraph": "(2)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r481": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(a)",
   "Publisher": "SEC",
   "Section": "1406",
   "Subparagraph": "(3)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r482": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(a)",
   "Publisher": "SEC",
   "Section": "1406",
   "Subparagraph": "(4)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r483": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(a)",
   "Publisher": "SEC",
   "Section": "1406",
   "Subparagraph": "(5)",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r484": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(c)",
   "Publisher": "SEC",
   "Section": "1406",
   "role": "http://www.xbrl.org/2003/role/disclosureRef"
  },
  "r485": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=124098289&loc=d3e6676-107765",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r486": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=124098289&loc=d3e6676-107765",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r487": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.4-08(m)(1)(ii)(A))",
   "Topic": "235",
   "URI": "https://asc.fasb.org/extlink&oid=120395691&loc=d3e23780-122690",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r488": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "52",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "10",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=128363288&loc=d3e4984-109258",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r489": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "30",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8906-108599",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r49": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "270",
   "URI": "https://asc.fasb.org/extlink&oid=126900757&loc=d3e725-108305",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r490": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "31",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "280",
   "URI": "https://asc.fasb.org/extlink&oid=126901519&loc=d3e8924-108599",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r491": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "20",
   "Subparagraph": "(e)",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124267575&loc=SL82921835-210448",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r492": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "20",
   "Subparagraph": "(e)(1)",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124267575&loc=SL82921835-210448",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r493": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "20",
   "Subparagraph": "(e)(2)",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124267575&loc=SL82921835-210448",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r494": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "8",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "30",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=121590138&loc=SL82922954-210456",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r495": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "24",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "20",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=122137925&loc=d3e14258-109268",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r496": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=SL123496158-112644",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r497": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "91",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920602&loc=SL49130690-203046-203046",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r498": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "91",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920602&loc=SL49130690-203046-203046",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r499": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "91",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920602&loc=SL49130690-203046-203046",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r5": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(30)(a)(3))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r50": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "270",
   "URI": "https://asc.fasb.org/extlink&oid=126900757&loc=d3e765-108305",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r500": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "91",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920602&loc=SL49130690-203046-203046",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r501": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "91",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "10",
   "Subparagraph": "(e)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920602&loc=SL49130690-203046-203046",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r502": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "91",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "10",
   "Subparagraph": "(f)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920602&loc=SL49130690-203046-203046",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r503": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "91",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "10",
   "Subparagraph": "(g)",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920602&loc=SL49130690-203046-203046",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r504": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(d)(ii)",
   "Topic": "715",
   "URI": "https://asc.fasb.org/extlink&oid=123447040&loc=d3e1928-114920",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r505": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "17",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "20",
   "Topic": "715",
   "URI": "https://asc.fasb.org/extlink&oid=123450688&loc=d3e4179-114921",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r506": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "11",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "80",
   "Subparagraph": "(a)",
   "Topic": "715",
   "URI": "https://asc.fasb.org/extlink&oid=65877416&loc=SL14450702-114947",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r507": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "6",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "80",
   "Subparagraph": "(a)",
   "Topic": "715",
   "URI": "https://asc.fasb.org/extlink&oid=65877416&loc=SL14450673-114947",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r508": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "8",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "80",
   "Topic": "715",
   "URI": "https://asc.fasb.org/extlink&oid=35742348&loc=SL14450788-114948",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r509": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)(1)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r51": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "18",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "275",
   "URI": "https://asc.fasb.org/extlink&oid=99393423&loc=d3e6351-108592",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r510": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "53",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "20",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=123414884&loc=SL77918982-209971",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r511": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "10",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "10",
   "Topic": "852",
   "URI": "https://asc.fasb.org/extlink&oid=84165509&loc=d3e56426-112766",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r512": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13H",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "40",
   "Subparagraph": "(a)",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=126561865&loc=SL117783719-158441",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r513": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "29F",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "40",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=126561865&loc=SL117819544-158441",
   "role": "http://www.xbrl.org/2003/role/exampleRef"
  },
  "r514": {
   "Name": "Exchange Act",
   "Number": "240",
   "Publisher": "SEC",
   "Section": "12",
   "Subsection": "b",
   "role": "http://www.xbrl.org/2003/role/presentationRef"
  },
  "r515": {
   "Name": "Exchange Act",
   "Number": "240",
   "Publisher": "SEC",
   "Section": "12",
   "Subsection": "b-2",
   "role": "http://www.xbrl.org/2003/role/presentationRef"
  },
  "r516": {
   "Name": "Exchange Act",
   "Number": "240",
   "Publisher": "SEC",
   "Section": "12",
   "Subsection": "d1-1",
   "role": "http://www.xbrl.org/2003/role/presentationRef"
  },
  "r517": {
   "Name": "Form 10-Q",
   "Number": "240",
   "Publisher": "SEC",
   "Section": "308",
   "Subsection": "a",
   "role": "http://www.xbrl.org/2003/role/presentationRef"
  },
  "r518": {
   "Name": "Forms 10-K, 10-Q, 20-F",
   "Number": "240",
   "Publisher": "SEC",
   "Section": "13",
   "Subsection": "a-1",
   "role": "http://www.xbrl.org/2003/role/presentationRef"
  },
  "r519": {
   "Name": "Regulation S-T",
   "Number": "232",
   "Publisher": "SEC",
   "Section": "405",
   "role": "http://www.xbrl.org/2003/role/presentationRef"
  },
  "r52": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "18",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "275",
   "URI": "https://asc.fasb.org/extlink&oid=99393423&loc=d3e6351-108592",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r520": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(17))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r521": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(8))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r522": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=124431353&loc=SL124442407-227067",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r523": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=124431353&loc=SL124442411-227067",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r524": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "6",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "220",
   "URI": "https://asc.fasb.org/extlink&oid=124431353&loc=SL124452729-227067",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r525": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "28",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "230",
   "URI": "https://asc.fasb.org/extlink&oid=126954810&loc=d3e3602-108585",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r526": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.4-08(g)(1)(ii))",
   "Topic": "235",
   "URI": "https://asc.fasb.org/extlink&oid=120395691&loc=d3e23780-122690",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r527": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.4-08(h)(1)(Note 1))",
   "Topic": "235",
   "URI": "https://asc.fasb.org/extlink&oid=120395691&loc=d3e23780-122690",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r528": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "23",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124436220&loc=d3e21914-107793",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r529": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "24",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124436220&loc=d3e21930-107793",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r53": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "20",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "275",
   "URI": "https://asc.fasb.org/extlink&oid=99393423&loc=d3e6404-108592",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r530": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "250",
   "URI": "https://asc.fasb.org/extlink&oid=124436220&loc=d3e21711-107793",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r531": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "260",
   "URI": "https://asc.fasb.org/extlink&oid=124432515&loc=d3e3550-109257",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r532": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "18",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "275",
   "URI": "https://asc.fasb.org/extlink&oid=99393423&loc=d3e6351-108592",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r533": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "321",
   "URI": "https://asc.fasb.org/extlink&oid=126980263&loc=SL75117539-209714",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r534": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "321",
   "URI": "https://asc.fasb.org/extlink&oid=126980263&loc=SL75117539-209714",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r535": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "321",
   "URI": "https://asc.fasb.org/extlink&oid=126980263&loc=SL75117539-209714",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r536": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "323",
   "URI": "https://asc.fasb.org/extlink&oid=114001798&loc=d3e33918-111571",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r537": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "326",
   "URI": "https://asc.fasb.org/extlink&oid=124255953&loc=SL82919249-210447",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r538": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(a)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=121556970&loc=d3e13816-109267",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r539": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=121556970&loc=d3e13816-109267",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r54": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "275",
   "URI": "https://asc.fasb.org/extlink&oid=99393423&loc=d3e6061-108592",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r540": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(c)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=121556970&loc=d3e13816-109267",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r541": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(d)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=121556970&loc=d3e13816-109267",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r542": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(e)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=121556970&loc=d3e13816-109267",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r543": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(f)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=121556970&loc=d3e13816-109267",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r544": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(g)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=121556970&loc=d3e13816-109267",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r545": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(h)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=121556970&loc=d3e13816-109267",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r546": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=121556970&loc=d3e13816-109267",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r547": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1A",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=121556970&loc=SL108378252-109267",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r548": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=121556970&loc=d3e13854-109267",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r549": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "10",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(c)",
   "Topic": "410",
   "URI": "https://asc.fasb.org/extlink&oid=6393242&loc=d3e13237-110859",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r55": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "8",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "275",
   "URI": "https://asc.fasb.org/extlink&oid=99393423&loc=d3e6132-108592",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r550": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "9",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)",
   "Topic": "450",
   "URI": "https://asc.fasb.org/extlink&oid=121557415&loc=d3e14557-108349",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r551": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "20",
   "Subparagraph": "(SAB Topic 5.Y.Q2)",
   "Topic": "450",
   "URI": "https://asc.fasb.org/extlink&oid=27011672&loc=d3e149879-122751",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r552": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "450",
   "URI": "https://asc.fasb.org/topic&trid=2127136",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r553": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1A",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.13-01(a)(4)(ii))",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=126975872&loc=SL124442526-122756",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r554": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1A",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.13-01(a)(4)(iii))",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=126975872&loc=SL124442526-122756",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r555": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1B",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(d)",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=123466505&loc=SL123495323-112611",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r556": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "10",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130551-203045",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r557": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "5",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "606",
   "URI": "https://asc.fasb.org/extlink&oid=126920106&loc=SL49130545-203045",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r558": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(d)(ii)",
   "Topic": "715",
   "URI": "https://asc.fasb.org/extlink&oid=123447040&loc=d3e1928-114920",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r559": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(l)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r56": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "9",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "275",
   "URI": "https://asc.fasb.org/extlink&oid=99393423&loc=d3e6143-108592",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r560": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "808",
   "URI": "https://asc.fasb.org/extlink&oid=6931272&loc=SL5834143-161434",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r561": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "65",
   "SubTopic": "40",
   "Subparagraph": "(e)(3)",
   "Topic": "815",
   "URI": "https://asc.fasb.org/extlink&oid=126732423&loc=SL123482106-238011",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r562": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "28",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(f)",
   "Topic": "825",
   "URI": "https://asc.fasb.org/extlink&oid=123596393&loc=d3e14064-108612",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r563": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "230",
   "Topic": "830",
   "URI": "https://asc.fasb.org/extlink&oid=123444420&loc=d3e33268-110906",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r564": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=128292326&loc=SL77918686-209980",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r565": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "6",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Topic": "842",
   "URI": "https://asc.fasb.org/extlink&oid=128292326&loc=SL77918701-209980",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r566": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "7",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "852",
   "URI": "https://asc.fasb.org/extlink&oid=124433192&loc=SL2890621-112765",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r567": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "7",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "852",
   "URI": "https://asc.fasb.org/extlink&oid=124433192&loc=SL2890621-112765",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r568": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(c)(1)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107207-111719",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r569": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(c)(2)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107207-111719",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r57": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "11B",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "310",
   "URI": "https://asc.fasb.org/extlink&oid=123577603&loc=SL6953423-111524",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r570": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(c)(3)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107207-111719",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r571": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)(1)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107314-111719",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r572": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)(2)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107314-111719",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r573": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "20",
   "Subparagraph": "(b)(3)",
   "Topic": "860",
   "URI": "https://asc.fasb.org/extlink&oid=121570589&loc=d3e107314-111719",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r574": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "25",
   "SubTopic": "730",
   "Topic": "912",
   "URI": "https://asc.fasb.org/extlink&oid=6472174&loc=d3e58812-109433",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r575": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "320",
   "Subparagraph": "(b)",
   "Topic": "942",
   "URI": "https://asc.fasb.org/extlink&oid=126980459&loc=d3e62557-112803",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r576": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4H",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "40",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=116884468&loc=SL65671331-158438",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r577": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1B",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "825",
   "Topic": "944",
   "URI": "https://asc.fasb.org/extlink&oid=123600520&loc=SL75241803-196195",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r578": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(a)",
   "Publisher": "SEC",
   "Section": "1402",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r579": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(b)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(1)",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r58": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SAB Topic 4.E)",
   "Topic": "310",
   "URI": "https://asc.fasb.org/extlink&oid=122038336&loc=d3e74512-122707",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r580": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(b)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(2)",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r581": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(b)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(3)",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r582": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(c)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(2)(i)",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r583": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(c)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(2)(ii)",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r584": {
   "Name": "Regulation S-K (SK)",
   "Number": "229",
   "Paragraph": "(c)",
   "Publisher": "SEC",
   "Section": "1402",
   "Subparagraph": "(2)(iii)",
   "role": "http://www.xbrl.org/2009/role/commonPracticeRef"
  },
  "r59": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "310",
   "URI": "https://asc.fasb.org/topic&trid=2196771",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r6": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(30))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r60": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "11",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "320",
   "URI": "https://asc.fasb.org/extlink&oid=124260329&loc=d3e26853-111562",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r61": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(aa)",
   "Topic": "320",
   "URI": "https://asc.fasb.org/extlink&oid=126970911&loc=d3e27161-111563",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r62": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "9",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "320",
   "URI": "https://asc.fasb.org/extlink&oid=126970911&loc=d3e27357-111563",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r63": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "30",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=6388964&loc=d3e16225-109274",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r64": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(a)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=66006027&loc=d3e16265-109275",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r65": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(a)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=66006027&loc=d3e16323-109275",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r66": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(a)(1)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=66006027&loc=d3e16323-109275",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r67": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(a)(2)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=66006027&loc=d3e16323-109275",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r68": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Subparagraph": "(a)(3)",
   "Topic": "350",
   "URI": "https://asc.fasb.org/extlink&oid=66006027&loc=d3e16323-109275",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r69": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "350",
   "URI": "https://asc.fasb.org/topic&trid=2144416",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r7": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(31))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r70": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(b)",
   "Topic": "360",
   "URI": "https://asc.fasb.org/extlink&oid=6391035&loc=d3e2868-110229",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r71": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)",
   "Topic": "360",
   "URI": "https://asc.fasb.org/extlink&oid=6391035&loc=d3e2868-110229",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r72": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "360",
   "URI": "https://asc.fasb.org/extlink&oid=6391035&loc=d3e2868-110229",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r73": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "360",
   "URI": "https://asc.fasb.org/topic&trid=2155823",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r74": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "440",
   "URI": "https://asc.fasb.org/topic&trid=2144648",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r75": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12A",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "10",
   "Topic": "470",
   "URI": "https://asc.fasb.org/extlink&oid=99376301&loc=SL5988623-112600",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r76": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=126973232&loc=d3e21463-112644",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r77": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.3-04)",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=120397183&loc=d3e187085-122770",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r78": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "45",
   "SubTopic": "30",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=6405813&loc=d3e23239-112655",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r79": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=6405834&loc=d3e23285-112656",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r8": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02(32))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r80": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "3",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=6405834&loc=d3e23309-112656",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r81": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "4",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "30",
   "Topic": "505",
   "URI": "https://asc.fasb.org/extlink&oid=6405834&loc=d3e23315-112656",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r82": {
   "Name": "Accounting Standards Codification",
   "Publisher": "FASB",
   "Topic": "505",
   "URI": "https://asc.fasb.org/topic&trid=2208762",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r83": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(c)(1)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r84": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r85": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(d)(1)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r86": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(e)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r87": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(e)(1)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r88": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(f)(2)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r89": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(g)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r9": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SX 210.5-02.19(a))",
   "Topic": "210",
   "URI": "https://asc.fasb.org/extlink&oid=120391452&loc=d3e13212-122682",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r90": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(h)(1)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r91": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=d3e5070-113901",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r92": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2A",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Subparagraph": "(a)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=128089324&loc=SL79508275-113901",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r93": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SAB Topic 14.F)",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=122041274&loc=d3e301413-122809",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r94": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "12",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "20",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=126964447&loc=d3e11149-113907",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r95": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "13",
   "Publisher": "FASB",
   "Section": "55",
   "SubTopic": "20",
   "Topic": "718",
   "URI": "https://asc.fasb.org/extlink&oid=126964447&loc=d3e11178-113907",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r96": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "730",
   "URI": "https://asc.fasb.org/extlink&oid=6420194&loc=d3e21568-108373",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r97": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "1",
   "Publisher": "FASB",
   "Section": "S99",
   "SubTopic": "10",
   "Subparagraph": "(SAB Topic 6.I.7)",
   "Topic": "740",
   "URI": "https://asc.fasb.org/extlink&oid=122134291&loc=d3e330036-122817",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r98": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "16",
   "Publisher": "FASB",
   "Section": "25",
   "SubTopic": "10",
   "Topic": "805",
   "URI": "https://asc.fasb.org/extlink&oid=123586518&loc=d3e961-128460",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  },
  "r99": {
   "Name": "Accounting Standards Codification",
   "Paragraph": "2",
   "Publisher": "FASB",
   "Section": "50",
   "SubTopic": "10",
   "Topic": "805",
   "URI": "https://asc.fasb.org/extlink&oid=79982066&loc=d3e1392-128463",
   "role": "http://fasb.org/us-gaap/role/ref/legacyRef"
  }
 },
 "version": "2.2"
}
</TEXT>
</DOCUMENT>
<DOCUMENT>
<TYPE>ZIP
<SEQUENCE>85
<FILENAME>0001092699-23-000035-xbrl.zip
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
begin 644 0001092699-23-000035-xbrl.zip
M4$L#!!0    ( "2"FE9E^@JR!@@  * E   :    <3%?,C R,V5X:&EB:71E
M>#,Q,6-E;RYH=&WM6FUOVS@2_GZ_@IO@NBG@-SG.2YTT@..XJ'&]I)MXT=U/
M!UJD;"*4J"4I.[Y??P])^25QTKJ;;>L-KD =21P.9S@/GQE2.OWIXJH[^/UC
MCXQM*LG'7\\_]+MDIUJO?]KOUNL7@POR?O#O#Z15:T1DH&EFA!4JH[)>[UWN
MD)VQM7F[7I].I[7I?DWI47UP77>J6G6IE.$U9MG.V:E[@E].V=D_3G^J5LF%
MBHN49Y;$FE/+&2F,R$;D$^/FEE2KI517Y3,M1F-+FHWF/OFD]*V8T-!NA97\
M;*[GM![N3^M^D-.A8K.S4R8F1+"W.^*(1DE\_.:PF<3[K>'A$>41/8J:!XQ%
MP^.CUL%_(AA9AWCH8^Q,\K<[J<BJ8^[&;[<.<GLR%<R.VU&C\<\=+W=VFJC,
M8C"-SN$RZ%C71/4(RJS*VU$3FBR_LU4JQ2AK>_]V@JJY>*RDTNW=AO]WXEJJ
M"4V%G+5_'HB4&W+)I^1:I33[N6(0DZKA6B1!T(C_<MB(0?SM--A_!#U29'SN
M3]1T3O1^>]\_[P_(?E2+[GNPF>TQ9I[K'V1\MW<]Z+_K=SN#_M4ED'M]\VOG
M<D &5^2FU_7/]AM-<O6.#-[WR$WG^KQSV;NI7OWVH?<[Z70'F_K[S;UK/>I=
MOT(Z.AX+3LXEC6\K).;:BF1&[)C:5[L'QR<;!RRGC&%Q525/;/N@-0^AR!C"
MUZ[N'_XP)Z/:W(GO/_K]:6D>UP[<-/3)F$XXT7PB^!2T9,?"D%\*JH%S.2/7
M/%?:$I61=TJG)&I4?R$J(3<?;\!5:<IUS"NDG\4U1.C-2XA0<^LB=$X-XH((
MI#-RFZFIY&R$2?>!TB$\3,&$3"&Y8 0J,D*S&2DRJPL.#Y!N?.9!W"A)<:<%
ME22A,1YIHE)AB55!;DT@XS$WANJ9$TGI+<>X*SH-GC$8@R&E3UL8PPG$0B--
M02Q#=UC"N";3L8C'Q!3N9]E_RC4OE3@'4F$D\IE+C5-AQW#0Y#SV!CJ].4Q3
M#&Y.T(V1X6QU&EX*!/?_/A#D)!$9@NSPL@QJ!?B#.)KU2KO($E (==44KF-9
M,.@$<%8B6 'HA*.=''%WD'50EG*)R1(.YL'0@#WS95K%2102 @"B EK\<,;;
M$U,S)HE44S-'Z34?"6-1XUE"W<-@-ZRLK(#-S(U9L_:EX*VU=7@;W O.J]WC
M9G1T8DI$E76!HPB5) *W/FQ]0C7W $' Q5!R%TC"@<JA%&;LQ)U8"GIT%.GN
MF3"Q5*9 /T><6LF E%RKF#,\-F0/P& <2 O1[]W%8YJ-..F DZX+"8EHGU:C
M@SW^VG>-#EBX"[?"E8M90*C33QQQK0 W ,G9LO% R;V!$@SD_'P(9TBXO/Z,
MNBEJ'#_$J$/M#\(HW1J,MHYJC2,W#Q?<8$N </F4]F4L55RVC6EA-N_BTMZ0
M Q?E2"&1JD)# =AI(HSG/$CQS.MQM?*2+5<95W-)/=#*3+H$2Z5D8]<HP)RP
MQ2@IF-^EFF)H!!-4"^> "/G>YX#,:2J,R\%^71J?L#U#8AL,@[ _]9URU)(B
M+B1UQ ZWO!'+7(X>H3)8+6AP->1.$-R+_IP]@VNW"\C#[0'R82#;^SC>F+'6
MX+PYUVV,:JR$B6".U:E1&76D3@V [LI*/!Q1S>9H KX%'0HI[,RE]\>&=6O+
M \]C*BR+>Z(K9:G/'7>E0WFA<V#:^'(DCI5FW@!?H(YXABI# MIHX;E;,TX$
MQ7> +]:6R$'?+P; \?8 >,[$O0F5A:<K%UZ>)"@1Q02!,8^4>HMJ8@/Z#;>/
M5W\>L.@(ZC2AQARJPCYMP28)@BZDN2N@DR_O><AP7IK[-<C#3, >CS<WP$O
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
MQ<9GQNDMYEY?LKGLZXI-=]Y9G@I]$>**/8H_8MA ;)1!1\,7O/8H.HL2%;H
MQ*"2K/H"P$#V-WD" (%9<LX4^63C^=FS2NZ[MR,Z@QP>:^"-*H2=.ZH#X+CC
MZ0)A59\"13I5<LHQ#Z9T7)RRZX(=>9))->?0.ILH3XGT'GX!;_](D5#_@I=[
MUFVBBN80\,=U#:9:TLSP;GEQ#-2=23KOBM1-F.MT7"@+E;4JZ>(;XBGR/Q0.
MQ?M1!RC?O'QY7&_Z%\A6PW]6CEPTUUU3P[+UMLYA_:CY>'.S'CS:]@^I;3B3
MO=DP,R:CZ9M*NU)V*)#3;65W)+C_HAC!M#8Y*OOVZRMH@3<O]CH )_=+?AK\
M?-X?7GXD5_W+F^NK!7"*N?B$FTUT<LNI*7#E8)>!OWB:1$I'_S7S]N"%]%>:
MJ[\U'8NO,;["G#B-76%AO&B+6>K?\2C'O2[Y#0I \A[VL0)3BLMAO8G@,7F[
MH*QK7R6N\=4...-2T7YQ7H-O/Q=&HR,K1SI%I?ORVSGQR?D_ Y/EB[W@5?.X
M]:KJOAQZ\'7.W\%KPU'^AHRR^H%0IOSG45U_MCSE:Y\,+0G!Y8SFL@L-@15R
MN][E,U\9%;_^@R?WZ=7I7U!+ P04    "  D@II6L8-*'3H%  !5&   '0
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
M5WGMI5-N97U_V(0!C8"ASD]0F_!QMW?0_;*<3LECQ'3\,08I/8L.A$-2SG,
M,3F'D5'!6LZ4(=2LK->:G4ZTI]U6LS\_.17D9[?W!GQ(X V_6$SOHG:P\Y$G
MP8TF&GDN,)!H'Y#!*0&)CBSXH(S&%(15ORFC)Q/1FRZX^:VCYNDH!O"+">C=
M1Z\-V)%C2.0B1=QRBG1.(F*"D^@]\T2%E74A^$]$\!>1VHW(Z5CH.8AYV@.3
M;)[:5B6>13_,6Y[ ST#[8G^U H=:PTS0*Z 9E:P:]XIF/DU>\3WS0V=H07G\
MV>A%^^O93)ZHN/BH#.748H:(-1QQ3R*R) 2D@X_6PC_*L95U229,YO=9XEK>
MWZ?UIM'M_+*3DORC4-;Y$(%K6QX1C](CXX)&F'@+3"$HK('#<2:0X9,,;@D1
M[=M<S'_]AZ9$_=&O#&(KGF8U&$^$7X4S"U8+2G=//&/3SVZ_SVHB(-F R+WF
MH DW[!4O&'LQ5$Z'O?XPSSH-NN SC6)(A/[F?L]XGG,<-OS@Y?W?:VF2W)A9
MH_AADTS?/\:QG/K4%5%K6#^T04_=V*)G^7.99[O?@J.#YF"TQBY:WZCXENWW
M?V*:!>>W6WEH;'/1NJ)G"U3</V^[;NM7[87+:?UXYANY4%8%8/5+HPG*\0U[
M?V8R8PRE&6CQF@)PK/3!#0^5RQ=9Q)ZY?1B:(5D;CW#GA+K"()>2K(WFZ':W
MX?R+8URG[WCMI'8&UP)1VV*'[??-H^WZI[RNI;9=(T<'.S<S7SF0.[9;?<N.
M#H[/:Q=;0/3V3@X/0O/HPS^?#NE;?'CR[LOAQ?M6T<;)V>6\M7TR$B-OF$=<
MV9@SACARRGL:+(E!LE%^(.AT48QJM7)J>Y7/MC6,E?_,(S*IG.92!XW'S3[?
M Q!*L[B'68P1>03(I4W<PR9V;MI$HEY)[ AR&/P@SH)$6D6,5(C14>=E\JG(
MHMM<6'U?L"G0[QK# ?@===L/]M\C@*F,=K*OO'Z]69EE#.9R -D:C]JCI-&;
M.4QY3%_Z]*6G,Z:WUXVI:?#1_S:P;[_OV ]FN'L"UV^_A;;!\TY>P7N^A??+
MR20;[*B]0^OM=PS:PFKMH^;_7M0N/DH)HY"@$B7M87@25",#YHE($-;99(PT
M(?.O0GNV6UUG6V/UF0@</7(*>MJV8>YE&SN=D*?18\6=5WPC@G'DFC5 +F.1
M#))=]MZW7-+?R.^5ANT7.?RA8ELM.)A7"^48P+^'S1P! ,??Q?$)<,^O00"6
M,S%&ZSK&H8 K$81+"\GA@7PXK^NH!#@*S#^?>MK+1>_R-T(KQ3+$?N4WN!_8
M4J4_!!K<;W1S0FME5*8&KK&#FVW_8J^WLEB'4%P\?H??5RNV$RJ_T=$[.K!(
M..Y.X WR^<6I<%%NQ?@^>>%4OVA$T4C;'U0,K@1[WE^;_>S(YK#7@^>/EFOE
M 7E@!\/^4F+(H^I'T(^2"N\D2<AC+F$XY1$9@C7R@N*8&#<LF)7UPS@QS5BY
M--DI+>>[G\F=_>13-WI-VWK4$W_V/:<),/7N?'JY>\_5*\L NQF. (G:S<$
ML"NV )%ZW4YF7JWS2@06=E[9R?3*^F*.K&H'MI)7/MU$Y6_WN!JGW1O"F1R+
M\;J!86N45;6/#BJ_Y?7+Z@_*Z-KXA$&CV8<6V].\?&#6$#UJ[U?DC?W?GP!7
MK_1D[L@QS/YRN/J6?%38,Q&41"(:A[A5&%F>/'(")P+N/!8EKI:XNL2X"E!F
M*RUH=JQ8[P%7>S:#8X::7B:#M_Y: 45'MQ[HMP&0X2F]2TH&Z-2&/CA?S=P7
M;@>$,7?1<>6XU_TR:%P>7@,J'(NVA9B:G6(%<)$ D><+*;SF'2TL#I,_+D_[
MX0EWM^_RQ,Q_QR??T=;+,YN=T;A!J$/TDM%?I?%KSW&63Z\IKJ=?RV(-BX=-
MN<VIL?>;Z)SN@HJ1#)\<5?"3)&5GLM;;!,L][O;.;PD1%2<5-NW')RUWM.A@
MAQ\>[(@ZL)'#@W].ZMLU?O0A+P,*K?K%6U$_J>?(C:A-+!GJBEHNT77R"=JZ
MUZBU:_CPHM$Z;/_3KM-WK%[]1&L4F$SUT\4=B]V,!$+K@T"6*> TV')DG3%(
M<$!/3+F-T:VLO[X=<6=?GN-GM?S18SJ^QISF]R+3-->-2;D]YO6*ZL&+(:CN
M;9.\-Q:]C\?4:4V./\&ISV>@J-]&#>=O7+-0OJ67U?Y=;/C9H,7,:4O1A7\/
M^_#D?O\Y5@Q[(J)R_OJ@=I.HY,U_$DT!V40#XIIAI'&.Q1@=(S611:E_5#'L
M%QL@9M.2)8"RK=M]]1+([@MDEQVX7?3?YJC[2D![,*#A6P!-6H&)I1(I3Q3B
M$7K3D&@1-]8'&BW3$M\+T";FT^<3:4S?B>CE?/Y; Y'-=-O<3C&C W2QTRTF
M9(;]4300=#SFXK^5P;?"@./9DSRKDI_5.L\/_]*$1\-C*QUXM6ZF-)^;_8)^
M=FS'-VTKN[*YCDX^.>^^&/)>KI5<.*<9[LK:9[_9WV\-["UPW'E)TBB*N'._
M$5NM2X6I_ 9J4$1_1T6ZOA];_7VM<@A-GXL<9D\J<[\\2PA^U'0<_2BL,D$+
MBQ(C G'/)-+4<20EX\E;(KEWWP'0.5A%95Z35&<+#18Y'W%< !6,N\AK[E^:
M>6]RL9@?Y4;W?Y0;O5KI#@<%NA?+R :5C=->LS6J0$[,J )Y,<4^-N%7Q2PW
MW'G8:8X,>-24E>M&S900Q"L'0W3@S# G0XH^@+9%EURDX]V0.3$K@&"^"3YA
M_Z^5G?JK6U*6BC<I<C"+O<?[N]\:?-W4H7M0Z!;[5>4; E\%#@KWPK^<X6^Q
MCR*&1'$RR!J?P/"-0-8GCA1)X!=:GI>XKJPSN2H8755"7B+ I8#7QSIV]Y3<
M]1W63KLCLO&R%W,NR.=XYYYKXWDW_.T2Z_K=UG P><G(TM;_=+T7-Q9QWMPT
M['Z[Q:F5RVL:O6_>S'%$KA?M)_":!['WTK:^V/-^+N5Y^Y9RO-Q0;BDWE/N.
M:+Z?:&YM%#-<T7];X=O'KE>><9,G-F39K5>*#<]&^VTM>.L/-OY^O94KP6_N
M G36#^[>U>\^*K,TB0AFS<CI[ZFA9I,QH-:,H=/,&'BR.-]40F#3TO="4][
M"/?CA9[RT4',[T55'C:DW.L%GVAX>VQ;[C^^$0PR X"M[*Q57NW4-^J;.QNO
M86#("+MQ4&SA.3'8/2PXOIA!_AE-[4X_Z#>A$K='HG<&L5TA:S\ML06TO]M>
M<%[V]Y-M^3G[>_4U"EH4>QLMVOEMV+'#T!S$\/N#3/ ! KV%._W CYBI*M\J
MSQD^<4*>X*'^K"C9';)Z#A@XPRG)$DVFA"8R5RK(V\+FV17X5"R7+C)]_K8M
M )E8V6_$.,BA^1)3E@%39(DI):;,%U/,G9ARA:X4X;'V:2\VX+R\QB]OE-*.
M)<XL"<Z D'F),R7.S ]G*+TGSA33<XUN"Q[1'\]!5K;^/6P.SDNT60ZTR:(6
M)=J4:#-'M!'W936VWZB\:G6_E#[3LJ +B%:6Z%*BR_S0A9&\U&H ;1IT*W?
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
M,\@&8H!@X"@XCC[DRJ):KS+Q#"N++C:_N-?BD2?:,FJ:]U@.)+Q%N7_E9=#
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
MSO8N5C6?UI*-!<N@6LK*Y=UVNSEHQUR*V79"8870^-CQCZQA_F/97 +C;%C
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
M]B5GS%J")4$LY;62P45D/.?(&!R-]-8Q'%?6I9&KADYY7_)'6=*<XUHED)9
MNF!DN@32)P72F]1:$\$5DPE%QAWBN5B#U0*^PICH3$A2$ 5 JNBJ(9,5D98/
M2 OB_6)@X7&7*Z2NK%IMV]YQLU,\6UX',!]!]WLW[/+.-WR\P?[(7&FQKV^,
M%>OSC*7MG$//5#K= =Q\T*T,&K$?L\&&V.G'8D/XHB.+B<[4[-B.;Q9Q1?BA
MV)9Z[?JJL2M]<OE$5F#(:;=?9#&^[,66S24W_OC2#(/&)7Y<N6XL7OSM$NN@
M#</!Y"6@-5D@WZXL-  ZL65/^_'EY8<_0K-_VK+G+YN=HB^*B_X8RVS\N-S&
M&PI02'%T>/QD(]< O/+#QR[8^,'C=JT5[;JAS:-CC*Y1QNX\C-?(G<>^>UN\
M1N4,;LO7*.;WNNT/'-)'K B'0:5]7.GW_%\K_=.^1Y?\^N,Q73LY/5ZIV!:
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
M!L!D.CQ Q*2^D0P(+K%0'%O"44I]%2C7_:VQ-C\1U<K:_+3:?),F<6H<Q30
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
MH8@1Q+5VELFE>*H9UQ;$M:F\)L\H1H(A$$00@)H(:4HY!2B1QBLEL5-F8TM
MM517]%X]R*"60:V._(TS"I%7G%KJH%"!:R$XY8($Y<BCS@XS?ULFSDUE<5$K
M/0O! Q>< 91K XRP"%AMD;5>&.MA=$\5:C#\Z%2N9P2\<:K7Y%XF.YN6<#8;
M#>\]:;P&G%=/0.(-NM[(=/RO%'2.J^0OS%_XJK]P2=7%=2805_F8N][Z4^/[
MCTO)'*_ Z\UH@,%P2[5EV!CJ.588.\X-I$QKC!RJN ;".26S)K2C.9V2B3 U
M,!)#X F.I(,Q A2-OI9Q-O(#""T3K$K)9+(!Z?3HX8>ED-<C;G1/6<D3:G[=
ML'%^YVJQ9U]-M)MVJQX&=3DE\RD@[&:Z A-82Z4@8-AK$)U?"K33*B):]((-
MPPYCNXR4S%6"KDQ@YJHIT0$Q"FU<!42QX1HZ9BCV5&H&D:1S$YB<DODLJC^5
MDDD%Y%XZ#"(JXW3D)8 VQ )KH<-6:,4TV=C"D;R@!E2O"@$R>5EO\K+(0=?#
M<"ZG9+X<T-WD.(0[[RQ10#'C ;4< :TA \1#RZ&1'.F0YG[*AE3X$>=@&>$R
MPM7EH1< .$X1#5($@4**7B@EE27I6%]SXRR#CW'/,JXM#]>F4S*UEH0% 9R(
MX)92S8#A(=7486R\%,PYN;%%!6\@].B*F@QN&=SJ\M +E0-S(EG EC!-H=(F
M7I$C8R(AH-93GL&M'N V(R63,2ZDM0)$ P4!Q<$"Y3$%!A$4' P^HEJD;8HT
M\../]#.\97BKRT,OXIU2'SP.6%JA&+522VTT1XQ)CU-LG67OM'9 -Y6C:3G#
MPF$4@<Y''A=!#QCK.9">(>.U9%ZG&'R#SFA"E;W3C'"KAW"+'!X*JI TT*'H
MIBH=?PH(&XRLCSZJ%C83N+K@VE1.IE)<$Z(C=PN$Q7]DY&Y!2: E)B8(18Q
M&UN,B 84TZ70=21PKVG:::DPP.B!3\]Z>N:[@[)!Y9(Z\-V66+<ZQZ6/&EPV
MYTJL9G.B+-LLVRS;+-LLVRS;%W$:G(L^@=>!&YG:.S.#C%;8:)%&EB%!RE;>
M9-+*F]Q?T775E7MPU-N.*Y?N0'?>Z;;;[^[HL_90=\JDI9(O[5RC2Q]\=#8&
M[:$_]/WO;>NK,70?O.T==\NK_$=W1C[[(LOS1=Y/GY1)SATRR +D4E,F[55R
M0C#PCF(:!$4,ECV^&T@\0>^2#";U Y-L*+)LLVQ73[:+'/UB0FF@7!..*4).
M&D_B>FCBF</4PDP"UIH$S A(!LTY2DUHK:<BTH" @4%! ,&Q]=*J0,V*T8#7
M-->V*@HHVH/!R+OB;-0?C'1W6 Q[\3YZ]ENA?^B^&[RNX;6+E6P@KPV'S@HC
M*97":NJ094)8YUDJQ[H'$6?4;I1!XOU2(M>G;%>B*O]]<Q,+<U7'\E#NXW1-
MJN<\&.@"D-Q;0$GT<C3F%$1CR!0-@6MC-K:(P W$ZS33*$\SFT/=499/K>63
MIX%F*64IK7ZX]Q9:4WIICV$UV7>;C]5,!7!12.0%,B $3=VGN0.&"P:X=I+%
M_<($MV6MJEQ6(DG6\XS&64I92BLEI9>,CF:;^<*1@.EX)_&>BBAF((+1@!J+
M@+9( D4LULX;2[FLK":MD=5\34F6>Z=GG=ZY]^,0YMFH;T^BFA1GG7@K21+?
MV\/SQV1<KA&&S1X,B!DDV# E>: D\7TK$/7*:DRIU?P!(<V96+7=[^ONL4^'
M/V_.K][R3I^G/VVGT',5]'PW%J%[V^N7?\[QSN6AW*?I>*=14%(7.-!.1<^
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
M^LIHP(O.L(PF/XTB\;N^^N]^=R*0#Y?RR'[D\FC"C#EOB BL5"# 4*0 =9(
M:3$%T;^4$)E@%=<;6[R!\;0?^2)F*'.$N=2:-1@G*\\3:F] +M.X;6_PZG(@
M:F8[)K*(W*U_/.\PJVPXYC$<S5D#0H/EVMJ4^6  +8O> M1 41T%J* ,7*:C
M$"ZF*]URYG9]=1HWA%K P:QIW+'VAJ.,?!5V% &K.RR=RZ@@X/+WAZ?4K2YG
MJ45$<MJLE)(ZF!3B37+LLOE8P'R\GS8?@@5J"/) *,@ 99 #210#%CGBL&70
MIP,LGL.3*Z?&O_&&(#R['L\6NSK3YP\.7*TP4:FIN9B(Y5TEE>R%+,^,?)PV
M(TX'9*RPP&JJ -4^!;($ ]!@ S%#@1"=RGLDS5[(*BDW:6"\^A6DJV!#^J-E
M9,ZM,%VIJ1W9.SWK],Z]_Y!:TWOWU]718S8IRS,IGZ9-BH).&<,D"!Z+Z)EX
M#+32<:?'_0*MH%00DDP*18]I29#=DN?6<P0;5+'LESR73?%5)M=K.Q2IUYG(
M6!B_6(]L(!8P$';:0'!CI-*$ L@" ]3  #3R" CA _%(66_YQI; N0!TU73W
M-]00=('0578['GEJWO???7?TVG*NZF4BTIR-="=_MX<G.Z-!7!;?G]B+%1GX
MMQJFY'C&*0C!P4+' /,2 AI8  H*#(BG0C$;L"<JM3^32.9SD!73<MX@5*U'
M%6CM#<KE\6S12:#VVGR.EXUAI3EXL\[-)S+YJQ1)-A8+&8MO,\XZK,>*:P@"
M]1I09#50WCN M( (R:"X-1M;E$T?F>>3COJJ+F:K[W#4OIRG]>CFVG-PE$?,
M7Z_?OGSA@15I+LZ[L:S>G'\<I/;,5SE8E^+*[LG2+,[7&36D""DG#/2 68D
M-9X! QT!,D!$F.7*PFAQ,&IP\NA@UT)*M$*>RUJA HT^C:BC8)?D[=3:B-V<
M%=;N?O>#90R'&*_%$\T*6V+!ZE//"KN+XL":[XYWH[X]28Y6;OQ=A_*D=_H\
M+?G@J+=MX_KW_;NQ2-YU='>XW75[$ZED#K,\#C.CP!5Z1XG1T6&.NP10(050
M4"' ?"0PD' C41EBQ7R:PN1TCOHJ=Z0B;/6S.5;+K%2,X[2:RIXCK"]F2\J2
MI/TK8603LCP3,J/454&JE?,<8(T#H"Q H"%R@%ANL4!!:I5Z?D=$PCG+?)64
MFM&&$JM?[%I[(]+4PU&_]$^78456E[2\<*OON&YN\+;?.SV,]B"Z(&.QG!^$
M[>^ZW4GE2F][_?3BH;=C@673LCS3,J,,5F/+THP[H*E)9WI> BVBGQ(\4]I(
M:3@ET;2P1MR8.0-DQ=2=EV*K;0J(:P_..OH\;2E_MV"?ZYVOJL7@S#/)WT:#
M<B;L/Q:+[L[!S];J'*(>15NWG%/N3R27SRF?PHK.*-FRW(F0NM9)%#B@$$<K
M:GD D#L<A8R8(3X=7C'UF"9V"RG2"GEN:X4,K,&Y?%B=1<U.*&<3@5J;M)LG
ME*'=U5V[A!/*N<^07WJP_5.?4*YR*/F#/[L>3+:]T]->NHF>_?;*HLEU""9'
M3_]*( =AIY1&.4WG5[(2VC^] Q>^W\L\92&>,J/< R)KD<(",,,4H-0'()4.
M0&N%B.4*.J<WHELO,<)_Y.K!%=/JWQ!K8+P&V;QU-R3)<SX;AS,KHN%_^KYM
M#WRR*[VSI"V#8M@K)O#V>%NSND&HVL2<T]H?5++9&XO+9;]X>?9F5L6(1)0;
M14%P@@#JG ?:!P8$9,X;;JA'.HV]19+FX/**Z36#ZS)B<@7-S;@W4V50KLS,
M62?>W=C5/<\^S<O9F91DF2L.%[(?%[/J/P*&3BL+C*<ZV@_E@,0< 2T99=8C
M:B6/]H/F3B>KIJUHX3*.YW-6UN!<<NUJ):_.)1>*Z;ZV^J@:5DV^G<@KGT8^
MA=6<47&@5#IR#! $ 2F@*GA@..' 248<X4;PTFHV*&:Y:/(5@,)OB#:86+Q6
MH6;GD2M8,;D7@K?#%!2,@!=?Z(X'KMCSPO^TY8C/HJ^'OJA^SODU]<JOJ<1W
M$/;&LOH01770348N_7\JH/L>+54Y+7(P[+?MT+OTPG;7_?J':^_<[]K.*$EC
M-]*\WD!W_HRR/(N?B+^GIVIW1]Z-&PWTL@NYH#&<43NA$;<("P2X<190[61T
M)JT CE(NN*(P\%1^-VT)<U[.6B&*XCDIY^7\N?:X.U?QFQOWYTH)II6;ETK$
MRQ_\%4QFAZX&#MVC#-V[^+P]-]V5;6S^KIO4RLQFIW!Y=G!&H0=B,&#F*5#6
M0D!=T$ QC &2<8,@:[3CT2E$JA&W3O8*7P&R_$8;E-/L%+Y,DNHLHU?H86'\
M<;O;3='-U$6EQ-!\CG>;Q8."*B0-=(@BJG3\*2!L,+*>(*R%_;(?#1U&^$D-
MW<(>739SRS)S,^:Q24Z-9($ YJ@#5"()I!4!2 @#A0(S%DPT<QPWI"+YU'#%
ML %#T6 ,U_;D<"W\M3OMDX]_O]4RS<D=JJ?[G409N-[(='S%'Q[!KFJWAO_]
M(DM3;^5=P+ 3&YU3ZJGAVE #F2*"&*4P#DXJ"4EIV)_:@\V&_<4,^XP22R@%
MUU(QP)A#T7_U"DC$-$ $4L&H%-ZB:-@E;L0_+->!?912OK![FR$Y0_)=?(HT
MH%RT7+4&VE'RL'\.4\>8^%_7_K[U/_&?R2V?ZG[THLOOYK_N2AN!W?=OK/:M
MC/'18I#W20$G*1QZ7VB;1N#J[GER_;N]H2_K1X8GOBP>Z;HTR3 A0K=<R#20
M=9((I3OQ.>(?RJ*ZS4LAWER3\3?R**<_HC5K)UC\O9]FN[:_^S]^M-WP9&*G
MKWUJ+%QX]1%MXAV,AM,?B7LFB>/JDZ7\XQ)V]-G _S[YX8])?EN[6ZY$^:$_
MQA(;?QT[FQ)_*</JY:MOWH35MX\)^?B;QR]OEB_=V,S5:P1O8D)N?1ENHEM?
MN_.R<!/S)[@LW<20SG79>]R3AWHAI73;I\?%H&^K<2N7)PA?CO'FU[/CC4)W
M(O,9__SKEB/L[.=#!$SDV<^-?[Z4JHHIP!1)5=\=%CL'S>;>AYV]1K'?VKFA
M<'>8[D<L_N02]P'9T^,52ON0O] SEW9AV8_,[Y-[^<AO([4O$ 3O$\E/L%R\
M'^E^E$#GO*A.NI)G'$%YLC3/LVGGN_FF[MN3RL83U"B2ZLZ0X R3>OW?))+2
M<^%.:>F0-B@P&HFW9%I)K8/R/')TC+]$IVSRH9/^U4XX]L#TO?X&=(CK]KON
M_-#G@Z3?UPUWA(CQK=.$$;>9I6L&'N$90:O;-TD(3V7'JYN(_EZO<@A_C_*.
M^Z-=9G'KNMQ*<=)/'O9_W2]&L;%U5!KT7BC2B,;J6%YOW=@Z=W O).<@7Y<+
MHK5G2Z&Z4TI0D:PIY"ZV6[O%X<<WA_N[^]L?]O<.;^5.=7F&UL'1WF%Q=! ?
MI+6[USK<VTT_'1[\M;^[?11_>;O?VF[M[&__51P>Q3\T]UI'A\7CG^KQ3DAY
MQ=_;P_AM=@Y"_-O'UO;'W?WX2/^8OOLY08ANW+\Y7U",Q791MEE ?Q3CN%AK
M=!HO9Y>0T_%K#.R@?ZR[[8L2"'8N_8?XRW;7O>M'_Z([+'\]"&\G#L7AI3^1
M0EV=WF#4]T?QGMYTRNX<+QG NFCMC -87YOLX.CS2?.KQ9_P^Q^?CSY\;>'/
M)Y].]U#SZ$/G\^E'=O!WZUOS[^:/O\B'CO_7A_//?[LS@REO7GQCK=.]\];%
MYZ^?=]]T6G\VR>?3M^U/1Q]_MO[\S^GGHV\L7O/GIXLW:0+W>>OXB_("XN )
MH"CEU",<@/'8 T'B5L02$FYM%<0LPX+;*0P(@V$4(B(YL=0$K(G#DA"C@O&:
M<KY1^('59TD5^Z-H)?[T7=_7G4GP:KPA;@!N?&W\+:74*F'<^TU;3[3)RM&+
M;T:#N,<'@]WX./UV66'_+NXR>U[]^ZIWSH\O,A#!A!# 28T!#09%!B0DL %'
M1D8I5%3?W EW<)W9F(4"EM@^$4C/1K&)U(MK8K_5ULR*R+135".ZA_QV('ZZ
M\-<5)^B=1I6POF@/"IVFMR:'95)ZUB_[1'5Z(P>,3@&8P>CL+%)^>Z+;W2)^
M?V2U"2>+> /?VS;>F;;]7ER3WJA?''=Z1G>*OA_J=J?H^N&/7O_;9G$07XJ7
M=R,[',1+?(O?/"R\'K3CMR7GHGJ_[P\:Q7$J*TX_N'8ZHS"C82_]5MY$NWPA
M'=-U>L?QY;8=%*'=/RWC1JG=R*@;/:NAKT[R4O#%],I2 W->#-JG\0*AC#6=
M]'XD?^9\_#3EVP<GNI]NRY\VRC:@W?B]YXVBC.A4;]"=^*S1C.C+!SZ-7W>B
MNUU_^<3C7P>;Q=^^<+[3_I[6\_K3IQUT'%<]C#H=,%["XK07W]LH?IS$ZZ6\
MT<[(Q>^*FV44U^ <3"0T]/:D&_?)<35C2,<_Z-,D+O\SC;F)RW"BAV4OEM.X
M(QK%Z"Q%S:H5JP8O^M*/NW:=7BK/J.:/#_Y/8?R)[H3; VKUW-*_["[?+0G\
MY4.EK7&9B?O+5HX+4IY>=6U<HLFB7<D^ZL7W*,E*]CX*:W@2_=GCDT:4=?PJ
M/QEEV>O&#6][@V'<FG&/127RXUWSO3UH5Q/=&^,=-&P/PGD9T4PV*6Z0^.VI
MOT%4@>@M16%V_(U]54JV[>,]WHRZW#"83TNHWD1='1R$;6NC2Y_:K&9C5QF[
M@^TO#@;%G(J+%VAJ^,(HT"Q0X(R@EA$FJ9(K:>R2S!.Z7&?,*P8-1R<WCAE&
M73UR[6%UKC#O"4-QHJ-2&^\C:/3]6304KLSD[W43@$3]+GZTAR?E%U7:$=\6
M,:=]EBS&<<5P(^S$U_W9L/IL@N&/W?)&2L^C7.CM4GEU\5MRDS#\X\_M[7?E
MC^B/?Y0(,C8-Y:?'WU9^\+I1CXY^UVY6;X^O#D9FT'9M'4$D6J7M3B=>)/J]
MXR6YNDIZ_[ ?E[HZ/;[^S-&,G<95N7;GBYS.W.Z,UW7+M ?5&K5/KSU1NUNE
M.B3_XT0/;NR&,MA4+DV[&TWVR%ZV0[N*HJ85_C"*MBG^!E$2VP=_/.I4ESP$
M_U^43A1&/UGZ3K08"Y^#%:Z73M$N-TG<<^E+JINZNOET&]5A6]^7@XW*7@-I
MJVT645WZ/I5M/N3K!R>]42=>S,<+ZXF"?!UUJ\R74D/&>^>>"UW=X?A1RHLE
M%K7=C2Y@)Z[;6:\_3-QELKK_]S)&?>YU?QR7WO76GQK?_R4,C*,M3JRQ$]]P
M>4]7HS?*+Y\4:I0ZU1X,TOU/=/)P;V>BDB7)*]7D\C[3FG?34B=&F.I>2[+G
MOH[&LU?*IT\D.[ZW&V]O,-"1::2N>17Y3L10MQ.=N8+<LK]>?/BKM9H<3"8J
M,AAU*@RXI".)+:=^/">]3ORB01ER$7^426T3)F*O]0SN3?9MM>.K++?!Y Z\
MB^S]<F;WY.O&'QI,?RR1Z+0))P\7]3/QV$3+V]_]9#].KA,?/&Z7Q'%LN1O&
M]Y*X<2G(%^4\'U.+UKWH99PF?'Y]W.:BM?U%22Z8(1HXJR"@.G@@@[" 8$X%
M19H;BU:1VWRLVE9>2G?%;-2[TNXDC9P)H#.X2<+W"> /KGOQ405+A]Q/EJ)1
M?!VYX_)"%5CH0?16)OT]DX.IJPK_2I$3$B?@.[TD(_']?HSBG;8N':"VKQSZ
M<5RUZD1=,J5T"[,_D#)OTU<D0S'!C5E/6]WD;3?3CTY<=S3&]00TW=0)VXW*
MQ;OZ4,G9*@A+9G@X*@&\ BE;FC77CD_=KUK1#4]Z@VLK]B(H548A#]O'W7:(
MX-H=WG#-X@)F%VT,8S^^X, X=9X"*KT%5$$#C%848,^409@&*?##8>R^L^X7
MP+=K&Z.XVAG%9&LL">Z>[I!_?O<NHLD/7Y*.(BEC/X'#N+/(A#4.KBW&=1]M
MO!C7T6!XTO<I'-<=G@S&+')&)L%FD=+76I&B%MOCE+4Y:.WCR.RL)(OG6N;9
M1/IYTS[FO-69['YOIU'%V)QKCP-VUSVBOC_6I=LUSVZY!^SO!(VGY:N']L2[
MZ%\>A+B6U\Q!O]>-/]IJ%VYWW4ZE'?O=Z^^9A"M>LZ$XV/YB*%&:$@D(UPY0
M)R"04' @/19<&<N5G3K"K+LMN([_O^R%"#TI"2)Z:-NNEP)3DZV],DFM&&XR
MSI>>?8K0)A)XZ9?%:E/QVU]^\-WB32+GRY5=<&TIDD^<@ELEX3Q/?<#]V:XE
M<QI&3R&:@SE&)JW4<^V.W:C]Z,VE(Z^U>[X9)_+K\FACT94HO8;/-^D86)TM
M7&9D%5<I6;\\\4/KD>>NSKDO93M>X9ESU.]/LD,L6?K#CXF9(P!EXZ4<AO)&
M+O-D=GJG)AT=E<&CWXYZ9Y'W2LC^48#K;FGBYBG=-E4N%MM7T:#+O_UU+2Q4
M1F FKPPJEK\S.>V?.TM_N;MDMDY5^^0E:MP.[+ 7_;5R,SSM[+\56(SR0"]Z
M2EU7!CPO@Z!5+#/-CBC_D+*0;"_Z?A=50M"IUV6LTDXVX;4PY>7??HE7VO%Q
M6O3O=6$F*F"O5*!\I3SC2Q:XVKJ53G#(&X4O<3 =DY3.:J<S\R*#R2%L&1Q(
M\=:Q69C$0?N^K#;8_!_3_^?6JY?^OW5WE,[8?JD >:V+4:9#3+9+&5./JC$8
M,][B5)]7QYGZ*I36/CW35[;Y<NB*_A6\PVB85&7V=G7^+.I>&5ZIKC(X\S9%
M6,9Q^LEIP$TENZY;QE?-[RL-VYSF Y=%/#?SB"^C--<SB&=5B9;%-[E*-%>)
MYBK17"7ZP"I1D:M$<Y7H'05:(E>)YBK1&A3BO7FN0KQ)(.!:'*"&Y77GD_Y0
M3?+IXCUJ[GX\C_^ES:/W[//?;]L'N\V+YM&GB\^['VG\B;2.WG9NGC5]NG!?
M6[L??[2._AW_>_RSM=OIQ.].[__9^MKZUCHZOFA>6-3\^S\AW@MK77Q$![M[
M\.!H'S6WOVB(.752 RMXRE(P&D@C-*!4$BP<AR;(FZ5VUE)'K49"(4DYTUHB
MC(V4@4>7)7AV\YSJ,BBSG6AT15H'#RB\N_=[%\\ >\K(V#T ].<D;WK%4L#V
M+H,%_QY%4XO4)+OUA[^*1%Q+ >Z-AJ6CE_RH*A6TZ/WH^O[@I'U697'Z094R
M]>>-3/+?-B[_LO&/QK6"L;W=_:NBL13,& <F]"ARE5YY;Z5%BPOXK>R'7Y4S
M;1;O1OUT"#&<Y$XX']K==O6!X[XO8[Z-7QW.LWZJD_JA!\5_+]!3CRIJ3*#,
M*,(I--(@(@R6U#,>O):V1# ,!5)@\L,OS?78''BV,\[H+7\Y2AGTP??CXJ/Y
MFN/Q5P9^S8M]=K#[\2*^KVJB]_Y+"#;^3SN@%)> B@"!X4H PQ@G2B-K6%14
MRC9O:](>U:M3ID.W)^T+4XKT$"0[<R,!N\QQOS6.4=557*)CF>B?LIG+9/^4
MU-.)&IHR(I.>E.2QF/#&PHW*77I:Y3Q/4KH'5;K)4/],09&S7O<RPSV"452Y
M^)?R?JLX2YD1W4LQO+(2<7#]B:*.ZNYQ._&.*DA2II]7N=/I8Y/;JQZB$^VJ
MO@KS3&O2E;K>10$>I$ SRJ2OZ4NSBJLF:53^P2]Z$N'0_NY&_1^]OAOX[NM6
MCO.#J!R:6B\(!:'L 6F= E)Z!I@4'#&&D-9T8RON*Y#BP3?-^22*74:^JP37
MN-IQ<_R89+Q=V^Z;Q>Y5)MS_5E[<]22XR[W>^&5O3[)MRS2\2M6JFI)%D!I&
MHAV(AQ!I05WP*@1!L7&0F_3@[KY!'NS6@58SMN"[J[O?O\H#VT\F2'>NSJ6B
M]8LJV_%#OWT)(+>A?0;[.9CN>?/'%\8QC_21 "R( 50Q A3R"$#M(P,.3#*K
M-K;0)K\/ZZ^PMHK5IGW;B^SD97?=;:CWB"VWZZLM5K[FC_3/ZH0T[[@Y=EQ*
M_F9*,J=LB%O,IC8F*/I67B>.@;C4A!D,7=IQMPT&'>^X8C+%:7+^-LG_=\5W
MW1F5T0 W%E4RVU%6I=FOC'7C>@'<=</?"R&^GK;N<:_G?L3OFJ]BLI;.U'[R
M(R(JNKF\J:L 59W<J<G9.5V:0[6CN]%ABL]4]=.X6J3B\'R0:-[$S[IZ94Y'
MZRQ5GW9*.CDN,RZ2GW:2;JMDOI7K-7A&E\OX2-NE<#1(1Y44TNB@:%#>64T#
M&S-&!"$%DQ^RR_7$K/+H4\)"W+IX'^^KF>KZH%4"2@[CVC '*&<*:*$CJPR(
M$ 8M$CA:8:H6<;FN\/!EG*^XL[]'0M ;#2KGZ=JM)8"NO*&RTTKZT]C.QK_]
M,9/-ID+6&Q0C?GG93.0%_+ ':57VPY;DA\'F]A<L7:01TH(0(H&@5BN@>/PG
M>"0<D33ZP^3Y_;#AW0508["?L;]GE+%,)TC,=ZI%8<W;#NX\UVG'AZK8]&V_
M=SI)4/P[ZO<D.[$FYQVP.:FM.?WP+>[^'\VC_[2;N'7:VDVU,!].HF:<M"[>
MG#1W]V'SJ(F;D4_?U*;/?[Z/VK+]L_7W_L4G_ FV=M]^;?T9.???>Z3YY]Z/
MYM?W/YL7GRY:1\G^[/T\>/_%!FQ))-Q1@R@#5,9_I! 41%6"GE%/-20WSSB0
MM#):I/B*LQ0B9*2*B(>Y0!0+K*>*-L<2N.U48TYFN1,!W/3;MVT]-!>CG'UX
M<O\#_;H DDDG&%3"2D(E$RKJG3?<X6BC"6/12!<SE/?^0YQ[KWOC/G24F502
M,R%"O%.DO8U>/ V.P^@_"_CDU6V[[8$^/DZE>E7CSK&DRX/85ZQ8Y]$T*6>P
M52H DNP_I5@"DR(L'D$GTC([:^:L;J[1 5?90*]?-@T9]:_J^,<%^/Z:^1R_
M%F\P^N>G@]\7\SUO9 T];ZJ>4IO1J#XD4T^@35DF7BV]F"PBT8,N>_=K%,Y7
M2[;PS<Z=5C@C"VLBQHA;OA[OG#-/\=89B&HU2X".RKK[9E5WOY>H;IF]?DEW
MY\C<?I9U?]&A3_,MY6^E.QF]X-1:<FK4\:R4]^5EMK_D<\^;X'_OT]ZJ6^NX
M9/C)->L%M'4M1I)^N.P?-^$^OS]M_<H\^_[!D^:?ZP[78*_>,;JWW#IUWK1O
M1YW0[G12F.LQHXK7;;KBK$>L]Y3$!4Y\F&?I#!UIRAC54&CKB:22R72>[MEL
MY_ZN";;WA-'V?H[#^ND<//Z?.](_5V(0[4/C ]4@VJ]-<O#GYW;SJ'.2AL.6
MC7"^MMJMK_]N-T];G=;1O]N?OMJ+YM<WWVX.HFU>6/KY=/]G?+8?S8O/J1$.
M3@-MFZ?[YY_P1]0\_7>[==$\;_[Y(33/QT-H#^'/YNYV?/^G+XX;X8SQP#%F
M  W, \D@ 91IJ 044MNPL14%W.!<KM^ ^8Q<:XI<%A-":60?V O*"9,F-7MR
M2FLLO"%TG-TX1BZ<D:ONR'5Q$[DP#Y():@"27 &JE0 2.P2$41Q23BD2=&-+
MTH8@MYUTUP>XUH#;SO;#5H/;;G=UYSS-G+G5#<.+/?E,6['2@.H)QHXA+KC4
ME*=C<1B8Q%(BPH4/*%/!50+4ULXT%438LXBE$BAL.: ><V!PB+\**R.&*FY@
M2M_%#2+@8P'U#K!X*B8X;SCCU6LZY]XP[9E3@5/ID/%"02B@(]Y0'$RF3BNF
MZ5/4"<E(CI'V@$$=J5-  AB+ I!!Z:"@9=3#J.FH@=5MN?KUT?0UH$ZK'!8\
M2'EJ#Z)-\[K8*PVFE,#@):16$D8M8=JZN!+Q1Z0E@B1DVK128'HX39NL(H@(
M@0'S&$7:%"S0W N (-:<8"2#=AM;I($YJ;T;NG#\+"OZI:)+(I'R5-!4[*:$
MD59[P5G<"U2C8#-K6C%%GPXX.1T0C?X1A"2R)DXC:](FBI,+$92$/D@365.#
MT4>[1SG>]$K._1\3;YHO4V7]D-:*P(Q&,.H9I0()J8U AAJCJ/96Z$RI5@II
MV].42C,4-**12#&;1M.EGRR5@$)FK.<2!U;ZIZ(1Q;PD!W7NO*]5"5*]5GB@
MG!OB"7$,&RJ(- ;3$']"V&KMQH'J3,16!QZFB!AEBD(5G2V&) 74. VT,PH8
M$]$A2.B\D1M;2C08%RN,#FO T6;SV%ISM(-4\Q$O^#B*]BI<WD Q9EABH0BE
M*@*M3Y5G5@B%-;>>92*V4D@[(SM,2>F]=@P@GNA7" PHHCRP.+J_CE,C.-G8
MDLL VAS;JJ^B(^,4P9A:) G5P48W*U"B@PO>&LMXIE0KINA3E,I&BHR4"\ Y
MKJ/'A3W0T<$&S$HN-($R2+>Q)1H</_I ,,>V'I=+16I.H(YZPW+"]KA:_T$\
M>UQG&Q^U<+U1JMHMN?8C7-K:+=/\>;K+7)JU,4D/:CN035)-3=+!C'0TXC%E
M'$%@(4U>/G= 8V8 1"CZ%RSZ&0BG=#36D(^O3%BBCKUPB# C;$;8I2"LL019
M$160&4.%]P8+:")%A,AI;U1. UPUA)TF_<Y+#9$%S#L723])?=FY $0*2YGF
M1@66:K]8 ZE'YZ[4%F%KZB[<&$ITH^E5[5O\?)@T]4G-%LLF>-5 P'(R9]^'
MCB];XI<]<Z]U_"P[LEZ;S#G2G<YY-3+0'Y<_Q^=J#SMEO\9&:ACYPW<ZZ;_7
MON/']9Z-\8'3=Z5NEO&O5?>\<4_*WL 7\?&^MZV_V31OT<:\*&")[>/6L[SB
M[^WH/;7M'/WOKI()/MR,5*_&F)/I;(AJ+PS*L9']RU<'(W,Y_WO<),I.A@)7
M^VDT;)=M.5,WJ6MEZHWBLJZG4>ZA,E<U7N_L+&ZDN!7BEHA/H8_'O1O[/3>R
MJ>GG>$$GK4O+CI[5:T5[,&G'6[8.'4^5=6G^I2[B'BY;3!D=GZ+H13":[/!J
M F8:F%(8'V71O38STZ49X.5SI/L?;\CT1:>IC[#^KMN=\JKCCH^39]\L#N+;
M)]<>3TNN^FG=6-=KRY5TZ^KU^/Q=G<9[-JX_5&J!FOJVIH4^36U[JID7NMN-
MVMBXWI$XJ6;JU/7+?95*EX;@=GY]^'+P;3<MFAXD14^W>_=\"NPU-AX:BRGD
M6HI(^;UF04"I.5)W-)8K^Z).>,6$:^R4]]2I6K;?WA75Z?/5I!,/;C77.FI^
MP50%'!R)MA]A0!DE0!$O@)9&"T6P4S@Z6P1.-3^-PKY+B!P[86'TUZ1!% 6K
MO-)"F,"#4T+Q+,3E"?';%\@"UUQ8H#5-"8K" QF%"KS%P0I&%*9H8TM-"S$N
MUZ#LHRK^2&V9(_QL%A'JJQ[VA4G]H+O'@[(%<QK8>WZEZPD,TN^7"'=^YF\B
M1(0<WZX&WT20=-_+ =F]RV[G3]1<LMP^ER9F8B*KISH(;\;/]%?$WL%=39)?
MWTYJ'EG\):CHX1%OH^4G'%")*3 Z_A.HBR)1& H.9^)!VDJ3?M@34U9->#[S
M_;2^UT<\KP9/^;,=]TYEH--3S3"OES8X[?5DYYYR3T^@\"B2B:;^V3X=G=:W
MO??S[]ZOG\Z_:"QUT%H";$0 %%(.I)80<$2TE"+YM;YLZ%W,;.@=!=CQ@T$Y
M'J(:FAX)8SNY'&DV1,E#=2<Z$_ZTFK8>;6!J9N^JZ9=IB,CE%)A"F]YHLF].
M(^&\I@D5#IKHJ(ZGJ:>=<\?N6CT7Y3*79D4]E*E<H.L.RL /P>BL"-Y70]].
MH_@3->GZ-*:@_/.OOLI<?=G'3SB^#4[RX/H\N#X/KL^#ZQ\^N%[FP?6O;W!]
MGD'_.F;0SQP ,<= A]DB52_"'6=SK\.*7DUE8:\&<SR\3@ZC4S@X\[8=HBN8
M ,EK>Y*89-=7A[#Z*IZ2!F.5D5%=1-)?C3N.R-5-X=ZC,A(='96XD>*^*K?(
MY1?$:T671??/RV](8>!K,?+_G[UW;4ILR;:&_PIA/_U$GPC2G?=+[7Z,L$K+
M8[T-;JNH;>"7BKPJ"&*#EI=?_V8N\ HJ*NA"\T2?VJBP6"LSY\@Q9\XY9N]6
MA/SRR*-@K6[HNXQ:T!4!VJ+UG>XD]ZCH?KA<J:5?Q]5X^[*%:W3]&*,;/TQ>
M5&+ =^Y_.O>EI%.8:/]QZS@2Z3@Q5ZV8^O[0G\;_#EW"2@& PSC!Y7#>"+P7
MW433$DB=^L))BKJG+F;I..OW*/Q_VCOIN%%?M&&KZ-/68.P$(+[Q:KF<'"9'
M->UPQ<&8'_:GO#PH&#F.U<OCL9L>2^I&>?E5\39.BM:6>B\=B9P<Q8>YBNB-
M'G*YLCJH#$[L?G7,\;ELH&9[@U$(Y*I7YO#/5X<DP_.1\^')R#QC)''N?AY]
MC3?X_>K+R]X([?4CQFO-LU_26,1=",!IIU-]I04*<@<0,8()914D9FGE^+17
M1$H&8Z&2T_U6Q++6X$[7U*LV:/W1.VY:36$F\2-'_8AGA\?C@'4'*>;;?&A2
M*DK1A7?UT/VGI4W$S>/SC]Z*Z&QK]9=1WAGB#*!,(4"#T4!2+@"T@2*#!>=*
M/Z$5T<C9 ,FS>$N83VTK1Z>V/AUECE;E**$@]8TMVK^..CSV^C<;/E[AW&6L
MKG.Y8&XUKKX!F)^F;@!<C@Y&4#TK9"/0,I?/:S7T2%.@:,;SZ&"$GO?)1V^6
MY0Y&$SL8/:=4M'Q-5G)KHS=L;73?"GH_#7RFZGGT_&%X5D.7=S?(N4M26?/W
M/^M..B*MWLR8"R/78C[Z#>^[KN'#5"X0$MU6B+B!%-+H#\I 3/P-AB(HP@7[
MM5DT4L>/%2Q,<@VO7,(/4)K0_=K=6JOOUW9VN[6+;;2[]KVSU=BDNSO1=US;
M[]:Z-1*_ZVQKY_M8:4*\#UK#ZV>[W>A#KOU]4-_XR6KM_<[N6NUT:Z-YWKQP
M\;G6V6YJ[C!! 8HK*0V''!"G": >.J 89X#08%W\!T)LEU80K2JE%ECB95[5
M71GG/@+.08&%A@QS(@F%#DM+,59(D_A[Z70H< YEG"L/SHV58!D;M)(1V##U
M&%#-!=!0J/@C=Y)9A%W1?HM6*5MDG'L'!'J1-=HW#W_W6M:[FY'(+&MU'ZP*
M2Z*U$2,AAM2Q((7P5E/F'$..PND[W11'46NC&/$H!?)R*JY.J#*^S@Q?)PA8
MB3AI!M.X@#4+@"I+@/)! TE$@$IJB7C$5UK%K/P]PK* U?/50J3V 5N,-':4
M4BAM] JMDA!YR9254]>R9Y-^;9.>T/>/4,0< PHS!6@DO4![H@&E2#&$8/(;
MDTE#6/Y^"^^ %RURV[_K[) 7,Z/%[0SVK[)0H]5N.EV_R$ Z!R"=U.\/8A>P
MU@%8ZDV$3R<C-XH$B0L/32JRAJG?'ZFJ"8UKQD[HGH,/"R"B_L[M>:Z\*-OS
M7.UY7,XGZ!!2N)QK(5,#=QHI$K< TSAUEBND)$GVS# MLSV_ TZT@++G5X>M
M_M ]XYCU=EI %I>;T]"4>^=YRL83*/%,(829HTI+11@-VE,4J+?*H^+H8@K5
MSGQT\3K;S82^A\$2[EP2@X=);011!G1T#(#1&DL7600A?&D%L2J6LQ*'+Y]X
MW)-C<AE!,X+.!$&]AS(!:/!!4*-I:D4(!5:26:((5<,DEXR@Y4'0,<*NO%1(
M2@,(]PA0$A%4&:R!5I0X8@SBE Z37,B+!8Y+BZ EI?L++K^9JEI2:6$_B1%V
MADHSX;I>9:P2T/B;=7JOH,R5*_2FT73;/OOE,%2<<P,$M Q0C0PP!D.@*25&
M(^IHZH5X;X5>*AM.FD3# M-[ISI5,QW&R2TN,E1@[>C!H!62[)$>5(H"T:2H
M>;KODX#C#44CYR=](-X"&'UHJL+?>TO/9V$J3RP]K]U2\NG=VQ!L,>J8[WF:
MJ[KFD9S14;\7?)S 0MOJ5HEX4LA+R=?IM4T GXJ8TQZT/%4Q6XF&HG%3C_1&
MC>I0X_7VT+0&<U=R&ZFWC1#P6M+R:Z]_:]*V#GT:AHB6&1ROP'%K[>?Y+Y0Z
M_VHH@3=. "JA ,8I 2RB044:[&CJ!/F8T-O=,O61T%^Q%F[(\8Z*^MUR9>?U
M=>&Z]UKQ#?G!01(4&*H!%/?7BZRLE>XIKI+1M9**PV@X+A]_*EVR8FT]*EU"
MR=(CE:WR?N/7VK.9&/]D,;KZ5F.]LE8I=$[1GW,U[,N#D"])$6%M./TG_?(4
MD)^/3+7]K5O?V2;-BZ\'M<;G@V9CF]5VZJW:QM^MW;6?T=SJ![5V[6PW^C5W
M3;76;49?R;5K.]$D-Y)Y'YPU\>;I[LZW@WIC];R&M\]K\;J[C4ZH76S^4DQA
M&(@#TE (J"$42$8(,#P8R%/.!L1##S>N.^]6$\11%/_ A# B2,HE,X8K;"2W
ME%EA';];;7XY[)5BW,=(^UU1@7'AG$>_<%YB!..K9O70C<[/BOLKEP#!JZ^?
M6D06:..@&H ]YH#2Y"M+(0 FQ%*NH*9"/D%]H$2$Y,HI&^FG7$H.G$86K1/X
M)X7UP:?%T@W@BC]3-T!2.8]2?(2?JPWPH&Y (3,XAYN=3D!RH2(J,]$-6*CJ
MXBP/\(;R .^F0'T:%8"GE/2_FX')E?ME/=K+E?NYHO69%:U4(6F@0Q2EM! #
M \(&(^L)PEK8:2OW;[E27X9AZ.A1U7N'HYCT@AQL/L_1&AULQN_;J<&MQFXG
MWM-9K?'](%V_V?U[OQ:=K&;#POK:3UION^[8P2;^>[]YL<WJW9]P:VW]K!X=
MM/@LK=V=];-F-SIK%]OQOO=P'>].KMXW@GG&%9 J918['OU\XRG .GB-9739
M)%M:$;"*Q")7M>;J_8QUS\<Z%U%,(NNX]IAJB*7&$?*HPTPB"3F;MGH_8]UK
M8MU8$H?7T$AO.;".>$ #HT!)J@$24H2 XT12L[3"5%5@N,!8]PZ(]&)7\(\D
MFF]'"W,1_[T)QL\)QC]:V5)@[.5<9%R=&:Y.J-QGDCL5/ 3!0A4YI(5 09BB
M_DX)'H(R/BE R6J<Z-+7^>;2_;=O0Y\-^54,>8P@<4BT"P$"$B0'E.'H%EIC
M ;&<<(8-HY!$0Q95(<NOP?$.:- B%^Q?E93.@@=]D!+?EQ.AU+DDOGH@6>%R
M6C*2S@I))Q7L6^$TL9$(425PJKAR$4D%!X00::EU2K)4+\"K'):ZPC=7[#_?
MG&= A[(YOXDYCQ$CZ -12@:@F$W$B'.@K>$ 1LAV!A&)4\89HE6IQHE1B<SY
M'7"B7+"?RTUSN>F#FNHV[B344\.UH08R100Q2F$<G%02DFD+]O-IQ>OM.1.*
M]KD--$CE0+ Z4D@>G7$53-R"'!="0Z$5B\ZX0%4)7WPR6]J2TURTGU'TC8KV
M-6<4(J\XM=1!H0+70G#*!0G*$3]MT7Y&T==$T3'F3G#292]$\R"-_R1!X4 8
M\ QBIM.<<K&TPG$U^FGO%D5+2OL?+MR?7-PVNN;(JCE)[2E[@Z(B\].PD>-O
M?V]+]-&4P.N/:!,GX.1X_".O78@1OWD9PF=U<"1X&1,R\^(& I<QG\-EZ3*&
MT]5,S"DG?EA4UMVK#/IV&%.Y"J?^VL/+[:.]I8KN1#P>O;Z]Y @[.GO.!!-Y
M=+;TQ^UM[UX(>87,[%0-\^.O'Y4O6[7:^O<OZ]7*9OW+W?K2Q]/8GS'XEY>8
M5/TTU_3T,4Z TCI4;_3,!9K/^I'Y8_->//+72#@J"(+MRY+ZRO:)[L<9Z)Q7
MAG7M*53AW95HP.LLVNENOJC)&>[,!%4KM\HNKF=PT@9SX]\GU$GSJSKI_?[U
M2MCSP/2]/@ ZQ''[I#NG^GR0[/MFN5^$B-&MTX01]VU+#Y0%/K)(0IB+76#X
MS^%-1!;:&Y:C?SI)ZB'I7?%N=%ENI;+?3V3]'X]/8R1Y16%NBK\E':W4-_K?
M?^@[I<9EKH=?GW<]_*7'\K5UJ ]M2W<V#P?'_?@EAV6LC*^W+AV2[>10M+9V
M?D9'I'FV%3^SN[;':A>[W:U&C>YNU+NUB^ATM.NMNY7-]<*AV(S7/8C?M\[J
M:_L'6VL'%_5N,WY^_Z")FQ?1Z3BOX6^A=O$3_PK"(:@I 4IY":AC"!C!+(!4
M$LJT93:8NZ7Q&%$#XSQ:8@*UQDKF=' 4,4^%)L3?+87^JEO]RM^Z<^(K-:_3
MD'>'B_7)-?*/?O-#*#1YJ:. );9SDOB9O/B_Z,%^9?V_)ZW?T1%.W=Z3!,CF
MX6\_.!X-S)V!F*-I_+#[WIUT_%9(=Y7^_\:-1:_^QWZO?]SP_>Z-^RN5'L#K
M6\TFVUK[>5$\0_K<]B\BO.?64F @9X :HX&Q3@'(N4$2"4^I?:8\ !9O)@]0
MK%)_9Y6VKE=!-0D$=(?V7,C6A&3FOPLS3QHS2=3FI-]/]7=&#UKQ_2/!)U\<
M&26.-I072 1T2BVG5U<3>($3B]FRY&HN=?]\YCXL7Q;B>=('KW^O:AFR^>@I
MY'O-]YKO=;JKOE16X\W?BMAB"GM<*7A49J7/L*@CL>:M[QK?OQR,VYH,3UF@
ME?@OF</B*_LP#F-GU^[9?_QOW\F2'Q,&Z3KY.QU[SD0#YN,,WL_#OH]WD49O
M0[<.!Y5__:<W&/C!_U0KASX/YG/--1MJ-M1LJ*4=S'L,]5WHHA4/^&1=M)FN
M@=FZ"_G[\O?-\?M>27@MWL[<H\63L>!NM/C3-)O%LTNQ\C7R-?(UYG^-F<K<
MD/*FEP_3<'J'_KS2U?T#?UP)\:'NK^R>A;C&RTK"7I/N3CE^1?"H@N8Q:$\9
MJ-+7,A2#]>1:AL6H22B>[2D5Q8I9HY14B!)*65!:>,Z08M 2C*6<MK)K];=N
M==(A[]=>_T=D(&O>'/](Y\^MXY:_KBE.(8'/Z3!Z,4H4GIG;,"Q1:._'^_G:
MK:W5V[7VWFGM8AO6XKUNK379UEJGN]O]UME=V\2UQN;IW1*%K8TFBM]S6L.U
M\ZVUU8NBC4XC/E?[@&[M[':;W;\/:NUF_+[/J;@87I4H-%9QO)]?1&'CD)!
M$20!#4H"(QT'6%+N-8)4<[^THF@U_J+TJBL9K#)8S1:L[H#3'>A:M?:D>]+1
MQ]YM]'N#P75,+H7D4CSNLX_@Y1OZ[#:*A=:9=^#"]WL9P)X&8/@N@'G'%-."
M@CCE'%!,"9!.8R"H5QQQ9WG02RM%]BK^,R-81K /AF!W,>L:S6YC6Z99,T0I
M>A>E((966^X Q!I%E/(0Q*DU0&+-K'(2:J8RS<H@589G>P)((2,\HZDM>?04
M'&%)\@,)2V%<X4%0-&T?ANP3OB%8G=4N->0:ZZ?Q/1>_D- 6><- _(< 2KT&
MVDL)F!.6*P<]=V%I19 JX;-J.)_1*J/5HJ!5=@I+AV"M.PAFB,9<!17Y%G:
M6BZ %)P"S>/*%H''18"S5[@8$/8\0:'%@+"G"@/-BW!EK_ U8*I^EVA%#YX@
MR1SPG%A M><1IAP%6"J*-/&.XS(2K??5FW!RELR-(MJ<().OD:^QZ-?X4 DR
M7]*]A'@WQ_&:O1"Y0*$ZEK-D2I(E<W6-=]>WYZE..>3.*.:)U5K0X*+3QDW@
M2CDK&2/:YK22TC/;UGA:B18L]7;% #G# 45$ 6-M $I*";&&.NBD?%GE4I2(
MUV;C+JEQYXA;R0Q^+ V#*J$)-!00IA2@W$9/5I%H^DHB[+1T1L!W''#+)C_O
M_3Q'J%[!K,?R%E2 D&'-@>?. 0H]!89 !C0FEGF.,50Z[^/OWJB5$E)[0ZAW
M@:K@##:<,(><5E0$&/(Y_P(8]_@YO_%$>F(,($&3R-)EB"P]2("UQY&^:T12
M3W)>E8ADZ\[6G5GZPEG\W7-QPK11(F@00C1[*K  6D,,#$5!VNB80R0R35]
MFW_J0?*\=O1,TU_#KL<.D@TA/J2=W&IL4KP- YTZP"*?]GBHXF[.RK>3S[0G
M==F/9&I%M?)0$O?*+/+1<KY&OL:B7V.61\N8E1S'OO2Z7=]/+1HJ1_K(]_.9
M\M//E'$^4YZG0TL<IE) S:@UE!%AD,5>(PR)"E!RE<^4RTYRMR9(%2CHM:$:
M D*5!10&#S2Q'E 9N"<F>.GYT@JA58S+E"R9K;NDUCW#<%6V[*=8]MCA,0F<
M,LPX,$$S0!E50%,"@>*>:12G5J3J6,+*Y+MFLRZI6>>(U!N8]-C!,9/*XB @
MX!YB0(DG0.L@@8>(4\4\EVJX63.)LE6_8ZM61!HI*#&:4&2Y451Q!RE!FD@>
M1#XY7@#KGE ACA'7QF- %(>1@4,%5* 4.$84BR0],"665FCBXN]0SR*;]ZS-
M.W/Q-S/MNT?$,##,J18 J1!W[J UD ))()U"@GAD#8-QYQ8LV_7BV/53CX?G
MM6UG,OX:-CUV/$R#==X1!004'-!HP4 J3.+&'>>4:J:-Y<5VS90JD5G/\GRX
M].<J/Y=_+%>.^T67UO,;1\1E.2%^_^<KTP[:0[O#A$$K_^[P5-:'18AP8JCS
M E&M@HE>O>,"*VN,M]+G\Y72[Q(_QL]7J-9<0D\ )$*"N-4;()G#0!%.<- "
M::>75E15XA?G^C^ T_.B?MFX7]FXLTOW1H8]=KRB5:3LC##@H V XNC,Z8 %
M" $I2*R*9B^75MB+X[#9JM^_56>'[@TL>NQT13#/+78($!W-FG*K@#%! &<M
M%S 88PTIMFKQXDR(;-3E->HTTS+>C0I(4)5JK*E1U"=PMX8&_SJ'*[D^Y[EV
M/7ZN C7T\7\>6.II-&SB@7'! 2Z#<%)+:ZF<67U.-NWW;]JY)J]T-G_WP$5X
M:Y5#'G 7#9]23H&DP0"N.$?$(L,,S3:_@#;_U$.7>6WGTW'T;-+/-NFQ\Q82
M9XY9HX'U(IJT"A9(Z&3TO163CIJXQ[LRFO1+"UD*VXZ6F8KQYG4V^\;7>.QS
MHV[3PW']%,>AXGHGJ>BOZ#C]>"_JA9#D?EY7@9D,36G1_LFI,Y80%%F^X3JI
M>#-%!#%*81R<5!*2?(A2=NBO-5:/;T'_A3W[Y:$TC*5^ XG#42MH@GZ4\F"E
MT]9AI]G2"J*L"C&?T5G[+ RKY!T+,JQF6'U56,W'5V\&J:T[D(H$QY(B!9@@
M%% I.-"6&< "EA%/B4=2+:U0.*M,XPRG&4XSG,Z7I>9SP]> TJV[[#3R3L\T
MEL 0S !%J6]R" XPQP33UAI+PY"=4@(SG&8XS7 ZVV,=0162)CJ$%%&EXZN
ML,'(>H*P%C:7PRT"K!;__Z. UK/:FB6U[5]6"P,I%H!HJ '%)F78<QO9JF28
M,N?B]$9@Q;1*X:PJ9S*P9F#-P#I;8,UN_]N!ZN9=4,6*$8VH QX) RA$!*0\
M&. P\C(Z)D1K-\M2Q RH&5 SH,Z7J6;'_W7 =/LNF#I#D".0 ^J21#"U"L1I
M)(!ZPW&<92BX'S)4(=^#ZU_D,OQ1".[&_[K6[Y7+AZJ?=*/YV.'/:=&W#D]T
M\93_CF^[?*BN[N^U#HN[X]&X1K<$$LY](KP W>%@F/X?*U<#4WQ/NDJQ3+F+
MEN.0-B@PRI(OH)74.BC/H108_Z)JZ>:'QK\:R:MO&@,+K3V;3P=<G#*7ZEN-
M]<K72I&E@OZL_/O6X-T&"XD)I8%R33BF"#EI/(GSKXEG#E,+?ZT544($$;@.
M%][!B4ZG=ZH/;<*)+WWO6L>)3OE!(W[)YT[/'KRQY6_]&%E^]^].[6*3U!O[
M\7H6[JY]W]_M;M)FNQXMT$6KW\;-]FX[?G>RXH[_W^_GNSONR&#*=W=^7M3:
M%FUM_,3UB^\']8VOW69[OU7#V^=UW(Q6O=N*N &WUCZ'^EKS%]$J6,93'5YJ
M#ZV432H,J4D'LHXQ&8A!0]B.*]B[U02>"@OO)>(*$D0I0<I@3N([*3),0(V7
M*CYBZ5$<^>/^233XJW%/^%L9CGQE./3C]G)SD=^QG>'L//KM*V^TC+8.O[8.
MX^^C"7_WUK=^)UP8--*_'W>%_?SEF==%VJGBW@%J3%Q< 4$0G! P8I:5VM]=
M,0^ 9('0K4/G#V]AY"O2G *Y&ON^HF^M:SM<UYUB+532GO:[=7Q>K;0.;>?$
M>1=?Q-_:N(4=#RK]JP52K1SZXVKE5,?/#.*%TC5O:+8_A-MX4JE\'(^1 OQH
MXQSN@'%<.OIHX#]=OOC3M09''7W^J758/%WQH3]'EQ_MIDG/X,X&6'S?\,]_
MGK;<\7[*05V&PSS445K?Z)M'?UXN_G1G.Q_^3:!E1>[_,UQ&]_[MH<LBO SE
M_1]]Z+(/_XU"/I^;)5-=]I'4R4=3$M786]]8<$$^1A+@T-3ZWE=J\7W[@\IZ
MM'Q7\*&:[MO]"D'56XQQRC%Z4^]RNL?^5\2+X_W>2;R$&_S/-&H3TW+=<D]W
MVG9G\K33I.:^FR'#3[&"YPBQE"GX4CST9]U)>V^U8GS<L@[C;:<N]$?Q8CWW
MU,3V=Q*4*L9E^J#4TQZ^M&&G)]? S"KL=,,/6.N=F.-PTED=$;QK!^#+2;\?
M 6,Q8D_/] ]&L:<F:>[48*W;/&LV]MM;:]NXOA;O*]W?Q<'95N-SN]D^N*A?
MU-#=V%.][?:;%]OGN^VO\5YK-'JFL-8XB/>Y1[8:ZZRV46]M-6JD=O%WN"IN
M2X5N:ZNGM8OF+^6"ADA[("G#@.*D%>HD!2S^4EE"'#'1+R15R%^<#_TDHWGC
MNK<,>QGVKF#/14"3R#JN/:8:8JEQ1#_J,)-(0LX*V$,9]LH+>Q=W8<](+TDZ
MLDQ!%$ 5(T#)5-F/F5 6(R-=TERLQHE>"-B;99.KPH#*#%A_]7N_6X-DM&/1
MHWO=GP\O&ONL\.U#:'8U"Q/0+(/7S,#K?)RS&:(TY)0!CF Z+.06:"T04%9;
MXYDE$D?P0E4,9U7#5J(<BFS1EQ9M+$%6Q#7 C*'">X,%-)'/0^2T-\H4%HTO
M+1IGBRZ-18_1$:%E8)8+X(Q'@,:70$M/ /$D8C4)AB*;+!K1,C5LF&F'X+*3
MCIU^Z]B#7@B#XMPI1<SZWO;B+3XD _T^95/^]9:\8SHOJIBNK3A;&;AF!5Q7
MU?0W@ O2(#BT%C#D5&K["(%$G@,+@[,02H(#2< %V7@:Z-C)3-9%6D0#GSD-
MR0;^=@8^QDR\%MPJHX .J;P;15_#(!;MO>CV*A0GR!7,9(*O\28&/J-(2*FY
MR-4!GC]TSSBZ^TC9YD^,<'^(;/,G]QN:59EYCG^_":S_&.=M*?9-L;. ,\\
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
M%+,D>1,\@H!ZXX#22@)N-..6:,M0D8$[?A"=X33#:8;3\OKY^3AAMM Y=IQ
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
M,:4L'[C;7L7UG6_MZ&B@YLXZVEK;[]8:WPZ:W6U4P[NM9N/SQ.:MTCB:DA(
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
MIZGHX6FY_7RQ4ONY6B9LNHKW)^;@*WC_GTN8?#WUS;Z';*E'.;%:S)S!HO-
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
MG4X!#-4_X;._M*YNKQZNGHZ-^J>/S2N"\PN;M1__B>M/S?CJZ>[^ZG)V%\C
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
M%&#EP?0&/,U:L/G%3WET1XDX!NY_86$07"V4M=CKX/6<(]XF_@W;;0-IC(_
M32Y(DCL-IRRC>PRVV6XNEG@*H2*DX!?DQTBXE(-Y@(>> '6E1S<Z%=GW(LN#
MSYQU<$\#84G!Y.RE8O!F-1*TO'/])-^=][M "Q-<G%V3T<M7>5+%]65T/1"#
M<!I6=LE(8S?N]KKR@$?:QK"I""F:W:0RZVG]AB**=9',:3A@)PW'4-5>'U/>
MJ$3+XIMV'($S "1'GZ_=E_Q\9U%1N12CRHH\2#SYT*Z,MZ>88! .[;17]T#%
MR..G?W&[@1'WKM8$7[C;]TO.!GM$OH!Y3%*& >&U\.1FW"^ BU[3B+(7R_
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
M@W^+!XYZ 6\'?Z''I690!Z=XNH'*(S\K%:!ONJ!W[ED*/K_H=IL"(U!91>N
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
M(8&7'O^2D#>#(FOYE.P16 CV.JY2_'>0F3XF*?S9UC[TTA1TZ*-V^I!C$:&
MG;6CO+GC%U1Y'Q0TVXZQ&+8=F]UK##5"O\%=A,I"+@7O+X7H+X5T$G)<.FP:
MB9T/<Y2E3,@^F8KKL!^7- 6,/Y]?UR]Q=E>15YE_CC4'^PP<IYU5M+.N:&E6
MI?^DBQYN.EW%?4@4^*#9__MDV*!2.PZ27A<[N*$?@V_IOT2VE8RS$>B1Z>9C
M%[NV"PU94^X$N+:R31S8!P([KX8C2N6Y=H:#SH'ABTWQ2B2".<:3&TBY,L<=
M639CQ0:8 TIA:\H)0LE=OT\>X,R\B^L8=7*O#N4S$T(B%JBXV@K][ORC5Y2T
M][K#X3ZKR#?>$T_IB*JB__3/Y77&TBMJDM=6M$C;WEE>;*?VM:^BC2Z1[/HU
M>Q$*K0I5S^5^E[RDWPHVZP=(II$G90?,5/HG>1^YD2=4^O"#P\YSE3RL]A"W
M8%PY8NJ4/]6*V_B]C+O!*JH^=KGB!893;8_QM: =I$DF.]E*UI/7][LN=\>:
MC/;K(N4N#,_XW^0>7(^TDK?&3I1R:#-I_<N]0&ZY:/7_$LW^&CSGI:@HT8BG
M,M:F%GL+PL;93H83D2.5$T %I WM5UEUBZ--QBQ4B?N5,M7;-)76:D^A)_8M
MUEUT ,?WU[8\R(BE9AXC%RQ]5S;9Q=FCR2T!AW8'VV>;&ZKLI0ZV9H)]CN^G
MW:1QCI1<-[KR4;.'2%"O!'I*>,_A=R6\9PGO6<)[+@_O2;8TZ1+><XOPGHMX
M"/; 0RA!04M0T()X@B\'ZG;,,C_IGSF-''N/G+$,#\U2\&_:/3 LY=%)AF%-
MU3NC,MD\0\5PT&N#R24@B"QO;)Z'266D7>93P(4CQ^\A6G9I902;'K\Z[F7@
M#,'C5=CN VN#9P1_J*NSO)'Y:(_ML9, #+YFO:;JMSTZKXGS)88V<W=H/F<]
MZ13+[(\1N[@/ES_B;;X<!.ZGESSB014+89_*Q"!HI99%1JI4UM?S3Q]_Z OP
M^\5D,R12GFV3BM'N ^,<,L('.67[W";ONQ%M(&!S^CY<PF;"$:IVR&/P^7TC
MYHVI<]I470SW5K7CTKN<<S@5E:\$F@+^@V4WC=_ZH9(NUK(I:1J(U4C,9#)D
M,D-JXAWDZ1^C<1_4>%KCL9.HTSU8#ER?89..U[0$'CMCY$II476,R#G&LOMW
M1L")F7:?])HJD#([!#YR_^ @?,#[,"I,:LOZ2E%V.1J&!:;&B"$X'-GDF4C<
MZK#AF<B8\LT[CK#F3M)33A075W8^D<FR27K/TG#\$'>P0",GQ+#@#1'>B'Z"
MAXSVR>WC><KCN1XZO(VD=],8I ,F6I:,[PO+GUJ8WAZ<6M!G3RTD/CMXBU+#
M?$X3+D(\I-BY,_53T)2]_,0K&CENT5:88($D2VVR\NP<,YG4KQWE[?($;"+5
MM^CU(^=*GGC;9BJW P0VTX1:/!%6-.F=J%/V'CS_5YSUCWL'Z5N8I:$2LD82
M0C\T8A&!'2]X3\;9SS&A2*3*XI3??>SKM?YWE9%< &Q$AZHZ?UHXI!\?I5]G
M0#_M=QAW*"*YD8*H?^FA:61:3#?MW\6_Y-6F'>9_#6?U%0:8*B-[X'0<JUR$
M_[^]:VMJ&UG"?T4/I^I E9$EV0:<5&V5(>P>;Q*@,)S=\[2ERV"K8DN.+@'^
M_>GN&4EC8SDV6 @Y\[2I-?;,]/3T]>MNL]_I'NHR[Y2MS2US+"'@F1.PKTA4
MB<RKA'H@7!3]C<.T A<CH&\1W0\H*!]1#!MO$M,C$3J4'MX8[0O\"*\E=Z7'
M'?.?9_SJA#A,@"L%X\0<QG/O%Q;@Z.*<>E:<?(05T@S:C0?B_Z(3QJD[63@F
M; <T;3I+>2HI&WV0!KZ;Y986F4YNQ?ERY@']/@7/@XY$!JU+S!I+8)/\ @J&
MTK6S(H?EY[P/7VR]="_()P)2D@,4-^#@!\QTY>ROLC2;9VD:IYW."W=TR.,$
MTTPQ:2B])9[B,AN8MV$:BA)GG*>#!?^;9\/%H5WYT+FE*R05)2P+5-!WKL<:
M!@BJ\V%P\4,F^#/?!O4#ND@$U[5C<&4<^&SJ?T/9F83/O]#:[N::EE ?!MJ?
M*1P6[LSB,%0W4]; >W^(.46L0$1Q%UR[<I/0 1*L_AZ][MO(]HHOZMIU&L4(
M#LKPB[*6%0$9;9R"^X<Q-[I"&L(+.CV.LWF[-FI\1L6*^8+9"O_>XGV).%HX
M\Q,I\O/$[(A6*2H5N'46N^#Z9E;9+,1$-VU#WEV&2Q"X2HEVP&\%07(DBL"*
MP$G$ZL*"P640Y1+-0]'#>_E8N<7B(BF+=3AL-J=\5AJ6Q19P47L.J\R!P1/^
MYP'#);$2%*.%A?\M&4Y:.A?^N4Q("H4VSC-70;K-@W3L,;--^0CA!-&3F'R1
M)EV/P]!#&&6KG O!!';(.P%N0KQ7@.^MHW?SF-]"U(?_MHZ.&KV)=SD@C'"Z
MM2JX1F*$ZV7G;1GT>#6#BNS5JX%SO]%8&@6.4N H!8Y2X*A*P5&KH#4*'*7
M45EJQS(5.$J!H[(4WL92J^*$W?7@YE8;#G6J133-C]K5[7\N;D"(_WYU\W5P
M.[RZ?'$NT^KN02[3+,UE?F%C<-$IQ\?P!$U+\OU5U$(7,1()1K50@3"EP\Z+
MPX+O2%VL,,&#@2;X;RO+B#M8K#,C-U.S,6T&2@ #4GX@?L=V.;('E 8!RQ[\
MF/'& /GJ[M3V,0T4^3'ZQGD[@0#S0%,I3I:7.^G:('CBZ2+Q^^!<@Q<A.FU1
MF&8*.D<#]\1/6J"8$9E1 "LH/2BU&8#W+;7MDJ(R'""&V:5(!&EX R(*.2T@
M3#(L7N@(# XX0M\Q]0GKQ6E$$3C*I]IC"E^1D(XYOL]C,[XV3WH%Z!\%HA29
MDJ/S$&7/RLOAJ^-5(/U> 4>P3O;A"0]*WS "0+7?>7^UACU?G@$A]G(8<+E<
MP;:4#Z'R(=%%3FX^5V2(BV3PA/%"MHJC"*49K37==Q:O2Y2^UQH?$O0=!$&:
MY])D_,/GW"ZFD#>WA3\QE\TPIB^L3@N!N2(IGZ,>1A?+3M06K[9C[,&KM4H?
M[5T0L3%6I6)68D0@59#5%]]3Q-%)8 :4TW>\/Y+0TB]ZX]:)?E+:=VJ' ;[5
MM#AP#]^HZ'_U^J,)& EK-E Y ?!9B2E).Q;1EFGUK'Z5(.HLZ7?,'[IV8 <!
M.+S8QXI_<,(_..393R=$Y"*PJ^='C$MK.P51+3 VJ.''D3VKM0D$V"91?B%:
M.D=CY5\]0S<T6&PJ0;00DQ/B]D+WFZ[=Y0I&'**EY;>:V8PS#!/?+UN5F6D6
M@F66U9)3NQ=$I?\ C0=T#-@X3'P*'.>_2OEG!\Q+JK*E]H[QA.>C\^UG!'68
M"_:JA(X9I.,T3HJ+0U$"MJ&/0)IP\5:[C<O.2<7=,_L;+S4NB!)+QD!&GU*8
M!,50,D76T=]G'@F37+,0Z_Q7M@A"9JWS1<5E$K9VPJUX*G)SI$MP0&JEW)_O
MDVH"@ C^FH>E,%X)X!XV#/\C[WBVW"5JMSV=?I(.V]2P[.R!85G>4^<3N[>I
M].P.H1@C%O@@.0J#LF%B'IZG-N"-6)WI*V( G>,]N/3RDH2O\ 7P(NX9. ]2
MWZ1?];+WH6M6K_2RKZB,=5C8 ?MVS0K7H' -"M>@< T[Q#5T%:Y!X1K6F S=
MHBUD5;@&H(1[!)R!!;T?>-G9T\?F@AT6CL,>)[[C)Q_KWE_E"(B?7F(#+,OC
M4LOR@E]CO%$P4%2+-<:$ZNM&K]R<66?JK/^LUSO9N0%U>J+W^U:=!E2E2GJU
MS+],,:.X/+INS9DVF+G8H.-_8K$;^?,%AVZ3N>3%<#Y#/^DMS.?#_6Y) ?B=
MMW<+Z?P=W=SMW5="&1*()>1AK"+R]':DD^O9H%#*DR29?VBW'QX>=-BF/@Y_
MM =@Y&$'Z#;SQG;4]NS$;IM&WSKN]]NP7=/L=S"]:9C=T^-NK^V==CK=7L]C
MC^ .3Q)XIY=^D$RTP8P;LIC@NF$4D?:T<[P]@AZ1CA\657)AH!T417.\"P3E
M Q@5$X::4(-:1[>R./BY:-:\%+T^173$,] #?OS5?M(L;KD:A_H*RT)ZVDO>
M9X_KU5V)OI?^Z6X52YURQ:I5IRBY\7JY$6\I./@_K0[QUG';QOSW/Z;Q[1%%
MQY'S-+4?8G?*[("+D94"Y(S^:F-104]<4510U%+DD,F1J1%%%9DJI$(52622
MF(:BATR/4OM*D6GA)3%'$40F2)1BGPI%DP6=;"IZR/1 YTQ19(%#.HH>,CV4
MXUZGXVX:NXX([MQSK^S\N_+<Z]G@CEZH:;9MTS"/; =+'FUTTA%IFH0Q^\$D
MSWTFAC"O=..+MI0CG,=&Y8J\,676)3OK*C@81TSTVLP:#&'DD,/#11*ZA1$
M_+K#D@>L6*/S,.U<U\ZH+A,_(\B%Z"#3PLBCOF$4 3G^%1%'W*?%]ZDD5\V2
MZ[W'')7DJEYR=8X0HLDR 90),"GX >*E$@FVN;SI*'G3?'G3,=^]I:1R'.OD
MS7?S'WQ%8EO@C)BFRT(N*(I$IBA,O,YGZ#YON3V7^J9*_=V[!_86'=VIEML6
MHNB OWXLU$<)H!YZS0_]O1L6ZJ%O]] M]_[G#_UY_WSUT/?[H5M*H^_70[=0
MHY>_]9?,T)!E@'E*<^S.=7SS.@B#GL%?MQ?.14N!_&]'H@-3WSC.YN*,[,BQ
M Q8?73U.V5,F(RS#L)1<>$]RP33>NUBHT&_'"00)BVS>WN(3..#P*%#U72\I
M0ZUK])!_;]@8!^P@KX^.;E=Q<A5U_^9&1ZFKZ0 MCLU$_CZ[^8(MW!(**'BA
MF_+1!"$L@VTU[/D<^SV)SB4K*4\]1]*8:5@SD-AC/N8)&T-YWN(,I2'A_OF:
MV5*K"M&4$'D3(=+]585(5S _-2S4L, KZR7'UO>HR(OH5O2.6:Q3:VF\,%O,
M"I$X?[G)3ED-VUO60*\K;&I2=8\JD%8%TJI ^N4%TCU5(*T*I-<52/<J+Y!N
M;BUTW5OY91N_CX9_7 YN[VXN1IM6++^7)CC+ ^[$V%4^JCX+ROPL>LN_B&UD
M(UO,)?:PJR,Y91[OO"8&L_%QNF+^+O;BAF4<-K&G]WP(,N-1XVQ +_K(:0!?
MHM\K&GAN,T>T,;9C]U3O&^4?O]3(V^)GJ_ LZ_"OB+4_(>;@@S:81_Z4:RC1
M9;2RX3)OX4J7"*!RX[$\G&%6&<_8D)6J\NKK8+AVW-8^#[^>7=Q\^9]V>?%E
M),W[V"U)]J'8GDCVV<=>"R#:+]DTWJ[A0$,YB'YQ\V;]12;FO[[+M.N(Q;Y'
M4US+$S**BL\:O\_S%/;BZ!';=<%WHHFU(2?>X7/JU1<5:Y#QH@)?*O"E E\O
M#WP=J\#7KQ?X:CNA]P3_F22SZ6__!U!+ P04    "  D@II6_C,I]R00  "Z
ML   $0   '-P<V,M,C R,S S,S$N>'-D[5UM<]LV$OZ>7X'3E^O-1)'EE\3V
MQ.G(;QG/V;''LMO>?<E )&2AX8L*@+;57W\+D)1(@20(6:YYI3J=6"2QB\4^
M"V!W 9"??W[V/?1(&*=A<-3I?]CJ(!(XH4N#AZ/._=UY=[_S\Y=W[S[_H]O]
M[?CV$IV&3N230* 31K @+GJB8H)^=0G_@<8L]-&O(?M!'W&W^T41G833&:,/
M$X&VM[9WEI^R0[*_N_<)C_>[GW9W][N[^_NC[L$N=KLCXKC._M;N>$SP^X?#
MT:?QSM[^P:<N.=CO0['M_>[!'AYW#YS1@;.U];&_O;>OF#[S0^Y,B(\1-"S@
MA\_\J#,18GK8ZST]/7UXVOD0LH?>]M96O_?;U>50%>TD93T:_,B5?AXQ+RV_
MTY./1YB3M#B?<B=77-X(?9\PAWR 'SW9XJV=G7Y*(-FY8DZ2Y;[7BQ]FB](*
M66C !0Z<N2RN8%TQFQ)>3 ./>_*Q%&FKN]7O;H-06 A&1Y$@YR'S3\D81QX(
M%P5_1-BC8TI<, 6/2+!S!3*/!68/1'S#/N%3[)!ZROCR#B$)$_6G(1,HT*C'
MF(^4U)P)2;;=03&DEZ&#A;)369*G*M3*]X@GN+SJRJL/S]SM].K7&O'N \93
MJYJS-''MR1T;"3+VV3\X..@]2X,KEJ#0)E3YKOS9[6]W=_H6U9895_VZX:J;
MTJU#AD5GLY,AI7NA#(4=ILP63)3JFM<4HWA4J*F$E$"V?L^F0DZ<#P_A8\\E
MM([A+Q>7/PI,'0=!*!2]O)/<FTYI, [C&W!+ G:8HG9+QND J W&!5U#_3G$
MS&&A9^A'O2D+IX0)2GAV(%<,)HR,CSIRP.JFH]1W#X\^@"1I$:V"O.G)QST@
M(=[EHB4IK40?V , 'HEUT^2&3QFQ;3B0<)@E%-#_]^UWL&?;?B!Q(N_OT7R7
MC&V;#R0TH"NT7E+?P7-$W:/.20A>: ?)>_>W%Y6NA*HU+I\R3%DN9/FRI?[K
MH^["9^TB1?6YMUQVB4O$B7L=?%&_EXT[(4Z*5! N645MNKPZ"\F2FZG^*K4:
MN"0 8OC!0X^ZTF<_QIZ<IH<30@2W4KF1F1&/;0!A"-HD<T 2GBC+%"5<4<QV
M UA&QS>80?,F1% 0>*WHY3D;H=Q9!4KT4ZZ6?[4=VKD">3@^"7UHX03*T$=R
M 5&X3UZ*KXF]$>3=>B OZD'A&.5J0G%5&Z KD5AKK[:JRV@">^LR@4W?+X=I
M*$+GQR3T7,+XV1\1%;-U&D$!=R/L'U>!/5O1/U%<U0;F3&_$?'+NA4\O=KN*
MF1I!_;127P;^2%70(BB_DH PJZ$XI3""L"]C$LH=+^01(W"14+9(N\<1IP'A
M?.# $,$55YLN44ANU/O!LMY3-BC+IT4HW))'$D0V3F9*8=)U?VM9UPEEB[1[
M2L:$,3EL<ZLP.T]GU'1_6=,I/5(,6J3P<TS9+]B+R!7!4A=J K-0?#&]$8#M
M90 D'Z08H2RG%B$Q\,!;D%'_.&0G8(I47(:<$QLP2ED8\=A9QF/."@$O%#-#
M,;<687(3)X)G.'"E7SZ5-OF-" M(RC@8$=E=1B3EA( 5FO-ZCX!;BQ#Y&H;N
M$_4\4,(%-")XH"./#, L!;<#QL#(B,^>YI F#!4^"Y8HYMDVG$Y X52H,1ST
M 8&2H,$#"1QJ-:!5<3$B]'$9H0PW!5*.7XNP>5'>9(6T2/_3,A(M3WFHYA]C
ME9[PIR3@2AY;$'0&1B"T*%HQZBI.*,NJ16#$>=8[_&PU,F6IC&K7@N@DMZO(
M6Z3J:S$A+&Z[](>>I;G91-+%]";U;VMQM>*3@J#<J9A5BZ  ;R19V"!L.,',
M!@:=U@B!%G #CQ0 X((4FQ:I_RL)'QB>3JAS$4" Y=M. ,7T1ABTL'O!!V48
MM0H(E4:^"3UJZ9LN4QJ5K\78"0?T4\JC3:M[2>/O,,1(*Z@]H3,J70NCYTJ/
M.;1)Y4DZV5KE>3JCRK7(.*%OH\IS>6EKQ1=1&]6OA;WYW'8;42A,4ENC4<7%
MB(H6 I<DO-L(3UG:VAHA R,C2%IX7)$%;R-0)<EL:YRJ^1AATL+IBM1X&V&J
M3FW;>UQUV)E V]&"\!KY\C:"5Y'RMD;.S,L(FQ:X5R;1VPB8GA"WQJF4A1$>
M+: ORJRW%A4M0[X:,F5LC.AH$7]9NKV-"!4F<ZT!JN)BQ$=+#I0EAMN(CY;E
MM<:FC(,1%RV#4)0M;B,FA6G?%5)HY5R,V&CIA>(4<AO1*=IA^PTS!F(]DE,B
M,/5>NF%78V?$2TL\%&[@E7TL98U^2IBW";LD1SF,?!^S63A.KOEHECX1C& _
MUHQ][K0F7R.:6H8BS:V";Q%7(0\?I)6@T6Q>(*XGQ;:%T"YU'7L,EQD8P=+R
M% NPM,[60D#F?2)-4"?W+RD>40_BEELB)0T>1#@DXGYZ3@A_<?^SK\L$\V[9
MMOU\GYQGX=.G\ZI16C<2(8+:N_=3).MOHVGD5CRLP2ZB-L)G. O01A0*5SKF
M74@>;9.)A4?L)9FEB^"1\#@G9(W9R^LR(ESWL$&^PZH3?)FZDSSEO/8V&D;9
M HLUZ@9&1DAMSBNT$:B2%1;[(,3 R B4S3&&5@8>U:LK\F6+;N01& DG\(Q
MZ 9W3\![G('#,/##*!#A..5AW0U?H7*C1:QR<$*.S(DP:FB.Q4$T4 ]3B5 L
MDBPQY]G"OE\-ZO*M-=M,"7NC5>AII5I6H3W8 +Z,R!D7U)=O*#B/!*AV$ 01
M]J"G,$'_5((G.6X5A1!7A,L\AM'H=^(($6:)UFPVKRJDT?BT'%D]XYL+C6*I
M42PVRHHP7T%())<QGFZTB?3R88ZXA<9<L68M5\S"('Y_QR7X[231K;4MKEZ'
MT92T!%WU>KEZGE0HYRU5Y6+5:0-_1ED+=V083:?Q6Y:QE[[();/V,!\DE#;M
M9[C7D\%H/EK*T&0^6;<H*]+B!32Y59G,*!0+MK&Q&OAFW_CWEG9F)8?)UO:T
MO.7*MI9[7>'&WE:RM]B%N():_<B_P3-5_#YP";N&>%GEAU_3S&RK-UJ7Y<:Q
MO'4E_E0B#DKE04H@-)=H8U-K!?5[_XVMZGM_8U?-M:O5%U MF!KQUY+Y)OQ;
MO=2J[RQ5>Z=NR31BS@2,_ 9F;ONLL!5;(Z3%VR27-[%VDVU?BTJ0K*652>,"
M_<L["]4,'+!XN+T6:*M9&^'5E@#*X)6WL_"F-;478FWG\>IC<#U^1C"U['WI
MEN;-R%N@[^*[J^:Q5J_#B+.6CZ_ N?11B_-8%=!<3^7/_#"Z'M +.1NA+GX[
M4P74**Y'&Y\W^/Y*Y&?[B#MXA$CB@7QE.!"G6)#Y)I=P'.N.JT=0D//(C^^L
MR1#6((+18FJ_1@H>I?*@1""DJD52I.P^' C.$K%0(M=[E)%L8V*I2F^&][?R
M_P'$.J?#^S5933%7HR%HZ>H*0X JWJ/;^)_!>Q6J04T;8.<C>+KG[6QX<[/N
MV:&"MPGDCUJ>N&I^6.R?DU5MI@@-BODXG*P>PRWUP1$_F</O.0T>CCWL_!@Z
M$",1'@^+-XPZ\. J=(FW_DGC580R&I:6RJLPK,Q4L9 Q^6@*2)DX)DI.I 3M
M)I*FSDHB*U+"MGYN*3PV:6U,55R,Z&N)O/+#E^W#1SLZN=@FH#*H_C0223>%
M[D(=.6U3+P*W2:.T1G7]=1MM0<L %A[XS&V6B%.]<UGD4*"DB1V+6)Z2<Z,;
M<R*+)9I!(*@KU44?23+BRP+\[-GQ(I>X\@/E)XLVA./7L[/7$\IH@%J.LL0
MLXM)4LAN*N5\'E)RHE30^/ON&5'54:"-=9I/-2].;(%^8,9WDG-3]AL/5^!N
MM!=]$W/Q*>C\$;"DKL4+\?[66'_NY3]='5_G/F\M/VY-XFTDRA(D@-\3[=P2
M)WR(ZU5'R3L(C[A@V!%''<'D%WCD=[GGIPGUXH'<;3J2W^*-B\O/\-+#*6$T
M=*641QTW8DJ4#N(1\*8BDE=?61A-CSKQ5\$/)U"2.=&(7 CB=Y!0A#$KD 8\
M2GE?LEM\PEMKT?Q(82+DG\2]46)DVS3&'I\WJH)B#<VBAU1K3$I4HSD#^=7R
MI56A&R;MW[\B_DA^DK@8JAJ$:V^=*UA7_N*';NAC6J=]7T^2000&Y^H&%95L
M0@NN\+/<X)#I$['UG(?L"D8M(K=ADS#BUP&YHSX!0RNUQ%58-<-$^ZN:J(&P
M"0"?81; V,-3/T>YOH.Y(WYV,QPDS2MKJ V'5\*S]O@IMW1(2>X(\Q-[++77
MPK)O;Y"YH\DP6D3RHK01):5MFA$_&\4[,^$!&5%AU3CP9L$[8;,Z^$1<@&_#
M4MV?R#J]V-4P3'1U2-\>O=3MOR[X*FRE<U*#L#ENRM*[$2Z"QY ZQ)W[(D9S
M+2=\@>4ZZBSO:YEN!J#:&ZWODHW6"L#X'_(LCCT N-RA6W<]KS@+B;06>YM)
M3B^M8#1%E$T=[\[\J1?."%%]^B:SY:W:MS"2-<&SN @$87<,NV0XXU"<&YW@
M*HHFM&C9T!B3IX=EF=O0\\"/?<+,+6M<3>*W]I#2EWI!/#*B@:HH\V8+PQQ<
MC_CM9^'S,&+_)2R$4./?J@]=8>%,JHVSFJ8)YGD>>6,00]XT-$4OV 3YB]\F
M:)P0360-F=\@[@7G&SIA^DXU"'+AZGI\#/+)^.D29FINZF&67!K0U63&CUS2
M1Z*=UBXXE3T8PPSP'X*9[&VE2G@13[-*:,"!J?AK/8$KS'Y 61!L*"&F@A)>
MW8NK*)K0G=4J;'43<D6:(+/6O:KE+RW>A+84!PKE)XS7%XRL6$=#!FHI_0VF
M,B\9OP9&NJ%J#>XBZ\U<QZ?ZTY?O0><S)<K6P/BMO4-]B>02'#Y)R.NOJF1(
MWKH]0PHRC>7. S%P'(D)T*4?45-_9_&_-;K""JP:8O&+7GPCER"@"S_(W\G[
MM08%WU:Q&1E6X-D4O23I[/P6MTSD=CQ;%$F.@ YD&*>VEZ5QN>KORY%A7E?K
MKJ>IZ8XJQ\UQ(C]2DP2T@T!G.I&YZ@#Z"ZB!QWG<KS#SR5?QK>09VE704#=Q
M$&!O)JAC<$RT8HUP2%8U\SC+?0'Z9I$ZGJO\QKL)#I*=_K] R$/<01+VG 6O
MT-56D<'"AFPF-[4QJ%8"SF'2DS@E\=^+8.FL?*F6:E V=8BI6B<Q^BHUB=_:
M:\DMZL%4F@UZ:T[/-BP:,AO?$JD@!SI9O),<1GHI>=J2Q4U3S&;)I@E#9[(G
MHEY46E*X">U0&7Z8F[S9*4CG@3/H#L.Q@ &6U%@:J"9L0OL*$N#@\CY2#C^P
MEXF'+V0HA+U%I*"V;T($+<C _3V*WPR=VF2\M?,./\>>C$WZ_35J;^P2+$R]
MJHEJ(10L0W7CHOZ^=$]-\*N,):]881.L^8ZIK,0LD4[NU!RHTQE4K6.ENYI4
M%%)JE'9,&NM6I&O)U0:A%6L"C+FYWF*E4B_?+,<G7>>OZ>0LBC?5R/)?G9AO
M"K?TY@H)&^+#I3/4*>$.H_'1/ZLL6WT&#6GQ]7A,'3)/=L'0=QXQ&.@CD\=3
M@_ O'5S4IGL. 9*/O[S['U!+ P04    "  D@II6KRGG[M<<  ""& $ %0
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
MLCI'JX1MS>G+&(;D.S>6^T[3W4SHGSI2J\ON:(5C#>D830[)H_7 @B'%JHJ
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
MK@,AG2BYF<0.'>B8C*>]=^-1/DO3M^/SEG S.YN\<E70DIV=9$W.%44F-BO
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
M*2[W&;G;'\S6WZ8]2I1MHZXN[K2=3S"9C[$;#2>?^I\7Z2?G,,?D"QD2!>M
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
M&E^-+ *1+8%E2VZ=*8Z)UL4A!P#(FES$8?"QC>@[&58PF;XM-02_R-C+Z*Q
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
MR0GH>V(YGI!D?;/.ZH.SIWI;\5<Z7\FZ:WG1^#Q^D=7]4LP4B63(: AB!A,
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
M2*-2DH7*^]1B<TN/7?V+59DO9%EJOF+YHJ:K7^JXLIJNUA9B@G@J0@Y2FA(
MD8H EF$$,L08XU!1A(GUQMYFQ*G114= 4S3]G 70$V*+G;QOX 8FD+6X04?>
MFZ"+Y 5;JB>2#AMZWXB.M*>_&EFWO;T+2F>W]U8/&F^'[Z+7SB;?Z<:>]7.W
MD5>S,(TSDF4)$"*4 ,89!CB-]1\J$3S-)),R=@FI[3S;B6='B)G];,;H'W;6
M1<W.%NN)Q<#4^<X" /<RLH>J^JH+VWGRN(5>#U4ZJ-QZY)(^AQ_YUT5M?>G]
M6M-C-5]\O5O.<ZX?7/_WJ?ES>]X:(:8XAA&(,DJUT80BP 12@$@5D30A&93,
M_C3$>?RIF5 =#8*M"L%:!Q>?OOM<V)R3#(KPT ZO\^ V?WD*?FW_:W- [05W
ME\.50?$?Z[2E,P]T.P^/K1K>3EMZ8W7^^,7]L2.>Q_36>?> IO]C?"0<G*H"
M4O_2U/^(9@03SI2 ()0P!7ISG0*:20P83#,L,@EI:K5N]!5@:@O'6F)P6'"J
MR5*HSA4(\C,G=L;DD$@/O( <I#"<*<Y47^&Y+%-?Z ;)<[ 8_ADS'^S!.9\+
MX?"<D<^JW^G=]=M*/NBM+XPB0:,0I((3 (7>]1(E!. QS&#(L8A0ZK4-Y$61
MIL:.S1$FLSSJ9(='G<&O1K>@5LXUQ>'Z"1[XM+K7M$W]<-INQL8[B3X ^;D/
MGK<"_3'.F0\ ]':L?/CD?E3^\W(I?L_G\W5=XJWI?"O^<]4>I,Z8BH20D@,B
M8PE@&$& 33BH2FF:<A%EL7#JW&4UZM0(6:^C'4>\>4N: @"EGC$Z#S8U,SK;
M0UKG)+EQK]V,V-&K=YP'9M"UO#?;.MD=IT='9G_DZ 21)_ZS&W-4BG."89_%
MW&[V6JFD"??8J2.PZ:C".6,\4IJU<)H!&"<4D$0F@$8TAB1-]8^=HF#<19@:
MA=6%-53=B:7FKWPMNN^B)>>FQ8ZZA@5[8!Z[4,1DHT2GB,D@K7'Z@SAL79-S
M DRAOHD%0)9U3FR>=$7?Z75!SW5SUTUC,+W!3@7,% 010@F D50 9ZD .&*(
MFMUUJHA=[+?=@%9?WZAAW)VD_U)6H&TJUZ/C\FF0+4Z?_ #W7!5^-TV].RT+
MO2+8HWVU%R3'[F1=M(AN>EF;=])WHT-KA*Q:7)]^ROC=KB]J=+3Q]>6[^MFB
MGR6_7RSGRZ]/];[\K7Z-%E]S-I>WI9[5=5M. E.*PY2 E#&]:>84 LKC#*29
MPEG$N9"I55-7IU&G9G'>\K^OZJ*2U49Z-P/3#FL[F]([@@/S\5;>UENXE3AH
M1!X@:-L))$]FHMV8HUJ&3C#L&X-N-_>)6NKK-VP2%M\NM E:KW_EA^I>%I_O
MZ:)-5/FK-E>EN&V#'5\OQ RC!,=AE(&89::%HX@ A0H#SN,D#4-!-;79ASN-
M)_C4J+ 1,*#K0/- +GID&(X^_18V[D0G=0K'/2_.YB*VV>\= ((:@<! L,U4
M;-^<VW7X=Z"!F.C;XA(7-LVW9JR LFF^/8[A:N-/X?DXMQ'E&3% ;GR4=R/K
MGF'\OFVHM80/RT5=HJ&6J=NH:\8)Q4H0::J@46W)F+, G$8@E$3!4(D$IHE;
M,^ISPTW-_F@D#AJ1U^7_&ZF[[?M<&U.?1?R\\> ?QX&7_&LA[-&JV@:9*QI6
MGWW\R&VK;50];%YM=5<_/\]=8:KZ5T^F5W-E6C!H/GLT1+:-@Z=<ORDA44")
M. 00JU!OCA)H-D>"9B+!,G3JMW=YR*G1REKBF[JE==5T$EE+[>;KL<#;SM'C
M%\6!2>4L@(-6'K2'R9.?QV+ 49T\]@#L>W@<[NS+/:T3N\-L;\MR)<4L$B@C
M"92 $T2 9AL(&#-):/I/$M&8)IE3--;IH:;'->OSE+)9>QO729#7TO8OUW0&
M;%O"\0'AX$2S1F_7<FD$]4DKE\#P1B<G!QJ91BXI?$@?%^]PWP&]:CT7IEW@
M+,10*,XPB&/3[R1E## 2<I#(D$*>H(@R-?LF"[:TV>UT'^WR1G<'&/"4M97.
MH07G 5Z7=RI],1CZT-Y*>:>=QS%->^TQ=AXTVF[BF/C=?</1WS]/U<;3;<1?
M?Y<%STMY5^1<?ES.YVI9F!MGB6 R8X0!D= 4P%!Q_6%#!'"84"%4BDCF5LI]
M=!6F9E7X+"K80>-(JMT:D:"&Q";D;RIOG9T9-.UW:0KG0<_T&HU>O;+_3#YW
MCE%_!?X8.4E73Y#OTIA72-*S<J9!>%$53=']O/SMA5SP^P=:_/9J:5)E9RF+
M2)I2:;QX#,",Z;UU AD(D8@PB0EGW*K<O>V 4UL0=^0-C,#!1F+'FIJ7H+9;
M5WP"./ J< Z[X-=&7)\E-BV1\55G\])PXQ;;M%3^H.*F[7TC;PHNGI>^7];I
M!%(8,GS3FF8**10B!D&60FXV! Q@(3.0AF&(L.*$1>-L"'J)/S7N^\>13/%^
M<SVP&3[X#$[?!#\95%/M!-5L@-!_79EH3E-)N?6G_FK "5ITIF"37S6MSVV/
M]Q/^CV&+7S4QWNSPZZ3HMT:^R1=Y)=_EWXY$1]/_7!8OY[0LW^M/O;43,PBA
M7LDP$(QG "98 ?W<%" (PT@F0BKA=,[N./[45JE&_*"6_S KX":H=0AJ)0*C
MQ67+T\LLV2U/ V(_\/K22 X\PNZ\"/0$SQ.+NXX^*@WWA&:?1_L^9K*;A3VO
MRL_ZT=4K6LDW-"_^2N<K.5-,)HDB":!Q3 !4(@$DX0E &4P(32),N)HU60N?
M*EI4D]E(7%3-A3SV%1R.1W;<NTQ^S1=U_3UM0K:I(2:20>C%EA:E^5$3U3!6
M#RJ?;U;&0X9IB !*4 P@HP00J5\O#EF(2"0XS^+VS7J]&+H)V;.^5VOU1GJK
M3'+1?\/W:3(;8*]OR'_';?'!J54-46 P"@Q(08W2'VIW;#WG?YP]\V65_KOM
MI*TG\1GVU_:R7=?F>?7X.*]%IO,75%,%EY_NI:S>+M2R>&A[4<]-B9;/R[IH
M;-DTF]YM.R\C@BC$#.!,<0!EJ  1/-)_(*RM1F+B4_HTA?8AW-3VZ]UFO5T%
M@U;#H%8QZ.@8M$H&U;*IR^S42,'S5)]?=9][ H=>/;N]J]WF[O-Z[H(FBM\A
MF'_X2>W7'WOLR7V.;MK=26;M))?U).>=22ZV'VA=KMY?$XAAT+9MT.UES&=I
MY^T3K5/-O[V.X;B*%Y7).Q$K7I6W"_%)%M]R+LO6]XHX@B(3(8@9AP *1DQC
MB0BD"L62D! RCJV6XW.C3&U=;06M<Z9:22T9]2R6%]8[7P@-O' = <>C0]H*
MA7,;(?V SB9(_VN[ 3K_['&XQ4:]#4E87=PWIUT3S'QN]AQT\30+$<&AA!)0
M"3, B8" H@R!# HDLS1$,;0J:GO\\5/[OAL)@UK$H)71-4%]![[S7_;UH S\
M23OAT2/;_)C:5V27[SQNY&SR8ZH<9H\?O:K?2<ZZZN#;!5\^Z!7_^^OOQDL@
M7\B%5'DUXPA'"$O3-A C !44 "<9 305&>1$JCBV6J MQYO:I[PIA9G7\@85
M_>Y:;/H2PG;.88^X#?RU;R!K1-6;R.]!*VSP0RON:2>^LP?5$AA/SLU+HXWJ
M=[14?=\E:'M;/T+13RW,%N*5;/[[=G'+>;&2HML-E_,PQ9F4(,N2&, $I8!E
M"0,4HU!&)$X%=DH&MQET:M322AC(!GU'5K&"V8Y:?(,W,+^LQ0U^6 O\HV;G
M8 WG(,V*72#RQ#160XY*-RX@['..T[T]>Y3+LI1RMZG<^NE/[<E&^6HEW\OO
MU>??Y?R;_&6YJ.[+6:9@A"*J@,QD"B!/!6 T)$ RF@C(<)B$5@6VKA5D:@2E
M7TGHV/"\[Q38$=48P Y,7HT*)F=RK\'E1H\;XYIE,KBCN;@)_D/2(OBP\'CB
M?"V(OIJT]Q5CW([N5X)UT/[]VN?UCENF"Y[3^?8X]_9[7LYB+$*)(Z:ICNG-
M'49Z<\=2"F 6QB1*E*"Q4V_?$^-,C=@V8G8B0X)?C:3ND<9'<;6C,P]H#<Q6
M?8#J$QM\#@9_,<!'1QD[UO><JD=B>L]>[HT,RE=YR>=+TR9P>]*:Q"$G,!,@
M%"D'$*8)(%1%@$&J&,<119%3/K'EN),CBTW45_#+MI.BXV[-%O/>Q'$MDL]
M)&6PE3GX=9!2@8Y #4<U1T=];NHY!X4%%9V]O6=: 9W+LNU_\UY6;9L4AFD*
M(RD!B4,&8,AC0# G@(4"QTG*.0^=7-!'1YD:[:R;6?4L87 <23MZN1J?@<GD
M )H!^LF<Q<!7H.S1,<:-7#VGYD$HZ=F+>U<UJ8L _2VO[E^NRFKY((LZ:^EV
ML7$-/>V%@"D>,ZP2;8X@+ %4L=ZU(,@!9XE*,Q;S+'/B@QXR3(TM/JT>](?P
M9.+ #MKA;51H OR,SZ%:!I]D!9Q:XUTS8W:\,_ \#,Q*:^F#W[7XP5K^FV#S
M\UJ5SK\['A\3Z_)1<IE_<PVX[%-ZI2_(_JJQ.$LP=H&6OA =J=G2^U']2ZEN
M&E.8*'R]CTM5%&JF5))  #E. 9,Q IA0%D%.TB2TJK1R<H2ID>&FMNBV<TR=
MP.->8W47R/,LY@6>H8_F79'I58#UJ/9756+=?>+H)5F/*G2L-NOQ"_L&YK#J
MD^2KHFF__(WF<\,3;Y:%L<-JSIC%(4484@*P(C& ,E* <4@ 3S@,!4S##"FW
MX)R+8T[M8^_F.1SW,C2KJ:-GUP9].ZO&,Z9#,X26-MB*>Q-L! 9J60 C\D5
M>X3P6$/D+8SG\H@CA_)80W 8SF-_ZW4Q@B^79;5I!#^36992P3/ 0J2W84@)
MP"*<@$A$*4>0)5GF5-SFZ"A3HYO-[JJ6LG<MY..(VA+*E3@-3B&N$/6.^3L*
M@>=(O]TQGB6^[ZB:IZ+ZCE_<[\-OZL?,4H*B5(D,2";TER[UWQ@5%""D4JX$
M@5$8S:IE1>=V7WKS6*=/>_/PX=[;SV:,@-:RN7W-+4QVGZ^[\@-_K[?G-7;^
M.'<5]/0UM@\=]?/;563_>]O[;<\/;#Y?_F[2\?1J_6JY8I5:S6\Y7ZZTX;IU
M"/U-+^WR@U+Z2]06/612 BY,&P4DM.DOLDQ_DS#%BBL&83);R*\FE<_R6W23
MP.J])<U[VY5CN->W%@TLM6PWP4)6Q@5:2+[\IK=BKJY-U]FP_. '0'@D9FBE
M[/@F]89@K4Z@3-4XO>+D5?!N66KX:QWT3'CDDG[8^2(=Q]''9:=^T!S06,_'
M]..[U[0P-</*.UG454<VIF\4"DYC$>E)R&( ,TD S1("$DJ01 E*1.H4B79J
MH*GM)][7Z?EUGLRFPI4;:9V$U(Z=?  U, VM131>RZ;:TR";BDM(>"*5D\.,
MRAZ7E-VGB8O7]TX6TJ_^ITK;"<99]\Y,DBE/9((H,1*Q4F$()(PC !/) $V2
M""A%.%>)1&DB'7.$3HTU-59H,^<VL@9K89USA$ZB:\<.GC ;F"!.PN4]5M4"
M#W_I/R='&COKYY+*1Y)]+M[2L[^L+.J*)74!$U.VO@UL"F6(611!P,/,[(L2
MD\+#&,A,U0&&>!HSX=1<]O@X4^.)CICMPOAED;NVKSX!*492Q5&<@$REQ-1
MC0%.DP1PE&4Q#2DB@MNUXO0(ZCB=.>\^?7'<.9X"T8YE/0 S,,,>O&CE #%W
M%V#PU7[WQ"CC]MX]K^I!X]T+E_=T/AUD8+Y<%84F[%E**"=QJ@#$7._&*,6
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
MT]M%615U'D/YH;J7Q>=[NOC0=(K\V30Q+M\N[FJ/\2RB29Q"+/3T<**92$!
M9": \6>S,$UXE(I1.@4["CXU4JNETUNYWA[QT6;<CAJG.(\#LZR''L*-\D%'
M^Z!6/ZBT_L&'=4OA!H) ORH-"!-H)MQSVIZ[I["KV'^,UL(])\-;A^&^X_<V
ME0^[1'SZTH;$IW%&(#*ELGB8F/(\>H%*(@+2!"6<Q0EA(K)KR60UG@L?C=-9
M28OFN/,^#ZBU:>P'I.%-XV/=BWXPJ/TX0&J!%2[^#.0S8XUM(%]6^XB!;'%3
M[Z,&+HW+T/#1Q[S\[<73"[G@]P^T^.WV>U[.$@'#.%0($*1,EU^5 1R:X*,8
M<IJDF4A(YGC&<'; J1FD._(&1N!@(Z_SV<)YJ*T/%;P!./QIPDGL@E^-L%YS
M)^UP\7=X<'ZXL4\-K)0_<EQ@=U\_=OE2R@_J=5GE#[22Y2Q,A=XDDQ3(*)4
M*AX#$DD*(DH2P1&CB7 *OMY]_-280TMGBM9MY'-CBSWH[+BA/R #,\$^%C?!
MW7*>\Z?@U_:_@SCUC\/AB0#V'C[JYWY<L?V/^\15_3[E%ZLR7YA>PLL'EB]J
MOMBF36_/HA@+8YH)!A27(8!QF@&2)10@QA52",H8.X4DV T[M4]_+743[=\4
M/G3\_BWQMN,%_R@.S!<; #L2[Q1?&(0OW&#RQ".6@X[*+VY [/..X]T]&U(:
M5XKQQQ3R7B[*_)M\N^#+!VF.']_+ZH/Z3+_?F0"MY>*V:K*OZT+DRSMJ B V
MU4S2+$-<H!#P,(P Y#$'5$$(9!(9IWT2XLB)L#S)-35&:]ROO*M7D->*!3^T
M[2\='?6^)M". 9]A6@:FR&9&=E0*WK8S8K3Z\2;0BAFK2ZMF[*VB<<)WM NJ
M9=#H-TQ73K^8^^KAZ4FJ<3M^^H7RH#^HY\?WHW0]IDDQD*]D\]^WBUO.EZM%
M5=[1I[I?&\E2D5"< A13"J ,$6 QQH"("")EV@US[$+6%T><&@VOQ0L>&_G<
M*/<RP'9DZA6V@6ER+6OPPUK:'\V!X0;(NPM .K.>-3B>^.SR>*,RE;7Z^QQD
M?Z,G3_>=+,P/Z%<9S:1,8YR&IB( UW_$40@H9Q#$4D5<A3C.[,K&VPPV-4[9
M]=(66M@;D^[?BGNEC[L+<D__=D_H1O=MWP1WEU&[WJU]!(ZA7-K=H9[7G7U$
MZ8NN[&/W]#5,OLFR+AW8F$7:)-*F2!QK<T, 3K,00"IC0$D8@HC'20IY)%G$
MW$R1@S&F1A1;$=NMGZOU<8BBK;UQ%3:#6Q@;6!KQZHV73X/BI/;>3(C#$48V
M&DZJ>&@FG+ZT][9#/T?O<([Y5TDJ(Y:D,8"*) !RL]G@(0=2DA#AE".A7'<<
M)P>;WO=>>Q.TL*Z'5V<AM=YC> %J^.U%B]'P[FD;2/QM*DX/-?9^XJ+21[82
ME^_IF?G62?K]H/93@F=0"2JSC "1T@Q 1 7 "$' 52IPF, (,:=N,^>'FQIA
M=*4UCL=\FR]/:X$=,]_.8VW'(_X0')A)]L';+S;@L=*)'2:^,MW.#S9NFIN5
MX@<Y;G9W7=N-^^?E4OR>S^<=XR.#(0UY# 3%L3$^0D P(B#EDF,%L<BP6TO-
MTV--C4JZ#:)?WIM ZSK.WYQHO*1%\62J)^EY636-(=?J]&W%?0B]';EX G1@
M9NEBN99SI [;)V'QWE+[<*1GZJ%]4N733;-/W]*/4U[3PE1P*]=%"5_0,N<S
MR4B4\!0#2#,)C(L"$!)CP&J3)8.I"KD+FQP=96H\4@OEI9+I<5#M>.)JJ 9F
MB+5\VS*D-T$MHS].. N!)S8X/L:H/'!6S7T&.']QOV__G=16B?R@WW)J&IR\
M,T<IFP(@;7)2^6I5ERKZK'&7,Y%QGDD5 \8S!J! "!"E_YGI=R6C(8$B<^JU
MY"S!U#A#OU>I&S>X@V['&X-".3"G-++?!!OI@UK\G5I"U3)@,KBCN6AKIM5*
M^".=WOAY(B3W\4<EJ][P[!-9_P?U:+1I"JS]'UDL/RSD_ZH3HGZA%;]OL_((
M$8JF203"*!4 8LD Q0D$"&9ZQ\1QBHG50>[%D:9&6C",?OCMQZ9(<O!@Y'3H
M''D6TO-4Y16H@2G)B!D8.0,M:/"_VDS'6M8^_3;/HN;0<=,7>B/UW*Q1_"^#
MXE*CN/?2^6J]:8/)V>:;9Q\P7OM-&SUV&G!:W> I N:S?LZKY0/-%S,NDD@R
M2D D8P(@BT- I(B!3&)(HQC'(7:JI'1FK*DQYY$L12/LE8$O'6SM;#U/B U,
MH2? "GYM)!TRG_,0CZ'B7CHC/6_8RZ'*%Z->CMSBH15%NZBQB&:1"7J1(M+6
M%<PD(%P)@!F$)!0(HLCI>.O(&%-CA]WJ\U=4YW<J&W$E, .3P%Y+&__5(<ZH
M/T01_N>H!'%&Q;.%][U8 I_D7/_VZ^U"_$*+WZ39LZTK_F$LLD2Q!$0I20'4
MR[[^Q%$"B#8.HCB$&-EUDKP\U-2^]$]T+IN>SP]K21W/DTZC:GF<Y 6KH4^3
M&B%KH#9B^J^@>!D+7T=(IP<:]P3IHL('!TB7[^A)#X9H[I=S?4?9U+":\13A
MS!1L,/DWFA90#&@24< $HK%$B+%8K_S+BLXM:>%@""<ZV PTX")GQFBVMJV<
M__2/.(ZR?PED+:\C-QQ"FL4P%!%1@$52 H@0!53%&M=(T0QAR3!-W-M-70?L
M,_:9NAI/!+5!BE0&N$Q,"4Z( $E4!+B*XD3_05(N7)M*^4!S[&Y25P-IN5A=
M!<W0BU1'N']>EY,\GOKJ<<DZB8BOI>IP@'&7J),*'BQ-IZ_LZ;NBY;WYOWG8
M-VVH+:IR6Q;-_$*O@KL_Z%SY=L'G*_.)O,K+QV5)YS\7R]6CJ3><EUIUO7"N
MI&A/+Y:+<A8+S&-LLL$R"/5BQSA@3"][<<1C@9#@/.W!S&.J,$W.-SK5=B,W
M?Y%;[0):!6RS("Q5\'B^GNOSOR)Z=5$R5 JD(8P!I"83&>L_*.0\C%C$(6>N
MB\VT7Y#AE[&SKX?4/_\CO!B6SMZ)3O70WF.MR$U0SW-'GYN@4WVTN<2\!7L_
MW+UC@T&P!B&H46A*^W=P"+9 >/1-/\/T^7)VCRGZN-[S9YB4 W?\<\@PM=8(
M;Y:%DGFUTLSQ-YE_O:\VG;+K>M>O:"7?T+SX*YVOY"R+8IKA, 649JDVN+)$
MVUH9!QA',LVHE((Y-8J:AEI3\VVVLK>-%:X-A9T&QL_>@6&H%V+HO?%H_1DZ
M -T$:XB"%J.F>T-@4 H,3$&-TQ^AA4.?>9]\@P<GI?Z;M'_H,Y'C-8?H)9V;
M+2!D/GNM#0LCAUZ&**_R;U(_F+YL^YQ2Q#,H]<),)"( "I@ #%.].C.*",84
MH=3JP/_20%-;+QM9@XZPAJAH\-*EJ>Q%=,\O8#XQ&WA)Z0N7-:G;8G&$9DO)
M__QU^>TG_8B&8?5?ML1Z\<&C4)VM>FORL;Z^W];@7--KSE</JSDU9-1)BYV%
M44)1J@1(%44 XB0&F$ )E(BRC$)N3K9F"_G5W&AGR+L+8?5!D.:#Z(HRW'?1
M$72G0[R;N=UC.NQ,XX$@'BF8NQ8>U-(?)LO?!,[8.UN8_>'S9 WV$&!4RZT_
M0/M6UA5/NC8M_ZY8ZGUR]72GW[[J=E';;76'RL]-25+$*&$1!G$F0DU\60BP
MR#3QP4PPQ7!(J%/E0-N!IV8QK:6]"6IY:S_L1N(VV]PRN<)Y#BP= 0,@.S#'
M70?J%7G[=@AY3^*_,.PS9?3;@7$ZO=_R_IX%B8XVX-Y41^<J"Q.3UXM(2 %,
M8VV7\4P!@1!'#(DX8T[UR\X/-S52.ME'WJ;>>1^X[9C('X@#\\]5^+F7);*"
MQ5=9HO.#C5N6R$KQ@[)$=G?YJL6^R>Y]21_SBLXW[SQC B,6<\ RJBT@DB2
MQ:$ .(LY0SQAL7+JH&$_]-3HIE.HJ*EW5B_8\S81.N]11=%V#NQX9QAD!^:@
M$P7<MV4%6M$'H21WQ :KZGYRX&<N[WX)D,MUWB\^H1^%O9?5MHO%YDO!6)ID
M-0:R,,P %&D(:&I<5B'FA*HTYE*XL-714:9&3.]7#P;B9>%&0,<1M..:JW$9
MF%9,);F==CEC=L8Y"XXG!CD^QJAD<5;-?5XX?[%_1W;'5]1FS6RK\R0I216.
M4Z!B$Y3".028) 0D48AI1+%0D5.IM)YR3(U&W LC]9V Z_W7GF!]3B?V39U5
MQ_<=V,.42KH2RQ$\VN>DF(Q;VP(J%]^VS>.NV.#5U6+F+Y</#\M%':50[K;W
M>EE''7[55\V?WI;ERORTN6Y&59*R5!" E80 9J9^7"3U'TG,N$HIXZF3'76E
M/%.CRKM/7TQ<<_OG;=F$-+_2_ZXC\.JHN](Q[.[:*7/8)(XS$6/L'!M-@D:5
M)J:M/##U7N7S51VU\%HI3;AUT>&.AL%:Q?9^S_O+Z\'VN>F\0IKQ=Z+70W=T
M>^KAL?U8^9?E0CXUV=QO5@M1MD5#H#E7I!D$&><4P%AB0$U E@HSRI(H2@E*
M7,CV^#!3X]!:RK880Z",G&Y\>0),.QJ\'J*!V:U!IY$PJ$4<H!#+>10\T<Z)
M049ED_.*[I/$A:O[%+5T,@)OE?[^C"5HJL7-!$H2;KJ,P"PS;0)H#"B/39L
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
MZW]MO^S=9XU3./"8^)LJ@$=_V<\:V/F>V_ $_O=57NA]A4 I1W$4 99BI2V
M" $:"@Y209#,5"HC2M81L)_M#8$S0UJ]H+L!L)]'*?5W,O"^?_#8.>1#EA)&
M)0,RB3.-/,* $2) 2"/$H8S3E*G9-UFPY5B@MZS0'7,XO+<A6PVR0;&9 #$,
MX'9FER<0!Z;670NK3>.L&Z,WHOHSL"SP\&14G1MI5$/*0N5]X\GFEG[DO0Y9
M_BB_R<5*=HZRWN4+^;:2#^6,Q:E"L2! 0FU$0:D4H(PBD"&6I"Q6##*G/N46
M8T[-V-I$W[<R[QRF_VK$#FJY'4/';-"WXQ7/F Y]LG0UG,Y$XP"0)\*Q&7%4
MXG& 8)^ 7&Z](J7[?CD7;Q\>B^6W^MF;'B9A*"D2&<BD:1B%0@*PL2>9RB!3
M3"28.%6'/C/6U(AG(VJ0=V3MD=5] EH[=O$$V,"LLL6J*^8 M2TMX/"9XGUB
MI/'3O,^K?#35^\(M?HK(WW*^>EC-S5Y.$U7.\VK&,Z'21%(0R8AIFT6$@$49
M!R2E&1$XIA(ZV2R7AYP:<VSJITLOQ>6/8&S''7Z1&YA"#HO._]"1-V@%/KUK
MO+H"_6ET!JI&?V3 9ZU,?QJ 2U7JS]PY<HQ]LT.[6_L;WBR+^L<SF*8HQI
MGL;:CL$2 ;VWR@!44"F210A&;O6Y/ LX-0KS$,K<)NQM5*T3]NK?C109?^I=
ML#RE>\89'MI]_RR3.UZ(^849>.Y(\5/B_3$"OB^ ZRUN^](X/6,T.3=%I,N/
MDLO\FSF]?B^K-BYL%DF(H_3_X^Y->^3&L37AOR)@+F:J@&0/)5(2.?=3EI<:
M8]RV7SOK-AKU(< UK7LC(W)B<=G]ZX?4$J'8%*2"4LHOT%UVIB6=<QY*#\G#
MLV@*E. :8&PVNPQ):>OIYB(F2,N<^U31[1+F1?@CE,AM=(U6.V7OHH7R#,WJ
MA->-=T.!-C"'[O#ZW,*K*JEHJT;_Q<Q76)+BJY62Q2:RE4MW<9\!@ST=T H5
M\]DE:MS03P>C3R) 7>ZY-2:KH[E;E:',.=$DE0S0A*0 "\,P%")AN"81N=(J
MBW':+RSKFNC)+3!KS>TYX97&E/U2P]T'Q7$]. C40Z_T3E &?5&^(8#+%;#@
M,5Q7!;]0&)<K()<CN9R?<&-1BBI[;E_EM Q:@I20-"8)2"B+[3HI SQ%,4 9
MCQF/)9.)5UQ[I[2I$5>=H=LJ_'HEZJD'P(Z,% JV@4G(&['^Y2VZD A=[>*L
MK)<I?M%E]L5:&)TWC>RVJU-QWWQ7*U&L+8$=Y>'6_Z(^K0JA9CG,=6YK.E(!
MH5E&B1PP%E.0,:4E0GDJ_?KGC:3WU*AL5S. U34#5*UM]&S5?=FZ%IZOQ,!.
MO>$&>OJ^OEW5B9;U9PI.- A$)003< /V&[.7]@YZ:OUS. W[#44P7V)/\>%[
M>7U6PN9<%+JHVHK=R__<KC=6S[<&[/N/K]Z]7:Z^,+O"_Z+$=E6F2CZP[S.8
M)9H3C$""8FQF/+/X)C+CP$R"/-$ZE2KE/:*YA]#5B?Q>(@S\T!R[)?[ED16+
M7Z/YTF8W+:)B\4U5%J[-WS?+W?G]7;1AW\.U!NO]%KA-<B\VJ)-I(G8RUGLS
M(\MJD36T],Y:4\OJHCMC[VSOL7%ZB]TZ&",T'.NMXF2ZD-T*LD]KLIME]:\I
M]+98"S;_IV&LM^8WZQE2B2:Y9$!ET$P8E&- H9 @T2C12G F4J<HK X94]O.
M[(KF5'I&5M&HU-2_J- QG-W,&PBD@8FS!SZ]J@I=0."FJD+'SQR]JM %H\Y5
M%;ITJ6=>[?-:S.X-&'&9>K+/8ONT6CZNV%,=19SIE G,-1 QP_:D6@"2$ G2
M-)4"ISQ3Q*E>L)NXJ7WR5M]JZ]I.\J]5=LS'=<.YFP#"HS<P%U3 '5='J+6]
M'K?=!T%9?QYUP\S1D#R0^T*(!DB)]L*EXEI[CZ53!!&*JV1HMZ>,DR7M9=$N
M?=KOKGY;>!L:P-9?S2._%5+)WW[\L;;G;+OB+G45$;-XV]4GR[347"44I#RV
M==LA 8PB"422QY13&.?*JQ:SOPI3XV:K?J3GR[_6U9YKN2MAQ':Z^^VI>PR+
MVXYY6+ 'IG+;,;O$NE'?NG-_L19$UKFQKQRUMV*0NG/]00RTC^VAP*B[U/X
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
MZV@$8HT.0:-2QG6#C_G"X8[^?3'>%FM;\;NNR".VZQE+(86&%("(46(+1^:
M48J!DH(@HH5@&,^^J15?^K3&.)'C\[*WI0WHE&UZ/U2Z[NM\&6W]^V.< MM-
M#\' &OIDH ]*O7ID7$3AIB89IT\=O4O&1</.M<FX?'&/T\2RS4Z]VHU3FL4:
M)V8;81-?8F'^IC@&*8XYSQC%*':*W#I^\-1F_U(UCT.J-D8.)WL]+1_X*ZU:
MC/4H =NVWN,@KB<*(QVWE=J%*@5XQM3.X[/V]>,=DIW1\N H[-R_]]MR_$/9
MWH)*WIM9FCW6?4,^ZM?%?&M^>UHU"R=4:TC-^B)-1=VQ''*;O\VRF"64LLRK
MH8>G_*G14ZUG?]^T+_XB4;%Y0U-+] 1@S4C9YM4>(D"1<H&4(#YU_X?$?X2>
M (WZ$:OTCT1=)?&D/.)=),<>*[<=Y8 C,/ TM0._5KUNVV1K$U1JMPO0W46U
M1>%VGSV1"[0E]94^ZCZU)S3'F]>^C[FY,>UK];Q2HJIU8?X^5Z5[?R'OGY:K
M3?&O\O<7BY_,H$)2(8Q #+DAR1@QP$2&@")2"A$G9K4L9@OU:"4]]&I?>Y-^
M3I\PK3[A$RV'^YQM8.3_BEBKU:UL65DF/;.6>;W[W=XVMHYN_C&':J03@=;
MM&VZBW96E6/4MNLN:BPS?[.VW967[,P;I+MN$,##-]^]3:V7ZLT;!,R.UKUA
MGG]#? V_?HC+CP]QW[)B5>:?W*_7VZ?J1-<FYHJ**9_B&8:&ZG7" ,FX=8-*
MNT*&$"1:8F26R3@G7N>MPZDZM1W-^T)7:6\_%%OUBK099D3=>'\:XS3P3! @
M[L::6^?>M0R^BQJ3(VMSX.";08<E9 S.,(J.'XHS*.!G(W*&E7AK%]L/ZB\S
M\RVW"YOW8R:UA?FK*'5;FUGMU5>KZ?K=HGU-L1"%F137^QI'BI1YT13 /$4
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
M5:"[62(\? .318W<3MG(:!OMU.U5S_\JA#Y5_D-".5;M_TY(0_4$< 6FNU/
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
MYISDDD"O\[AS4J9&7U4'!E:[>!?+!1!7\BD]$'4\FKL5IZ%/YTJ(&B_X7L6
M!W1="(0ZHSLK8]QCNBXS3T[J.B_N$1C=I&!_KC*PWRV^+0NAY!>U^>/YK5+K
M&4X5@D1I0%EBMCYI9K8^L1: <)AAE*.<8*<\=2=I4^.!1L'(  ZVSY%67CT6
MKX+;307!(1N8$G;I_+6NT0X^HVWTQW/T-C!\'I'2(6$<*53ZN#I"U'X;H_IM
M#!4S[8I/9]#TU8>,%S7M:L]!V+3S3;USV(Z:7S8N\<]JSC9*MHI5SK(TSE/(
M4Q!KGEF7$P4TX3E@2L9("R*4QIXI;<["IT;#]T*L[&F2:#4"\DYN<X?>;8$V
M%* #D_2Y3L+%8G\D5RL?O7>H\=LG%\X;LW"I<>ZBQ\Z4\P;E3.*<_S-&;GMY
M6/;2GJ%\V)8)3TG&=9JJ!"CS%X!M,3J*6 HH215F6!+,R"CM*R]I.#4^_+C=
MK#=L(<O(]85LRNJ6QU)-6=W>I2[#CZ\;G[[HJ U,N@'Z1.XZ0;;L-/ONTM()
M-'F\-@@OW:SQHGX_1]/%:_ &:YYX55"_2>.U>EXI4539W.IYKDIU%K(=.#=+
MD9))GJ9 H9@##%D""$04Y#R7>2K2C"5>\X"+T*E1>UOGDMM9.ZITJ6TFT[-:
M;7Y4Q-_4,/2C>*?1<&/MT!@/[J+8JWL7[10NP6RK'(Y1?0 *1)).(D?E/1\0
MCJG,Z]Z>[&28[O%QI1[KIGSU_K]L_3B+T]P04\Y &J<QP#DWK)0*"%*I8$)Q
MFD',O5BI0]CDV.A U^BCWKGVJKZ8GF>VG3@[\DT@](;FF4/@EN[ ^1., R*A
MB*5+U+B$XF#T"9&XW!.NXN_K[:I:='TOUC.H80IM01EBEC&61,SNEF809"P6
M*H,Z)RJ_M=IO6^#4B.12Q=I&Y]LK_Q[ [<8E(4$<F$^NX1?]:14.VLO.#9L!
M2_T>B'OQ,K_GC'<I\7OVOAX'M;]MU\5"K=>OU5JLBG*7]FDY+\2/ZK_['H_4
MMG;);)%?E"* 96K^EL$,)"F"! H%D5MK7R^I4^.;1N^HI;C'R:,SV X'N$-
M.##;G$,OJM2-_JS_=.F@>0.P'D>[0P \TA'O#FC9 OJY5#O4P:XO.IT'O,X/
M&^^@U]>^@P-?[YMOB+"Q:?7KS\OY_.UR93UMLQ1RVQD0 2$3L[&D* ><&J)6
M9L.)E<Z4D$X;RTXI4R/F75!#J6CTIU4UJG7U(9*+J#HP<@BL!O=3#0Q3C]"9
M6^ :.V2FU#5P:,PE^YU"8DYN'C\4YI+^9T-@+E[<@P$[,NCOA7DOMN4)];E:
MTG/6KB4]XX2DBF0,\%SG *<< :8% 5PH3K%,!!'NC!E*JZDQ[/DZZW./;7;8
M07,@Y)<8BH$)O#(INE V)&J9%74-6%48W]KV$D/G,4F\Q!".-*G40SDOA[+8
M#V65'A"QUE">M)'8M(:R[#;QR]RF%8=:W(=&O7,J"R9LO*DO-#X'4V7PAP>M
M%%.U$;U8<V$]B_,8)2*#(">V(0RC&!#KETY@;EU%MN2YU[E63SVF-GTZ58NY
M(;JJYVBY>;1'&(.!Y\VNZC%-6^*N\C$!@U5O!'/8"C)7M9A"#1E7J!RKR#@_
M[F4"6UM1F77@(X,$TEQ"@&BFS7Y%I8!A36R/3Q'G(A=(X-ES9=N&K3:.1!M:
M3Y_/_UC;X9B@I:9M"?58+,HJ>S8$JM3AY2)<3P=:BUQCLP,%(H<*8&7VI"QG
M"FB$,V8&60BHZX%^LY _S3 WNHXTR&HAISF\CI/O2P[8T--RP #F@S&?6@#S
MQ4&82 #SJ7X_50#S17A#!S!?%M2W-)2M-+5Z7E:G^66+JE?+[6*S^O%J*=4L
M04HEDB6 <69V4U(BP!0UNRE%I1:QU HZE2UWE#>Y75-5^>A Y[NJOYJ!.:HU
MCZSJOD6CNG'OIN8!T!R8:$, V:.<E!,\-U25ZG[^R,6EG(P]K3'E=EN_O8>A
ML6+]4=\+81]I=SQGHR*$TC0S*TJ@: *!67%"P!DR/Z94(XH%B8E3,08_L5,C
MFU)KNU+\9)[:^'_]UHB.>+LM_,*C.##)[ #<JWS7)[['>W7FAU2@)9>CT%'7
M47Y '"^./._N1TF?ZD0CZUK9W"_DFR;7Z(/:S+BRU9\2!K129L.+8@8, ^6
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
M7W N54;P?DY/9RQ;?[U?2/N'/?K^QN;VT/M^\XJM5C_,#J],*9DIL_W*F9
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
M<Y"JT8'P"W5,=:,VXQYBA8'NY(@KT&,'\?CL/T\1*Y1(G@"H8@IP*C!@F10
M$A8+2<QZ3'GULG45/#6RK/4.ZMKQ)<$AL'MY)\Y C.<+UCCNFA?B,%\P/!TS
MM[)26<GILTV'616+Q\:-NCL"TSE*- <95P1@(26@(L= 9[F$"1>(".)<UNZ"
MD.FQ3:UFM/+R*7<"V4TRH> 9G% :9!H5^Y2HNP211V&Z %"-5([N]&7Z6Z B
M=%<PZ"P]=^G>\0K.7='^H,S<M6M[\%W8<NA-Q%3Y;^J!?:^KY3*I%418V:6;
M6;\EB0T@2!G DL4*IHP9U#SZ;HRGN=.']+(]-]1Z4SQ9P56PO VXE$T@8=V1
M<,.^>]5"'O'-<)@.IC/0/WN7C5V :66\/:2\5LKYI=X+CSEP<N_'2#/JI-X3
MORE[U"'K7 ",H\EXRXE1D3U8G(PK>>3*!&]9L2K3=XP:VZ<J2?!SL?ZOMRNE
MRN*_9A;^;";A&8-F?RAL4UZ590!K20%/,P%BG8N<<XTY\O)4#:[QY#:=1D>@
MC9)F\5)I&:V,FB/EDCN/LYNO;%*C-^*10L_\<6MUE9@8M>R^BZSED34]:FR/
M/G>]$^-ECON.TTOGC#OK^W-DB_O"'RQ/W%MPO_GJ?<%X,3?3I;(%MLJCTJ_+
MN;E_;3,!-C]F"<U2B70,1)HD %/" =,)!%K 7,0<$6B[;2PW;.XVW5P3Z#5;
M[,0.1SH/5D8TWVM=AI:O6WK_]_]&DCC_]TB5^OM-(U?A=YL%0H(Z,(F_/T+R
M33=JWD3K"D4@GKPJ;E2:<S7^F*6<[^M',@_FMH^Z17IEE);(<I8GE "N$PHP
MMG_+D (RYT0**6*!N,]"]JR4J2T^7]D:1GQ9IZ2T%RYEQDKKYZHCUN8K6T0'
M-_D1S'GHW5CE9D 'II+;L0P>1M<)62#*.2]C5)[I-/.87+HO[AE6NUS*OXKY
M_+,9S;?+E5TPS1A6C&&<  YS"+"A#T RF0--\X00J;A.O0K;G)$Q-39I5(S^
MM$I&M9:>><KGL'0CB!L1&I@>?,'QCYF];'ZH8-DS$L:-DKULXDEX;,>E/7UI
M=AWR634MWS^M;/SMTV?UQ I;9^5^5Z%I?\W]D_7XQ;,LI9BS% .%$@&PS!-
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
M"A@_JN2L@6>C1\Y?V6?[)KXJN;4!=&:Y8WT_[-'^?65C4S8_;$C*_]T6SY9
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
M87S9/CVQU8]6:N_:+E6:$MA?-BOE6SC8#7VWU61P3 =FDT-]6Z@.6B?/"Z5
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
M+)9XU2$-5[]\)_F1TJ;SL/SQAH2ZZ<I6<^V+39A*IS62BM<3SSD3&"AZD%7
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
MZ>M<AU#:X7!<T.8:$HYOYM]PM4.0D6(H:XL"9C8S0*(#EW2 D&O#X<P-;]Y
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
M\ARG:WP[_8;WQ'<W2HZ%FVJ>F=_,]? &HBL4LQ<9L01CHFJ]X0X@<]S+H#'
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
MT_K">@<IXT)M6/W?'<O70!F=8JK^YQ+QU>(L3.<3RXV32GC02FR22^2I9JO
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
M/QH($VUD.C8R+M!\X[)BR\3KQ?*WZ6ISHLYQ<;ZZN (E?BF^<]YDYR&EPLD
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
ML:AL8FK>B'@W->,V8^D&<XW4U0'P/J8OF,]G]9'JG4#NFK.WU^WGC>'<D]N
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
M3__B6]?F'R1DY*UN[10];RWU#J!3H[3Y;&5AFP4XB"['HCD8*PR)Q&6@<%"
M9:88$42D<'& [.,.$3V<74<I=GO;U5%2[@ FVT'A8OYI@5_6B^>*#*X@ XMU
MI&>6J\)8!EDP>:8M'?:MQWD_3LTXC3RG.*_:**!;*%WO]V+"B)026(4(*@7R
MQW55C4G%1FYREJKU5<E3](Q\=#72^4Y0.D !8P\T>T6ZY"MCN\?-]29!4] 6
M+D%[Q4%)HP!U,6"<QJ2,-T%M]74]DFT]^U$](N40E<X'DV\/:!%/<J,9TCF,
M&EPHGDYXXLM)*<&*4$Q4G*7M=2A/H.7)CQIY\]U@:&DGW['1\M1I_O/-]HU@
M98QU$X84PE(49Q(X'C+QYK.RBJ%V=B?$[/1QX_2 #AC<#"3I'H*<!^W@U=7E
MY_EB^O]6&]"N9I=\(EPTS)*L"@^4?SK*!4*,'C3R[(..T>76%QL[DM9IY>=
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
M,2YH=&U02P$"% ,4    "  D@II6_C,I]R00  "ZL   $0
M@ '-90$ <W!S8RTR,#(S,#,S,2YX<V102P$"% ,4    "  D@II6KRGG[M<<
M  ""& $ %0              @ $@=@$ <W!S8RTR,#(S,#,S,5]C86PN>&UL
M4$L! A0#%     @ )(*:5C9['C^4-   74," !4              ( !*I,!
M '-P<V,M,C R,S S,S%?9&5F+GAM;%!+ 0(4 Q0    ( "2"FE9LC?&-DPT
M "T.   4              "  ?'' 0!S<'-C+3(P,C,P,S,Q7V<Q+FIP9U!+
M 0(4 Q0    ( "2"FE:$CZ?,H 8   $A   4              "  ;;5 0!S
M<'-C+3(P,C,P,S,Q7V<R+FIP9U!+ 0(4 Q0    ( "2"FE8BVE?H:,(  (,S
M"  5              "  8C< 0!S<'-C+3(P,C,P,S,Q7VQA8BYX;6Q02P$"
M% ,4    "  D@II6*FR=B 1U  ##6@4 %0              @ $CGP( <W!S
H8RTR,#(S,#,S,5]P<F4N>&UL4$L%!@     +  L Z0(  %H4 P    $!

end
</TEXT>
</DOCUMENT>
</SEC-DOCUMENT>
