Skip to content

Instantly share code, notes, and snippets.

@jbosboom
Created December 7, 2024 08:05
Show Gist options
  • Save jbosboom/73928ecf1c935b678fd4193ce0de6a0d to your computer and use it in GitHub Desktop.
Save jbosboom/73928ecf1c935b678fd4193ce0de6a0d to your computer and use it in GitHub Desktop.
Tony Hawk's Pro Skater 2 cheat code hash reversal
0517f426 ce112df2 XDLRDLR
0517f426 2d98ff2a LLDUSULCDRX
0517f426 6d2cc6b1 DUCCSSDTRRU
0517f426 bf8583d4 LTLDTDXLTXU
0517f426 171934ee LTRRUXUXLLLU
0517f426 19a08350 RLCLLSXLRRRS
0517f426 45c608f3 UXDDXDXTURTU
0517f426 4c95e6d0 RSSTCUXSTRSX
0517f426 5fee3e10 LXSXXRTDTRXC
0517f426 61bdc7dd CLDSRTLSDCDS
0517f426 72d77033 XRSCRCDDDTDS
0517f426 772809a8 TTSUDCRRTRUT
0517f426 a41a0d5b RXTLSSLRCSCT
0517f426 c1b201b8 TUXTSRCXRSDT
0517f426 e2be8d9d RRCDUSUUXRRS
0517f426 05c88e6c XSXSXDSCDXXCX
0517f426 0882da5a TUTCUXDSDLDDL
0517f426 0a4180d6 XUXSTDUDTSURD
0517f426 0c7496c2 TTUTTCXLCTCUS
0517f426 0db9e81a RTTXRLLRCRCLR
0517f426 0eeb5234 SLURRCRSUXXLC
0517f426 0f84a170 RCSCRDXCLLRRD
0517f426 18ed6517 RXXTCRURCUCLS
0517f426 1987c0c5 RCRLLLXUSLTCD
0517f426 19d7493f LTDTLTCRXDLDD
0517f426 1b7ca5be XCCTDCXLTDRDR
0517f426 2497a26b LRXLSRCCUCDRT
0517f426 25455a6b DTTRRLSUDRDDL
0517f426 28387c70 TCRCDTTDTCRUR
0517f426 28920cc2 LLSSLUXDULSCT
0517f426 2918f14f DRSSXSRTRTXXT
0517f426 2a3f01d7 XXTTCSRRUCLCU
0517f426 2b43c333 SLDXSLCLRCSTD
0517f426 329cb4fb XDDRCUSCXDLCC
0517f426 37716d97 URXDXCCUUUXCD
0517f426 3a8a447c RRDCRXRCSCRUT
0517f426 3c0b6140 SSLXTLUSCLSDX
0517f426 3ebe493f LSSTUCLLXLLXX
0517f426 404d09b2 LCTXURXRDRRRD
0517f426 421330f6 URCRXCXTLSSXU
0517f426 46d291e2 RDSLSXDLRDULD
0517f426 4b7d6881 STCXRUXUSDLSL
0517f426 506385cf RSCTTDRXCRXTL
0517f426 54b9364f UUSXDTLCCXUTL
0517f426 54ebc51a DDUCTRLLUTCXX
0517f426 5550690b TSDCDSSSCDDXT
0517f426 563b8451 LCXLLCRXLSCXX
0517f426 58651b37 RSCLXSSRLTUDD
0517f426 5a1bd35d LSSSSLRLCLSDD
0517f426 5a43c73b SDRXLULCTURDT
0517f426 6024c79a UXSSDRXXXCXDR
0517f426 66d544f3 CDUUCRRCDRLSL
0517f426 68c951f5 CRLSTDDLXXTLC
0517f426 6aa9cdc0 UXSDUXXLLLLLU
0517f426 70b3c7d8 STDDXRDTURUCD
0517f426 70f34d3e CRCSUSDSDCDSC
0517f426 73433b5d RCDXLLLXSUXCC
0517f426 763a18a7 XSSTUTTUUCDSR
0517f426 7734e8da LLLTRTURUXDRX
0517f426 7769d5bb DXXTXDRXXLCXS
0517f426 78d5626c TSTCTSXRCLTSL
0517f426 7a819a66 RDXSLTCLTLUSD
0517f426 7b72735d DUTUSDLRSLLRX
0517f426 7bdf86c5 LDTXRRXXCXXDX
0517f426 7cbce1da SUUSTTLCTTLXD
0517f426 7d59f0fc SXSLLDLLRXSTX
0517f426 80a13d44 UDRUSXDRLULDS
0517f426 811a50af DRTDSRCSXLTLS
0517f426 81c21940 DDLRTRRUDXSST
0517f426 852ebb1b UTSURTCXUDDRX
0517f426 85ec65ee CDLUXXRLLRSUC
0517f426 873af27c DRRTTRSLXTUTU
0517f426 8baac14f RXLRLDXCRSCCR
0517f426 8c3c8d39 LSRTRTUSDCSXD
0517f426 8ce4e846 XUSLLXTTTCTUL
0517f426 8d6e47c4 RRLRRLSCLRSCD
0517f426 9122f579 LTSSTXRCLCRSL
0517f426 9206a575 RDDSUURULUDXS
0517f426 93060148 DLXSSSTSDTLXC
0517f426 948934ca DRTSDTUSLXTTC
0517f426 952b0c91 DDSDRDDXDLLLC
0517f426 98a2a03a LXDDXCDTLCSUX
0517f426 99bf74dd SSXSSTDDSXDRL
0517f426 9c09dafc TXDTSUTXURSXT
0517f426 9c5721df RLCRSTRULXCRU
0517f426 9cea7905 DSTXUXCUXDSDU
0517f426 a582cd7a LLTDRLSXXTLTX
0517f426 a5fcb33e DRSTULDUSCRDR
0517f426 a88e57b6 CXSXSCDRURSUU
0517f426 a9da29cd XLXTLXTDDTXRU
0517f426 a9fc39fa LUDTSTLLRDCUT
0517f426 aa18c1d2 LTUDRDDDSXRST
0517f426 aa85950f TLSTUXRTTXCXU
0517f426 abee183b XLXLRDSSTUUTS
0517f426 b30bf2ad SUTXDDUDTRUUR
0517f426 b42216d1 CDRXRSRLLCTUX
0517f426 b90edde7 XLXTDDUDLSSLU
0517f426 b91acecd UTCXUDUSRLXXU
0517f426 b9467d6e CULSLLTDRRDST
0517f426 b9c1ca33 LUCLLTXXTLSRL
0e2b0dc3 50065086 DDUSTUR
0e2b0dc3 1309e375 LXXXCSRLDUSX
0e2b0dc3 253c5211 CRLCLSXRDXTT
0e2b0dc3 35336131 CDSSTSCTSCXX
0e2b0dc3 35902e6c TCTTTXDUDTLT
0e2b0dc3 4aed55d3 LTDLRUTDDTSD
0e2b0dc3 7271d9d1 RLUUTTCXUDXR
0e2b0dc3 84959824 DUTTDUXUURDR
0e2b0dc3 a7c41683 DRRUSDXULLUX
0e2b0dc3 ab210491 UXRLCSCLLLLU
0e2b0dc3 afc0e868 LLCXRURDUTSX
0e2b0dc3 b732200c XSLRLTLCTDTS
0e2b0dc3 b7a633a3 XCDRUXCULSSC
0e2b0dc3 bafd6b55 XLTCSUDTLXDU
0e2b0dc3 be5e9ae6 LTLTRXDRXSSL
0e2b0dc3 c99e7ebc LCRRTCDTSSXL
0e2b0dc3 c9f1bb67 CUXDCSRSTTRL
0e2b0dc3 d63ceca7 XXCLRRXLRLLC
0e2b0dc3 e4747fd1 STSRLDCUXSDC
0e2b0dc3 e945c25d DCUUUSLLXXUX
0e2b0dc3 022f5484 TULSLUCRRUTTX
0e2b0dc3 05168c35 USSDLDRDLRDCT
0e2b0dc3 0df58553 DRRRRLRRSRULU
0e2b0dc3 10880668 CXDSCRTLLCCDR
0e2b0dc3 1261b551 DDLTSXSXCDUSD
0e2b0dc3 1515e1ec UXRTXXTLSUUSL
0e2b0dc3 1a5735ee TLLULLSLXDSLR
0e2b0dc3 1b2e174c DURDCRXSRTRRS
0e2b0dc3 1d0979f3 TRXXSTSTXRUST
0e2b0dc3 1dd9acab DDDXTUTUDUUDU
0e2b0dc3 1ed8bc24 LRSCSTULLCDSD
0e2b0dc3 212bc3a3 CLUDDLDDUTSSX
0e2b0dc3 218b90e8 LDLSDUTLUTTXT
0e2b0dc3 21fddf25 UDRDCTXUTRUSU
0e2b0dc3 23f511e3 DUTTLURSSDLXR
0e2b0dc3 24109a86 LCRXLXTCCSDSS
0e2b0dc3 25c819cf XUTRLSLLTXUDT
0e2b0dc3 26352d2d UTRXCRXSLRXST
0e2b0dc3 276f980e USTLCLTRLTRSU
0e2b0dc3 27b88fe2 RUXRXRLULXXCD
0e2b0dc3 2b1784ba UXRXSUTDDTSTU
0e2b0dc3 2bed6fdb LRXUXSSLTDUCC
0e2b0dc3 2cb67c59 LDDXUDTDCCSXU
0e2b0dc3 31c77d9c SUDSRUDDLLCLS
0e2b0dc3 377e3cbf LDRCUTCXSDLTX
0e2b0dc3 379ed61f SRXCTLXCDSULU
0e2b0dc3 3a1ccc74 UUSTCDXXCSUXL
0e2b0dc3 3ad3639e USCUUXRUXRRTL
0e2b0dc3 3cf05337 TLSDULSXUTSUR
0e2b0dc3 46d8f76e URSTUUTDSDLSS
0e2b0dc3 47a55903 XXCLDSTRCRLCL
0e2b0dc3 4b8cac69 LCXRXRDCSUXCR
0e2b0dc3 4d003233 XDSTSCXSTSRLS
0e2b0dc3 4f146555 LLLCDDCLDRXSX
0e2b0dc3 50724cee DUCSSSLUXXCRU
0e2b0dc3 51c32830 XRDRLCCTSUTLR
0e2b0dc3 534adfbb CDDURTDTSXTSR
0e2b0dc3 5740c334 DLSDDLSLLCXSD
0e2b0dc3 58168cf4 RXDCDLCRDXSCU
0e2b0dc3 58d7d885 SLCSUDTRLRSUT
0e2b0dc3 58eba2a9 TTURDCLRTULTR
0e2b0dc3 5a44ae6c XSRDSTSLTCCLL
0e2b0dc3 5d42517d TURRRDDDXDUSS
0e2b0dc3 5db694ea LTLDRUCLTLLSR
0e2b0dc3 603c61f7 ULLRSUDCCCDUR
0e2b0dc3 61552fd6 SSXXTUUUDTSTT
0e2b0dc3 6f9c9e19 RDRDLLLLDRUTL
0e2b0dc3 73b2ea38 XRTSDDXSSTRUT
0e2b0dc3 81cd21a5 RDUXDDSXUXLXC
0e2b0dc3 83371a3e XTCRRRRSSLRTT
0e2b0dc3 8cd0c532 UUXXTSDDRDLXT
0e2b0dc3 8ea05656 XLDUXSSXRTDUX
0e2b0dc3 8f9a9f7c RSRLRRSXUDXLT
0e2b0dc3 937985d0 XDULLSXTTDSSX
0e2b0dc3 9518d55f UXDLTRSLLSDXU
0e2b0dc3 975f7882 LULRCDXCUDCRR
0e2b0dc3 98b7001d TSRDRSXLLCSTU
0e2b0dc3 98d194c9 RXSLRRSSXTDTU
0e2b0dc3 9ffacf45 SCCTSCLUTRLCL
0e2b0dc3 a02c76dd SXUDUSTXLTTLR
0e2b0dc3 a0abfff6 RXTSUTLCTXTRC
0e2b0dc3 a23564f9 SRTXUCLXLTUSX
0e2b0dc3 a36c4af8 LDLLUXLUULRDD
0e2b0dc3 a3ff2c4f LDCLCCTLRLSCS
0e2b0dc3 a44be845 DSTLLRTTLCXUS
0e2b0dc3 a5a68772 USUDLDCRXCRCU
0e2b0dc3 abfc9ce9 LRXTUUSDTSSUL
0e2b0dc3 af462fd7 LRXUXUXULSRCT
0e2b0dc3 b1946026 TUXCSSCTSRTDX
0e2b0dc3 b20905b5 STDXSRULSTSST
0e2b0dc3 b327ad61 DLRCLTUCULUUU
0e2b0dc3 b511ce72 SCXDCTDLRRDDT
0e2b0dc3 b55b57d4 STUDSDXCDDRCR
0e2b0dc3 b5e9a4b6 TLCUTXUUUTRLR
0e2b0dc3 b7342312 LTTSCDUCSURXL
0e2b0dc3 bb7b92b6 DLCCSRCRRDXCC
0e2b0dc3 bbb11c9d SSUXTXDURLXSX
0e2b0dc3 bfa8fdf1 CSCXTDTSCXLDR
0e2b0dc3 c10a3946 RRLSCULXLSDLR
0e2b0dc3 c1b66105 LXXUSTCCUSCLX
17b941b1 3e992b97 LSTUD
17b941b1 8dacfab4 XDXTDCCDLX
17b941b1 1f7afc52 TTTLXSTLRXLU
17b941b1 49b055d0 UDLSUURXUTCD
17b941b1 4aa79d77 RRTXSLLXCSLR
17b941b1 529df2d1 LXCLUDRSRTTC
17b941b1 5c8eaa92 XRSXLRXXRUXX
17b941b1 6b8d8927 SDUDLLRDXSSR
17b941b1 798f0890 LTLXLCSTLCDR
17b941b1 7ad1a47c DXXRXDRULCST
17b941b1 87a1b7c8 USLLUCULSSSX
17b941b1 9f4c9e1c LRUTXTCSXRDC
17b941b1 b1e138de XRCRSXSCTSRU
17b941b1 cada51ac TRDXXCUULUXL
17b941b1 d2d33d7a LRLURUXTRUXU
17b941b1 f1fe141f LSLRTRCCLCTS
17b941b1 fc085463 SSRSLDDUTLSC
17b941b1 014ad118 LDDUDTXLDLDXU
17b941b1 01b00c4e URDCULUXSSTLX
17b941b1 0650df24 SDCTTUXUCLUCR
17b941b1 07e08069 TSULSSDCDCRDT
17b941b1 0ae63549 RRTCSXLULTCSL
17b941b1 0b1b82f6 LTTRTSXULLUXX
17b941b1 0ba463c8 TCCDCCXLCSLLD
17b941b1 0c3212d4 CRSCSSCXRRTXL
17b941b1 0c55f81b LSDXSUDDSDRTR
17b941b1 0cb63912 RCTCTCTSRUTUD
17b941b1 128df217 SUSCSXRXXCCCS
17b941b1 178c4e29 RLLTCUXXURUCS
17b941b1 17ebe9ce DTTUSSDLTTTCX
17b941b1 1bf81c76 TDXDLUCRUTXCL
17b941b1 1e64ffa0 LXLUTUUUXCSRD
17b941b1 1f00c5aa LXLXLRCUTUTTL
17b941b1 1fb8265a TTUUTRDXTSCXU
17b941b1 213f69a8 XURLXSCXTXLTU
17b941b1 24ad108a DLLRTRRUUDLUS
17b941b1 25cc6d9f UXRRTDRSSCSLT
17b941b1 25fab6bf LDDUUSRXDCRLD
17b941b1 264b12a8 STXSRRCSSTSUS
17b941b1 27995620 SXURSTDTULLUU
17b941b1 27bb0ff8 LDSXCUCCSUUSS
17b941b1 2af15e85 SLUSRDDLXLXCU
17b941b1 328be9b8 LTLUSLTXRXDTX
17b941b1 3508cba7 DLSUUDTDTTUUS
17b941b1 35c47f37 ULULXXCRTLUSS
17b941b1 36619432 CSLCSRCLUCRDL
17b941b1 37d7f6d9 XDDXSLDSXDTXX
17b941b1 388e5a54 STUTURLSDSTXU
17b941b1 3ae2dbc6 XDDLUSSCRCRTX
17b941b1 3b80cb0a USRTUXDRCUTCC
17b941b1 3d72fb31 XSCUULCDRDDTS
17b941b1 3f351e5c CRCDCUDTTUURC
17b941b1 49155e8b SLXTXLDTUSUTD
17b941b1 4a0ed768 RUDTLDCCDTTCX
17b941b1 5211f201 DCDSDLUXDLXDT
17b941b1 5419eb7f SCCDTRTDCSCDL
17b941b1 56c72a16 SUXSSUUCTLXCR
17b941b1 59f91f54 DRDCSDSXUSRXD
17b941b1 5b6d8451 DTCXTXDXCSTLT
17b941b1 6210e1fc LXDCSTRLDLSSD
17b941b1 62987822 DLDLXCTRTLTLX
17b941b1 64b35a89 CTCDTTXSCLTDL
17b941b1 6561641f DCXCRTSRXTLLD
17b941b1 6ff5a8c2 TUDTULLXLUTUL
17b941b1 7123ab3d CDLSUDCDLRCRL
17b941b1 72663afd CSDCDCSRCDRUL
17b941b1 74debf87 UULSSXCURRTCC
17b941b1 78f251df RLUSSSSXRRDTX
17b941b1 79b54f63 SSCCLTLXCUSXR
17b941b1 7ab5ea18 DLCCDXCSLCRUR
17b941b1 7cc83f2f SXSRLTUUSULSC
17b941b1 7cd436a1 XCXRUCRCCCSSS
17b941b1 80725c19 UCDSDUCCCCSTT
17b941b1 81b7d14b TTUUTLTUTCRSS
17b941b1 87dc7a79 UCSCLDSXTLLXX
17b941b1 882194ff DRUXXRXURCSRD
17b941b1 8c837822 LTRUTUCUSXLUU
17b941b1 8cf6211f CXUSRRULUCLLC
17b941b1 8de8dcd0 SRRTRXSRUTDCC
17b941b1 8f9b14db LXRSTLSSLUDTX
17b941b1 90fb7326 RRUDCDXCSDUDL
17b941b1 92e663e7 XXXSCTLRDDCRT
17b941b1 92f7a791 DXTSUCSCRDTLU
17b941b1 94358136 DLTLULLLRTLLD
17b941b1 947508f8 LUSRXRSRLSSXX
17b941b1 99c2a292 LDTXSRTCUXSTT
17b941b1 9a69034f RUSLSSSTRTSCL
17b941b1 9e3d6a5e XXLTLDXTRDSXL
17b941b1 9e714bfa CTLDDTCCXRRXS
17b941b1 a00d2001 DUUTRDLRXTDRL
17b941b1 ab606f35 TSDTSSUDRXDTC
17b941b1 bb383eda RUULTCURRSXXS
17b941b1 bc570724 DLTXLUUXXRUDL
17b941b1 bf830926 LCRLDLLCRTDDD
17b941b1 bfaea192 LXCUSSDDDSXTS
17b941b1 c1c97fb0 RTSDRTULXRRUU
17b941b1 c2c7521c DTCTTCTLLCLTS
17b941b1 c94ff38d LSSLXUCCTRXST
17b941b1 c9d9f44d XSCUXRDCSSTUD
17b941b1 cb03483e XXRUXTSRLTTSR
209fb3ad 7a7fb31c DCRUST
209fb3ad 03a00a0d CXDDXLRTCLX
209fb3ad 2123c4ba LSSUXRUTXRD
209fb3ad ee42e9b8 XUSTURDRRRL
209fb3ad 35c67ebd RTDCRTTTRRDT
209fb3ad 37547ace DTLXRXTRLTRX
209fb3ad 4388ad23 LDLTTLUULTXD
209fb3ad 58d9aaa5 XLSLSDXUSXRR
209fb3ad 5bafa426 CDDDUSSTDUCC
209fb3ad 7efb7bfd XUCCUDUCXULR
209fb3ad 93f06308 RTUXDRTSSRUS
209fb3ad b0edd03b SXTDUULLCCDR
209fb3ad eb62380d CRLSCRTSCDRU
209fb3ad 042779d4 CSSDXCCSTCURR
209fb3ad 069b11fe RURXSCSCUSTXS
209fb3ad 0951e2a5 ULTDDUDCTTCTD
209fb3ad 0a3129e5 CDCTXURDCSDCD
209fb3ad 0b6fb91d DDLXUUDSDCLCR
209fb3ad 0d60cb57 SRSXTUXLXRDCC
209fb3ad 0f4956f9 RRLUUUCXSRLXC
209fb3ad 10c8909f SRDLRULUTDRXR
209fb3ad 155dca32 UXXRUDCUTURSU
209fb3ad 17d15044 DCDSTDLXSRRST
209fb3ad 1894857b TSLDLUDLLXTTD
209fb3ad 18d1cc6c RLTLCRDXTDSSC
209fb3ad 19551a58 XDDUULDXUXDLL
209fb3ad 19da5d36 SXLSCSSXSXSXR
209fb3ad 1b6170f0 XSUCCXLRCSSUC
209fb3ad 1f218e37 SXTXRCDULLLLT
209fb3ad 219a1817 CXDRXCDSUCSSU
209fb3ad 2207aab4 DTLSDLLUTUSLC
209fb3ad 221fc0b1 SUSSXRLTXDSSU
209fb3ad 23452f86 UXRSCDCXTLRUX
209fb3ad 23da96bc LTUTDCLTSRDRR
209fb3ad 2476f8c9 ULLLLRTCLLLDC
209fb3ad 24871c47 RLLDUUULXUUSL
209fb3ad 268aec56 DSLXXLSDDCTCS
209fb3ad 2710be53 CCRRLRUSSRCTD
209fb3ad 2744b095 TDDRRDTXUDDSU
209fb3ad 2816755f RDTLTCCRCTDCU
209fb3ad 289430d3 DLDTXTTTSLXLR
209fb3ad 2d8d8bbb CXTSXLSRRLXDC
209fb3ad 2d8e038d SLXTDDCXUTRXC
209fb3ad 2eaf91e5 DLXXCLUUSUSCS
209fb3ad 2eeff5ef DDUTUSXLLSSSL
209fb3ad 3332fb84 RDDXRXSCXCUXR
209fb3ad 346ce26e USLSTLRXXXUUR
209fb3ad 35275970 DRUXXTDXUDLUR
209fb3ad 36278c54 CXDSSUUTTURXX
209fb3ad 3a2a6cfb CSCTRDUCTRLUT
209fb3ad 3acded46 XLRSRXULDXLTR
209fb3ad 3b83aef2 RSLDUXUXSLCXC
209fb3ad 3fbe5d96 CTTDTSRRTCUUD
209fb3ad 4023eab4 SSURSLRCTRSLC
209fb3ad 41d287a0 TLTSLDCXUDLCT
209fb3ad 44c3142e DRXDTDXDLTRLS
209fb3ad 477f3e18 CLTXCRCRXSXSL
209fb3ad 47c60217 TRTXLTRCTDTLX
209fb3ad 488868c4 CXSXDLDLDRSUX
209fb3ad 4a9db37a SLLRXCUDCDRLT
209fb3ad 4e0a50d5 CRDDCDXSRDCXR
209fb3ad 542784f7 STTDLRLDCURRS
209fb3ad 58c121dd CDRUSRXDCXXCS
209fb3ad 5b922c32 ULSCRXXLXUXTT
209fb3ad 5c6e58f4 RLSSRTCLUTTLX
209fb3ad 5c95115a XDSRCCXXXCCLU
209fb3ad 5cf64555 UDUUSSDUUTDSU
209fb3ad 614b28e1 TLUXLLDUTCTXT
209fb3ad 63b25aff USSLUTXRSLXSR
209fb3ad 641b74cf USLCDRCRURTDR
209fb3ad 66249c81 STXDLDUXSRTDD
209fb3ad 66e238f8 CSUTRRCUTTTXU
209fb3ad 671f076b CLLDDTXTTSRTR
209fb3ad 70e7ddbf DLURLUSTDSXSS
209fb3ad 751e6e9c DRRLDDTTSLRRX
209fb3ad 7788bcf4 TUXSDRCUDUTTC
209fb3ad 77ddf796 LDLCTSDUUTRDR
209fb3ad 7cbfc42e XRCCTLRSCCDDX
209fb3ad 7e8a223c TCXUXCUSTXSRD
209fb3ad 81b21ba1 LTRLXRXRSTCXU
209fb3ad 8224985a DXTRTXUDURDLT
209fb3ad 84ae8c75 RXCTSRCSUXCLX
209fb3ad 8691da81 LUCURLXUCXTLR
209fb3ad 86e76a43 RLRCRXDDUDTCC
209fb3ad 8744a0c5 DRRLUSUXCLLLU
209fb3ad 88838542 LXSTRCXSUCSDD
209fb3ad 89f3473c TXUSUTCLTCDDX
209fb3ad 8afbaf95 DUTDLSSRTXTDL
209fb3ad 8d10319b CULLSDXTDDSUL
209fb3ad 8fafb00c LUCUXCRTRCLRC
209fb3ad 8fcf46ba TUDRSLXCXSLTR
209fb3ad 90a2de3d SSTTUURUCUSTT
209fb3ad 94672f0e TXRUXTXTCLDUD
209fb3ad 948ee8a9 XCXLSLXSDSLCL
209fb3ad 94dec0e5 RXCRDSLLXCURS
209fb3ad 953c1c7b UTTDTLDRDTDSL
209fb3ad 9714c1a2 CTLDDCSUDSLTC
209fb3ad 9af3255b UXRXULRDXLUTL
209fb3ad 9cf345ba TRTLDXSSUXTTD
209fb3ad 9d16ae6f RLCCCLSUUTDXU
2ab86343 e94e5fa1 CLURCLURXCLURCLUR
2b85a8df 87f41ab8 DUSCULUX
2b85a8df 790b861f TRCLCXXTCU
2b85a8df 0a906299 DCCRUSCCRCS
2b85a8df 08fd16d8 TLSTDUSXCTSS
2b85a8df 12256d86 RTDRDRLXXTRC
2b85a8df 15226725 STRUCSDLTXTU
2b85a8df 38806b4c XSXSUXSLCRSU
2b85a8df 3a066ec5 DTDSTDRDXTST
2b85a8df 3d9d5f64 SUDCXRCTCDXR
2b85a8df 413da4a7 LLXSSRXUDCSS
2b85a8df 58ee4baf XXSLCLSRLRCR
2b85a8df 6c934b3e SXTSRLXRXDRX
2b85a8df 876d902c SSRLSUULRCDS
2b85a8df 8839e368 CUXSUTUCRRTL
2b85a8df cac3611c XUUTRLLDRUXD
2b85a8df cb896470 STLRLSUXRTUL
2b85a8df cfbbe8ff SCTTCLTCLUUX
2b85a8df dad0eb9f TSCRLCCLCLUR
2b85a8df dc4305ee RUUDRRDSTCRT
2b85a8df e11fba2a ULLTSSTLUXCX
2b85a8df e5617ca0 DXUXCRLTCLLC
2b85a8df e9c9cb9d DRXLRXTCXDXD
2b85a8df f2d15e00 RTDDCXRSCDTL
2b85a8df f5307965 URSDDDRTDDUU
2b85a8df fe92b55b TSTURCUSLCUS
2b85a8df 00a77a56 LRSSXDXSTTCTU
2b85a8df 018809f4 UURRTSRLLSUTT
2b85a8df 03251156 LULSXXXTRTSRR
2b85a8df 036f017b DTSCCRDDURDRU
2b85a8df 082bca24 TXCLXTLCUSLUR
2b85a8df 09e32a3d CCURDRXRLRDUC
2b85a8df 0bdf5ab9 LULLCXLUTRTXT
2b85a8df 0c3b9666 RCDDSLCXCULDU
2b85a8df 0ff8adaa UDLRRULDXLCRT
2b85a8df 1105502a RRDXRRDLDSLUC
2b85a8df 115c0c71 UUTSRLDLTTSXS
2b85a8df 1568285e XDLUULRXCTUSL
2b85a8df 19acc109 LLTDDUXRTLCRT
2b85a8df 1b039035 TUDCLURDURTRC
2b85a8df 1c7dc610 CRDDXUTCUCDTX
2b85a8df 22943818 CSCTXXUSDSLDR
2b85a8df 22a3f04b RTLTULTDXDCLS
2b85a8df 23528181 UCUTTSRTRRTUR
2b85a8df 24695aaf LXCXCXDRRCDDC
2b85a8df 25d28b2b DTXLCCTXDCCDC
2b85a8df 2744e016 TRRTRCXCLSXRS
2b85a8df 280d538e CURTLCTCTDCXU
2b85a8df 2b9895cb TCLUUDUDRRTCU
2b85a8df 2de7c8f1 TLRSLCULTTRUR
2b85a8df 2e4a1c39 LCTTSXRSSSCXR
2b85a8df 31830a1b TURCUDTRSRLTS
2b85a8df 335a250f RDXCTCRCRXUUX
2b85a8df 360098df CLRXCCXDXURUR
2b85a8df 375e3d07 LTTDRXRDRUTCX
2b85a8df 37a622de XXTXLLSSCSLUT
2b85a8df 385f452f TCRLDTSXDRLTR
2b85a8df 38b6e072 ULRDXRLSXTULT
2b85a8df 39e08793 LUCUUUTSCCSXD
2b85a8df 3eac465c UXDCXTXLTCSDT
2b85a8df 3f1085b8 LXUUSRUTLXXSX
2b85a8df 400790bc DXRDLLDDXRTTT
2b85a8df 4135f930 CCXSXSXRULTTT
2b85a8df 447aa81d XRCXXSLUSLTLL
2b85a8df 484a4e74 DTXUDRRDXRRSU
2b85a8df 48ef4aa6 URRXUXSCURCLD
2b85a8df 4abab991 LCXTDDCTLSLCL
2b85a8df 4e2ed489 CLRTCUCTXUTDL
2b85a8df 4ed5232e RLCXCSLUUCSDD
2b85a8df 4f6ebd25 SURURSXSCDRDU
2b85a8df 51918e08 LSUTLCSLUTUCD
2b85a8df 521d6b42 UTTXTXDXTDLST
2b85a8df 53e931df UXRCUTCSCLCUT
2b85a8df 54f6747e USRXRLDXUXLLX
2b85a8df 55b229a9 RSUCTTXTDCXCU
2b85a8df 5b897e55 LSUUUCDUSXLUS
2b85a8df 5e91f1c9 TRXUDXUTCSUSL
2b85a8df 600c6e63 TUSTRLDTTXUSC
2b85a8df 62bb5246 DRTRXRSTRUXRX
2b85a8df 633259ab UCCSTXRSSDCCD
2b85a8df 63ada53c TCSUTXXUCUSSL
2b85a8df 64da5f98 LRSXSLUXDLSCL
2b85a8df 6588a40b LTTCSUSCTRLDC
2b85a8df 685c810e DCCTCRTSLUDTU
2b85a8df 68a6cc5f LUTLTRTCDRDUT
2b85a8df 6a6afecf TSSXSCRDCCUST
2b85a8df 6aba8ca5 UCLCSSCDXXSSD
2b85a8df 6cab64d2 TSSRRTLXLRSTL
2b85a8df 6e6911ec SSUSULLSRSLRT
2b85a8df 6f2d3509 LTDXCDTSSDTLU
2b85a8df 72bac1b7 DLSRCLTUXDUUS
2b85a8df 777e2cd4 LSSUURXSDDTUT
2b85a8df 78938bf3 RCRUUDUCDSCCL
2b85a8df 793756d3 ULUXUDRSXRCDT
2b85a8df 7ab9f9ac CDXSCDUXLDLXR
2b85a8df 7d46f1f2 TXXDLCTDSCSDL
2b85a8df 7e05a02e DXSSDTDSTXRUC
2b85a8df 802cbc0d TDUXRSUXXDLRU
2b85a8df 823ec255 XSLXRTCLRTSLS
2b85a8df 82987fa2 XSLUXTLLLCXUC
2b85a8df 830bd0a5 RUDTLDUXLLSDD
317f1f9d 553dc48b SCRTCRCTRSRUULUS
31e3487b c2012967 CRULTCRUD
31e3487b d873b6f4 DCSCUDLLDDX
31e3487b ee19693e CDTTRLLUXDX
31e3487b 040369df TRRRSCXXDUUR
31e3487b 07a2bfc9 CSSRDLUUXXXX
31e3487b 13ec7352 DUTRUDDCUXCS
31e3487b 15b3fe25 TSCLCTXLLLUX
31e3487b 391b66fc DUCDCRXSDLUL
31e3487b 4270309a TURCRXDCRDTX
31e3487b 4939cf83 UUSTSXRRCLRL
31e3487b 493f9ebf SXLRRDXDTXCS
31e3487b 5b78be66 SRSTSSLRDSLS
31e3487b 6c28446b UDULSULDUXRU
31e3487b 71e7681a DRSSDDRUTDTS
31e3487b 8750f8f3 CDRDUXCUTSLU
31e3487b b0d7d035 USDLLDRSLUCX
31e3487b b5606511 UUUCDDDDRDRL
31e3487b b851dd79 TDXUCRUXUUXU
31e3487b cd877f5d LLDRRTRSSRCL
31e3487b d3668ca9 LURDUURCRUSD
31e3487b dc85e849 CCDTXCTXCTUR
31e3487b f8d416ef CDLRDCXCSRDR
31e3487b fe5954d9 TDCUDRUUXSUD
31e3487b 03091d68 SUDLDCUTRCRCU
31e3487b 042abe6a RRUSRTCTTRSDX
31e3487b 044109a1 RLDCDTTTDLXLU
31e3487b 078f54a2 TTRDUTTDRCLSX
31e3487b 0cbc2337 DXCSXTRDXCURX
31e3487b 20a0edf0 XRDTCCRRTRRUU
31e3487b 210f8b7d LXRXDRDDSDRRS
31e3487b 22419c07 TLRLCULDCDSXT
31e3487b 2296ff53 RUXLLLUDDDLDC
31e3487b 274c4600 SRDLCTSDLXUDT
31e3487b 2e4396d2 RTUUCCUUXTSSR
31e3487b 2f46da09 RTCURLDCXXTCL
31e3487b 2f67bf3d UTXCCUUTSLCCC
31e3487b 304878c2 XLCDLSRUXCCLC
31e3487b 3223c16a DRLDSUSDTDSXR
31e3487b 355324c5 DSTUTUTCUSXUX
31e3487b 36110084 RCSDTRRXSXLXU
31e3487b 374e14d7 RCDTRLCSSXXDX
31e3487b 37b1a342 TDCUUTCTSTXSU
31e3487b 3c0416c3 SUXSTXTTSCDRL
31e3487b 3d7917e0 XXXSSDXSCDURC
31e3487b 3dd21b5f XUUXLXSCTTTCU
31e3487b 3df757fb LDCRXUXTXTXRX
31e3487b 3f416aa2 RSDSDDCSRLDUT
31e3487b 3f707822 SLXDCLTRCSLXT
31e3487b 4193dfff LCXCUTUXRLXTR
31e3487b 4273e73f XCRTLDDSXSCXC
31e3487b 46c88ded TXLLRLLXCUUUT
31e3487b 46e8cf93 STXRRSLXTSUTU
31e3487b 4d80c562 XTTXXUDXXTCXD
31e3487b 4f334def LCLUULXCLXXCD
31e3487b 500c63ed SLDTUCUXUUDXT
31e3487b 504f4cd8 RUXDDLUSCXRCU
31e3487b 55a1c550 SCCDUULXSTSCL
31e3487b 56a9ebbf UCRDXCUDSSDDS
31e3487b 58d4e165 RLSURURUCXRTD
31e3487b 59594dcd LLCXUCCXSTCSD
31e3487b 5b6767ae LXDTUSLUDSDRT
31e3487b 5b763eb1 UUDXCCSRDUTDX
31e3487b 5c965a3f RUCXDRUXLSCUR
31e3487b 5d72f47c XLDRLURSSDXLU
31e3487b 609b1290 TRUXDSTRDXTRS
31e3487b 6402ecba CSCDLTXDXUUCC
31e3487b 645e2fa8 UCUURUTLSLTDS
31e3487b 64a8d6ea DCUSLSCSSCSDC
31e3487b 67db8e28 XDCUUCUUUDXCS
31e3487b 67eb1635 USRRLULRLRDXD
31e3487b 72cf02c0 TTUXTTCDSXLTS
31e3487b 730c15bd CDLTTRDLTDRSS
31e3487b 7516855d CRLXUDRSSXTSC
31e3487b 77ac6aab RDDUCSXRXTSUT
31e3487b 7bd62a36 LULSCCXUTSRUD
31e3487b 7dc8664a DXSLXDUUCCUUX
31e3487b 80519c35 CSRCLDTSRSRUR
31e3487b 81c6a18d DDSUDSUDTTXRC
31e3487b 86172f97 TSTDCUSXTRCUU
31e3487b 89247d7c DLRULRURCXDLD
31e3487b 897e4d91 XTRUUURXRDURS
31e3487b 8e211ba1 TLULTLLSDTSXU
31e3487b 90abff54 LRDCCSTTTTTXS
31e3487b 92663466 USXXTXLXXTSSD
31e3487b 9820b980 LTRXCSXLCCLCS
31e3487b 9951770a RSDDDDRUURSCR
31e3487b 9b86045d CTSUCXCDDLLCL
31e3487b a10933f5 TLXCUTLDULRUT
31e3487b a7223b79 DUSRDCLXRRCUC
31e3487b a786eeeb STLDXDRTDRCST
31e3487b aa8c56e6 TDLSXDTLDRLCC
31e3487b ab565fac CRUCSUUTRDSUX
31e3487b ac665e4f DSLTXCUTXTTCC
31e3487b b1af388b SSLSRDLRTULSD
31e3487b b55e839a RRCUSULRLLDDS
31e3487b b7dab888 SRDDSUSCLCTDC
31e3487b ba9a2094 RTRLSULLCCDLC
31e3487b bbb93d7e CSCCRULTRCUCD
31e3487b be66b9c3 SSSUXSLLLDXLL
31e3487b bf897900 CUUTCRTCXDTTS
33523575 34ab2931 XXXXLXXXXLXXXXL
39bedf78 acae70a1 STRUDULSTRUDULCULT
39bedf78 acae70a1 TSRSTCLRRCRDDRRLCTSUD
45a930ef c2fb36b7 RUST
45a930ef 136177fc LXDXULLXDCC
45a930ef dc2253f1 SLXLCDDRLCT
45a930ef 005019f2 TSCULTDTDLTU
45a930ef 0c1726d5 DDXUXTDCCDLR
45a930ef 359cc55c DCLRUCTLDDRU
45a930ef 4903af50 SURXLLCSLDRR
45a930ef 528b7aaa LTSCRCLDLUUU
45a930ef 5b3587f2 DTLCRDLLXDDT
45a930ef 7235fa8c DLCTRLRCTRSU
45a930ef 94ef1661 CLUULXDTDDDU
45a930ef b57eed08 UUDSRTRSCCRL
45a930ef b79b6c71 RDXCUXCTSCSR
45a930ef bca9796f UUSCLSXRXXUU
45a930ef cbfaaf78 DRTUSCUXRTCX
45a930ef db0695e2 UTUSLCDLTUUU
45a930ef ee4bfc3b LLUSXLDUSUSC
45a930ef f3c45944 TCXXDULLULLX
45a930ef 003bd0fc RXSRSSSSTCLRS
45a930ef 0424966b DRLSLDXLDTXCR
45a930ef 04f45aa7 DTTLDRSLSXULR
45a930ef 0b07ef48 LRTTUTXLRXTUR
45a930ef 0b832d6f RUUCUDURUDCDC
45a930ef 0d2f2cc6 LUTRRUDSUUCRC
45a930ef 0e8cd0ae RTTDXCXTRUTRU
45a930ef 121b22cb RRLRUSULDSDUT
45a930ef 121dfaaf URSTUCCTTLCDX
45a930ef 121f29f4 TLDTSTLRTCSXR
45a930ef 1445fe3d RTRSDRURUUDTL
45a930ef 15200f3a ULSRSDCLCLRCX
45a930ef 1696cb01 CXXXDRXDLCDRS
45a930ef 17d84c33 XRUCSUTTXSRXC
45a930ef 184f1513 CTXRXULRRDRSR
45a930ef 1bef7818 XCDLDSDRURDSS
45a930ef 1e23d048 TTURRXDLTXTDL
45a930ef 20d7cff2 URSRCCRXLDCXL
45a930ef 21c02b63 DSCSXDUXCSRUD
45a930ef 223e48c2 TTTTSLCUUULSX
45a930ef 23131a26 CRSSDLLTSTSTL
45a930ef 2320c046 CLCSRRDUDSUSR
45a930ef 23629e5d UUUXRDCLTCLDU
45a930ef 28680cef UDSUCRTURXLLD
45a930ef 2b408973 USLDDCCTDTTLS
45a930ef 2e065f10 XCRDLRLRUCTTX
45a930ef 2e78e38f LSLUUSXXUXUTU
45a930ef 2effe85b SULRULLCCLCLS
45a930ef 309913a6 XRTTRCCXXUSRX
45a930ef 340417dc SCXSUSRUXXULC
45a930ef 36c8e477 XCXRTUDRCULTL
45a930ef 390e740b DUUTDXRURXTTC
45a930ef 3930639b RLDUURDSDXTTT
45a930ef 39570705 CUCLULUXRCCLX
45a930ef 3b2756f4 LLXCXLDUSDXXS
45a930ef 3be448b6 SDLXDXCCLDTCD
45a930ef 3d190527 CXLXTDDXTCRDS
45a930ef 3e1c8fe9 TXXTSRSSSSUUD
45a930ef 3eaca940 DTTRCUUDRLTDX
45a930ef 417e796d RUTTDSXXCCXSS
45a930ef 41828ea4 TCRSLSLURTSCD
45a930ef 422ce139 DLXCDTTTXCTTC
45a930ef 4572bc9f DDSUSCTTLSCXT
45a930ef 47135d32 LUSTLRDDRLLTL
45a930ef 49ecc989 CRCSRRLCDDRRT
45a930ef 4c818b12 RDCUSTSXUDDTC
45a930ef 4da5f9cb UTSXRRUDRTCTR
45a930ef 4def1619 RUXSUCXRSXTUD
45a930ef 50f77a96 DTTDXSTSCSTUX
45a930ef 51bb1000 ULRDDTDUXURRC
45a930ef 52f5a848 TRRLRSXUSSXDS
45a930ef 58d07d37 XRRSLRXXDTRST
45a930ef 59c8668c RCSSTUXXDRRUR
45a930ef 5ed97794 XCXXUTXCLSXXL
45a930ef 643aa99e XSRDCCTTDCRDL
45a930ef 65e67dad RUUXLSXLTSDXU
45a930ef 67a59c73 LRCTLRUXTUXSU
45a930ef 6a179094 CLUXCUTSLDUXT
45a930ef 6e3dd7ef XSLCSUUDLXDXS
45a930ef 6e839be7 XUTRLXUUTLXLR
45a930ef 70b07848 RLSCRXTXSRCSC
45a930ef 7142df66 CTLCXRTLUXSSD
45a930ef 786c37bb TXLLTDSRXXDDT
45a930ef 7a187955 UUUCCSSUURLRU
45a930ef 7a5c3245 CDXTRUSCRUCXS
45a930ef 7a6d9711 DXLRSUXCSLLUR
45a930ef 7f3fb3a9 XSDRLSCTDLSUL
45a930ef 84bb5abe UXSLXSXUDLTCT
45a930ef 8770b75f SCDDXXDXSULXU
45a930ef 87a3f53a RTCDUTRRUDXUL
45a930ef 88142a30 TDSUDDCRCCRXS
45a930ef 8d8b2448 STLCCXLCDDTXL
45a930ef 93931dfd UDDRDDTSXXXXL
45a930ef 94a623d5 DCCRTTSTDLLSD
45a930ef 97a41e69 DDTUXDLTRURXL
45a930ef 99c6b232 STTDLCLLTSLCS
45a930ef 9a1d447f DUTURRCCTSRCD
45a930ef 9cc68410 XCTCRXTDXXLLT
45a930ef 9dae5180 CXCUDCDRTDDUR
45a930ef 9e61f167 SRCXTUDLTSULC
45a930ef 9eee491f UUSSLTUCCUXUS
45a930ef 9fa375a1 RURTSXUXSDLDT
46f27698 3ea5b5f0 XTCCULTS
46f27698 0a2e1dd7 LSTSLRLRTXL
46f27698 2493545e CUURTSRXXLC
46f27698 2a0b6a9a CLCSSLUCRRU
46f27698 33fd6613 CCCCLDXSUCR
46f27698 f628c5ab RDRCCRDDXDC
46f27698 03f82a3f LRUUTUDTTCDS
46f27698 0bd7af52 LLRRUUCSRRDC
46f27698 33b6f3c3 SUTUXLSRLCDD
46f27698 34ae5ae0 TSUCTDUUSUCS
46f27698 480d46cd XLUULDRRTTUT
46f27698 5521c4e6 LURCUUSTCSXT
46f27698 56b2385e CCTSUXRCRSRR
46f27698 6600ab5e TULSCXUXCDTR
46f27698 6f4e7f37 CCUXRCDCUURR
46f27698 6f68a6a1 DTLTLCDRCSXL
46f27698 90592619 RCULDSSTUCXT
46f27698 9c061d92 RUSDSUSRRLSL
46f27698 cd03aa31 DDTDDLCXXUCC
46f27698 f1138d3b UCUSRTUUDLCR
46f27698 033faae1 LCTCRSCLCUUUL
46f27698 0460f829 RLTTSXLLXXCUU
46f27698 074c832e RTRDDCTLURTTX
46f27698 07ec0239 CXSUTRDCRXRSD
46f27698 095a5715 UUCXLTXSXSTSX
46f27698 0c7eb99e TRUTCRXDXSSLU
46f27698 0ce81ea1 DCSCRXSXUDXRC
46f27698 0d2bfd78 CLCURSULCSCSD
46f27698 0e780d45 XSCDLUUULDCRS
46f27698 0eb83705 XUXCRXCDSCLUX
46f27698 0f20aa87 XUURLUXUCDXTD
46f27698 114e680b UTTTRCTSXXCDC
46f27698 134b0a51 LLTLLXXRLXUUX
46f27698 1459fe25 TXXTDXLRCXXTS
46f27698 150cacb2 CSCDCLDTLXLTC
46f27698 16b7a26b DTCCXUSSDSLLT
46f27698 18e65b3a LTCSXSCUCLTTT
46f27698 1a5fdcb4 XULRLTCSDRRLL
46f27698 1b4aa6c8 URXTXLLXSUTCU
46f27698 1bac1975 TULXDDXCSRSLX
46f27698 1d817bd6 USRCSDCDDTURU
46f27698 203e6484 CUXTDLTRLSTUS
46f27698 20a3c0fe TDRLXDRTTCCSC
46f27698 212f283a SDRUCXUDXRCLX
46f27698 221e4269 UTLTSCLTUCURR
46f27698 230d3a03 XDSUCCSLRLLUC
46f27698 24066f60 XTDDCTUDCTCRX
46f27698 2463a247 RUDCCRTXLTTRD
46f27698 252d57d1 LLUUTDLSDUUSX
46f27698 265777b1 RLTLRTSLULRDR
46f27698 27107f62 URRXCUSCTLXXX
46f27698 2b239d3c TRLLXTCDSXLLR
46f27698 2c3df680 LRTLUTCXLUSLX
46f27698 2e5a2256 DRUUURTLXRTXL
46f27698 31f42b53 TUXLDUTCSSSSD
46f27698 335d6189 TSLLRLSUDTXRX
46f27698 3894606f UTUXTLLTXLDTL
46f27698 3a14bbda LCRXDUDSURSLU
46f27698 3a9c41c9 XDSXTTDTLDSXR
46f27698 3d4c7e03 DUDLUTCDLRDDX
46f27698 3e4b1763 SSLRXCXUCDTTX
46f27698 4061fa8c TCCSSSSXCCRDC
46f27698 40b5f192 XCDCCDLUDLCRC
46f27698 43b815be DXTTDRXTDRLRS
46f27698 43e6d481 STLXCDLTXLURS
46f27698 4b7e88f9 UDXRDRXRUCSCD
46f27698 4bc2c0f4 CCDUCRRTLLRDX
46f27698 4c834c66 CCDXLXULCTCRC
46f27698 4cc701ea DCLCURCSSRXCX
46f27698 4f8913c3 LDLUCUCLXXTXD
46f27698 50700419 CLCXRCLXTTXRR
46f27698 51eb1e2d LRLRURLLSTRCC
46f27698 52088238 SXSTLRLTSCUUR
46f27698 548b5961 TCXSSRRSXTDDC
46f27698 561b6fbd SDTSRXLLDDRDR
46f27698 5740db00 CSUXLXDRUCRSS
46f27698 57b9a8e6 RSUDXCLLRRCCU
46f27698 585eaaed DUSDCTCCLXUDT
46f27698 5a2585b6 CRTDCDRUSRRXT
46f27698 5a414430 SLLXRDLULDLSS
46f27698 5c13c768 CUDUCLTDLRRCS
46f27698 5cc9e36b RLRCSUTTLCDSX
46f27698 61d4a5bc CLSRRCLCXCDDT
46f27698 62868f9b DUCDLTDRTLDCC
46f27698 62999476 ULRDDLCRLDLTL
46f27698 6d11f7ef RDSDRXSUDDRLL
46f27698 6f93112a UUSRCLSRTRCSS
46f27698 70902da3 XTXTLCXLULCDX
46f27698 72ae0004 XTDXRCRLCRCXX
46f27698 7423545b XDXUTLLTXLDDC
46f27698 74d2fef2 UUUSCXCDUXUST
46f27698 7870504a XTUDSUDLLLCRX
46f27698 7b8bde0a URDLRXUSCDXDD
46f27698 7d279718 DTSRCRDULDDXU
46f27698 7f08c488 RTXTXUUUUURXT
46f27698 7f1add1c TLDCXCTRRURUS
46f27698 84854b87 XDSCDSRRCLXRT
46f27698 8a95e747 LDSXDLUTSXSDD
46f27698 8b7423ed XRCCUCXDUDLUC
46f27698 8e02ad2f SSXSRDSXSCCLT
522a8b6c 6ce43e34 RSTUD
522a8b6c 02e350d2 UUTRLXRSSSXL
522a8b6c 2f432bcf LRTDTXUTURCD
522a8b6c 39b45d85 TCDTSLXSTCXD
522a8b6c 4493819b XDXCSTXDXLXD
522a8b6c 4f68e586 SXSSRSTCRUDU
522a8b6c 50123eb7 UUSUURLXSSLU
522a8b6c 5c454664 RUTUSRXUXDUC
522a8b6c 7d5a8ebf CLSCLTLUXCTT
522a8b6c 7fd24d4f SLLRDURTRXXU
522a8b6c 85f5fb1b DTRTDXXTUXXX
522a8b6c 881f7730 TSURCCCTSRCT
522a8b6c 97ced4a7 XURLCRRLTXTR
522a8b6c 982de050 LDTTUCDURSRU
522a8b6c b4a47ad5 CSTSRRUSLSUD
522a8b6c c150c074 RRXRUCCLTUCR
522a8b6c ca82e76d ULUXTSRSSSCD
522a8b6c cae8c40d UCCXTSCXXRTD
522a8b6c da77cc19 SRSDRXRSSRCX
522a8b6c ea3d28a0 TLTDTRUCLTSC
522a8b6c ec7384e4 DLURSDTLXSCT
522a8b6c f4885ce3 RRUCCLUXTCUU
522a8b6c f5e9507a LRCLXSXLXRXD
522a8b6c 00623b8e DDDDCTTTDDSDC
522a8b6c 03cbcb08 RDLDCLDTXSXXX
522a8b6c 041ce5e1 DRSCXTTXSTRDT
522a8b6c 0537267b SLCLUURCDCDCL
522a8b6c 0582d3a1 DCDDSCRURXXDU
522a8b6c 0705e46a RRLXUCXLTUURX
522a8b6c 0832b585 UUUDXSUDTRXCS
522a8b6c 0c973861 RUCUXLCTULLCL
522a8b6c 0d340d99 RCLRDRDRTDUST
522a8b6c 0e8f4748 UDCUSDLRXCLRD
522a8b6c 12dda76e RXLDCRLTDXXLC
522a8b6c 13df80d9 RRUXLXRCLUXLD
522a8b6c 13dfcfdf XLSXXRCCDLCUD
522a8b6c 16f485b3 UTDTLXRCSXXRR
522a8b6c 170c8a04 DXTLLXTSDTCSS
522a8b6c 1a81256c SCSSURUXRTSSU
522a8b6c 1f5b98f0 XSUCCSSUDXRCC
522a8b6c 1f94abb4 SUUDUULDRXDUU
522a8b6c 21c04ddc LCRCRTDTRLRUL
522a8b6c 233d155e UXLURTTLUUCDX
522a8b6c 269f11ce RUTDDUDLRDRDU
522a8b6c 26a018c2 CTDDRSTRTRTLU
522a8b6c 270c7204 TUTXULUUSTLST
522a8b6c 27691dae USDLXCLCCUXTU
522a8b6c 2bae5df1 LDDDXTRSDXXDX
522a8b6c 2bce3dac CCRLXSSXCSTUT
522a8b6c 2c18849c SUDSDDRLXTSSS
522a8b6c 2c4d2c62 CTCUDRDLTRLRL
522a8b6c 2e5cb8a4 XUXDLLSCSSCLT
522a8b6c 36a2309e UUDDSRDTLRSTU
522a8b6c 3b4f3af5 CDRRXUXRULTDT
522a8b6c 3b62d462 TCCXUTRDCDTST
522a8b6c 3ba5508a LXRTSCLLDSTDX
522a8b6c 3c31e01c UXDRSLTXCXDXR
522a8b6c 3d286ae0 CSDULCCCUXTLL
522a8b6c 3d7122ab CDSCSUDULUCXT
522a8b6c 3fb82a31 CCLLLUTUUULUU
522a8b6c 3fea0162 USDULSRCXCUCD
522a8b6c 4045197c TUTUCUDLTCSXX
522a8b6c 41f7feea LUCUSLSCCTTCS
522a8b6c 435f2272 TXRLSLRUXDRLR
522a8b6c 45c647bf XUXRLUDUTLDXT
522a8b6c 4a4c0439 CTCCLXLDRUUSC
522a8b6c 4b90d529 XDXSSUCDTTRDU
522a8b6c 4cdfd5e2 SCSSSUSXTDTUT
522a8b6c 4d46ff80 LUSRTRXDTDXLD
522a8b6c 4dcb04a6 TTRCLDCXDXXLT
522a8b6c 4df8b93d SXSCLCCSLUSCR
522a8b6c 510460d5 CTTDSTSSSLUCS
522a8b6c 52311e20 CRLCXRRRRULTC
522a8b6c 52afa7e6 RTXLLTSSLSRSX
522a8b6c 533a4b44 DLTXXRCSTDLCD
522a8b6c 534c4f38 CSXXRLRXCTUXR
522a8b6c 5445e343 DUXTCLSTXRSTR
522a8b6c 55b75bd3 DXUTTSLDXCSRS
522a8b6c 5851b224 XTLDTUDLCDCXL
522a8b6c 5945ae4c UURRSLUCUTUXC
522a8b6c 5971094f SRXLURRRLUSLR
522a8b6c 5a140bb0 DDCDCTDUCDRDL
522a8b6c 5b5a111d XRUSXXSSRRTTX
522a8b6c 5b6d80ec DSSSXLSDSTLRR
522a8b6c 5d564e6b SUTXRTSRSCCSD
522a8b6c 5f32b031 TRTUSUCXCCLLC
522a8b6c 6037d524 LSDUTRRSCRTSD
522a8b6c 61df4cb2 ULLLSUSXDTUUS
522a8b6c 62473619 URXDDLUCDRLDL
522a8b6c 64a658e6 RTRLLTSLUUUUX
522a8b6c 667e6a05 CDTLLTDURUSDL
522a8b6c 6a48214d CCUUSXTTDCXSL
522a8b6c 6c4a00ff RDDXCCSCXSURS
522a8b6c 73461f63 LSLRTCTTCDDDL
522a8b6c 7367a7ed RTTTCLDTDURTD
522a8b6c 7b4f6b5a LUSDCCTDUTXDR
522a8b6c 7d27ea71 SCDXRDDRLSCUS
522a8b6c 7d67ba4b RTDCRCCSDLDUR
522a8b6c 806544ec DCLDXLDXTXURL
522a8b6c 859b4901 XRUTTRSTCRSXD
5b445bb0 ff3ff3eb USTUD
5b445bb0 2c611860 RTLXRDDSSLS
5b445bb0 06a40af7 UUTDDRRTTRSX
5b445bb0 075c3ea7 SXLCCCUXDCDD
5b445bb0 0ca73c3d CURSUCRUXDXC
5b445bb0 4d9f4b09 RLLLUURLDDUX
5b445bb0 5a406164 RTTXCCCCXRRC
5b445bb0 5a8474b2 DUSSXSXULSLC
5b445bb0 6a000dd7 LURCXCTTCSRU
5b445bb0 6f05428a SURSLTDLUXLR
5b445bb0 7e635bc4 TLSUTLLUCRXU
5b445bb0 db8a8e42 RCSRCDLCLSLD
5b445bb0 ede30ac6 RCDDRUUDSURX
5b445bb0 fa9019b2 SLLTRXLCDRDL
5b445bb0 faa88ecc RDCTCSLRTUCS
5b445bb0 faae32e2 DCSXLUTUTLRC
5b445bb0 00e5a2a2 SRSRDXUSLLDCS
5b445bb0 011012ba XXSSTRXSUDCXC
5b445bb0 030e5309 SLSLDSCTTDCXT
5b445bb0 04cfe22a UXRTSDXSUCLRR
5b445bb0 05219884 RRRSLDDDCDCTR
5b445bb0 097cadd5 DTSSLCDLLSTDL
5b445bb0 09a761ee TSLRTXTRXTDDU
5b445bb0 105931e3 ULCSTDSDURTCU
5b445bb0 133628c3 DCCXTXLDCXLRD
5b445bb0 133b85c2 RRRTXCLSSLURS
5b445bb0 15efa8e7 LSDCUSURUXDDD
5b445bb0 16129699 CSLCDCLXUUTLC
5b445bb0 167f49fb UUSXTTCUDSSRS
5b445bb0 1789558c DRDXXSDCTXXRS
5b445bb0 17d1d5ef USTCSUUDDSDCU
5b445bb0 18ef2173 XLTRLCULCUURX
5b445bb0 1b292565 TLSCRCTCDTCUT
5b445bb0 1c1912db RCCRSRLLTCUTL
5b445bb0 1d8ce255 XRRUSLLDLLRCU
5b445bb0 2252b9ed RXTUUUDRRTDDR
5b445bb0 2272da3a UCSRCCXXCCUTL
5b445bb0 245798de UUCRXTXDUSRLC
5b445bb0 2db46bec TDLTXRXDSXLTC
5b445bb0 2ed41947 LDXUUXURRTSSS
5b445bb0 2f4c79ee RDDDRDXRRTRDU
5b445bb0 2fac6817 UTUTCRCSUCDSC
5b445bb0 30c19293 CDRTLSUTCTSSX
5b445bb0 312741ee SXXUSRSRTLRTR
5b445bb0 361abbad SSSXSTSRTDDCR
5b445bb0 37d6f6a5 LURSURDXUTUDU
5b445bb0 3d44debf DXXDUCCXCXCDX
5b445bb0 3dac60c7 RRXDXTCDDTTLR
5b445bb0 40214814 CXUUCSCDRDDCT
5b445bb0 4237586b USDXUXCCDULSL
5b445bb0 42cd09b2 DSUCTDUSXRUXX
5b445bb0 4500e2f9 LSTTDTLUCDXDT
5b445bb0 451ff622 RUSULUUSLSDLU
5b445bb0 46d5660d CUXLXCUTUTURR
5b445bb0 46fde40b TSXLUSUDSSSLC
5b445bb0 492dccc2 SLDTRTLDXRDCT
5b445bb0 4a93aac2 UTSCDCCRSXLDC
5b445bb0 4b1dfd31 LCSCURSLTUXXD
5b445bb0 4de68dcd CRDDCXRLURLUU
5b445bb0 4f0a4181 UDLLURCTDRDCX
5b445bb0 4f62b393 UXSTRLSXTCRRC
5b445bb0 5129d621 LTSXTURLLLSUC
5b445bb0 544bb09c CTTLSUCRLRRUU
5b445bb0 54954b3e LRSUSDXXSDTXT
5b445bb0 54bc0352 CLRUUSTCSRSUS
5b445bb0 556dcf25 CTXDUSDCLURLT
5b445bb0 5864ce33 LULRDSULTDTTL
5b445bb0 5933a0a9 USCLXCSTTSLUC
5b445bb0 5a5a2c66 XLULDXSLTDTXR
5b445bb0 5e39fdeb DDCULDUCLTRCC
5b445bb0 60b792d6 TULCLUSSRLLUT
5b445bb0 63a1e1ae XUCRSLLCSXURT
5b445bb0 63a5619c XUXDTUDTTLCLD
5b445bb0 64c1fc43 SLSCDSUXRXLCD
5b445bb0 694f09fa RDDDXLXRXTTDR
5b445bb0 6c0b1aa6 DDULTDDDXSTDL
5b445bb0 6d7c4c09 DXLSTUDCXLCSR
5b445bb0 70d08945 TDTUCCRURRLDC
5b445bb0 70ed48c0 XXTLUDCTTDUDR
5b445bb0 747ee7a0 SLRCTXSTRDLDS
5b445bb0 74e790f0 CLLCDSDRCCCUX
5b445bb0 7527a362 CSUXDCDLRRUSC
5b445bb0 75fd5516 TUXLSCUUXCRCD
5b445bb0 766ac7f2 SUUTCXSUSULSX
5b445bb0 7bdec93c USRRSULUUTLRR
5b445bb0 7dff02a0 SUUDXLLUUSLUR
5b445bb0 83d4c860 CCCRCSRCCRCUC
5b445bb0 84d202fa DTRTUTXCLDLRT
5b445bb0 852fb901 UURDLUTRCTXRL
5b445bb0 85748823 TSUSSSCTTSLUU
5b445bb0 89ced5cb SSTCTUUSCDURS
5b445bb0 8a78c3b1 USDLUTTLDSSTD
5b445bb0 9073eac6 STLTXXTXSXSRC
5b445bb0 9453ef19 DTTLDLXCSCXLU
5b445bb0 959fb6e8 CRCRSSXURRDRX
5b445bb0 95cba7f3 UDLTCUDCRXLUS
5b445bb0 964a2073 DRXLTDURTLCXL
5b445bb0 96d35dd3 DTXURXDLDSLSD
5b445bb0 989a63c3 LLCDLTSXLDRRR
5b445bb0 9a374c6f UCUTCXSDSRCLX
5df28f1e 20c49738 UUUUXSUUUUXSUUUU
5ee13e0d 83faa46d RULSRUST
5ee13e0d 4f683092 UTCDXLTXRTX
5ee13e0d 77a0b8d2 DCCLCRTSDCS
5ee13e0d 0169da0a DUXRXXTSSDUL
5ee13e0d 0d4c6d80 RUCSXUSSCTTX
5ee13e0d 0e278e7d UDLDXCLLRDCD
5ee13e0d 513f265b CLTRLRDRSLUX
5ee13e0d 624ea447 RRLCSXTSRCTL
5ee13e0d 7bcea596 XRRULTSCCSCS
5ee13e0d 887d93c6 TSRRLDXDXRDS
5ee13e0d 98ea09fb UTLLSCCDLSLR
5ee13e0d 9f5ce3d8 RTDDXSULTUSL
5ee13e0d afcba6f2 XRXURDSLRSUR
5ee13e0d b9b5f3bb DUUXRSXSRXTC
5ee13e0d bbc55158 SRTLSSXXLCSL
5ee13e0d bda4a15e LLLRXDXXTSXS
5ee13e0d beeca56f UCCRSTSXSSDX
5ee13e0d bf57cfb9 RRUXLUTRUDUS
5ee13e0d cdc6d852 LRSSULDLSCRR
5ee13e0d dfa15437 TUTUUDUDUDSL
5ee13e0d 005a5244 CRDRDLTURLLTX
5ee13e0d 00f6ef88 XXSUDXSLDRTXX
5ee13e0d 06d2b773 URXDSUXRRDDXC
5ee13e0d 091de50e DCTDDXLCCSLTT
5ee13e0d 0a429434 TRTCCRRCDDXXX
5ee13e0d 0c89ab3b LLDCCCXCSTUDC
5ee13e0d 0df3e9d3 URRDTRXDXXRUS
5ee13e0d 12a40ddb DXDCUXRRRUSDL
5ee13e0d 13362607 RSCUDUUXCCDRC
5ee13e0d 15a46070 RUCTRTCLRLLLD
5ee13e0d 19049eee RTLUXRUCRTXCC
5ee13e0d 1a8266f5 UURRLDRRURCCD
5ee13e0d 1c58cab5 TSCTTUTSLCCCC
5ee13e0d 1e6c19df SXCSSLSDRTCLC
5ee13e0d 1f4bbb25 XSRSSURRXRCLC
5ee13e0d 21137b6a CLTXLUTLXDRUC
5ee13e0d 22f9177d USXRTLLXTUURL
5ee13e0d 234e4b18 TCTSUTCCSLCSS
5ee13e0d 249a7a51 CXTRLSTTTDDXD
5ee13e0d 2523b314 DRUTCDTSTRRRR
5ee13e0d 2573f3c8 XRSUXDXRTRDRU
5ee13e0d 27fdecb5 TRRCUUTDLXSSC
5ee13e0d 2a5e7151 USDDSTDRSLRXS
5ee13e0d 2c38e534 ULLCXSLCCRXXX
5ee13e0d 2db29b81 TLTCRDSLCUDUU
5ee13e0d 2e0f3aac LLCRSSULCDRLS
5ee13e0d 2ecd262d RLCUDLLTCSUSU
5ee13e0d 2fa014ce STXDXTXSTTLCD
5ee13e0d 306bd2bc UTRLXRTXSRCUX
5ee13e0d 30979ecb TTDUDDTXTSRCX
5ee13e0d 324e380f RDCLXLXCLUSUT
5ee13e0d 33ec69ee RSRSSLSRUUXDX
5ee13e0d 366b22ac URXXSTLUSURRS
5ee13e0d 38151bd7 SSDXDCUSDXDLC
5ee13e0d 38819c10 SLTUCDSDLUTTX
5ee13e0d 39d0baff UXTRLTSDTLTRS
5ee13e0d 413aecc1 UXUCSCDULUDCC
5ee13e0d 413d8f01 LDURTXSLUCSXX
5ee13e0d 4352baf1 LTLXUDTLXLTUX
5ee13e0d 44fc5d37 ULSLLLSSLCLXR
5ee13e0d 48431484 XXXCTRUDLXCUT
5ee13e0d 48c61254 CSCTSRUSLSCUD
5ee13e0d 48f331f9 DSTDLDTUXXCDL
5ee13e0d 48fee6c1 LTDRRLXRCTDRS
5ee13e0d 4a2e0d38 LRSDRSRRCLLUC
5ee13e0d 4ab42229 CXTSSCTRRSULU
5ee13e0d 4c62335a TXTUUTRRDXUST
5ee13e0d 4cfeb16f TXLSRSSCCSSXX
5ee13e0d 4f0bea41 CSXCXCCTSLTTC
5ee13e0d 54ffb856 RRTRSXCCXSDXX
5ee13e0d 5a99470b DUTDXXLUDCSSL
5ee13e0d 5b8cbb7b UCTDXULDTXXXR
5ee13e0d 609e56a3 SRTSUTRDSUTSS
5ee13e0d 626530c3 RXXDDXSDUTLTL
5ee13e0d 62d1cb20 UTTCSRUCUDCUC
5ee13e0d 6412f301 TSRDUUCXCXLDX
5ee13e0d 647e3be2 DXLDSTTLLCTCL
5ee13e0d 68ac674e XDLRSDXRXUXRT
5ee13e0d 69bad56c CCDTLLLUDDLSS
5ee13e0d 6a85b3a2 RRURLCUSXTXSU
5ee13e0d 6aaca332 DCTUXXDCRSRSX
5ee13e0d 6c8279a6 DRCLLURDSUTDR
5ee13e0d 6fbdc479 XDCRUSCDRULUD
5ee13e0d 743dd128 LRCRUUXSUDSRT
5ee13e0d 75021b66 RSXLRTSUUCTUD
5ee13e0d 76377a9a DSUTCCXRSSSTX
5ee13e0d 791a1436 TCSDTSXRDXTTD
5ee13e0d 7b9a6a18 SXCCDSSXCUCCT
5ee13e0d 7be4f7fa DLDRTDUSCTCLT
5ee13e0d 824edabe DDXCTTRSTDDXU
5ee13e0d 8836625f LDXXTSUSTDCUX
5ee13e0d 8af2bafb XCLSLLLSTUTRT
5ee13e0d 8b7eae3c DCCDTCLXXCSCX
5ee13e0d 8c60b46c UDCDRTRDXSRSD
5ee13e0d 8e699c92 UXSCTTXUXLRXX
5ee13e0d 8f1d5fcf RSDUUTRLXCDRC
5ee13e0d 909d4155 TLTCCCRUULLXS
5ee13e0d 926a7985 XCLDURCUUCRRD
5ee13e0d 92b17367 TTUCRSSTUTDLC
5ee13e0d 978a31f3 RDCSXDUTSXLLR
6083c9b6 a548ec4b SCRSCRSCR
6083c9b6 d3a8400d LTLLDCUUCSU
6083c9b6 0f72edcd SRSLSLLXLXRU
6083c9b6 2259c45f SRSCDSDDDDXT
6083c9b6 3eadbbab LRXRDRRRDURR
6083c9b6 4a2c7281 XXTTCLSTCSTS
6083c9b6 55daa40a SDCTXXTTDRST
6083c9b6 6709a24c LCCRSLXCTDTD
6083c9b6 7c2d91d6 DXDRDCCUSRTU
6083c9b6 7f02d391 CUCRSTUXCRUU
6083c9b6 80973da2 RRULDCRRRLXR
6083c9b6 97ed34f0 SUXLRLXDURXS
6083c9b6 9faa345b XSSXRDCTRULX
6083c9b6 ab53d1f9 RSSSXCRLDSUL
6083c9b6 b113ba42 RSTDRCTSDCDT
6083c9b6 bff855e8 DCCTXLDLCTLX
6083c9b6 d1cdb9c6 URDSTSDUUUUD
6083c9b6 eeb58b0b CRRULLCDXXXR
6083c9b6 0418538d RUXDDTLRCCUDR
6083c9b6 0545111b UCTXDSRTUTRSR
6083c9b6 08e32a65 CLDCXTUTLTTUT
6083c9b6 090c133e TSSTLUDDURCTR
6083c9b6 14e2363a UUSLUTTRSSLTS
6083c9b6 155a6724 LURTXRTRUSDTC
6083c9b6 1bcfb695 LTXLSLUXXRDRU
6083c9b6 1de4a91c SDLRURRLXLCCC
6083c9b6 20edca90 SRRDTXTXSSSTD
6083c9b6 220bc44f TXLRRULURCDSD
6083c9b6 226b8297 SSLUULSDUTSSX
6083c9b6 23114369 DDDLTUTULCRCR
6083c9b6 251cd1c0 CSCDSTCSUTSSU
6083c9b6 25324d86 RSRCSSDRTDRDU
6083c9b6 2736513a STCSCLRUXTCLR
6083c9b6 27bda61b SXCCTCTCTXXSS
6083c9b6 289fdea1 ULRLRRTTDRCSU
6083c9b6 29c5fbe7 DUCSLXDDRSCDT
6083c9b6 2bad6fa9 ULRTTDTCSUXDD
6083c9b6 2e24d5ba USXSXCDXSCCDC
6083c9b6 2e449f9f LUTXLCDXLLLRT
6083c9b6 2f2e5574 UDSCTRDTTSDLD
6083c9b6 3048a8bf SXLDDDUURUSLT
6083c9b6 30aef83f LSDSLRRUCTTLU
6083c9b6 30d9ffab DCUXXLLSLCTXD
6083c9b6 371adafc TRXUXLULTRSSL
6083c9b6 3770d845 UCCSUTTSTUSRR
6083c9b6 3940e1a6 DCLCCLXDUULDT
6083c9b6 3b8fb6ee SXDDLXDSXSUTR
6083c9b6 3d007da3 STUDTRRURSCDS
6083c9b6 3ed4edd3 DLSRCSSRSTRCL
6083c9b6 3f96dc11 SCRSTCUDSLXRX
6083c9b6 3fc589f7 RTXLCDDRLSTSL
6083c9b6 40fc85c2 DDXUTSURDXUDL
6083c9b6 420f6aa5 DLURCXUUDCCXX
6083c9b6 449008b7 LRSLSTSSRDRRX
6083c9b6 45334537 TSLXCSDLSCSXD
6083c9b6 463f3bee CCCRCLXSDTDLX
6083c9b6 47ae5035 TDCTDLXLXXUDS
6083c9b6 4cb62468 LXCCSTRUDTTCC
6083c9b6 4fd8b9e7 CUSSDXXDXDLTU
6083c9b6 5289c12b XUXSSTTRCXULX
6083c9b6 52c35748 SDDDUSRXULUUT
6083c9b6 56a8ca20 UXTDRDCDTDSCR
6083c9b6 56d9245b TTURCSRSXLULX
6083c9b6 599577f6 SDULLTSDDXXSD
6083c9b6 60208374 SXCURUURUULSS
6083c9b6 609c70bf RXXSSSCTSTXUX
6083c9b6 624a1744 TLXUDUURXDDRU
6083c9b6 691e4e07 DDRLLXDCCDTSL
6083c9b6 6928504d XUSLSCTUXLLUD
6083c9b6 69ed4d44 UDUDULLUSCSSD
6083c9b6 69f1adbd DRUXSXXCCSDRX
6083c9b6 6b1a6d9f CDCRCCXDRDLDU
6083c9b6 6b224b70 SLUSXLTSSDTXC
6083c9b6 6b2baf9e LTUSTXLUXDTDR
6083c9b6 6b33e043 SUDDSSRDRDTXL
6083c9b6 6d022ace DCLTLUDTLSSRL
6083c9b6 6e2355b0 TRDUULRLLLCCC
6083c9b6 6e911031 SDSSCTTUXXDXD
6083c9b6 71c03c2c RRDURRDSRCCXD
6083c9b6 72633b00 STLUUDXUDRLTT
6083c9b6 79a66a50 XTXSTXUDSTLUR
6083c9b6 7ac67f93 CTTCTUDXXRULX
6083c9b6 7c4c74b7 RXRDDTCRSLTXS
6083c9b6 7cbe39f5 XDRCXRCDCDULC
6083c9b6 7ce8ecfe CLCDTRXTLSRDC
6083c9b6 7d8b2934 SXRTRSSTXUTXU
6083c9b6 7dd0717e RLUURURRXUDXU
6083c9b6 82191bff URTUTRXSSLTDC
6083c9b6 8614b2e9 XLCLDUUTTSSLT
6083c9b6 87f56c32 SSDLLUSTDLCCX
6083c9b6 8b1426bf TURRURLTLSLXR
6083c9b6 91e00a3a DSXSXCDSXSDLX
6083c9b6 93c694ea RLDRRSUXCLLDD
6083c9b6 943f68b9 RCXDTXTUDXCCS
6083c9b6 97e5a1b0 TXLXDLLUTULSX
6083c9b6 9836845e RXTLXDCTCXTDC
6083c9b6 98d93610 LUXDCXTSXCXCS
6083c9b6 9d0de66e DRRSCUUULSCXC
6083c9b6 a49b9bee XLXRRTCRLXSTT
6083c9b6 a85b336b LXLXUSLXULXRL
6dc02d1e 1ec31fb2 CUTSXTC
6dc02d1e cac44c69 DTRCCUSTTX
6dc02d1e e6917e39 TLLCTTDSTL
6dc02d1e 06b90bfa UDXXRTDSDUSX
6dc02d1e 0fa746d0 UXUSTSTLXRRU
6dc02d1e 13edff9a STXRLULTDXDS
6dc02d1e 38d3be64 SUUSSLCRSTDR
6dc02d1e 3cea898c TCSSCCSUXCSS
6dc02d1e 3dc4e532 USUXDCLXCCRC
6dc02d1e 59c99449 SCUCXCXLRDTC
6dc02d1e 6fe51aa0 UCTLTCLUSXRS
6dc02d1e 81bc4994 RTRRTXXLXCUS
6dc02d1e 89d654f9 UCDDXLDTXDSD
6dc02d1e 9ede094c RRUXDRTCXLRX
6dc02d1e 9fd99c12 UTCCRXSRUCTU
6dc02d1e b5c8dd33 DRCCRXRRXLRS
6dc02d1e c5833b00 TLLRDSLXDSDS
6dc02d1e d452569c LRLRXUTDTCXU
6dc02d1e d7666d44 XURDUXLCCUUX
6dc02d1e dedd5dd3 TTLXULLRDRRL
6dc02d1e f278e579 LSTXTSURLXCC
6dc02d1e 090354f3 UTRLUDRRLDRSR
6dc02d1e 0a92656a SRRXDLDDUSUDC
6dc02d1e 0fac436e DXRRSSLCDTSXX
6dc02d1e 0fc50139 LUXRRRUDRULTU
6dc02d1e 12eace7f CLXSCRULDCDSS
6dc02d1e 164d592e CSLCTSRCTUXDD
6dc02d1e 18a42808 ULTSLSTDTDDTR
6dc02d1e 1c1269f4 TUXRXTRSSDLXT
6dc02d1e 1e413ce5 SURDCLTSRTXXD
6dc02d1e 1ff0f0be SDUSDRDDCSTTD
6dc02d1e 21ba1442 TDCDULCXUTDUD
6dc02d1e 231d2751 TTRXLRRUDSCCS
6dc02d1e 25739770 LCRRUXLCRCDTU
6dc02d1e 27250d68 LUTCDTULCSCTU
6dc02d1e 276cbe80 RDSXSTTSRSXRT
6dc02d1e 29037629 XSXCULUXSCUDR
6dc02d1e 29fff343 DUDSRCTTDDSCC
6dc02d1e 2dd451e8 RDCCDCCTCDXDX
6dc02d1e 2e79c8da DLLSRDDSDCLUD
6dc02d1e 2f07cbab RURDCCSCRUSLS
6dc02d1e 2f129aa2 CLDRCTXRCRSXX
6dc02d1e 3095e3a4 XCTCCRSRDTCDX
6dc02d1e 30b16671 TTDSSXLXXUCXU
6dc02d1e 30dc8b7b CCXCXDCDCTTRD
6dc02d1e 31308425 URTXTLSRLDSLU
6dc02d1e 31bf119b SRRLDRSDURRXU
6dc02d1e 32161339 SUSSDXDLSTXSS
6dc02d1e 32c4f565 UXXRCULUUTRRD
6dc02d1e 34746c7d DUCLSTLSXSLRS
6dc02d1e 349ec633 XXRSLXRSSLDXR
6dc02d1e 36cd84d1 DTRLTCURTLRST
6dc02d1e 3a5cf228 XDSRUTDRSSTTS
6dc02d1e 43bfb96c URLDSXSCUDLDS
6dc02d1e 44fc5b38 SLDXSRTTTSRCU
6dc02d1e 49b51bec CLLXTUDURDCXS
6dc02d1e 4aeb7d6d USURDCULLRCUD
6dc02d1e 4d13f0f1 TDSTDTXUXLTDS
6dc02d1e 4fb37d37 XSXCCRTTXDRXS
6dc02d1e 513fb4ec CLLUXTLDXTXDU
6dc02d1e 532e8d07 RTTDSRLRSUTLT
6dc02d1e 53e13b6e URUUDSRXUCTRX
6dc02d1e 541fb938 DCCDRUURSXTSU
6dc02d1e 569fa851 CCDXTDSCXSCXU
6dc02d1e 5dd67e93 CXLRXULLSUDST
6dc02d1e 5fade45c LUCULDXLUXTCU
6dc02d1e 62765a68 DSLDDSULDRSLC
6dc02d1e 63a220ae UXCRRLXSRTRXC
6dc02d1e 66e07430 RSRCLDXRTUTXR
6dc02d1e 6a475704 DLXSSDLSSURUD
6dc02d1e 6aafa9b7 DXRXSXLTSSSLD
6dc02d1e 6c1e3586 TUTSRCTSLRLTL
6dc02d1e 6ce80f09 UTCUXXTCXTXCU
6dc02d1e 6f23bd36 CTXSRLLCXUCXU
6dc02d1e 712ccda9 DSDCRDLRRXTXR
6dc02d1e 727deb0e RULTULDSRCCLS
6dc02d1e 7351a6f5 CRLTTXDXLTCTD
6dc02d1e 73e35aa5 TDTRCSUDXRSUD
6dc02d1e 766fa2f1 CCLLCLUUDDTCC
6dc02d1e 773e3d4a LCDRDDCUUCLRU
6dc02d1e 78a16cb5 TSRCXDTSSLLXD
6dc02d1e 78e4b1af SSXUTRDXDRLXR
6dc02d1e 797922c3 CSLSLTSUCDDUR
6dc02d1e 79f69e03 DCRCDRXCTRSTR
6dc02d1e 7a598599 XTUCDTXSLRXLT
6dc02d1e 805d0efd CRRSTTLLUXUDU
6dc02d1e 829f83e1 LLXRCDDTLXXRR
6dc02d1e 83e72efb RDSLSTRULDXSX
6dc02d1e 896a06ef DLLLXLXCSLUDS
6dc02d1e 89b30870 DXUURXUCCCDLX
6dc02d1e 8b170c63 RSDCSSLTURRUU
6dc02d1e 8ebbf575 LSUSDCDRDLRUD
6dc02d1e 8f097f18 STTSRSLCRURDU
6dc02d1e 91b5c17e TXURTRCUSSDUU
6dc02d1e 92c2393a TLUXDXCDCXDUS
6dc02d1e 9386ae35 XRSDUCCXDRXCL
6dc02d1e 99b34ec3 SDCDCDUTDLRUS
6dc02d1e 9da0a722 CCDTRCRLXCSCC
6dc02d1e a38aabb7 DCDRSURCTTSSD
6dc02d1e a394186f DSCTDUCCRUDLD
70153315 7d9f7909 XXXTUTUXTC
70153315 3e50b902 UDLTUSSTLLC
70153315 052d5694 URSRRRXCXRRX
70153315 098bcd5b SRTDCSCDTCRD
70153315 0e911e14 TDXXCULCXLLS
70153315 15a31849 TDDXCTRXUUXD
70153315 1c696d14 DLLUXDSXXLDL
70153315 2a3eeafd XXUXLXXULTLD
70153315 30ffabc1 RCTLCDTSRDXU
70153315 37ff3bea RUTLRSLSCRRL
70153315 488f078e TUTLUURSDXXS
70153315 5c55437d XLDSLSRRDTCX
70153315 6b8c50d4 LDXRSTLXDTLL
70153315 6be6b069 LULUXSRDUUXD
70153315 7509ed36 STDLUCSDULCL
70153315 7574177f XCCXDLRSRTUU
70153315 7b1e45a1 UXCDRRSDXSTC
70153315 8578aedd XUDSXTRXDCXS
70153315 9af909e1 XCXTSDCRLTTR
70153315 ab4e7fb4 SDLRRUTTSDXL
70153315 b5d63625 TRXUTRSULUSX
70153315 b6dcf901 RTUUDUTCDRDX
70153315 d32999ab RSXTUXLLUSCU
70153315 f21cab90 CDDULULULRRS
70153315 f8a77012 RUSLCTSUUDUU
70153315 05c0414c TRTCTUSSXRSRU
70153315 05e07bd5 RDLCTXSLLTCUT
70153315 10538265 TLCRULCTDRDTR
70153315 109e9d09 XXCUSSXLXUCXS
70153315 10a1f92b RXUTUTRXLTCDX
70153315 1140e56f SSCUXDDLSTXRX
70153315 13657efb TDSXTRLUTDRRS
70153315 14d9e093 XXRSUCTCRSLLC
70153315 1689069b XUXRXDTRRSCSU
70153315 17552ba5 ULDUSCCXDRRSU
70153315 1762534c TTRUSUXSUXCUX
70153315 19b9b933 DUUURCUXUDDCS
70153315 19e7b0bb CSUDTDDDXUSCT
70153315 1b1815fd CSTXXUTRDLLXS
70153315 1bea1b69 ULRCCXTXSLXCS
70153315 242bd451 STTRTLLTXTLUR
70153315 28ed84bb SXRDTCUDRXCXX
70153315 2b48bfaf TRUXDCTDXLCCR
70153315 32abd39d RDLLUDSTLCSTU
70153315 390913bb XLDURXLXRRXLC
70153315 3b5fd0de RLRTDXCCSRLRL
70153315 3c0c077d TXDTTLLUDDSUX
70153315 3df7ccc9 CTUUXSRRSCLRT
70153315 3efcee7b TLCXXTLCRUSLT
70153315 41e1eec5 RUSTUTSRLRUUD
70153315 42df117f XSTUTLXTXCCTS
70153315 42fed3be URUTXSSXXDCRL
70153315 44939366 RTSDTSURSTRDL
70153315 4a9d3483 TDDRLUUTRDCLD
70153315 4b43726d TCRLUSTTUCCUU
70153315 4c9c626a TUSDRDXTXDTLT
70153315 4cb35ce7 RRDXXLDXULLXL
70153315 4f27084a DLCSRCXUSSRSS
70153315 53f28c41 URSSTDTXCUCTC
70153315 582e58c9 UUULTSLXTRRTT
70153315 5aa18f5a RRTDTLTTXDDCS
70153315 5bfe40d1 URCRLCSULRCTR
70153315 5cb200ff SCTUDTLXCSLDS
70153315 5e7970ae TRTSCDCLLSCRL
70153315 60ce2522 CCXXRRXTXDLTX
70153315 61d03a24 UCCRLDTCRSDTR
70153315 64bee2b3 LTRTSLSLSRCUC
70153315 65c27e00 SRDRCLXXRSRUT
70153315 68d147fc LXTUDLUUDXDRD
70153315 6cf2f35a DXDCUTSSRTSLS
70153315 708318f3 CCDUCSLTSTRCT
70153315 7227a07d CTUCLSURRUSLU
70153315 724ce1f8 XLRTTDTTRLUSD
70153315 74139942 UUDSULRRXDDLU
70153315 74a0291c DRDULTDLDSTXU
70153315 757857bf XXSDSTULSRDDS
70153315 76581a83 LDSSDTLDLSSUC
70153315 77fa89ef XUDXLCLDLXCDR
70153315 7b21cfc2 CLTXDSLXCURRS
70153315 7e9c51b9 UDXRTDUXURUXT
70153315 7ffd665b UTSRLXXDCXXUC
70153315 89bc7c63 DSURRDUTUCSSL
70153315 8ad89015 XTCLDRXSSRRRR
70153315 8bd8014e SLDDCLUSLSRRX
70153315 8c5bdd11 CLSDLRCRDRDRS
70153315 8cfad5d7 LLLDXRRTLSLRU
70153315 90989f1e RDRUTXLXRTDCX
70153315 90b33286 TXTRUSTXUTLXR
70153315 9119d630 TDLSTCCSRDSRS
70153315 921b2446 DXDRSLXSTTSDU
70153315 922bb84f CRDDCTRTDTDRT
70153315 93f53ed7 SXSTURTXRRSTL
70153315 963e32a7 RLTUXCCTLUUCC
70153315 9797458c UUXSLXLUDSTXD
70153315 98a7a34c SRLCRCUULURSR
70153315 9a4b4fce TSLDLSTTTCRUC
70153315 9abdbeb3 CUURSDCRLSDLL
70153315 9ac5e157 UCTUSSCRLSRDT
70153315 a16d3407 DRRSTDRSLTCDS
70153315 a3eac084 TRRDSRXXSTCXS
763a0dae b0a4f8b1 XTCXXXSTUD
763a0dae 5a9d6e25 CDDSTCRLSUC
763a0dae 015c96ce USLXUXXLSTLT
763a0dae 0298403b CUDSDSURTLTU
763a0dae 09a88ffc CXTSTXUXSSDT
763a0dae 12412977 RDUXUSXTLDUX
763a0dae 184eef4a SDCTRCSUUDST
763a0dae 1907fcf4 TXUUTUDDCRUD
763a0dae 26b6b9d5 XCUUURULDTSU
763a0dae 40d0747d XXURSUCLSSTS
763a0dae 597983c7 CTCXCCCXDRRX
763a0dae 67cf2e32 TCXSCULDSLTS
763a0dae 68238436 CUDRTSTXDDTS
763a0dae 6f5b16ed CUSSXRDUSSXS
763a0dae 873f07df TXLLLTRDLLCL
763a0dae c6c7f1df RCLCUSXCDUCD
763a0dae c785578a RRUSCSXCXSRU
763a0dae 0206c872 DDUDLRDDRRULT
763a0dae 04200096 DTDUSRDUTSDTL
763a0dae 0550d5f0 XCRUXXRUSCDDU
763a0dae 05e5cb1c TLTCRSDLRXUDS
763a0dae 0781d253 CURCUTTDDTSXL
763a0dae 0781faf1 LXDUSCRCSLRRD
763a0dae 0850e07c RRXCTDLTTXXRR
763a0dae 0d5222ea DUUCLSDTURDCS
763a0dae 12635791 DSXTXTXXUTUUR
763a0dae 143e784e SCXXDTXTURRUS
763a0dae 166e7ea0 LURRXURLDRRUD
763a0dae 18a950a4 RUCXTLLSDRXST
763a0dae 18be72e7 DRTSUTDDSUTXT
763a0dae 19da8066 XRXLTSTLCXLCC
763a0dae 1d59ec8a UTXRSRCCSSDDC
763a0dae 1dc0d21f TLUCCCRRRULTL
763a0dae 2154a6c5 CCDXTCCTRSXCL
763a0dae 216fd5f1 CSLSTULRLTCCT
763a0dae 21a43ae1 XUUXLCDXDTURD
763a0dae 221987b4 XSRCSUCTXTSCT
763a0dae 23202429 RCRTTSRLCUULU
763a0dae 246fae21 SUXCLDRCCSXDR
763a0dae 27b90800 XTRSUXDCRTLSS
763a0dae 2dbfc05e XRTRXLXLTCSLC
763a0dae 2f2c1612 TTTRRXLTRXSTL
763a0dae 2fb8b306 DRTUSTCSUXRDX
763a0dae 30dcb092 XTCTXUSTLSRRU
763a0dae 321c5bfe TXDDXXDTTRCRR
763a0dae 33607f1f CTLLRLDRUXXTT
763a0dae 36e230ee DLLCTXDRSSDTU
763a0dae 3f1bf897 ULUSTSUSTCTUC
763a0dae 4294f798 UUXSSRTLLDRRT
763a0dae 43634df4 CRCURDSDXCXRS
763a0dae 44e52563 SLXTSXTRXSDXX
763a0dae 45cb363a URSUSXLXSSLXX
763a0dae 46d5cccf SSTLRDSCRCLCX
763a0dae 47b47486 LCTCSSRSUDSXS
763a0dae 4ab53fe6 SDRDRXRRTLDTC
763a0dae 4c944c42 UUSULSXLLDDLX
763a0dae 4fad95eb TLLSSTXXLCCRS
763a0dae 4fc1c038 SUURXDLLUCUUL
763a0dae 56d00ef2 DDUSCXUDULRCU
763a0dae 5ac361e1 TTUSTDLLDUURU
763a0dae 5c0ef57c CRCXCTDXDCSTD
763a0dae 5d4e6328 RDLUUCLRCTTCD
763a0dae 624643aa DCLCCDULDDDDU
763a0dae 65bb3df8 LDLSXUXTUUTRS
763a0dae 673ee01d XSCTSSDRSSSCL
763a0dae 67dd531f URTTRCSCUCUCS
763a0dae 686bde88 LCDXRUTSDTTCC
763a0dae 6aecad1f RTSCTRTTDRSSX
763a0dae 6b3269f9 DSSRXSTCCTRDX
763a0dae 6d5d9d60 XRTLCTDLXLDCC
763a0dae 6f212ba7 SLTTXLTCCULUD
763a0dae 6f29c8cf UTLSTRLRTCUSC
763a0dae 6f2cae0d UCCRDRSLDRRDT
763a0dae 70818f84 RTXCXUDTSURTX
763a0dae 7577415f CDRDXRXTRCSUD
763a0dae 76664193 CSURXDTCDTXCD
763a0dae 7c82f257 UDUCSXUTULRDC
763a0dae 7cabc0b9 CCCXTSDTSLDUU
763a0dae 7f8c6c71 RCRCTDLUSTXUD
763a0dae 800e7835 CSLXULURCRCRR
763a0dae 81643e7d DXTSRSULTSSSS
763a0dae 88df1762 RCXDDTTUCDRDR
763a0dae 8b3f5e28 CSCLTDUXDDLDD
763a0dae 8c4f42c1 LSLRLUCLRRSSX
763a0dae 8cae94e7 SXSRDCCLULCDT
763a0dae 8d28eb2b SUTXSLLDLDURR
763a0dae 8daf8324 TTXCCTRTURRXT
763a0dae 906db69a DRDCLCLXRURRU
763a0dae 94e7de70 XTTTRLRUCCTUC
763a0dae 960d5b9a CUSRDLTTCDXTS
763a0dae 97e245db UXSXDLLLSCLCU
763a0dae 99346a7b CLRLSLRXLSLRD
763a0dae 9d640e73 DLUXTSRCXSRUS
763a0dae a53e608e TRLLUCLSCDRCL
763a0dae a72b8235 XCRTDCSXDXDDS
763a0dae a7535f5d URXSDLXXSCRXL
763a0dae a8c3400b SLTRUXCSRSRSL
763a0dae a8ecfb97 XXUDRLTCTTTTR
763a0dae ae63c8a2 TCDTUUTLUTDSD
763a0dae aeb3c42c CXDSDTXTDCDRU
8112bf6a 1a348ccc UTRUSTRULSSUCCUR
8112bf6a 1a348ccc XRTRRSLRLRXTCRXLLRXUX
87ae8f70 562dd541 XSLUDUST
87ae8f70 02e6b974 CDTXXRLSCTT
87ae8f70 4b4219ea XXRLUTSDSLC
87ae8f70 cc4efd35 LXCRLTLLLDT
87ae8f70 0dbcf647 SDUXRXCDCDXC
87ae8f70 1479a6e7 ULSDSULXUUTS
87ae8f70 155ced72 TTRDTRCDRSSU
87ae8f70 1f3b14ad SXRSDSRXRTXC
87ae8f70 2020f11d LRDUDXULTCDL
87ae8f70 25a83bef RRCSULTDCRXL
87ae8f70 6e946313 CSTDDDTSTXRX
87ae8f70 7fa448f2 RLTLXRLXSLXL
87ae8f70 8e22d285 CXXSXSLDCLUT
87ae8f70 98b907c5 CDRTSCRSLTLX
87ae8f70 ae479675 RLULUDSXDUTU
87ae8f70 d6b888bc TULDTXUSSCTR
87ae8f70 e1a3cee8 RDUUSSTCTTXU
87ae8f70 e1d2af05 UUUSDTRXXSTT
87ae8f70 02fce824 SSLXRUCSLUTUU
87ae8f70 0390b190 TUCLXLLCUCCCD
87ae8f70 0f81c181 LTRUTRTXTCSLC
87ae8f70 111e3140 SURULLUCCCTCL
87ae8f70 12915223 CLRDUSDCRXDRR
87ae8f70 13bde681 TSRUUSTLSDTDL
87ae8f70 14f46ec7 LXRXTTXCSRTTX
87ae8f70 160c40b8 CTRXSLXDXCCLL
87ae8f70 19239b11 SSDLCLCDLSCRL
87ae8f70 193066d5 RULTURDTDLDXR
87ae8f70 1c5f0a84 CXDTCUXTCDXCX
87ae8f70 1c905d21 SXDUSRLTXDDDD
87ae8f70 1fa035e0 LLULRLXCRTSTS
87ae8f70 1fd9cdb8 TUUCTRXLCLCDX
87ae8f70 1fe95efe CTTDRUCDSDDTT
87ae8f70 2036d037 SRLTXDRLXUTDR
87ae8f70 205d8b5c SCDRRXXXRLXRX
87ae8f70 21a83a6e DXCDTXXDXULTD
87ae8f70 24382896 UCSSSDXDLSCSD
87ae8f70 246d8c3c SLUTLRSDRLTXC
87ae8f70 24c5ca68 URCXRXDSLXLTD
87ae8f70 27486436 USRLSURURLSLL
87ae8f70 29dfa26a CDTRULTURCXLT
87ae8f70 29e1630a TCUDRTSDTTDLD
87ae8f70 2a7c5680 CLUTSLTDLTCLC
87ae8f70 2b5c2052 RCDXURRULCRRR
87ae8f70 2bb3040e LRCRRLDXSXTCC
87ae8f70 2efb8586 LTDCLRCDDCCDU
87ae8f70 345685e3 CRDXRXRRCDUUD
87ae8f70 37520cdd LSXCLXRSCLSCX
87ae8f70 37e109d4 USXUTSLTXTTLL
87ae8f70 3c94244f STXLXRLRULDUU
87ae8f70 3caa0a0a TXSUDTRXLDLTT
87ae8f70 3f9ae373 UUXCTUSSUDDLC
87ae8f70 40df9140 TLRCLSCDUSSDC
87ae8f70 41409a1e RRSDTLRDSDDST
87ae8f70 437d677f CUCRLCSURSUUT
87ae8f70 4417533d DDTTDULSRXXTX
87ae8f70 460b0e7b CRLSXCSTXUTUC
87ae8f70 4845b4ff CSCCDTCXCSLUD
87ae8f70 4aaa664f SRUXRUTCLUXCL
87ae8f70 4c1cdfcd DLCRSDTSLXCTT
87ae8f70 4ddfb682 TDRULTCDXCRXL
87ae8f70 5041b1b5 XLSXLUTCXSUDX
87ae8f70 52f8e8f0 SXDUXXRULLCUL
87ae8f70 54286795 SLSRSXSRRSLRD
87ae8f70 5876f323 TDSXDSXDSLTXR
87ae8f70 5a176a73 TTRRSXXSTTURD
87ae8f70 5fb77f4e DXTXCLDXSRSXS
87ae8f70 61639d9a SDXLLCUSSDUSL
87ae8f70 64644716 CXRSSDTCTXLLD
87ae8f70 6758ab69 CRLRDDSXTUDCL
87ae8f70 697053bd TDTUCUSUCTLXR
87ae8f70 69c6e5ab ULDUTXRRULSRT
87ae8f70 69fa7429 CRRLXUDTLRCLS
87ae8f70 6ccaf2a8 CRSSRTDDUCTLR
87ae8f70 6d687808 TLCCLUXRXXTSR
87ae8f70 6db2a67c XLTXSDSRSLCXT
87ae8f70 72093510 RTSTUTCTSUCCX
87ae8f70 74796271 CRLUDSDTSLUUX
87ae8f70 7549d458 RDCUCTXLLDLDR
87ae8f70 75adc833 XUXUUCTLSLDCS
87ae8f70 76568892 XLSCUTSRXXRSU
87ae8f70 776791a4 XCLDSRUDSRRRT
87ae8f70 78175e1b LUSRXXDRSRCXS
87ae8f70 7a2b51b6 TXRRXLDTCXRTL
87ae8f70 7d96c0e7 LTDXUXDCSLRDX
87ae8f70 7ecc8681 TXXCSRLTCDTRC
87ae8f70 7ff57ff5 TSRUXXUCXDDTT
87ae8f70 84c99e4b LDCCRCSLCRTLD
87ae8f70 84d84d8c SSSSTCDSCXSCD
87ae8f70 87261dd0 LRRCUCTUTRLSC
87ae8f70 88205122 LXXSXDXDXSLTD
87ae8f70 882680ed STSXCUUDCSTCX
87ae8f70 8c8f38f8 URXLLSSDTUSSX
87ae8f70 8d0b17d0 CRCXRTXDRLXSD
87ae8f70 8f0124c7 TXSCCXUXXSDXR
87ae8f70 8f794957 LLTRTTSCLRDUS
87ae8f70 93a16739 SXRDDCTTDXXSX
87ae8f70 959d8796 CTTCUUDSLULXL
87ae8f70 96adf85e SRURTCXTUDTCD
87ae8f70 97dfff02 LLCULRLRLTXTX
943ed118 ddba0d98 LULUDUSTLULUDUST
9b70c632 f0e7cb80 USSTRUCT
9b70c632 6d79b263 UCRXDLUXSDL
9b70c632 91cda57b LRRDTUUDLDT
9b70c632 01f4b5b7 LDCXSLSSSRDR
9b70c632 13ae71e7 TTLULRUXTXRX
9b70c632 16227f8c SXDCTXCLXCRL
9b70c632 2f194387 SSTCULXLLULT
9b70c632 3858171f CTSTTLSCXRXX
9b70c632 40b8101d ULSCUCTXCUSS
9b70c632 4a773fb5 TCXCTUTRLSRL
9b70c632 545c8fd6 TCTSLTDCXXSC
9b70c632 6f6ec3dc USLLTRSTRCSX
9b70c632 8c0ac19b DDUTTDRLUSUT
9b70c632 e0219915 UDXRURSRDSUT
9b70c632 e9b1ac8d LTSSDXRLSTXR
9b70c632 fb774e0f SDCSTRTCTTXC
9b70c632 02235e97 SXSRUCLXULTTT
9b70c632 02727d29 UUSTTSDRDSURD
9b70c632 0802d144 SRCUUCLRXTDCS
9b70c632 0831534f RXLRDRCLDTLRS
9b70c632 0ac3955d DRRDDCUSXTLDC
9b70c632 0baf0f3d DRCDXUUXCLRDT
9b70c632 0d3a1b47 UXTRRCURLDTXT
9b70c632 0d3a9b49 RRXXXXTCUSTUS
9b70c632 0e0a4e8b XDUDSTXLCRXTR
9b70c632 0e7c4c6f DXXSXXSLCSCTD
9b70c632 0f7b0690 LDLCRSSDRRDCD
9b70c632 106f85a6 DTTRCRLTRRUTS
9b70c632 13f5ac8c XDTTXSRLUCUXL
9b70c632 166bb9b0 DTSXTRXLSUUTS
9b70c632 178bf610 CUSSLRXCCLSTT
9b70c632 179212f5 RLTUTRRSSXDXD
9b70c632 1b127132 SRXRDUCCLSRUR
9b70c632 1bee4363 LRDCLLCULLRUT
9b70c632 1ddf9ef1 ULLRUDXUTXSDD
9b70c632 23e89122 DTSTDULXTXLRX
9b70c632 29a0c5da RCRTCRLSULDRL
9b70c632 2a6e40df CLDSTLSDXUTCL
9b70c632 2b01ae33 RCTSUDSXCUXLD
9b70c632 2b800777 RCUSXDTDURURL
9b70c632 303314af TDTCLDUXCXCRD
9b70c632 30ee1530 CRCSDSUSXRDSD
9b70c632 31134267 LXCDSLDCLXSXT
9b70c632 34f738fc TLLSTSTRTSSSR
9b70c632 35d8b8ff LCRLTDTDTTTCU
9b70c632 3c3a7c92 DLCDDSTUXTRLT
9b70c632 3ca37800 XSTSXURTLTSRT
9b70c632 3d46d608 DXTTTXXUDXTDC
9b70c632 3d79da59 LUTLSCCCRLLSD
9b70c632 3d8ff610 URCTLDTRSLDTX
9b70c632 3e515c4c XCTLCCDCXRLRC
9b70c632 4335719e XLUXXSDDLTRSL
9b70c632 46ff2b6c XDDCLTULTDXXU
9b70c632 478615ee SLRCTTXCRXUDC
9b70c632 47e9a281 CCURRXCDULLTX
9b70c632 4858f6ef UDTSSRLUDDXXC
9b70c632 48bc9394 CLTXTLUTLXTCT
9b70c632 4bb99784 SCRUSRSLUXSXC
9b70c632 50525df8 XDSLXCDTSCSRD
9b70c632 51f91fe6 RCLCSSSRDSLCL
9b70c632 571a6284 DRULRTXUSRCCD
9b70c632 579caaa4 UTSXUURLSCSLT
9b70c632 5f511b95 DSUTLDCLCTCCU
9b70c632 61ae419e UXCSDLDLXLRLX
9b70c632 62fcf82e LUXCXUCXCCTSR
9b70c632 63fa0ce8 UTTXCCCLCCCUR
9b70c632 64761482 DUXSUURUSDRUU
9b70c632 676f6352 LXDTUCCTSDSCU
9b70c632 67fb53cb TDSCXXSUDRSLT
9b70c632 6ba957b4 TLUDTLTDLSCTX
9b70c632 6bb98267 UDCXDSTUCRDTU
9b70c632 6be34d55 XLSRLDDDRURSX
9b70c632 6c4c80aa DLTDDDTCDLRST
9b70c632 6ceea2ed XDTLRLLRDXDTR
9b70c632 6eb7cdc8 CTDLSDCSSRSTL
9b70c632 714cff50 LLXCRTXLRSCLL
9b70c632 7464056d CCSTCXUUUULRR
9b70c632 74fb8dae SSLLXTRXRDSRL
9b70c632 7620d6da SRRSDXTXSXXLC
9b70c632 7661aa6a LLCSRDSDSSDDS
9b70c632 77032c78 TCTLTCLUDTCCC
9b70c632 7ab8bc82 TTDRDTDCRDXSD
9b70c632 7c3b1e81 UTURXCXRUUXCL
9b70c632 7d4c8051 DLDCRUUSSRDLC
9b70c632 7d918b1e SLLLCUTUTSRTS
9b70c632 7e809f88 LUTURUUDXURCL
9b70c632 83264c9b LRRLRSSSXCSSS
9b70c632 83b5430f UDSRRTCXURDCL
9b70c632 84a548dc RURSXTURUTXUL
9b70c632 8756bb88 SUXDCCCXLLDUR
9b70c632 88fe1ffb CSCDTSUTSCUXC
9b70c632 8acd3c6c TCTRDSSDSDURR
9b70c632 8baa3dab RUXCDDDXUTSDS
9b70c632 8d56fe88 RLCDSCSLLUDXS
9b70c632 8e5ec0ac TUXSUSCRTLCCR
9b70c632 8ed31a04 RTCTLTUTRDRDD
9b70c632 8fadd237 ULSSTCSURTCTU
9b70c632 8fba4574 DCRDLCCRSTCUS
9b70c632 901b8c81 DLXLSUDSCDLSU
9b70c632 93dc9a39 DTTDSLULCCLDS
a3e2dce2 7a6115ce UDLRTXSCUDLRTXSC
a3e2dce2 7a6115ce SXRDDDTDXUSUUCDXDDTST
a8a606ad 8786ef73 XXXSTUDLUSTXTCXTC
a8a606ad 8786ef73 LTUSLCXXSDRXDCXTXCDRL
a9411ee9 00fb69ee XTCSTUD
a9411ee9 2b1b48ed LRCUXSUSCS
a9411ee9 69766341 RUTCRULCDD
a9411ee9 0b06d1bd TCSSTLTRLRX
a9411ee9 88f8df6c LSRLDCSRSSS
a9411ee9 cf0c5a60 URCUCXRSDST
a9411ee9 06fc789e LDRXLSLTRCSU
a9411ee9 281cba43 XDLLXCDTTXSX
a9411ee9 55ec31d1 CXCULLUDCLXX
a9411ee9 5ac07166 LULDTXTTXXXU
a9411ee9 5c93573a XSSRSLCTTLTL
a9411ee9 6553c6d9 XLTXTCSCXCRT
a9411ee9 7232c3d8 CDCDLSDSRTCD
a9411ee9 aeaab7e9 DXXSUCXXDRTC
a9411ee9 dcbc739f CRUUXULDTXTD
a9411ee9 fb2b5604 DRLXCRSULRLD
a9411ee9 00ff8816 CCSXCUCLRXLDT
a9411ee9 01d93dbc DCXXRTRTXCTXS
a9411ee9 04b054a7 STUTSXSRDDLUU
a9411ee9 053d7136 DXCLCLTCTRUUU
a9411ee9 07e5b999 XLTRTDRRCCLLC
a9411ee9 0a4fa967 RCCDTSRUTCXCS
a9411ee9 0eac67e6 RRSXRSTXXXTUD
a9411ee9 10cb0c39 DDDTRRCCSRSUX
a9411ee9 17478111 TCXLXRSLSUTLU
a9411ee9 1c684154 XXDCTRLLXUTRX
a9411ee9 1d87ed80 SDTSSRDLDSTRL
a9411ee9 1eccc543 TXULUCRXDCCDR
a9411ee9 20fff85b LSTSTURLXXLTX
a9411ee9 22bbb0cd LSRSLRUCSSTDS
a9411ee9 23d8984a RXLRLSLTSTDRS
a9411ee9 250aba13 XUDULCDXCUSLC
a9411ee9 2756b01d RTRCSRSDSCURR
a9411ee9 2a83ed6b XXXCRTTTCCSUD
a9411ee9 2aa0ef80 CXTLTUTDCURCU
a9411ee9 2adb28d3 LCCSUSDRRCLUX
a9411ee9 2b143b34 UTCRLTUSCUUTU
a9411ee9 2c1b7aa8 RLLSSUDXUTUTL
a9411ee9 2fb9970b DSSRTCTCXLRCX
a9411ee9 337846db XLUUSCDLURUUR
a9411ee9 33f4abb8 TTSXUSSSXCXSL
a9411ee9 36885fd8 LRXCLUDUULXDX
a9411ee9 3857a65b XRDSXXUTCXXTX
a9411ee9 3aad8636 SDDDTLLLLRXSR
a9411ee9 3b3948c0 XTLDULCULUDTS
a9411ee9 3cffe753 CUXULDCDXRLCR
a9411ee9 3e60f897 UXRTLXCXXXLRR
a9411ee9 3ef3d2f9 CDTRRLLTTCURS
a9411ee9 3fb75b98 LDDRDTRTXLUTU
a9411ee9 4261c441 CRCTDUDUTTRDC
a9411ee9 479671ad TCCTURCCSLTXT
a9411ee9 491ac6a7 RCCTXTDUDTDXL
a9411ee9 4cd46c7c LRRRDRRUTSLCD
a9411ee9 4e025195 RLRRCSLLCCLDL
a9411ee9 52940ab4 RXDCXDTRXXCXR
a9411ee9 561a5004 XTTSCRSLDRXLT
a9411ee9 56c659d1 CXDDSTRDDLLSD
a9411ee9 58a82e55 RSXURRXTSTUUX
a9411ee9 5988fdb5 UTDDTTRUTLCCD
a9411ee9 59bb4eb0 LRLSCTCSRRLXU
a9411ee9 5d13a28c USLRSTXSLLXLT
a9411ee9 5e1f98b9 UDTRUDUUDLXTD
a9411ee9 60140cd5 USTXDLUXTLDDR
a9411ee9 6aebcbcb DCTLDCTTDULST
a9411ee9 6e667274 CTRDTXTTCDLTT
a9411ee9 6fc45301 SCTURSRSLLXXL
a9411ee9 6fd6b45c DXRLXLLTDXRLS
a9411ee9 74e3a365 RDCRRRDUSXSRD
a9411ee9 7656fd53 CTLUUTTSUTURD
a9411ee9 76aa02de XSCDCLUTLURRS
a9411ee9 7732df5b RCURRLSXDCTRX
a9411ee9 7839ebb0 CXCULSCXLCTRS
a9411ee9 78f53561 DUSSUDCDULLUD
a9411ee9 7b577933 XSCLTDXCRRXDS
a9411ee9 816de829 RRLLCUDDTRXCS
a9411ee9 81f9e241 UUCUDCLSRRDUC
a9411ee9 82c52bec SULXDXUXLLTCS
a9411ee9 84cfcda6 USUUDUUSRDCLX
a9411ee9 85db345c CCRUCURLUTUDX
a9411ee9 89a2c34b TLLDSTRUXTLXC
a9411ee9 8b32bd45 STRCXUULTXLUD
a9411ee9 8b7e6395 UDLUSDSXLXTDC
a9411ee9 8e4ad62f CCDTDCCUDLTSX
a9411ee9 8f2b5c8e USXDTSRTXDXLS
a9411ee9 904cf09d DTTSUDSULUUST
a9411ee9 9068d4e3 UCRTSUDCUSRSL
a9411ee9 91ed899b SRRUCSSSUSSLU
a9411ee9 92ebeb07 SDLXDTLTCSTLD
a9411ee9 a0d88f7f XXLLTRTSLUDSX
a9411ee9 a2c448a7 SRXURSSXSTCTC
a9411ee9 a4c686e2 URLXTRULUDLXD
a9411ee9 a56f7942 XSTULSCLURDSX
a9411ee9 a8ba49b8 DUDRCLCCDSDCC
a9411ee9 aa839e7a XTLDUDLCSXRLL
a9411ee9 ab0eefb2 LCUXTXDDTUCSS
a9411ee9 ab153b6c XRSDUTLTDLSCT
a9411ee9 ab3d9ac3 TDXRSSRLUCLXR
a9411ee9 aed42417 TUDUXXSCLXDSX
a9411ee9 b02e938f CSRUXLSLSUDXS
a9411ee9 b09801a6 TLLXRCRRUTDCS
ab93b12c bd44b576 CSTUD
ab93b12c 87f20cf3 DCLDTCCSSDT
ab93b12c fa9ec10f XTSXDLDUXLX
ab93b12c 149c49e5 CLLRLCXTDSUS
ab93b12c 194dc104 DTDTRRRCCUSU
ab93b12c 26b3fa16 LULCUSSUCLCD
ab93b12c 306c4732 SDCXXDTDCRXL
ab93b12c 3fafb684 DLCXTRLULUDL
ab93b12c 4a03a912 UDTRCSURCSTD
ab93b12c 54dddf45 XRURDDSXTXDC
ab93b12c 5f3da450 XTDCUUULLXUC
ab93b12c 642b3482 STRRCSXDSTSX
ab93b12c 770d7188 RUXDLRRCUSUL
ab93b12c 809c804c UXUSTRDDTLXR
ab93b12c 90d2976c LSUCTRCRRCTL
ab93b12c 9eeda70b SUTRXLXLXLSR
ab93b12c c69a20e2 SLTSXSRTULRS
ab93b12c c6fc86f8 CSDTSTTDXTLD
ab93b12c cde552ba RSRTSCUTLTUL
ab93b12c cf20f482 RXUTTUTDCLDU
ab93b12c d63f0731 UTDXCRXRUSXU
ab93b12c ebbf971d DRLDUUSCRDDX
ab93b12c f79ad59b URCLLTSLDLTT
ab93b12c fcbce2f6 TSSRLLSLDSRX
ab93b12c 0570993f CCSCSLRRRTXXT
ab93b12c 06574dcb TSCUTXTCSSTCT
ab93b12c 067c4b06 LDCUTRTLLUCXT
ab93b12c 07c784b6 XDLURLLSSCXST
ab93b12c 0a930b73 RXSUSXSCCCDLT
ab93b12c 0cd76f09 CURLUCCSCXLUS
ab93b12c 0e79dcca CCDLUXSCXTLXC
ab93b12c 0fe1cb3f RLTSTRUTCXDLC
ab93b12c 14bc7108 CTCTTSXULTCCT
ab93b12c 1501e3f9 USSUTDDXDLTCT
ab93b12c 1b04b317 LSTLDUTCSLRRL
ab93b12c 1bb4400a DLRTLXRXLRXXT
ab93b12c 1c062b42 DDCSDXXTUSDUC
ab93b12c 1c95fb89 UCCDRLCDSTXDC
ab93b12c 1dc64423 SRSLSXULSCRLL
ab93b12c 22bee4b6 SUSUXTXLSCDLU
ab93b12c 23e2346e DURSRXULRLRUU
ab93b12c 243db82b TRXCXTTSSSDUU
ab93b12c 270e5e3f USDXSDSRTRSSL
ab93b12c 2a2b79e7 LDRLLRUCRSSSL
ab93b12c 2c97bff3 RSDRUUTRTDDCX
ab93b12c 2dd2e6df DLDXUXLUSXUXD
ab93b12c 3017d726 LCULURTCRLLLD
ab93b12c 302dc58a TTTTXXRRRUCLU
ab93b12c 33f2c5f4 DLSTXUDCTLSUU
ab93b12c 357f0fe4 TSRCRDDSCRTDT
ab93b12c 3ba30142 DTXTCCTLDCRUD
ab93b12c 3ed0faf6 XRRUSRDXRTCXS
ab93b12c 3f067d24 DXSRCTLTCSSRL
ab93b12c 4241fcc0 CRXDLXSTSDDCU
ab93b12c 443c061e CUCSXRTDULRTC
ab93b12c 453c45c9 ULXURDRLDUXSC
ab93b12c 46024064 XTLSDUDLTRCUD
ab93b12c 489fb9c0 UDUSTUDLDSTCD
ab93b12c 49f1c8e6 LRXCCTTTDDTLS
ab93b12c 4ebe97a8 DLXRXDLSLUCTL
ab93b12c 4edbad21 TLCTUTRSXURSX
ab93b12c 4feb3997 RTLRULUSDTLCD
ab93b12c 50ed5ef1 RCDDRUDXTTTDC
ab93b12c 51430544 UCLTTUCDTDDST
ab93b12c 51ea6500 TSDDTLLSCRSDC
ab93b12c 5676b6bd TUXRRLTCRSLDR
ab93b12c 5694f191 LTCTDTCDURRSL
ab93b12c 56e03958 SCCXUCUUULTCD
ab93b12c 5821504a RUTXLSURLUSDC
ab93b12c 590a40de LTXSXUUCCTUCC
ab93b12c 5915a1a3 TCDRDXRUXXSUU
ab93b12c 5a79ff1b SDTXSDCCSXDSS
ab93b12c 5e39dab3 LUDSUXCXLSLDL
ab93b12c 5f00bccd DXDDUSULSDCLS
ab93b12c 6263e994 LCULXDRSRULXD
ab93b12c 62b8ac9d CXUUUTDCRSLDS
ab93b12c 6322435e SRRCXRXLLDRSL
ab93b12c 667f50a5 LLSCLDLCLRRUD
ab93b12c 68441e7b UTLRTUTRTTRRS
ab93b12c 6aea1870 LRSLCTCCRUTUC
ab93b12c 6b0e0162 LXRXCTSLSSCDT
ab93b12c 6d8ba099 LTLCXRRUDTDSU
ab93b12c 705aea9c TRUSDXSRSTLRD
ab93b12c 73e059b4 CRDRTXRDTSSTC
ab93b12c 76afa0f3 RLLDDDDSXCLSL
ab93b12c 76df6553 SCUXXCCDSSRXS
ab93b12c 79aedd67 RLRXSRLSCULXD
ab93b12c 7aef393e CSURDSXDSDLXS
ab93b12c 82653831 RSCSRRCDXTUUL
ab93b12c 842fcba5 RXUCUSRCRLLDL
ab93b12c 860396cc XTXTUSUDUDCXD
ab93b12c 8e29f3e3 XTTTLLXLSSXDC
ab93b12c 8ecf333f RCTDRSTDCTUSD
ab93b12c 91d816f7 URCSXTTCSLTCD
ab93b12c 927346cb LDRSUSXDTTXLX
ab93b12c 944ab5d7 LDLLCCRDXXXLU
ab93b12c 97a54b82 RURDCTDDUTSDS
ab93b12c 9d8b29da USLLSTSCDCTDC
ab93b12c a30b3abd UXCXDCCLSULXS
ab93b12c a8e361e1 RSRLUDSSDDDRS
b130bfc4 7cff03f2 DULLCLUTTURSSUX
b130bfc4 7cff03f2 CDXUUUTRDCSSDDDCTLCTD
b130bfc4 7cff03f2 CLLSRSSXLRLXCLTDTCSSD
c0998c91 302a02e1 CUULLCUDS
c0998c91 0eb65bd4 XDTUTXDTXRD
c0998c91 85cc43e3 TDUSXLULLTD
c0998c91 88b2aee2 SDDCXRRLDSX
c0998c91 9f0235f4 TDDCCTTULCS
c0998c91 fe44394e DXLSUXCDTLD
c0998c91 1f5e0444 XDXLSTUSRXUX
c0998c91 2324bf42 UUUCSTTXSDUC
c0998c91 29a776fb DXUXSTCSSCST
c0998c91 33f10782 DUTLSXUTDSXS
c0998c91 4c277523 TXUULCSUSRDC
c0998c91 52be201d CDDTURTXLLRR
c0998c91 548ff46e LRTDCUCRSSRD
c0998c91 5e86cc48 DTCXUCSUSDTX
c0998c91 69cfffb9 SDLDSUDRSXRC
c0998c91 6ec25606 XTULUSDSULDC
c0998c91 70b33fb3 XSUUDUTTLCCX
c0998c91 806a88e9 TCLDRCURCRSC
c0998c91 8bfd36f5 CXRSCLLDSXLC
c0998c91 95842365 DDRLRXSSTULR
c0998c91 9bc0cfc2 TRTUTUURDRDD
c0998c91 a0555f21 ULDUXCDXLTTC
c0998c91 a0a6aca0 CCDCTDUTUSRX
c0998c91 a19921be DLLDCDCXDCXT
c0998c91 a35c9054 XLTTSRDSSSXL
c0998c91 ab25b4c6 SCTLCUURXRRX
c0998c91 ab8172bb RXDCTCLRSTUC
c0998c91 c4a90513 CRDDURCLTLTC
c0998c91 eb2e34e9 LUCCRRUCXXXS
c0998c91 fb86a3aa RSXSTUSSULTS
c0998c91 032e6819 UTDSLTSSLLTXT
c0998c91 03b13e22 XXTRCCRTRRURD
c0998c91 04efcf6e URUUXLURXSXSL
c0998c91 08ef7229 XLCCDUUXRSRSS
c0998c91 0dcbc55e UXLUXDDSSRSXT
c0998c91 0fe64f4e DLRSCLLUDLXRR
c0998c91 10d95039 SSSXLUDRCUDUR
c0998c91 111b6efd RXULTDRSUXLXC
c0998c91 1219e988 LRXCCDLRXCXLU
c0998c91 15db6c75 TXDXXUSUDURSC
c0998c91 15e7b772 DCRUTTCRSSXRD
c0998c91 173dcb4f XDCUXUSLXTRLT
c0998c91 1b2349ee DXCCUDTLCCLLS
c0998c91 1c918bd4 SUXTRSULSLLTL
c0998c91 25957db0 DDSRTXSDSURRL
c0998c91 26afd90c LLTLLTURXXTLX
c0998c91 2a39c573 LRUXTTXCDCXLU
c0998c91 2acc32d9 TUDSXSCCLRTRL
c0998c91 2cf34ff7 XLLULUXXRULCC
c0998c91 2eae5b01 UXURLURUCTDTS
c0998c91 2fa21eb6 CULTUTDSLLXSR
c0998c91 31a1af1e LDSTCUTLRSLXU
c0998c91 321f0932 TXXLDCRSDLXDR
c0998c91 333e1b46 DLRSDRDLCXLSC
c0998c91 3ab5e467 DCDTXRUCCTCCS
c0998c91 3afdd479 SCLTXTCRDDXXC
c0998c91 3ca51551 UDSUCRRDCRSDX
c0998c91 3cf061ae CDDUDRDLDUDDR
c0998c91 3e538212 TRLCXCXCLDUDC
c0998c91 41bc6873 CXXCCXUXUTRLC
c0998c91 42ca12d7 USLRXSTSRSXCC
c0998c91 43bd364b UUDDTRTXCLXDS
c0998c91 45263e00 CTXUTRRCTSDRS
c0998c91 4650396b DUTUUXULXTCLL
c0998c91 47dcaff2 TCDDXCUDTCDLC
c0998c91 4b8daee8 RXRTLTCLRDDDU
c0998c91 4da558f6 CUTCDTCDRRSXD
c0998c91 51dd7441 TCLLTCSUSXLXL
c0998c91 54330f19 TUTLDSDXRSXUX
c0998c91 55613e7d LRUXTLCRURRLD
c0998c91 5767e6bb XRDSRCDXRDXSS
c0998c91 5ad51bad CTTRUSULTXXST
c0998c91 5b0ed7d9 DUTLSTSDUXRDR
c0998c91 5b84b0a0 RDCCXSXCLCTXR
c0998c91 5d286a9a CDLSTXRSRLTSR
c0998c91 5f8af34f STSXCRXUSXSLL
c0998c91 60f23b46 UDDUCLDXTSDLS
c0998c91 63f9e474 CXLUCXRXSDRLC
c0998c91 68b937fe RLRDTXCLSUCSX
c0998c91 69ac24ce TSTSUSRRTTSTR
c0998c91 6a313772 CSTXLXDRDXLCC
c0998c91 6cca64ff DCXCDXXRRCTSS
c0998c91 72052fe9 STSRDDCSLRDXD
c0998c91 722572e9 DXUCCDDDUDDDX
c0998c91 72f5ba51 STXTUDXULCLCR
c0998c91 7587bffb LLSRXTTLSCLLL
c0998c91 7736b370 XCDTCDCSCSSCL
c0998c91 773cf99b CDUCCSLCLRXDC
c0998c91 7b0fa3d0 RRDULLRRDUDTS
c0998c91 810e45fc CULSXXUCXDUCU
c0998c91 8354a01e CRRLCSSRRUDTD
c0998c91 83822c97 XLXRDDLUURUCD
c0998c91 845440d9 UTDRDSSRXTSTD
c0998c91 84b67418 TURCXCUDTUTLX
c0998c91 8763bce2 TRLXSLULUDDTR
c0998c91 8a962e9f URXCRXDCSDRDR
c0998c91 8d5e2736 RTXSRSCTULRXC
c0998c91 8e397bce SLLULDLTLDCUC
c0998c91 8ec8d2ee UXCTXSDDSTTTX
c0998c91 945ab3bb UCSXULSCSSXTC
c0a8f966 dfa4b839 XXXXSXXXXSXXXXS
d7dda9e0 8f37160d TXTUDUTXTUDUTXTUDU
d7dda9e0 8f37160d XCRDLTSDDCDSXUUDDCLT
debf473a 5a0ed321 SCULLSRUL
debf473a e63a70b4 ULSSLTTLSDU
debf473a 008bc8d4 XXUXSUDUSTTL
debf473a 02825c97 SUTURRSRRTXS
debf473a 02af7665 TXCXUDCTCCDU
debf473a 0c7233d9 DUXLRCSUCTUL
debf473a 17fc003a CCTTTDUDDUXS
debf473a 212db021 DRUDLXXDXRCD
debf473a 24f97383 CDLLTSCRXTTL
debf473a 367ff4ba LDXUDDSDXDXT
debf473a 3c608daf UDRDXTUTCDXD
debf473a 4271060c DCRUXRXUUUXL
debf473a 44a3684a DTCTXXLTUXDX
debf473a 4886f65a RSCCRDRCXRDD
debf473a 4c0a19f2 TCURDUDLRCUR
debf473a 5ef67bd1 XXRTDTDCTUUD
debf473a 62e4c6a7 RSSDDTTCSCRL
debf473a 6d419cae TLXUTLDTXSTU
debf473a 7ce3ae8a URRULCDDDTRC
debf473a bd1388fd CXXDTTXSLCRT
debf473a c0d544b9 UDULLDSLXLLR
debf473a fa9741d5 XLULSCCUXCXD
debf473a ffc66648 UURTLUTRXCTR
debf473a 01d8a7fa DCLTDDTRDTLTU
debf473a 0335398e CTXRSSCRCRCCX
debf473a 0600d048 LLCLTRLCDLUDR
debf473a 070e9d66 TXSXSSCXDCDDS
debf473a 07d39e45 UUXSLCUCURURT
debf473a 08de7605 XCTCSLTLXRSUS
debf473a 0e9f02ee SRTLSRCXURULS
debf473a 10c9c1ce SLUTXDSUUTRCD
debf473a 11ced9b7 ULTLDXSDULXRC
debf473a 121afed4 TUXXSDRSTSSLR
debf473a 13320f86 CTLSUCTRCLRXR
debf473a 15351e4c RTDLXXSUTUCXU
debf473a 16eb944c TDSSRDRUTCSXU
debf473a 16f5c2e1 TLUURLTUTRRTT
debf473a 18bb6d4f DTXSLTLCRTSSR
debf473a 18c836ac SSLDXTUUDLCLD
debf473a 19b6c111 RLUTRCUXSCDUT
debf473a 1aa8bd8d TCDXLDLSDRRRX
debf473a 1bd467e0 XTLRLCXUCRLUX
debf473a 1c081439 LLXRXRLTDLSLR
debf473a 221c4606 DLTDRCSLSSCCD
debf473a 2389a200 CTTUSSTULXXRS
debf473a 269c6a3f LUCXUCSCDTRUD
debf473a 2786dc1b CCUXTSTDTDLRC
debf473a 2d1b59dc TLSCLRTCRCDTD
debf473a 30724e81 DUCURDCDTURRC
debf473a 320473f1 SURSXRTTLXSTT
debf473a 324ae033 DSLDXRRSSTXCL
debf473a 329a209c DSRULSULLCSTR
debf473a 377c6963 XRUCULSTULTXS
debf473a 3932978d USDXSCDSRXXDD
debf473a 39e2d1f8 XRRXRXRSSTLXU
debf473a 3af1c142 SRTDTDLUUDSDC
debf473a 3b2cc952 DCXLRXSUXLRDT
debf473a 3c86cd63 XCLRSURDTCUSL
debf473a 3cd8c1c9 CXCXDUCXXLTSS
debf473a 3d6bd666 RXTTCRTLSSXXD
debf473a 3e8b83e5 TLCXLXTLTRRCC
debf473a 3f023c39 TDCSRSDCUUDDX
debf473a 3f344c73 TRCXTTCDXDLRT
debf473a 40fb9dfd CRLSCRCLTDRRR
debf473a 41dfd71f URULLXXRDRCCC
debf473a 420c3da8 XSCLCUCRCCCCS
debf473a 4464df6a ULLSUXLTLDXTX
debf473a 49d2996d SXDLCUULLRSUL
debf473a 4a67b6a5 SSRCLTLRURCDD
debf473a 4d78dbe5 DLLCXUUCTXDLD
debf473a 4f209315 UCLCXTTCXXCSR
debf473a 4f76dc90 DUDSRTSXUDUUL
debf473a 4ff60f29 SUCLDLRLRTRXD
debf473a 5550b600 CDXRRUXLXDDUD
debf473a 565d026d CCDDTUSURULUL
debf473a 59f3bd5b CSXUDTSTCDDDR
debf473a 5d75caf1 LTXCLXURDDTXT
debf473a 5da80e94 LXLCTXSCRDLUS
debf473a 5e874c03 TRLXCTRTUTCLT
debf473a 5fd1f5ae RXSTCTUXCLDXS
debf473a 61924f62 SLRSSDCCSSCRX
debf473a 650920ca SLDSCSCLCCTXC
debf473a 66e3de17 CSXSDSRTSCCDL
debf473a 6bdbc379 SLDUTLLRCXDXR
debf473a 6bf9d438 TTXDSTDTUCTTC
debf473a 73d91a5b XSXUTLCDTTSSU
debf473a 77f69d7e CLSSXUUSRTCTR
debf473a 78861d3c STSCXSUXRXSTS
debf473a 7c43ff1e RTRLLSUXDCLDS
debf473a 7c593c9c RLSTUSRTDSULL
debf473a 7fbf73c0 LRDUCSSCUDDDU
debf473a 86eab950 RDUUUCRCTSTDL
debf473a 8975f03b XTCDSXCXDXXDD
debf473a 89d08601 CCDUTRCTSLTTT
debf473a 8c44825d XCLDDLRXLRLCU
debf473a 8f1e2e02 SLUULSUSXRRUC
debf473a 919e1a37 XTLSUDUUUCXCX
debf473a 9381a3af CTRXXRDRRXLDR
debf473a 944de63e CCXTXLRCTTURC
debf473a 94783bd3 LSXXTUTTUURTU
efcc5a6f d62ec6d8 DXDXDXDXDXDXDXDXS
efcc5a6f d62ec6d8 XUCUTLCXULLSLTSLSCDRS
f4301a14 4e53cd7e DSTUD
f4301a14 e5412e99 CTCRDUUTRRS
f4301a14 0b32cdc5 TRRCDCSURCRR
f4301a14 1b764992 SSUDTCCSSCSL
f4301a14 433cd6d9 RCRRLCURSSRS
f4301a14 4aed2471 SDXRRUUCLULR
f4301a14 589b9e22 XUCCCTXUDUXT
f4301a14 659046fe DXXLTTXRLCTR
f4301a14 ab7418b9 SCCDXDTCTUXX
f4301a14 c3156197 LCSTCCTLCXTU
f4301a14 d7c49abd CRTTTTLTDDXT
f4301a14 dd236a31 DRTTTUXUTTSC
f4301a14 010fd4ca UXCSRLDXXTXLC
f4301a14 064478ad SLDCXLRDRSTUS
f4301a14 06773ede DSSCRCSSXDXSX
f4301a14 0699b074 CCLTXXCDTRDUR
f4301a14 08ace106 TURRRXSCRXTLL
f4301a14 0926be2f DDRSTTTCTULSC
f4301a14 0bd7953c TSCXXXSXUCTXX
f4301a14 0f5d986b URTRRCSLTCLTC
f4301a14 113fd9b8 TDCDXTUXDUDUR
f4301a14 1151663f LXXDTRTCDRTXR
f4301a14 124b9170 DUSTTRCTTRLRS
f4301a14 12611b3e LUSRURRCUXULS
f4301a14 13109e12 SRLULCUDUDCSR
f4301a14 13f4f1d0 LLDSDRSXCLDCX
f4301a14 18a3ecf0 RDLXDSTSCTDTX
f4301a14 1a27bc56 UUDSLDLUUDCDX
f4301a14 1b37f71e LLCCCSTXSDLCT
f4301a14 1c699bd4 DRSSUXSTLLTXD
f4301a14 1e8d0c2f XTCCLLSSLSUTD
f4301a14 20c08c88 LTXDTCLXCXUDR
f4301a14 21eae32d USXXTDDLCRDXD
f4301a14 26998310 RTLDUSTUDTSRD
f4301a14 26a0316e LLXXUTUSUTLCS
f4301a14 2f25a9ac LUXXTTXTSRCXL
f4301a14 35726eed UDXUXUTCDCUUC
f4301a14 35eecbc7 CCUXCLUTXUSUR
f4301a14 35f88d1d RCSRRRCDXDUTR
f4301a14 379adff9 CTTDXUXRDSLDD
f4301a14 39e5e932 DTULLLDSRUDTS
f4301a14 3a6ead9c RSUSCCDDUTSUU
f4301a14 3e1e28e7 SCRLSLTLRUXXS
f4301a14 3fdc9d16 LDXLLDXXUURSS
f4301a14 432aa197 RCRCDUSRLUSCT
f4301a14 43579ab3 LTULUXSRDDTSD
f4301a14 45b2caba UTLDUUUDDLDUD
f4301a14 45f889cb DSSDSXRTUTSTC
f4301a14 47a58bfd SRRRUCTUXUCTU
f4301a14 4a539979 SXUSDTCRUTTSX
f4301a14 4bbe2598 ULCCTXCULSRDS
f4301a14 4d7564ac TDCSXUSDSDCCT
f4301a14 4ea209a6 CTTLTXXSRTTDL
f4301a14 4f312ce4 SSDCDRTSRXRUU
f4301a14 506d5c49 CTXDUXTRCUTCL
f4301a14 53124e06 RXSLCLUCUTTTU
f4301a14 597e59aa DRSTUTSLCCRUD
f4301a14 59f97041 CXCXTCXUTTTCR
f4301a14 5d54b1a6 RRTSLUURLRSTS
f4301a14 5f936ca6 RLUCSXXDCRUTX
f4301a14 604ec331 CDSRTTRXCRCLL
f4301a14 60d55246 TDLULDCXCCLTS
f4301a14 6440e502 LDSCXSSSCUTUC
f4301a14 6e647896 TTUDCDULSXRTU
f4301a14 706e2256 XDCXSTLTTLUCL
f4301a14 70a63cc0 LXDCTLXLXCXUX
f4301a14 71afe65e LLRDRSUSSUDSD
f4301a14 735bca0c RCXCCLXCCXLRL
f4301a14 764a3a63 TUCSDUCRULRXX
f4301a14 7926194b XRDXDLXTUXLTU
f4301a14 79c09613 CSCCULXTLSDST
f4301a14 7be0a0e1 RCLLCDLRXTRXR
f4301a14 7c13fc88 TTSRCRRSXUXLX
f4301a14 7dde8730 CSRLSULDCXRLR
f4301a14 8098062f CTRLTCXDLXLLT
f4301a14 85ae6ea2 XTCSXSXXXDUDX
f4301a14 85ec2697 LCSCCCXLCSUDR
f4301a14 86b39d8d XCXSSCUTRDRDC
f4301a14 88e8e87b XDDTLTSTRLLCU
f4301a14 8db8f73b DRDRSUSUXCXSL
f4301a14 900df0f4 TRTDTDUSRCTCX
f4301a14 90ce3b80 RUURTCURSLDRL
f4301a14 91bfa697 RCSSSCCUCXDDD
f4301a14 93b86041 ULLDDXDUXCDDS
f4301a14 94b94ac6 TXSTDRRURLUXC
f4301a14 963d9733 UDLRRSSXUCCDD
f4301a14 9bf5d492 TUULDSLCSXXCD
f4301a14 9cef13e7 TCTSUXCDSLCSD
f4301a14 9e3cb163 LDUXLXLLURXSU
f4301a14 a0328397 URLSTXUDXLSXT
f4301a14 a7ee6ebc RXDDSCDXUXCLD
f4301a14 a7fdc454 CSSTLCSULCCDL
f4301a14 a90380a8 CRXCLXUSCCDTX
f4301a14 aa486061 URXSXXLRSLCCS
f4301a14 af3e58bf CLXXULLSXCCLC
f4301a14 b1a3df7e DUDDDLURTXUDS
f4301a14 b4a6518c UDDLDXSLSLRXX
f4301a14 b536e7b3 CDLRUUCLRXSCR
f4301a14 b651ad66 LCLRCXRCCDTUT
f4301a14 b6c401e7 STSURTLCRTRCR
fb29f028 a582655e XCTCRUDUS
fb29f028 09acc0e2 DDSRTLUSRL
fb29f028 8150256f UTSLLXTULDC
fb29f028 993d44b8 RLXDDSUSXTD
fb29f028 0153d83b DSTRUCDSTRUC
fb29f028 093c4be2 LRSXCRXCCDDC
fb29f028 13617120 TLCRDSLRLSRS
fb29f028 28867c8a ULTLLCLRTUSS
fb29f028 33861b38 DTTXDCLRXCUT
fb29f028 473f07d8 UCRLSDDCTXCD
fb29f028 4cf0d27f LCSTLRDSCSLS
fb29f028 5be251d8 TDRXCXXURSUC
fb29f028 5e0e30e1 RLTTTSXUUUTL
fb29f028 746f7532 DRXCSXULLCSL
fb29f028 8f69c49c SRDUCLUTDDRC
fb29f028 ab4e1ffa RSRRXTXDUSXT
fb29f028 af14ddf2 UCXTRLCULRTC
fb29f028 bb6cbac7 XRSRLDXSSTSU
fb29f028 bf301ba2 TULLCTXCCCDX
fb29f028 c361e944 SSUUSXSUDSCD
fb29f028 c912cfad XLSURCSTRTUS
fb29f028 e88be88b STUDSXRCSSCX
fb29f028 f08d3cdb SRTRXTRTDDUX
fb29f028 014368a4 URLTTRRXXUTLU
fb29f028 03887d5a SLXDTUDSXRTDT
fb29f028 061ba5bd LSDTRUDUXTTSR
fb29f028 0bd8f5ae URTSSTTRSCCTU
fb29f028 102addf9 SSDSXUUTLLCTC
fb29f028 132de776 CRRLSSLDTLSUU
fb29f028 13f3f7fe SCCCCXDUCLXRX
fb29f028 16674d1d XRDXULRRDXLST
fb29f028 191245c8 TCSCLUUTCCLDR
fb29f028 1b5031cf RUXLCSRUSDLDD
fb29f028 1c848dac TXUTCUSCURLSC
fb29f028 22c67d81 XUSXDSXRRTCSD
fb29f028 24764932 TCRUXXUXUURUU
fb29f028 259126d3 CLCSUXTLDUDTC
fb29f028 28ec8a4d DRSTTSCULSRST
fb29f028 293e2f3c CXXXSTCDLLLCU
fb29f028 2b6b3afd SDURXSRTSTSXX
fb29f028 2be732d8 LLCXDRLRTDDTX
fb29f028 2e56fcbe SDCDRLUSUULTR
fb29f028 2ed4cf04 XDDLCSTDSRLXT
fb29f028 3178d650 SLSUCTSDRDTXX
fb29f028 31bddac2 DDLUSSDTRXRTU
fb29f028 359a9430 LCUUURDDDUSCT
fb29f028 35f08130 DTLLSDRTDUUDU
fb29f028 36e7b87a DDUTLLCTSXSXC
fb29f028 3851d64c TUSTTCLCCCUCC
fb29f028 3a1bfbe2 USXCSTCXUCSDL
fb29f028 3a44f563 SDUTSUTDSTCCT
fb29f028 3aa996b2 RSUCRDTTDRTTS
fb29f028 3d0d0abc LUUXLCLLTXRCL
fb29f028 422c6715 XLDXLSSCSDTLC
fb29f028 42b7a4fe SUURCRRXTCCLC
fb29f028 4384efd0 LCCDUSULTCTUX
fb29f028 483db457 RSCRRTXTDRLUC
fb29f028 48e7e649 SDLRURLXUTUXS
fb29f028 495d29ec DDTXUUXCXURUX
fb29f028 4b2469ed XTSSSSRRDCUCU
fb29f028 511ec3c7 CTCCDCXUULTXS
fb29f028 52f9c0ea SDRSTRCDLXDLX
fb29f028 54360b88 CDDDLUULXTUUL
fb29f028 54ee1801 UXDLSXDRURLUU
fb29f028 554bc0fa RCXTRDTDTRULL
fb29f028 561aad26 CXUUSSRRDLDCR
fb29f028 579bf0b9 SUDCSCXDTXRRS
fb29f028 5a21e819 USULXULSUUSUT
fb29f028 5b437f21 SDTXTCRSULSSL
fb29f028 5e527855 CRSLCSTRRUTDL
fb29f028 604a0360 LSCXRLUDCDLXX
fb29f028 60d555dd TXULDTSCULDRS
fb29f028 63b02e9b ULDTXSXUDLTUT
fb29f028 658a7495 CSXXLDXULDCDD
fb29f028 65bfea26 XXXUDLUTDDUCS
fb29f028 668e9c04 XUSURUXDUXSLC
fb29f028 6cdcbdc4 XRLTSDSXSTUCS
fb29f028 6f219c50 UXSRLRCDUSXCX
fb29f028 727dcaa1 RRRXXUDSTCXDT
fb29f028 74392cd1 DTXCUSCXDCRDU
fb29f028 754161c1 CLLCUXDRSDLTR
fb29f028 7ddbd0b6 TXDTCLXLLRXDC
fb29f028 8170a13f DDTDCSDCCTLCT
fb29f028 841eaf59 XDLTSUCSRSXXT
fb29f028 867c5ad8 XTXXSRCCRLDTR
fb29f028 87e7c78b SSDCRXDUCDXSC
fb29f028 89610853 TSUXXSCXCSXSU
fb29f028 8b3f3047 RCULLXLXUURTU
fb29f028 8f6618db URLTCUUCUCLCD
fb29f028 93fbd6a1 TCRTTLTXRCRSR
fb29f028 93ffb5c6 DXXTRDURTRRDT
fb29f028 94f278db RSDUSCLXTDXDX
fb29f028 981ded95 CSRLCCTDRRULU
fb29f028 9e9d5ec7 TRDXLDCUDXCXU
fb29f028 9fb3dbff SRDRULCTLDDRX
fb29f028 a110d130 XCLCRLCLSLTSC
fb29f028 a3481edf SDLSDLTTDXTST
fb29f028 a4d95e0c LCUXSUXDTTSDC
fb29f028 a64ac213 CSCDLRXCSSRLU
fb29f028 a8dd5af4 CXXSCCTLTRLLC
// Copyright 2024 Jeffrey Bosboom
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// “Software”), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// This file implements a meet-in-the-middle attack against the two hash
// functions used by the PlayStation version of Tony Hawk's Pro Skater 2 to
// recognize cheat codes (see [1] for information about the hashes), using
// the fact that the non-cryptographic hashes are invertible (see [2] for
// information about invertible hashes). To find a string of button
// presses that hashes to particular target values t1 and (optionally) t2,
// we use the inverse of the first hash function to build a hash table
// mapping hash values v1 to strings that hash to t1 when starting with
// initial state v1. To save memory, we allocate an table of 2**32 4-byte
// integers and store each string at table[v1], so that we do not have to
// store v1 explicitly. We need three bits to store one of the eight
// possible buttons, so we can store a string of up to 10 buttons in a
// table slot. Conveniently, 10 buttons is the useful limit of a 32-bit
// hash, resulting in a table with about 25% occupancy and 3% collision
// rate. Collisions are stored as a sorted array of (v1, string) pairs,
// with one of the unused high bits set on table[v1] to indicate the
// collision array must be searched. After building the hash table, we
// search forwards from the initial value of 0, looking up each hash in the
// table. On a hit, the concatenation of the current search string and the
// string stored in the table has the target hash t1. If we also have a
// target t2, we hash the string with both hash functions (computing
// intermediate values of v1 as required, because we did not store them) to
// confirm the match. As there may be many strings hashing to the given
// values, we use an ordered set to store only the N shortest strings.
//
// The actual implementation is more complicated to allow building the
// table with multiple threads (requiring atomic operations), to allow a
// parallel forward search while maintaining the N shortest strings, and to
// handle the ambiguity introduced by not storing the string length in the
// table. There is also a low-level missed optimization to unroll the
// loops ranging over the buttons in both searches so that the hash and
// inverse hash functions can be inlined.
//
// Compile with `g++ -std=c++23 -O3 -fwhole-program`. You need 2**(32+2)
// bytes = 16 gibibytes of memory for the table, plus ~4 GiB for the
// collision array and other working storage.
//
// [1]: https://32bits.substack.com/p/under-the-microscope-tony-hawks-pro
// [2]: https://marc-b-reynolds.github.io/math/2017/10/13/IntegerBijections.html
#include <cstdint>
#include <bit>
#include <vector>
#include <deque>
#include <set>
#include <tuple>
#include <span>
#include <string>
#include <string_view>
#include <optional>
#include <algorithm>
#include <iterator>
#include <utility>
#include <functional>
#include <compare>
#include <type_traits>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <future>
#include <stop_token>
#include <atomic>
#include <cerrno>
#include <cstdio>
#include <print>
#include <charconv>
#include <system_error>
#include <cstdlib>
#include <sys/mman.h>
#include <sys/resource.h>
using std::uint32_t;
using namespace std::literals::string_view_literals;
template<typename T>
class bounded_smallest {
public:
bounded_smallest(size_t capacity) : capacity_(capacity) {}
size_t size() const {return set_.size();}
size_t capacity() const {return capacity_;}
auto cbegin() const {return set_.cbegin();}
auto cend() const {return set_.cend();}
void insert(T& t) {
auto i = set_.lower_bound(t);
if (i != set_.end()) {
set_.insert(i, t); // no-op if already present
if (set_.size() > capacity_)
set_.erase(std::prev(set_.end()));
} else if (set_.size() < capacity_)
set_.insert(i, t);
}
void insert(T&& t) {
auto i = set_.lower_bound(t);
if (i != set_.end()) {
set_.insert(i, std::move(t)); // no-op if already present
if (set_.size() > capacity_)
set_.erase(std::prev(set_.end()));
} else if (set_.size() < capacity_)
set_.insert(i, std::move(t));
}
private:
size_t capacity_;
std::set<T> set_;
};
template<typename T>
class blocking_queue {
public:
using size_type = unsigned int;
size_type size() const {
lock_guard lock(mutex_);
return static_cast<size_type>(queue_.size());
}
void put(const T& item) {
wait_guard lock(mutex_);
queue_.push_back(item);
nonempty_.notify_one();
}
void put(T&& item) {
wait_guard lock(mutex_);
queue_.push_back(std::move(item));
nonempty_.notify_one();
}
T take() {
wait_guard lock(mutex_);
nonempty_.wait(lock, [&]{return !queue_.empty();});
T ret = std::move(queue_.front());
queue_.pop_front();
return ret;
}
private:
using mutex_type = std::mutex;
using lock_guard = std::lock_guard<mutex_type>;
using wait_guard = std::unique_lock<mutex_type>;
mutable std::mutex mutex_;
std::condition_variable nonempty_;
std::deque<T> queue_;
};
class thread_pool {
public:
thread_pool(unsigned int threads) {
for (unsigned int i = 0; i < threads; ++i)
threads_.emplace_back(&thread_pool::threadproc, std::ref(tasks_));
}
~thread_pool() {
for (auto& t : threads_)
t.get_stop_source().request_stop();
for (auto& _ : threads_)
submit(+[]{}).get();
}
auto size() const {return threads_.size();}
template<typename Callable>
auto submit(Callable&& callable) -> std::future<decltype(std::forward<Callable>(callable)())> {
std::packaged_task<decltype(std::forward<Callable>(callable)())()> task(std::forward<Callable>(callable));
auto f = task.get_future();
std::packaged_task<void()> wrapper_task(std::move(task));
tasks_.put(std::move(wrapper_task));
return f;
}
private:
static void threadproc(std::stop_token st, blocking_queue<std::packaged_task<void()>>& tasks) {
while (!st.stop_requested())
tasks.take()();
}
blocking_queue<std::packaged_task<void()>> tasks_;
std::vector<std::jthread> threads_;
};
template<int Base>
uint32_t parse_int(std::string_view s) {
uint32_t value;
if (auto r = std::from_chars(s.begin(), s.end(), value, Base); r.ec == std::errc{} && r.ptr == s.end())
return value;
std::print(stderr, "argument parse failure\n");
std::exit(1);
}
template<uint32_t A>
uint32_t round1(uint32_t v1) {
v1 ^= A;
v1 = std::rotl(v1, 1);
v1 *= 0x209U;
return v1;
}
template<uint32_t A>
uint32_t iround1(uint32_t v1) {
v1 *= 0x73F62C39u;
v1 = std::rotr(v1, 1);
v1 ^= A;
return v1;
}
template<uint32_t B>
uint32_t round2(uint32_t v1, uint32_t v2) {
v2 ^= B;
v2 = std::rotl(v2, 1);
v1 >>= 8;
v1 <<= 1;
v2 ^= v1;
return v2;
}
template<uint32_t B>
uint32_t iround2(uint32_t v1, uint32_t v2) {
v1 >>= 8;
v1 <<= 1;
v2 ^= v1;
v2 = std::rotr(v2, 1);
v2 ^= B;
return v2;
}
using round1_func = uint32_t(uint32_t);
using round2_func = uint32_t(uint32_t, uint32_t);
struct Symbol {
round1_func* round1;
round1_func* iround1;
round2_func* round2;
round2_func* iround2;
uint32_t index;
const char name;
};
// Because these are all compile-time constants, if the compiler unrolls the
// loop over the arrays, it can inline the pointed-to functions. GCC seems
// unwilling to do that, probably because of the recursive call in the loop.
constexpr Symbol SYMBOLS[] = {
{&round1<0x03185332u>, &iround1<0x03185332u>, &round2<0x80FE4187u>, &iround2<0x80FE4187u>, 0u, 'S'},
{&round1<0xB87610DBu>, &iround1<0xB87610DBu>, &round2<0xDE098401u>, &iround2<0xDE098401u>, 1u, 'X'},
{&round1<0xDEADBEEFu>, &iround1<0xDEADBEEFu>, &round2<0xFE3010F3u>, &iround2<0xFE3010F3u>, 2u, 'C'},
{&round1<0x31415926u>, &iround1<0x31415926u>, &round2<0x7720DE42u>, &iround2<0x7720DE42u>, 3u, 'T'},
{&round1<0x93FE1682u>, &iround1<0x93FE1682u>, &round2<0x92551072u>, &iround2<0x92551072u>, 4u, 'L'},
{&round1<0x776643D1u>, &iround1<0x776643D1u>, &round2<0x0901D3E8u>, &iround2<0x0901D3E8u>, 5u, 'D'},
{&round1<0xAB432901u>, &iround1<0xAB432901u>, &round2<0x88D3A109u>, &iround2<0x88D3A109u>, 6u, 'R'},
{&round1<0x01234567u>, &iround1<0x01234567u>, &round2<0x34859F3Au>, &iround2<0x34859F3Au>, 7u, 'U'},
};
void invertibility_self_test(thread_pool& pool) {
auto impl = [](Symbol s) {
for (uint32_t v1 = 0xFFFFFFFFu; v1-- > 0;) {
auto a = s.round1(v1);
auto b = s.iround1(a);
auto c = s.iround1(v1);
auto d = s.round1(c);
if (b != v1 || d != v1) {
std::print(stderr, "{} {:08x} {:08x} {:08x} {:08x} {:08x}\n", s.name, v1, a, b, c, d);
std::exit(1);
}
}
};
std::vector<std::future<void>> futures;
for (auto& s : SYMBOLS)
futures.push_back(pool.submit(std::bind_front(impl, s)));
for (auto& f : futures)
f.get();
}
constexpr uint32_t VALID = 1 << 31;
constexpr uint32_t COLLISION = 1 << 30;
std::span<uint32_t> map_table() {
auto length = sizeof(uint32_t) * (1z << 32);
auto addr = mmap(nullptr, length, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
if (addr == MAP_FAILED) {
std::print(stderr, "mmap failure {}\n", errno);
std::exit(1);
}
madvise(addr, length, MADV_DONTDUMP);
madvise(addr, length, MADV_HUGEPAGE);
// Prefaulting the page tables cuts system time by a factor of 10
// but has no effect on the overall wall-clock time.
madvise(addr, length, MADV_POPULATE_WRITE);
return {static_cast<uint32_t*>(addr), length / sizeof(uint32_t)};
}
using collision_buffer = std::vector<std::pair<uint32_t, uint32_t>>;
collision_buffer fill_table(std::span<uint32_t> table, uint32_t v1, uint32_t string, int length) {
collision_buffer collisions;
auto impl = [table, &collisions](uint32_t v1, uint32_t string, int length, auto& recurse) -> void {
string <<= 3;
string |= VALID;
for (auto& symbol : SYMBOLS) {
auto new_v1 = symbol.iround1(v1);
auto new_string = string | symbol.index;
// If the cell is empty, set the VALID flag but not the COLLISION flag.
// Otherwise (unconditionally), set both flags and store the old value
// in this thread's collision buffer.
std::atomic_ref slot{table[new_v1]};
uint32_t expected = 0;
if (!slot.compare_exchange_strong(expected, new_string, std::memory_order_relaxed))
collisions.emplace_back(new_v1, slot.exchange(COLLISION | new_string, std::memory_order_relaxed));
if (length > 0)
recurse(new_v1, new_string, length-1, recurse);
}
};
impl(v1, string, length, impl);
return collisions;
}
collision_buffer fill_table_parallel(thread_pool& pool, std::span<uint32_t> table, uint32_t v1, int length) {
table[v1] = VALID; // empty string
if (length <= 2)
return fill_table(table, v1, 0, length);
std::deque<std::future<collision_buffer>> futures;
uint32_t string = 0;
futures.push_back(pool.submit(std::bind_front(fill_table, table, v1, string, 1)));
for (auto& symbol1 : SYMBOLS) {
auto new_v1 = symbol1.iround1(v1);
auto new_string = (string << 3) | symbol1.index;
for (auto& symbol2 : SYMBOLS) {
auto newer_v1 = symbol2.iround1(new_v1);
auto newer_string = (new_string << 3) | symbol2.index;
futures.push_back(pool.submit(std::bind_front(fill_table, table, newer_v1, newer_string, length-2)));
}
}
collision_buffer collisions;
while (!futures.empty()) {
auto r = futures.front().get();
futures.pop_front();
collisions.insert(collisions.end(), r.begin(), r.end());
}
return collisions;
}
struct Solution {
std::string buttons;
uint32_t v1, v2;
friend std::strong_ordering operator<=>(const Solution& a, const Solution& b) {
auto a_size = a.buttons.size(), b_size = b.buttons.size();
return std::tie(a.v1, a_size, a.v2, a.buttons) <=>
std::tie(b.v1, b_size, b.v2, b.buttons);
}
friend bool operator==(const Solution&, const Solution&) = default;
};
void check_match(std::vector<uint32_t> string, uint32_t reverse_string, uint32_t t1, std::optional<uint32_t> t2,
bounded_smallest<Solution>& solutions) {
reverse_string &= ~(VALID | COLLISION);
// Because 0 is a valid symbol index, we don't know how many 0s
// the string ends with. Just add all 10 possible symbols and
// check after each symbol.
for (int i = 0; i < 10; ++i) {
string.push_back(reverse_string & 0b111);
reverse_string >>= 3;
}
uint32_t v1 = 0, v2 = 0;
std::string result;
for (size_t i = 0; i < string.size(); ++i) {
auto& symbol = SYMBOLS[string[i]];
v1 = symbol.round1(v1);
v2 = symbol.round2(v1, v2);
result += symbol.name;
if (v1 == t1 && (!t2 || v2 == *t2))
solutions.insert({result, v1, v2});
}
}
struct pair_first_comp {
template<typename A, typename B, typename T>
bool operator()(const std::pair<A, B>& p, const T& t) {return p.first < t;}
template<typename A, typename B, typename T>
bool operator()(const T& t, const std::pair<A, B>& p) {return t < p.first;}
};
bounded_smallest<Solution> search_table(std::span<uint32_t> table, const collision_buffer& collisions,
std::vector<uint32_t> string, int length, uint32_t t1, std::optional<uint32_t> t2, size_t solution_capacity) {
bounded_smallest<Solution> solutions{solution_capacity};
auto impl = [table, &collisions, &string, t1, t2, &solutions](uint32_t v1, int length, auto& recurse) -> void {
string.push_back(0);
for (auto& symbol : SYMBOLS) {
auto new_v1 = symbol.round1(v1);
string.back() = symbol.index;
if (auto reverse_string = table[new_v1]) {
check_match(string, reverse_string, t1, t2, solutions);
if (reverse_string & COLLISION) {
auto range = std::equal_range(collisions.begin(), collisions.end(), new_v1, pair_first_comp());
for (auto i = range.first; i != range.second; ++i)
check_match(string, i->second, t1, t2, solutions);
}
}
if (length)
recurse(new_v1, length-1, recurse);
}
string.pop_back();
};
uint32_t v1 = 0;
for (uint32_t symbol_index : string)
v1 = SYMBOLS[symbol_index].round1(v1);
impl(v1, length, impl);
return solutions;
}
auto search_table_parallel(thread_pool& pool, std::span<uint32_t> table, const collision_buffer& collisions, int length,
uint32_t t1, std::optional<uint32_t> t2, size_t solution_capacity) {
if (length <= 2) {
auto solutions = search_table(table, collisions, {}, length, t1, t2, solution_capacity);
return std::vector<Solution>(solutions.cbegin(), solutions.cend());
}
std::vector<std::future<bounded_smallest<Solution>>> futures;
futures.push_back(pool.submit(std::bind_front(search_table, table, std::cref(collisions),
std::vector<uint32_t>{}, 2, t1, t2, solution_capacity)));
for (auto& symbol1 : SYMBOLS) {
for (auto& symbol2 : SYMBOLS) {
std::vector<uint32_t> string = {symbol1.index, symbol2.index};
futures.push_back(pool.submit(std::bind_front(search_table, table, std::cref(collisions),
string, length-2, t1, t2, solution_capacity)));
}
}
std::vector<Solution> solutions;
for (auto& f : futures) {
auto r = f.get();
solutions.insert(solutions.end(), r.cbegin(), r.cend());
std::sort(solutions.begin(), solutions.end());
solutions.erase(std::unique(solutions.begin(), solutions.end()), solutions.end());
if (solutions.size() > solution_capacity)
solutions.erase(solutions.begin() + solution_capacity, solutions.end());
}
return solutions;
}
using best_clock = std::conditional<std::chrono::high_resolution_clock::is_steady,
std::chrono::high_resolution_clock, std::chrono::steady_clock>::type;
int main(int argc, char* argv[]) {
unsigned int thread_count = std::thread::hardware_concurrency();
bool self_test = false;
int forward_length = 11, backward_length = 10;
size_t solution_capacity = 500;
std::vector<uint32_t> positionals;
for (int i = 1; i < argc; ++i)
if (argv[i] == "--self-test"sv)
self_test = true;
else if (argv[i] == "--forward-length"sv)
forward_length = std::clamp(parse_int<10>(argv[++i]), 1u, 100u);
else if (argv[i] == "--backward-length"sv)
backward_length = std::clamp(parse_int<10>(argv[++i]), 1u, 10u);
else if (argv[i] == "--max-solutions"sv)
solution_capacity = parse_int<10>(argv[++i]);
else if (argv[i] == "--threads"sv)
thread_count = parse_int<10>(argv[++i]);
else
positionals.push_back(parse_int<16>(argv[i]));
uint32_t v1 = positionals.at(0);
std::optional<uint32_t> v2;
if (positionals.size() > 1)
v2 = positionals.at(1);
thread_pool pool{thread_count};
if (self_test)
invertibility_self_test(pool);
if (v2)
std::print(stderr, "Searching for up to {} solutions to {:08x} {:08x} using {} threads, "
"backward length {}, forward length {}.\n", solution_capacity, v1, *v2, pool.size(),
backward_length, forward_length);
else
std::print(stderr, "Searching for up to {} solutions to {:08x} <any> using {} threads, "
"backward length {}, forward length {}.\n", solution_capacity, v1, pool.size(),
backward_length, forward_length);
auto table_begin = best_clock::now();
auto table = map_table();
auto collisions = fill_table_parallel(pool, table, v1, backward_length-1);
size_t valid_slots = 0, collision_slots = 0;
for (uint32_t h : table) {
valid_slots += bool(h);
collision_slots += bool(h & COLLISION);
}
auto table_end = best_clock::now();
std::print(stderr, "{} slots ({:.1f}% occupancy), "
"{} collision slots ({:.1f}%), "
"{} collision records ({:.3f} per slot), "
"{} total points, "
"{:.3f}s.\n",
valid_slots, (valid_slots * 100.0) / table.size(),
collision_slots, (collision_slots * 100.0) / table.size(),
collisions.size(), ((double)collisions.size()) / collision_slots,
valid_slots + collisions.size(),
std::chrono::duration<double>(table_end - table_begin).count());
auto sort_begin = best_clock::now();
std::sort(collisions.begin(), collisions.end());
auto sort_end = best_clock::now();
std::print(stderr, "Sorted collisions in {:3f}s.\n",
std::chrono::duration<double>(sort_end - sort_begin).count());
auto search_begin = best_clock::now();
auto solutions = search_table_parallel(pool, table, collisions, forward_length-1, v1, v2, solution_capacity);
auto search_end = best_clock::now();
std::print(stderr, "Found {} solutions in {}s.\n", solutions.size(),
std::chrono::duration<double>(search_end - search_begin).count());
for (auto& s : solutions)
std::print("{:08x} {:08x} {}\n", s.v1, s.v2, s.buttons);
struct rusage usage = {};
getrusage(RUSAGE_SELF, &usage);
double user = usage.ru_utime.tv_sec + usage.ru_utime.tv_usec / 1000000,
system = usage.ru_stime.tv_sec + usage.ru_stime.tv_usec / 1000000,
total = user + system;
std::print(stderr, "user {:.3f}s, system {:.3f}s, total {:3f}s; "
"{} kB RSS, {} major, {} minor faults; "
"{} voluntary, {} involuntary switches.\n",
user, system, total,
usage.ru_maxrss, usage.ru_minflt, usage.ru_majflt,
usage.ru_nvcsw, usage.ru_nivcsw);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment