gmsm/mldsa/mldsa65_test.go

191 lines
177 KiB
Go
Raw Normal View History

// Copyright 2025 Sun Yimin. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
//go:build go1.24
package mldsa
import (
"bytes"
"encoding/hex"
"testing"
)
// https://github.com/usnistgov/ACVP-Server/blob/master/gen-val/json-files/ML-DSA-keyGen-FIPS204/internalProjection.json
var kenGen65InternalProjectionCases = []struct {
seed string
pk string
sk string
}{
{
"AC37688A229C819F1F5BA5A2ED98E3D0AD98D1B5DB233FF8E8122040BCBA609F",
"FED3FFCDEC5BEE2E82D7AC7F2A244035B5AA94C1E0E6A2141C4ACEB45165A1A22E5C51360E29F01012D26E77A00A9F004A4F155C7E0EF6EA1211EF5DF3553D0FE7EF74EF13C1C4794E67F1667A9D6FD1E9254D52C5FA68768CF14AF5E337F9661935BBA4A6E0B08F3DEA4B687EFAA73C05484B28D79866CD9CCB4AA1F7107DC5A0CD21EC6F93798AC1B6849717D0BFF431E95DE178C18D13018157565662EA5E72FEC778E877357CDB248D728E43C247FB5692607449790074668757119543C00F94B50D500B85760B3744154912C7C769F155D475A1E5D1C6656F68356A24FC8222E7CCC401EDA319E919E0575BDED0694121400EF991D64908356DC31D51C242B818D406998293CA9C8FE41A9833C09CDC439E1A857F6508FECD89541DFC41D898DA4986244B569D85669C76DF202044867A7827B6EF19FF601C3A1E162C20FBD4B0E22EBAF49CB0A978B2755E3ED4995BA2277F182177E6E86F54131C6D4DCF1059B57A26810A1F0C143655502BC54CB8AB7A4612D81DE9814B037A6CDCF6CAAFF25CAE2CED59013037ECCFC5EF1965E4FC22F50C80689541C2B3BF54E27CE2DF7B7945426128F173064C9626A0F778131D46A4F6405628AE8D93FB5EAAAC8D8109B61813CD6E862CE6262BA8C1FE5EC323188827877CEBC9CE15E6CF106E6B854721E1F4EC83CEC4591BEBF85D1FB0E5C4FDB3DBF11754CD479B1FF60481172B62D9442564818725206C541C422160964B8F0414F09BCC1FFECE91D3B882D731EE8F23934BB379650FD413B426CD27CDBCB144637A216A944A49782D452654599FD70FED0B279E1251B9E2D0A009F66FEA00EC1707AC9F8AC2B05A1CE824EA6B1D1D7C338D4D0420FE7AA1ED6AE083752B4B43460CFE26C5951491CD5A2071467491B8CE576E389A9C556B4CFF6E76ED33A9BE9E15CDB20DDF3576376F494D39E9CB023DBFE3DB98FF49D06803E5BB7B0890546B2BEA2587601C08F42F7A659D3F49EBF277B12DB92AB8E0AD17B311A955C92B8FD162D0C4912BD07DB57C8C4F925BCDAA780F15146FEF01AB9E35563E2FBDAEBC74766DC4A46E0F7194FF218A0748270D29E7B37413B12C4D62CA9A6564EAC709C9638F984B7F791D4D2A0AA3752AB83726676D2B531574791FF148F352C901077086D45C3CDE21B7C6B9D663967E8263EC3595E447890EE3BBD8775DFC4B692E912B082F6565514729AA6D42B4965016C8B6D57C8A3EE6A87ACD2837C381005CE99954F7DB890184B97421F21690D4355061D33043E942A354776E13E1799071A4792F0B93BA11EAA5470227916DA23D1D0DC0A748B7BA89B83EAE5A4F32DB82418AC7318E9A829D8FCEBBC50C8645A4B4CA9224489B8DAD067F282DDC14CDFA92204048F5C549403CFC1A90EE3D237081BE018C099F28284CDD19D8E5EC5A9B3924C7439A5C5CD6BB052AFF7A396C43879EF9C3F8D0FD7164551924BC3DB704C592683591303E5F281C1211FB2387A9B34D827E1FB01823EB99A1C04DEDCD52D9DC0092AF751CDCEDEE65D549F30F8B86D2376814207A7F12A485208440B1E333D07E253B4D40CF0A186D1F0D677EC60627BA1BDC71195A59573D801CA3F4E665B54FF370F83D5EA33966DC0F43002E48EF7AE8A6FFD9EF433D43DD08B57473AC83C4AEF6181A0FACD0E1A76850D8F9634C18F76ED876DC8223E3B1084C440D12EA9F4709924D2901D8BD7CF9038CBCFBC073BC33568151124F2B4BF4BC3308AD17BBF322F4031A9B2B4452EBAA3A56C064A738AB8ED6989751971856130C5ADFC9C02BF37DA983F5AAD3BBB55D7A3100CF9A18971A10C38F49B4595D9D5C943ADA67234B9700B8E7B4B690FEB3EA4056EA583DAD0E5FEFB337ACACC399D3FE4DA118977976247DA08C4670F1CCDD68A3A0DFDFDF1A01D296EA2D8C2373453D7E7755B24CB2A97FE81D8E5E7FF922648D894683EF7463FA6016193B81349A6A9320D8B60DCF8781711CC72ADE2CB21114E15C2B177528F07AAFD75CFCE3B6C4D2886E08B3E9C5B988A502D798A9622632BBF060601CCD012BB18896C122A66066B412FE60BECC805D721F795A0484ECCD3342ABF33BCE10AC494279E4DD8CA609470491EEC880D4632F5D70BADB3A01AC29D3C06D252E2FB8A60604628AD2032FA129479AE9221AEBF9B50E261820C51C5B8627033F499857E33AD1D110664D40B015A6B05974BB034B12447B5D8EC1A052592C4A7C0EEB59E700A88834BEA9662C6BD970C3B0ED02BE2729BB9C19386C104CD7EC175F6EE2B00904958BF29540F37E6A46DA3B579D707B109A7775C4D51C28F90442551507F81F61C6D51106C7AA47314B29EED498C1024DD0F83065AEE112C64E6243EE016BC0CF320547C8BEF938F294778FFCF6EAA97B52F3047FE9A55EA88F4BDC368E793A31074A314D311CAB882B008EF853F0CB90071531D231D1DF12F99E2AEA91BC206A51A2504A5094C32746E119769AFF4E63BD01817890A4D4706D43E1A3031195A778087D73D64E7C4DF8744258B780F47769C274705814A272FAB4AA54294140D98DDA6D60E2E554E026AA3C8D756ADE20B9BD6951E3CDFC619E2A119177262A62C06606ABC298A823A739A0281D0A64F320FC7B8405F01BE6A30C26DCA683ACB7537FC0A5BA2B3682703CAA4F8F1DD9482887FBD3AFC894E3CA2A9DE3D5D06E20BAEFE7AC0A120C9E129CBD5F63586136DA805FEA7FC89339A96C8F909E2A242C89A4EB503AA2DF28C0C08C721557",
"FED3FFCDEC5BEE2E82D7AC7F2A244035B5AA94C1E0E6A2141C4ACEB45165A1A2CEA7591B846404B1385D720D4BC4BAEA2756B4CDF0B65A5A3439A2DD78453970F1254575EF25AD8B827881B5E1451EDA2EBDFC64DEEB72F6895663E6585311B42F3566739CBBC6DB2FDE642A3652E581A0B92791809696AA658E9D49931AB2E6267517630625568015403702634158601801407655365704035075831715573585800256678771033384533133541110214433172831727657228271604600277523852071551071448453805480686445025683741086385717011560134172378763628628645128088266712732863280751762304516042877057088124621563518856234056706424832536838545786170006507211266556037742857211566418215714532776165588426734070117182380435037767144132720368182544562687234143433334026763561488521704018524134245058877080413284543745185202074731885306400402504461617600048427581431668081513586057508663534436680501551737038880744430317308128424411130316045401041118068572264584885046768367327145732562677438185185513623306353287405536225581186750066525758707051020746877416017664010555801321630146767762051270161863162681562353273720786713221807232511823764871844145854287528871301275741560605603264212375450737648801810322304567761843688410075408868848116051553384713515231127860665408873402327447755122288075256728365308516213776778221755768816200421451200080831343538675676833653487682612000382563432833172546487405533141418866884115511551026761133725677466265053250414540481532572326302344751624102042485020844736232163405268772721314126385478547462750031146447337012360152518661174840553626186044608801322686116258434861313031381730013702622667400727446521027703858655645020547280752331163784145437231114544762038737080323605766443737307253438121247171458160484671260336141533826012514487342403185361501536228421762455228465134810468476450123645520202731662374355136721364517034446314078278701262216773070018817233517431736682135607064377288170584762850011156217164750123848141414640046371241011822272317287568614834284251316825465636703306705460224475812752836862204814008216072528566007811054624678621565763581213010248132752255018155222840425171221504418518183465837667887286760386411368142156618452416876075651455267242684575512256141043717123222277181606317204626876187244666645840351337143527845340652648844573250506527546440511156556157304060516608316456418646537341144258860104124416157180611011441224764687085523508444401168457705268401674251371117650124003471300863737075070018564177815604676674184530414115624768474322051438635287555327566175883054458603345315524030533682872464363542241158417634854242367080023885630461616046666564446670240565281171325533611488242485666548526426507026645078171686650254137556540165575214140461324806163721377780276525144151770203110783867141310551657227681400642274414211253085323683036754184142311854541434022708644546118000322700667414510264586566480863211300610838715871878546825813060681253364878072230543023213141402775688416056625254807274273202510551068783625331316045227874723870801257233118344267375403845424177222455631702207121621742045817470707827555353185768483581816873674228061764175367100352408505502287477275153166384172D7809EAC4F3AB4B48FD88A77955FA1C8B8DC23050B094C3919C33E372C511077C8816308A3C98F4286C24ECA70DA6B9D553FA7F6B309E5A8EA8F06CCE682C1E086ACA784B10B85624F77D0BB176B99D356FA947224D72C6CB4710330E617E55A136A7B4795077CFBC9D79CAF7BD7A6CAE694B583E818DF2679410DF3B7186093D49E98829F121145782A3903D7D037535641B99D039A1C5C64B77DC7CDDD5FC45AC9AE79CF35CBECD1FA668D4F76AB003AEAC9FEEC495D5B01AF443E4843DECB9C666417A24DDE8173F9A4FF8DB0B42DBB8A37A6D085C5BEDC99C70F0103030AE938D3190059AFC18CF76D0D10957B0F2749E46BEBA988C1C26D19AE303BA625452DE9D6B078EB06730264CF621F03EE6ED2FCD3AFBC28F0ED543A91E68C64AC7C2726E7A85AADDFCCC20D159F9F0B2B9DA71C6EBFFFDFEB9F9BCE4D1A15AFC7B1AA6464664C59E6643EFCECF2E359F3091D5EC672893F3FE70D1526853DB0E7155B8D001B6121B487C967FCE3C1DB4F1CA6CC76FE876050E44F1BE1E5F7C0964439925B41E8EBC34DC9BC973858D468CEB9EC5A92FE9AFCA7B5A1A28A0BD506AF5F20E87D8FC975B4E6C5ED7DC010756A0DAF1927210871D185BBA87DF5CF5355EE16123529544B9EC49DF79B3F3159572CA87C3144B281EF698A44437A352404981CBD29354A0F15BF71EC37A8C005DE81C96F361465DF6F416E04FC5
},
{
"97A6F36CCE36AF6283B335B4957BD8B177AE229AB8A4FA8AD7AE4134DE26955F",
"763BE1553B7C0293F215F7A3342B6C7988B5303A0C21C7DDFD52070D58D0425CF5940A68358FD5A99211EF8D45E86F38470D788F7C2D81730C1A6B67BC639F9845826B855FD88F13B83AADD1F082B4E23136A9870946FEA44C6CA9430E98BD181180656EF5DF1F45E41F208BDBF00370AD6EE0A8041851B3E172B97602CFE2A70365C67334FDB84041269E83EFF87B2CBB49CCEF717AB87677F76DEED2B403E2FE36B09F019985AEA0C69769CBD050CDA3E59F002099F501B53C0E259604E8E31551676220F29F11871BE2DD5BF2723BC78794E3D3861740D4B3084195C9DD38C5204D8D57ED78E35FB25ECC222E63C8C2B1F147FA31420BA68DCA9CA5C2E4F0DE80E6046D01432D2DE664702ED166ADDD87F60934CD320E67916D0E2B38D58A9D2C70461D60AEBEFEA9324AC91A21037E35E8672FAC93C2D68E14334D19B0EC290F85ED6BD1A3D768470EA612404400563261D1FE552E91223255458C0B4CC8C65708DC58098D289FD4CF7518D1D55BE14EA8257AEFC1BF67657C1F7BE3EC79F32DAB9D3B561ED3C441C773BCE047725E052AE5FF7A40F8BBB270C1133020872C0479FD180C1CF006256E060E3A617DBF6FDDE325F922886FA608731B152BFD31AD15080322E205A41C0BEA25C424FE3E8F95F048D4E756DACCBA2E9D9642C7F0A1DF4153B18AAD555E6C6350ED517B07771B133E2F344BBA98FA722187A8E2CEF7F1CF61CC9D081DF37BF539099E83FABFFE8AA29EEB19F51DE7540799480E5CD8F281173E2822E3A5B3438727D2D19C128441705DD855145AC56F7C4E34B7869818502129B9CDFE2FA846BBBC055B57E33C6B372035AB0F057ACF8530F5FCFBC7C66123D8B09C54100BB4D84EA2CA9C26CBBFD98811C38743B39ED123AB4B38A5056F677A7BF8BD300FEBA735136A3E15F180BB688208750884F036E395671DEDE8A1EF8B6E2F0AA0DEC2FA4CA4FDE40402704DFEE32343BB4836FD74568F70BD0B13B50D1C19087427736C2CB1CAF00BC0D6935B1CCFF86B599F67CF9A6778D1DC39F8989B7952CD6DD68BF3ED3BDA106E63FBBACB50B7A1E34E899A6891035DD9C3FD48272AD1E20E67FD0F9113410823DCD169E6BA043445E22B8E9053E8EE18219F5787AA53683EFE5F404D280671A98B9D1813D4AE165EE97A65BB1DE237FF990FA4AE741AB44ADC7985C11BF79BB68C434D34C6231BA836359C1E9ED06A6D46F457150B8D9772714B9E6A5EEC6A405BDFDF52345D1F0DE7EF3A2EA4B139824C1150AB2610A5294427005D40BC269BDBBC1E522A1D766F172DE6395B4BFD5D2A5A88EE2079B19DCFDCAA4E7AC39ACD7C0275A3C71A9D77D949CFD57CB7F5D4063B2F7F81AA5C34AE5385A478469FEF3BC96DF48F8E43ECBC1AE143153DA077F9479D9408405B1FD82A9D4748A9A899499D89ACA317345A2F50E63A3FA2EDE37CE58DB19DB6BF3821AA524618FC0E7AF8B4CB33AB1C32B1C08E665CC1489F69770B6CC7CD95554BEB0185B287D964D396A1CA091BCB91FE4378DEBE8EA0230ED85170D6C1F69C7316FA4AC7E1BE0A7830D075DBDDAE8D732E2F474F357E73041650EBCEC8B4DC503F5B842394659A63378679F7C49125953FDCFEEFF6C8032F7385D96F23EFD746FAB6301B2EA8BA7903837E6277A624A41361A8A7CB1C56E244BCB960A5115A0E7B3A2C114C07D54BFE38CDF78FEB4BD1A8B3D2870785E2D3EE01689E211FE57174F802D5A2895C6A8BA905D3B707A471C42663F00BACEA5AF77EE6258FC5BF9B6762E29B9205D65F245A9E19FF14512CFE7DA2910CE0A0AE2B40ED0DD2D0AB5D76886C4A9A4D7E49794920DCADD783A00EE9170683FCB993ACDE4BFC7CB93F71AE5C7EB85F7A3E421295CD86B88677745677B965BD6CBC24FFDC3B1EA2B4B344654E3B878E0A241B28092852FE78F93DC859112CE629D69ABC18CE9B24130516770DA6C25484EB4989A88600C39243475FFF467645221F051E491C295EEE82FAC9ECBE96B5910F41E00295E8EA2347642125E30C6B039011068789684582816FF9CF804D705E624D23196EB46DCD6C44957131388105D08EAD16FD119318B3EA8DEE5D23578A8E8490C57738A77614E6137ED1B9E2B47BBBB3DA5AD05CBE7FD319F50A0AF89BCE611FDAF267CABDE6D0C5D6E9BE881AC3C04C1D5815F2982469ED9B15C11B599B15090A42528AC55CDA93FC8FA12E9090EE91BC7F00EFB86105951D6A7746B008D406D73AF7034D79712CB732AFFFD0F3F779396E155620B5112663B3359F13243F4609C5219CD856C59560248C22E8EF15D612B18A3D85A50E08B114207FDDF30AFB1DE3C46876C9138F0E6181DF30A7862261FBB4F4AE13BEDDA1D9AD4093E5F1E6A835CCB6B93BF9051BE35A9F10D7837C161373FC9D575D7B7CF583F5BDB2F64BE58CACD5771E1D364EB7A81E016DD9DC60D7430F9E9AB336432193554715CEA37DA3CA65AF613C7463B1C7E02BE1E1E0FA235A785489F4CF074F29D7162DA9EDA8ECCFCB08292B79B000194CF7BB392738C5B6775DBFB8A053C5BAA457DB653396AAA721B6C825EE1663D300E11301AAA4B2B6A34A5BC52BB1FE5707E61DE52F47750E0C88972CBED626F88A62277135921EF416CC4E5FEB415A6EE4B0D89CD3462580B349034E7DFE05FE220A85E38A30DCDA3A5F60F17590E976484DD6CA4B2BE10638752E2B30154FB6DB83E19C1B188B5D99843979C97AE81C879B15429EBB9B2B2E8EF5580341E13A3A",
"763BE1553B7C0293F215F7A3342B6C7988B5303A0C21C7DDFD52070D58D0425C50F52CE6C98A3C296E1D040101B6D8F72B0958EC699E3D70E3E66D14B60E9AD4C16528F441CE3A420C690AC32CB8D885F314E9F36E99F6A7517AA7715CFD7B0A156A3B27C73AC0359955BA52F5CB2FB408D8E23027BD913B60FC2B1C3CA99FDE612726330281546676725565327771153012071345442368432431515347520828553611610020464115114738172150076288736805373513407850261524370665685648350225525124342433351658503201041186234771460707751672737365310771584071427733178536180507476380318067657101145073775767705177242162584146578886675646070474465076148387404588180331568075332684061416172863338111613862305314170412753502080046121176520503058846805782104610326680702436754286117483316400042875521658823263210435315280118503135055614451617465463678230780666762354887677302380001010716431812171141486303066587102434741408531080551337858600476503022531542041772765340257357457676051613305760317544431662854327805742105005625007165823640152836610485553322520724425546484080304635777831167545883221047720356783312175223041177307473452780723674760042361010042206408817258756260321717080738148388861503523763376475672546165202142622716423215341371286681752820043103701247760266184277038427045601746261077275584343584012206378570577330163221475805602751462080807782464847051055348135243222771823621183354243134661478287535377145172678571551758740784718734608281508523771058062820743610486328453421232305434724651313533537757536000858737761543084768704738541365544886448165543346244780283781506361440014012235416580472301400652210643771686055423711687100201478507148475312366134650213737784181533474621118575076307105321263246714320541284461623512001517004252425101686520304645741487378626605658626148175880014046580182378032375665460240778365812537660220854147718126733237518514277374150646205633778775863715321280784186626013826010123820187808440515188825525007136216261310250580277878216655272668427636618025503204302417704330684147121246502602401126043527135418578275080424332141345558887333663162526780632004716145018057566735815726885475882774520288402075002676661247043254840882052088562744722013066072410407322574834022312685153314243156057442302446587108168738486167061052248224350705420202241700783427272778677036154208328210220557786421761355501502805618250864525654461428436464734065651577200108070672338463062010072532274377134841870188414037037146502722233844637826724020321228620625383480680400517837540471373321713567641872217610153230427005567665427606254775350847102456613845772181873244478766514522125826315427824473481256570437810675287426361247021620765302381013358277226230132656387586851714264321008076368367208818383873735425848756563136642578788456047651141237421450060124706171556614651867780386415575376435733677313541652152668527281153316125686515413206847062851821070568250408030864411811454158013077848106082648505012058387783744740370450664506226877566802582687587207144608372884606738580777370486380476454334367622385563704036232267705336255540711161236566015624384546446425072461727350110660253046186546368838443652267576074347252582681027261ADB6294EAECDB9A4C9D34B84C48F2A05C881AA4608621BDD67538F2004D57F82110B539444A9D68BFD2983C040BF4AF3738171A4B61B37A74BFEF2103B39A1C8ABB0257D0FFCD4482344B2029F292B94003E1B2B2745CA8F7C80E248D2F0DCF84275DF3937AA376D67C2205CCC1BEEE8AB319CEE2CE28BCB0076406758A0BD560C53047F8BCE558FCC12512D9830BB116EFA3E783BE15F6220E11309184DD6810D1B2759DE5750EFE921A3B871C1CB7B8C33F1376A389C0FC2B87691B9EFEB41E3BE4D8F465527990B84AFA7CC2F6AAA69B948756FE0A68F0D624A83669F2462B0BDB95A0DBECF0C27FC0A82FEA4A755E6E602FE46B18015BB3BB97B0AC8EB2B07F667399508CAE7C2466720EF4DA10B61389443C129AFC82F388E1A3BAC9F70A6FB018ACD21FE681378F927C473B4E8774AD72DFB0D174FD329A06C612AB271089D30FFFA0063EC58E7B0D996DA3A18EB4EB1FFD5E13EC2D3BB8D71EBCBCD7DF6F82B7197082ADD00D2A87AE6287275BC142BC209947C55ACEF2EF8A7596D44FADFCC670387A70DF7B6522D2FC775DEC206202170A699B8DD3E9C87472CB7BF4B3597448221E0A1756DBF14A7B5FF69A3C977D58F1BAEDC49C1CE435AA1E2011D5F635A956865F83D32DD14BB6B022FA1142252559006AC26DC2104573D221567C81E4E8235EF0B091244F22D075C8CA57669031EB24D731409C6CD31E
},
{
"6DC10A11C8D14EAF3C4665F31828CFC4B8584D6C1A7712F1D4E4E62EDD3E9440",
"5DA10AF1894B5A37BA2EE3147B1A493609D80DA048FE3D68A282E87E2DBBF002E8690207C3A44461B4C9509EE57DA94F7DD7A9E148B5E2B61CFF49B067102DE588563FB737419C9548D7E4EC40AA8824F4F3FA50285CA18A923ACA1265B6F36B214CD471704299E7387A4A7FE2888D9E1EC3B73A433F6D12A5C68918D341E6EBA78B3C965DF8EB30618FB6BABF0E0EF3820C4F9C874FCB7BE66603B327D7F2CA39EC1FBECB2F08B73EB1C2316835E2152957BCEDE2DD63917114F520F917818535A4DE5197151FBC2DB616DBBE72DD460279393BD76CFCD860E8975980F9FAA11B9D5730879F22AFDF6227A3548251A3F96A95B1DBF2AF6AD457880CD8F5493866CA1C7B22F6B4CA77CB433B5280EE96EA0A2D083DBD50AC23ACB2A4FAE71FC1633D12B2F3CF99841A61317F4601AA7540C7F8402E2F45F5CE4DF67C83A088DE4A470A2C59FBCAE87516E4C1669D482FD965A42404B85AC8CBC88C0731C1BAE816DC9F04FD9547707A0C4D63CBAF79DE9153704B80D34FF9AEE2C9D9127A128471E2CDD1A16C7FDA41244F9D02678ACBA38561A102179F6820F28100BE679008874B7AAA2974F4941436B78F6E7DBBEDDDDA6FB3D8EEAE6B94F1E2C4A4349E049D0E14C1355DA82F86ADDB72B0658290D46EBB606D3CF212AC4B0F584E73E03EDFD74A98632660A796A28E8B9C41CF0CAC7014D0D816B2B649A5273FAD7C8CD93D8E4462FE19A478F1F5F569DC90D5E155C52732B88C590595F5EB121F20CD97D2ADC6B7EFDDC2DFF0BDD8A65DBA31E90000D644E13BA026B8F3406A87BB376A9B1C43B67F4BD2A41D3FBB474902EA2199AAA72B567FCFE1880622BD87888DF87C7FD52CED43FB2E39BA497AD8795AAA95416B06A2AAD17BAC6BAED6BA75B64A991DD4DFD1C5BC8FCA8B2F54178422FA5A6DA86F4B2AD82A5BD29B640EF75611B69D26DE923345DA31C469960E42A19A5E743E9A24EF62A06309AB176FBEC5430D7B1D11340A49251223488B8CD0CD5B6410110D733F4CEB5001FE1D58050980FABFFA6BE15A912AE336B6BFBC98E667A75D83FAB9D0EAFD70855B63B364DE94C0008775E760DD6659A4DFF80696CDEEAE176AC1F36B2883B04849152A366AC71E19ADE3FDA1FA363FC6597D6C9CBCDD9ACE3E077E1BDEA9656FA55CC4016CE23FDC11A9724FC056892EE112BF06397FAB6A9AD9846CC849D67495DFB34B78BA6CB309F12D968AD1204B47BF9420657815264CBC5CF2E492CD74E73EEF8746423F76C4F504F40E74C64FE4E20356DC166248BE46058F8E1ADBC7870B65337BA5DD3F9D06D897EBC7DD1EE4F89F5A12BC69485B5673610C5A70E22AEF2EA2F2C225CA9D2657EBC73EBCD779C0A54E45125199321E24E7DDF56F72633E7FC6489A4E1D9A3393826E933CFD3E217A592798C2D1E515652371A79038F77349BE97580EF9E7779A0CF5DFFF7E8B8F6D0E65B9E3F4C25BCC2DD3AE8B7CE8BBCC8D2CE6489BA0C76462E5D30FEAE7E25D7B19BCDE116C6E2BAAE8DE3BFB724FD23DFF7550DD4635B237117205DC0D25931DC46182BFE777B9C13F054AA5E8FA5CCB6BE1B8A87B5D8436FB620EB380C6687D680982150E9489ED15486190A2832A7EB813330F93FC54CECB0790FA7C5ED54FD68EF7A14F44B9C7D0AC727FC207ACF7B0D88AB4049E0502204BCC747D31C80862CF8E574ABD04E9ECD76F1466C581B4A4FE084FC58F2A309858A08B4C5BDEF00E9339160858D45BB4743BFB1E4D74D4F0A0CF6384B09294E854D516F8E4DB5CEE8A76BBD344CD30B0941B980F964150D26CB7D92B6C697FE1F08BB91B799473813B67B23CE203DF6F93A65FB27F44A6E606D882DBCA909782818248DAC880E3ECF838FC3C67A0A7D839E4BF476EEBC0827D6596721CDE3B397F98F3C7470B131E2F9F83B3899A09B121E9470F336EFD87561A8BEAD82B93D8C4B008D4D954849EC5F9B072AB710F24E0147D3DD3472B5EBC6577FEB939091FBFFE51A083FCECEA84422EFF6163CCABDE18FB473DB941484B1084B4746D3769FF63F40B7202DA8A9D25D19F4E274C4CF239D2FACE07154872D71D832C29769FB2B9ED3AEC529E9FB9D85075569473549912303CAB6FAD884579416BAEC4EF2D91AE54E64798432428A47BA4AC7D19CB836AE3AD323F55140BBB3C6ACB8037601479E867772A3C760E36F88CD18751A708148BD6311F3BC4BC234BB0C6F7FA8FC5A61E683819C4CF2F7F4F64A8A7A24B4EE1D634321D28548F2D7F6A02EE690244B73DF3B4FF78D77B8F36984A695AFDC63683D245DC571D9171A24EE7B1866305EEB16FFBBE96D9B1AE524E53967C0C4C9986D116098C67ED6CFF8A965805AD34EB21E008F7A68EEFCFBAB76FB597781A35DB87AC499A4BD13CD908049BDC151646A82B04390A3D46EE6F6C15340471F0B58DE573B7B15E0A112766684370FEF61C2D455810C8CA0A7B6559C0B8DF1301AA673F87FD7BDDA483C948909F6E3D84EA415F618C6B241445A903F9FCA8F6A8F38101112E223D4AD884FC131F6EA3ECBCB93FCFDD62207A161DBF2208D06964E6C7E90E9EFCCC4E0B92F3D4C425D90EE91E02461F5ABCA59C4C87607D9A4BC9F954D7B0B7A63D4CE995119FA8F17D7B94510CC1941877182D466CB48E325698A7E566494AE73FEDB814B72916FA73ABDEF796F298168B50ED53AB0C519748A375C38013EAB8341494BE066B1A8421DFE8C4ABB1E51C2F6DB020A1EF617C4508EDB09F3CEFA759B6",
"5DA10AF1894B5A37BA2EE3147B1A493609D80DA048FE3D68A282E87E2DBBF002FE3710473809261B0D2FB336E591534716812B1B9FBB19D29C3AADD977DFFBD44B4E6A0C5E28ACFB7A1BC87D45E54C3D5E7093B8E22DE3DC0DE854D597FF92C5C64A84700FEC97BC67FBFAFBF2B9D9B2C0F25E44918F3E15AEAA9B522934BF4418236482823621814371331223250658815510310087125572464841167615162082753714801855761535313380125462627318441336674213487441552587487427527024510314287075088314243370781578780401535055660616022584316458820641618354407187125144132520740781777883620665153364334457563474565833488077828841152367801678303887875611822765846461256670054450385004884222723814530435244613121826147656481602345676006826618687783708626713836445402570268638775427056086767212800417581212530300828122350784318460501573182556456370841458770612202218064047205630614041705054306400003863380447241787660756425070443142537834171233343821723266361325526170842642566522513132387708581224101263875060246678825338521483487786411515124164440526835064280664054316686545445521421052713502674267582500757725478542521864044768566371455458817706774207665020657432664000116878725054534880845807086703755544828318538660833550731528287520782827735560013300725485178554873635501724224101375844855787607720654774776306036621043224324673573366867876304324731708012538483578248883251544368721860217141775332001448062716084518330732885105086007772317087481063818763012010303851434100157602281723000444647258756207273105862748321357618214831018874600258625774787720565522447782836702508350580680157212381000848738746582510566817777176514556885316561828127514763188843147666220188346544677605030415733802734803327538453660484675610258850270521263073551376504250610460645150077704825512581020545143402663153641304072278482684708748141271518657741823564114656530651480372608724513884161483788815088750507745073473250154421333247006015354175580361633640052112541578827483605687033231415282183540366657686618330661714602637677060143604144374154087243587665338121583781728275066624831082476886051822488853307554128854007545738503088658336830746558665152605512140352725233328060256625012711566622841812262512021241447230247786700131125707641264717611263444221085714573170524021358422162653630534630385863625770706474860434646432500246355585868666102047625231421076264847523826252112677336054741363546142608276333437378250583488700618214837888557316086858601572351702378330720731080476728554865012711853342612253136820630048166466538135413822018153834880724601414388868623658327243375633783464603502615660350143173373764280801225120021520314536225046326154527385430704063067065274027434038366005212226523175224411563063437775143045338727737445172511383516688118714555121652625847447840415666888851741554086013477822443458158538412407156247355270133408318583511655847784477842358706560504324584134366053028142173174131035141733137555777014116187341871735681415302435321340878433224562581607506056454744180531205174347248151647202053603484855264318877458545403530782031645156308605367125754064428148765360768118615330511384416464824381202426430643624034334157670436630462027317080955C5E74320CFB6E5C412C28A060FA33D75D431BF37FB53B7CB497441EB11CA50ADFA0A97A5F549D717D1C56C93282C203104A982122D63C578DCF939B4C58AF699BEE16844C715E0130A0911F750459704A65E777A7A17BBC7EAFD6197073F5ECA869E0E7C5279BB9735D01C2EDCD39FCFF40E4A99DE1960BE7A4E25EAD9818FF48462C3072814A93E3ED098383CF018508CB14FBCE5C0FDCED1E40AF714D78A63B6660B415DA16FC04C00B289457469F9AA73790AC0B93C8EC3D86E4C5189EDC0E12360EE3BD126244EB844BD2E29467FDB2063C856D34019BAB1A63D00927D84757D1E657793520468280D70B8A9AA14A2E9FBFED4744783751B6E007183534AEA8A9BA59285E10839E90D4F5FDE02542471CF460E0FB1EF45B4D45FAA11221C742D97389978889EDC3BDFEEA654D51ED14E9D0D2AAEB00EEBE08E2B956E8E453FE4B211518E2AC23CB93C361CE4E58AABB87F5E99E33B258614FC0AA17DE70F53AD49461657670563CE05839BADA734DA445A95F51E7D78B2DCB8B7A620420BA390192A59E179A4367E986B7474DE0F005CC1AC6C48F840210466B59E95945D4ED7A28567218EDF8F5778325AF98EC040551577B4772A68CF9A25987C3359D8883BBA98DA725797747809E24C3DC2BC02AD794342AA6B8E39CD37C9069C5E87306A7F4C3EF8670A9A12DECCF347F48CEE2F81BA3EF69C9052B9EC1B2
},
}
func TestKeyGen65(t *testing.T) {
for _, c := range kenGen65InternalProjectionCases {
xi, _ := hex.DecodeString(c.seed)
pk, _ := hex.DecodeString(c.pk)
sk, _ := hex.DecodeString(c.sk)
priv, err := NewKey65(xi)
if err != nil {
t.Fatalf("NewPrivateKey65 failed: %v", err)
}
pub := priv.PublicKey()
pubBytes := pub.Bytes()
if !bytes.Equal(pubBytes, pk) {
t.Errorf("Public key mismatch: got %x, want %x", pubBytes, pk)
}
pub2, err := NewPublicKey65(pubBytes)
if err != nil {
t.Fatalf("faile to parse public key: %v", err)
}
if !pub.Equal(pub2) {
t.Errorf("Public key not equal: got %x, want %x", pubBytes, pub2.Bytes())
}
privBytes := priv.PrivateKey65.Bytes()
if !bytes.Equal(privBytes, sk) {
t.Errorf("Private key mismatch: got %x, want %x", privBytes, sk)
}
priv2, err := NewPrivateKey65(privBytes)
if err != nil {
t.Fatalf("failed to parse private key: %v", err)
}
if !priv.Equal(priv2) {
t.Errorf("Private key not equal: got %x, want %x", privBytes, priv2.Bytes())
}
}
}
// https://raw.githubusercontent.com/usnistgov/ACVP-Server/refs/heads/master/gen-val/json-files/ML-DSA-sigGen-FIPS204/internalProjection.json
var sigGen65InternalProjectionCases = []struct {
mu string
pk string
sk string
sig string
}{
{
"DEFBBD7113B9D8366A30D28F327565160444D21036EE7D968602D58BB19D2699C03FA1B79AEE7AE4968B0E8F76C46858F3190E4559B2447FB3585F8E9D6EC278",
"2C5C469B4506EC576F8159F8AA653303BB6B922875ECA4294F9799AE329D991DCABB1C6C3B8C3BB9977EF96CD24D2EC6EC312A045AA62E1F5927B102FE02145B404C2C84D9413A45D2D7C8DDC884CF0961409606E95C76F9EE230AF82284A2766B2B530DA4247DA0D3B7C5AD4BCE74D9734F2F1E8B6839DC906CA33D5CC1A6CAB3C3A7B9464F90F4C7D0F9144CF828495B10C5D320B19D529E31F686A46C93C469CBF13C284256EB3F348B8DE39144EB31C42722F1394A8F66AEC6CD0FD8F6BF218B0C7B6CB9583D124BD7561BBAA86D38425B4B3D8CB1CF3B39C6BF474F11D306D38D5C9669A056A251E6E329FA925D4672E76F547D2488DD49998311DB91884E74527662B8717DE7FD92CB01AF8F23EF13BC7638452837AD0344E53833A742A57A67814CBCC124E7C4AC9CD15F2E2CCFF1B80C228A7F8F4D6F264850C8F7EA09F06EFD5F20A52729E127C0D0D5CFA410F17BF4B805157C9186930370F3A3B50303C52491DF5D183CE8AD793AACF4E1F799B9194F43F9A413B79DB724AD91E3768519403B5DA33F006E1F1454E1208A165E021779132BAF8B1E3E56B9F925F74B5F3D7586FFF4EF90AA9C1A1FA769556DD427558B8409EAEAD4E9C9E88E419469418B061B27DC56F89C6590A02A547C48CF3DDD1ED4DF1A66789EA16BB54214FF30B7E538A16C6C72EAD73B0F7FB8AA3A8CEA6835A5BE017EB95AEBD14F0DE1464B9742FCE04B8920604F444F17B7756B047153AF83E1EC419945DD886939B5D6649309AF44E0EACE4D5490DED6BCAC0A709D8A5E63E9D38494950D1F46146D48F487D3143174FCD4F76D514CA8C3869FC16F6649C1F0BFB03F3FE5BB7428DFE17F67DA3CC66B97B85F37D4DFF2B34F092F3FB949D1AC85AA450AD490FFF1B7D8164BC2EB246E5D6318AB3110951D7CEF448BC4C002C39E52464DB869F334D293B0140FEF3895EF5465C226FC7C52FC423743F3259C176B29C97CBE09785FE0B5746E51974CBF81B9BE1D16E38D8EA2AC8B8A8B330C59AD31C0E4571855C5A5BDC7B8B07CC65F629E9EC7F25CDF4850DB27BC1310B84B41E60EE67F2656625243701F9D2F4BADB6868A96376A8BC95805081BABCE33467188214C947FF8A97A7E958C89B5CB3AF24E756244876B8E44E04B4C63C0865DF2EE7301A45A64A77B1CFB546BC0C88B5F53E65EFB2B06C67A7B8DDC2DD1199794894CCC9E1FAEC477DBE0B676EDD4A86ABFBD57899F3B9AF5D76534A1C5723C6713513752F69ACDD2DA9EF1683FC2BA29F048221EC8CEC550B5536690518872128D2149B5B41F717107847724B3046B3C6363B19712D4305CFB0C774DFD85225B44548536FB318F787CEF5F1059AD22AE7E5890E900D63C65EA042B0453635EE726ED0673E7530455F14F06202D599F42130A9B3E9DAD13657890C273BB8B301E66F8DF4CA27AD8E05786468D80C8641D5188CBA66F25562EB715B1C69A83F41FDA2F9E312B19F0C422D9C5DB220928C60F99B62F6A3616BD58472550A5B5EC1DB6CD6CBEC72E6EF7D4D5E1749310991FB6EE5BFEE83EE5F69D9DA118ACD46D0E13C5A231D89D63065E2D67DC486A9911F7FB44AFDD00EB3E0204792E51CABA72F29E15EEE053854D4D44F0673B914E0F77ABD245600E31BCC139CAD9E3EC281C28E33CE20777F9BB05B3702567BAD378B5202D819066F5E071957FD111D490DE5DFD67FE85EC55212D0392A9F5DF27CD6580A190A015FB9AE157AEB8B1BD2D854E9123A653A5B779C5A27E293AD421E0BC61673B34D73E45BF23D4892BF8E24F3581CFAD434E79AAE10F1ABA4F110B4E2661581CB34EC1A582BE2BB2DE318930EE4F5128B0F59576ED937400BCE5DD422672483D07F68DA9EE27F5657CA3BBDDB463166A3FE24B1A02B5DF2B3F0A8FEA6A50520DBB48AFB8A026C37AB171D824F710A0121D9990BC3D5BAB09675998DD5C08B4F723226E836F4FAC53D67ED0197DEC62E25B37C2C4E672CDC24126A08972EB37B18BBC10F5B34B518382EE954310F51AB6E279298785C73B0982D89CF4C11DA915097EB0DD8EE3B83B3EEEFD4F41A2EDA506B6119A068285048DBA1BD2802184A6418A16B6E04F5197E3A0F65FAF4E9204C47B0D6E3D96437C58E4ADB437D4D131AF74FA99B329B30E038A251A4C7FB3A31D94ECD3AE37B11073D1B2A03ACF00F87E834090B5CC273AB68E5AF7794BBB6359AEE1E08F5D5D196F721F62C3304A23040F5CD7A953546B96A6C07AC27459EB882389CB10258A7A97737D0EE6BB78C34167CA7294E4683E179FCEB688F316968B32B5EDEBDB94764336389A19ED0ABD7DEF75206A76065D75648B2B607AA4B344219607F1B0293A2A165F83A615157A81ED346B307EB9D3FBEE89A6AE999020576FAA0CA4954D8DFF40D3FE543032576578014EEAD898B2FEB09390A1B26E4F51B611F3EFDE2BD48D06D4DE4D7D2CBA63E54F1773C868D2FE05F366C3F543F3DA39629701F50345CF2DB050831D0D11D3038B3362F07C8B69E9C2126D89C1CB20EC6929EFCB19225ABE39E8028DAA695E0172B199320A268994FEC7F16DA8EB8710CD9F25877C93098AAE46665AF608CD3F17289F9E4D738A87BDF98625FE952EAC9A4337E5AD59D845FDEFAE14A20B85184552DCAC189B16371AC50542C573F6A8CE58F95E903953A1BFEF34272AFCB9037F174E1D180EF37013B7080402FA348C25CEAF035B143712FB312F4DB94BE35A9AC2AB0922CE78995551F48890EB7F99E270",
"2C5C469B4506EC576F8159F8AA653303BB6B922875ECA4294F9799AE329D991DF0F12A876E0CECE8BCDFED5C8201DE0DB827AEA04A407AD92A25ED8627EF64D3E60EF3430BB5832A7860576F065B4F40EF277606B04EF86C06AF961CD85C7A1B22550CCDEDD4482ACB5993983F33FC8BBBC479DBC2D953865BFC52FC3D2C484A07746167376152534087630375774074255666424335408805012785533004676177365215336521567788315628534413464237448171063450826617474367646171582051702822285041683041412260817567216712771555154124647543812271285665822632511878008613784228227461875581410875345352855311845215726876474326683487141316534832503621802153086858345520310831728805550026034237253444626167810228382646054721340216167610487662687525704607865272258237627102066667042270464405340836405312710561251351540658681826317145657434207874201061804881010784506467411085552211170220760064208051321204042654728477346682003065011355848104622883145664881118075662412686114626561213464712588482378332283054545868208741581717387402861705767718226147132671658670520285450102655440484863530812107756255268517223840225781662743110618035804366065638142566006471224773373062574435832467214616377282804655878754325274483514376676401227015516105604400682854515703648480721651808608634625740073202267121366216245203327381604606602340475278053535145535137855162351057273437780840688513155176320656310808206616636571005351182500707472785438214058704450745543610266886068070765623352716250616841346534545514480388422815426280132121150557843836054731402465864528872775102138812703825721137438137060371384330174373366715320015466532508601856287728482408518718821038067204716641520722623185440702255840554815002183082074473408136172886352563540071884050806512388311444474772310650810704842441486752366435608742556236368771321334737607187428066373768753261481263888670383234086018452370670614101778208888838666278721321807720407860533316802324255167235672156871051488077200867758868637315637338814143881668004887841276774002548425642136606574555700781375857276513807841263461105277040645637802781738437436343483373123144048065704426872607144488353347650050070658630730621201201201230655566281837230753157233332823148880883486516666164131643056616338872781752267308873406380376550760668861241741488425326368131423028855861153237117127505510155202036275084528631767638750564463765063161532528422584310045157136508605536658252003555356854330547521467404521345506228805313227426037433065871704342135471583716856465880255081057125387573762282516613574135433115506806085853670705468836685264631042418728881575862217444374521845338875734100238236350872830088106274534573214704714676114387815713074027134762036021428080033056142052052227426218461584384041238220570570853051162352858855834613806130025120687172121507508440601448763760885327435788324822847648151100728753052780632427724653207213742412401137687316426012332120268213814437010146556581648234777372741372682477630357615040675054665838504248352071875536552465826626833721786780638657638234521447558015418232662538783000128671475312255746435061784645820723562822306284070277818602386086847188772841177583444352330826472121256173666B9AAEF15D83E53512026F4913B22819BCF6CCF621860B77BD38797369A187393A1F18487BC241E66FFF4F0C19E391EC385FAC3605C8DC47EA609D8363F9D875E8A74010CEA910C4D7DA08C713AC182923870356D6847A5FF86E886F2B3E6193FEBA1C5C1249834D52E0143C1BA9DCE20C5521634C7AAE9169A5FA50A8011CF0AA94AA4442139E21AC2599EEA0B06C0DE0FD85AAC0E3FCBB5E5B5387AB70035D405A4531A6A680397FA2947C4480C41C3163F1D6C03DF9AF4664F39A656C0B82A4A1C42F2D497230A566F3543372176811E57273426E2AA8954F178F2CE808EC9F6520D746C94DFC2179A5FB07298830DFDF4A3320ACC8091FAED0B923A3D72E72DFC47747C42269606F9290FBB2F701A66876A1DE8BD897BB8726998FAAF8A88B1DAD15656BE48427715CA8096B394063AF5C1D7AB59DB0852BC348B377BD937A89AD6463E72B39F890EEAA144E4BCDE9C79FA75D5A65F0FCE08547893ED2C9D08394F57DCFF057ECBF16858B2DEDBD252133E60BC6DE129E2A26F7EEB1424AB5649878AE8BC1CD278BDE66A5EF7E0211CA4E9B737522EAF9178EFACFF87E54FF18F13BB01B0654FA0B7428F1F64822D7236CBDFBA8F3DF1348C400239C39451FD225FC73DC0D763024AB25162F72B2AD947ECA3D25FB03359254912D77F8BFF8D8CAE46E4A8F2CA4F012FF2D8E0673EFF72BBD0B51F947B34416DA48A29
"379667AEB571ED41A5CE9EB926A3CB731F986BE90197045AE6E3900688611B330D381813C5807E297913C1BC260F8B7B3A79795AF08923D3B0A754A6198B9B70830FFF75AEC94121EAD70A1835CB524E4992078B1A93CC57B39B1DF27B52148FFA5B6CFB63258F6349CA235B5EE09172FC47A8AC769CD0B77A39CE33FE46D61E1AD5B670B347C2D0C36B0347B60ECDAFAAE6CFA06D84050C5D653393AE96134329D1521BBB6A0068A3275E7174F0D35CB1547DB221A10F0688E3F9376A24DE17AA518BC0BACA3DA1F5D40B57246F71B820CB65BA68EED03CF0A927C8ACA91CBD5E2AC443ABB27FE3E58B4EFA73D813ED4BA08E000CA342ED643A752C1440D2A4D5EBC4EAB58A3EFA9A4E2979D03929CAF3EF1E05EE763EEA399874C19AEC1AD6D2AD82662BDD5A7E6B8049DD73F85946665B5B79DAEECA10CB39F5E14417B5CC6CBF3E0BD4E93D5188A67A307E2D2CE03B3C68AAB2CE319ABCEAEA03E1A352ABE852A3CF3334BB9A26377A71FEDBB33EFAEC1B438B82DD96EBEB4BEB448399ABFC149EFACFBA42112A21A0FCCF9FD9DB5D67942CA80B841E7D18434ED4F29D769DC42C6D4882B574C16DC45E004388D54D96E5AB1E05F33C3879153BD1DC9B0DB9F401EA1BB7F3327E1C2C7FEE37B84359A125014BD4BAD8054747D812D9121536563A7D12A1D9572DACD0DA12602326A3EE39E7DDC06CBE1B7AB0F306A7748BEE2C3F7A6322B2AF5B17F5DCFFD7907EDDAE80CF883B9E48DB250BC748B43F541FE9AC1024E0150B1A65983D882D8331629E429057873B6643330AB4EB463A9FC914B3C33A12621516D61238EA5B4381F604DC934497CA96BB0D9D7625624A31365B3BADD98754A0712AC160345D500EEB4464122FE605022FCC50DDC5AA4EA13158CBCAC2909C889A562BBE1EF06BEA7408F5A447E38ED69EEDF228D2557EEE48FF76BDA6B36DDC7561B7A817B2308158DF21E73FE1C01B9959EEB4F02444C127ACF619EE0ED9F2DDE1A3FCE096E89C57C2FA383AD47315DE7F52950FE1C1C7ED1FD0E2A1CBC3A2037F663B9774EE76D0D153A5B0C7C432E0BE24F0849EF3AC841C243F12D69C1DE67172FF4722E1C7BE376539E6D96A33BE1F4DA045F1E2EBE4CB77630ACB11F663A10EC48158F5191E5F8501A7394895E1EB1626B4C2DBA6C4B0C57498B68C99D6F7BCE7F6181E9D23F2237DB7FE93A01D67DFA394487A527BAB5DD4E5F84FFB25FDAB77316032B6DA57CF3204B93AFCEF8B162242A2A863518DDFF501AB7D495EAD3C3B8A6D1B018482C575EBB092273FB85D724FFAA73F359E9AD39669007F642D5F34CA2013E4479A30187D71B96E87C946CFAB2CB2CAF9F0E69C08056AF57C85C34292148003C09877A029D80D03AAB5E9829A301D1860D7109CA98C154838F412952D3E84BB216901AC505D811A3FE9242D308DACE587882CF27FCAA04899DA98DA8527404B02BF24698745BA6B25B015A5A4D1F0FD909ACF2188995724EFA812FAF9AB97C297A3F840E85AE3B37FD8E96D5E7B3BCA46B6C58DED427446678FC66A113F77C1FAEB9A1FC830F437706B7FACF1ADB40E1CFD093A2F9549B0F629701A166B8DF74501959371D182B2805F93923D409A13941C284CE328A22A5E9C1767C9A927C15DFF39FEE4EF55B7B519277E59D8038D0C7873A251AC2788E45D23EACED7C5A3E521F9AB18487822BC8152F13464029C583CF736F56A6C0F0F34C1E38E4347A2BD882126B0FD6B7128AFAC7A5C07D038CA0AE70E5AA394D007A2222C1F794A43124C38B617D07EC9C1265E682EA0095B5812F0B017426489E4222473AC954F41062E03986CF7D61D17C7A24A1046192E0A2A570FF3A90FA45DEC6689F370D6C287C858AA6C320B6A4A2E6C4E1A43122699937EF24257B394E2D0A7294F6895553E91A485B973B146EFCEF84943ED923544ADA86199791E59A47A98C0AEA2BF75850E994749E1FB945A01319E6DBC97F9DA9609612A8367B1EDEDFEA619889CA43FCD6BB9642E4758E25B2E78A5317B76D8C8ACDDA807A65C189FE37CD609866988DEA2327F1D60CFBA6D3CC7B3B49E81B77DC1FA252712326700FADBFD75EAE425DD2572A7AA6A577ABB0951C81C526B97F4DA8E61762C63650523CFD151F66CED7A60CFA89F861334BEBBD62414139AA61E6DD2D024C90A27B943B39BE981D4D1B3C59CF770398C80519D0DA9286818B65DC45873A90574D40319B1A3832D80B39EC0EB69A6F1CE64D793E1BDB42E206065E67193F5486C49E0BE581302485BA7099B7835C36B8DFC4290CD8238121816CC003F4402807D81EA6C9316C647AD824A77E0ED710A9EDC5F946885261AEEA8597D6D8A957C4D4A43EE4C3E93DAF44EB637093E2118AD61F560C41D60868D6D939CBF5629B171CF1765ADEC755D735FB1247ACE45CE8B02671B19342796DC68374353AEB86A265D70F27AF3E4DFBA62E1B4CBBFD1C23B1D81E507CA3552291CD2ED0B3D84EF5806ACE49799CA6D83C8B76C68864426EDCA4C003E425AE0D497F94987C5D5CCF2E28E32B78DA54C647BCB3778CF476CCD25C7509E79676B93A63361962B8E206078C102F445B0F14771E5C4FF380D65CB04C91412144EC917AEA40DD6E882CE6E96D504E79ED9D081C625028F475DF5F94113208CE829DE2847CCF47F2B1083B9EA942E66246088D36EB4CBA4E1A75FA4B4313616C38D2C7F5B0643D68137BD1168832E39F6E5F6E45171ED6D5EF99E7BD215D1C9DDBEB1E439D535FBFAB51F674B8ABB3EDECA9F24D6E1654162B82850D0ACF1321F695F5B6BFB2F7204C1E06D7364CCD7F14F55AA0856FA0B9B3B2E0FD91E6FC282EB8BE63284013E2B304E5D785FEA6E0A4CC05A871611179CBDA20CB697CFDA3B80
},
{
"9C8A99F7859EC3749B74D02CC8363E99DC6F4E6DB96F7AB8CF75740F9399FE02AD2AFDF8FF51AA229F51D87B5B6CB716C08428018128179983984830C062C573",
"43E1995879D229591B4289B83E0A29319E266E979FB5B0B220730BE99E5317C995850C644F4E650307EDC227CE00F1F82B334878F39413E96F81D843A5316BD10A5E7832830E9F9CF116ACB07946F8B480B20DA5C3B9C5BCDC03E8827C76E2903B63141BFB264AD34E24CD991B26B5FA55509251973C99EEBAC87ED76EA66D098B63D6563622F2C2EDFA0E6EF661F781F55A5E7FCB6F9882C8AB8D40FFB81AA0FC0B9EEFAA0F1F541F28F151D44A589CAD60ABE509BDE612BEBF6ECEEE2DAA27EEDFB1719846AF954F2FCA3937C99791C1B3123ED4C0C42290434F925785A64455897BFEF2DCCCD6CC3D2B238D24E7E8D82BBDA0BE3CF42DE899A34603EE62ACE4B591BCF6985E4075CD1BA8150D42805C6B97747E16999C92F3E333D12BFC1A670D15269B3767256A01E289A0881EB90F808D42CBAEB5507E041E12DF6A64BCE0795DFA0B5FD4B3A115B5D971C6C99AB7E741975E3B267EB12359835A97E443BF77B8F0A7D06B89B6B96B85CDC6983521CDFD7D42ABF5EBDAC35B6F12CE4F57DA6CD6FF1955228C4C42A8F80CFD00879B7400A3693FC5DC06E4FF817801E0142BBBAA2EF2FB4DE00D500D0EE4D5B79D9FEA54596363BE12F1C686F4DE04645339A60D59112FE67AC7AB7FD299BA3D9C762A457A670EA4D6E98FB17F7A6ED05BCA5966BBCD610D1D3E2F7FAF059418865A05B3B184C1F0F7C7B9FAF37B8973747ECE69B7696A88B0708E51291E201185E9B593BC5749868AB18882912B7B8A4B36086BE370BC558E4042905CF305211E1B597C912B849918D6C96B5D0714FABE7F7F6077C5EC7289C243527BE352486EDD738CC8BE5F693DD53B700408B3732AA86C96ABF0FA9ABE4B30B9067167CBDB9324DC6E2C032101193E19DE35D95DA7AF10101A24E5B830DC69D4112ABCE45E2ABD85943BD3897BDA327173394383212052671639CE7E3CCD0204BDEBDBD4C11C151D1417F4574A08B8DD4AC8BFA6738E462240C244AEF92B134B5B9941D946200629A07F7BCD8C80883C150309494C106EB628E4F2DB074B4ADFD86C49905DDF0CCE13478CA921294F22CFF849173EF2385703C387DEA90563029C9FDBAB3382712E90F10CDBCA9C358F3ECD5D9410E9F7250C1E3069B26C7D4B1161DDF788B36E1288AA9B4C29060BFB5E1DE67CB99B382454A8C5697FECA06B953794091379D939468531091FEF71DB020A6DAF1A245D0B650CBF081384BE9FB18DFFE5A71398C976193A97D8748DF10DB2B20837B8BE7B16E64E097F61028BB4F8435AC8E67BF293CFF53CE54D00924DB18CCD0994A01CE017D8053F5DA5387950E090987956072AA2CCDE419D4FD66ABD86496B6360DFD71CB83E51A87644370AD5EE8ED195F03E3B3555B4E3A3A06BC2E764EC1467362599D42A0F218645E7955D4DE16DD0648E8C6FC95C691114DA8420E52670B8B8E795AA95A71E251D9D44A8966882DD63DF97D02555A301CC92BF525366C3343A536D19E1FF4CF332EC89E2B346C29D3DB86A01018CF803724D3D3F9332DAC43D77D72D3BDF038294BB5362DD9C309B95119245B534DCD8089D238C618AF88A50337C54680263B797610CDA20956807DB2E3029DB1FFF421DB331431FCD7A56DCA628EE09FE3D301405BD667F6AFF18DEF3AD5B5D834DE970AFBB6A78BACC6E8BFC1029DFDBE92FDE7EF40918E95C72CBF824D0ADC73CCD0BA754E678F263223875E4A8587FDC942B6E2249339043662E31A09A64259D01A726544F871885A8EF7758F52112E03CF90242D6145E07932801E44E159619258C2676444AAFA7623ECE86185948EC5F93BE97E50164C79F192C62920E81918464F49FF43810D2E3719F9C418106BC319DEA98ACA21893D5BE6D4ED02040189435C6B485CEEC768EA580A0ED253338CC82051C10925AB623DA8423EB153CBCE096772EFD6036AF1CEBD774FA9BDB03E2EF4D90A814825669047FAD4FAD35839D0AFABAA390833B94FD535768BDF6ABBB4B4F75A5519AFC022C0E2B76BD18A7BA7EA22154748F783574CDBC09AA61247AAD50BDAFE7763751E66C6B8C1135A0E11151E4E291AD21E12622963610C49ABF7763E65C553C281AE29EB3CAF3315CA3E922D18D972E6263731DDADFB73B9B419F3F238692A7B90F437A501A93DFF7AD8EE35FA551CAB6397EEDBEAE2DBC030C751C8184DE10D2F7E3CE9C19C8FC69A8F67CB15E65814712D409B2918C71C829F6BEFC80E4DD6D82FF16CC60C701A2DEB4B3E90B3E28DFD294490C19FD76B6E58210D56454F33B47DD31F2D8D1230784A4CA28729F3D3A7EFFAB51FB47444E45364A0DA6132CA029A347244C6DC914E78CD310438CE84DA8BE326289F5ED6AD05CA03F2E5CCA39227557F15A1FC7F71B356448F4F8BA9B311909CD153302A4F47151946EE51D6198A01B61C95F84BCE4CB34266A331EBEB2E69B39C696D23DF04F1237286F55EF95FCFB911362B3BFF0B91FB8B2926FBC9F69916A7E13107C124FBA98BE465E1A69DDB986F680661FEE99869EBF8AF4F2C6B67340124BF99ED6DBB3B979BD218A64C4887EC5785F735AB7164B6F9E3F9642D2795488241D49E5CD8DA9AC49FE91707E0FDE662D589CA7C3C745992356BD2F3302080688CFA05F53CF5DED147AE9C86CF47B23A016FB8B21BFD95239862E573113B4FA1915FFB88773396B2E2652D3FA19E40ADBB7D9464CFB0054E4FD40FFE870E817FFAF920A924C1E63D183D5841610B55C4B673A04AE0ED0F2849A",
"43E1995879D229591B4289B83E0A29319E266E979FB5B0B220730BE99E5317C954ECE1FA070B14CA21E1B834968B853DFFC485641A5C1E1DE7A9246A0BA0964F0FDBCB7F5B1832672D41396874D7631F9F6470C5F0ABD3570B9A4C8CD37F638B569F994E594145A5473FD9BC3A549BF3F92B59B172C43CF322AA03F6B7C9099340280736585850347247110567826628608578577333268232255027555151211432318538165645062358655442502867681117676631257406034640844576238241682882013185746057802700672180826307401471404550560776830580434047124344652505481215508577507075214750328401383317614380663054288506057420507522567482636864560682268035408714555077620216841128486558366105723024320267136182082744415610326841672354743648580357402303073632770703338775226217006120657474880563856388755465184511442158874507017131246885070044527378675053126478335657187061370450631007266614466356707245245476854838668866428113572414778056187101537676885208413216122630481205070035516868086831064628131646012550066860232351333886664855583788621071233752327246205131817726348134515646385587612501740324517760556872411076053272048160727632202058870714470444128115712554118147831072455727531324364070088507355724762526017467321712102110322578022125122124250322574718778734033138237648612518355061608387642157282382431010783565487165672777164615354017261136316783347871661384650584721730882616101150343241140526587581151414656564430482576034321087316856020462221286764007818777075286464302182356117216851615056466053366065817108674440272552651515578328584026811221672207585575272614434151616570724225302813364760648436532440122251411286713437660584571430452420744602432561677767361763824088760408601653884574636068552343425617201462782715376267748271264640007661241481565662108813511311153365432866067152881111647841628760721660067486555553302487121100361533041333850118422656211731682148027588636537812415105300053664021036501115310085442032616568146725842522476270777237712115234004367881524164327035810011311848584775003521200370508640158858705543627171734056170541401400288081573450245206150383867030465808612224731647174282857851376187641276121612037747658374828580173311165210866371504383361120528241305711472668157516510060475282315151275224736736138200201251832880364236670055735352874352605748211070355341874376422481333548460832760317445568516125616226163742118278154370757667516718367651243242131005762225081114326052486310102623113216212154328056817638438087041873382618857472740584766311625755581345508572648288725088152048020554041485647837554555345722185877280838238371811477076285463648076265636480155081241337484811577806881240047507418625041077230768344124412405763800535177472672348553155631668735884736348331165445860341708828606805085687177004700040663124658158056604263476480855817478687718448668267008356175044001732608430043537702336417708778223025104226207382618316631871675705132885882002033538066035644855161107835175233316071136543311421753556416476824766307573106100177822526522412865482782162146537353541614487203007334371332055738766476237245762674236303854044227214427033247785306302883740471642640017628108416214633207783105380158810062441470219A67E3436063FEB76CB71ACE7D46EA25C8124ABB1C42FCCBA379F7230AF53662DCFFB4A74CEC995835DDCE55994019C159A2F2F762674A1AEF558C94E9CA0C8106DC515A903DB2A69B9D74E6D0051A6AA4F5E9C61E68C1492764DEB403243CD300D0E8170307F430BEDA98AD15AD4EE2B54E6E91F8ADE86B89DC29DFA3FEF8E18698FC83345292D1B811307F28CC4E3D24CDDB7F557E16F815D807E31E8769A8C06BD4D76AD54F50053A807FAC5C1AEC07FC19076FA3746A72D266867A381A4307409DB8902015A6670C7090841FEEFE1228D95BBD599628A6FEDC3B1FD63870E8D526F100C226B154AB13A4C520472222929A308FC739AA886550771E95C76DB5159C9EDC6633C70A559578195B755FE060270094D127BA2CC3DAA5020B4B2817FEA60FD89078E42648CC793D7A507D16336B96F4F5513E7EB3E31793E71F1E08241013C55DB7F4C0C1DE079AEB4621CD8422A19D014C7340D98FBA036D9D85511B1FAC74EA177B4247FD43F9034AAB3E3054969054B3A76C3A84B6E8ECEF1DDC6EBEB0ABE6D786A98AEE03E71FFD0148F3BBFEE41AE6B2B5128688B875238465CD1FB6FA0FB90808D0C9303CA02870B3B2E417CF6BFB74ABA09A68B8DB62C3A832598D21F89938FF9D4DD590F0ED9E20D42BD9DCD55EC69E4F476E28CDFB2D138BE3144E9FD325A8B40B893868D39D55ADDCB185CDFD60DF5822102A
"F243BEBF454DA7F4933143168BDA31215E330CF54F356FBD8E9B94EAF576C7E25FF3DB78EA410FA26DDB4A7B3157A6C74E8B2139157F162402A3E21E0610D50B4FF26DB5BB6908DED183F62D44902FF150BB7EEBDFE07B7C6CD971597EE6A2357D27A1C667F3E739B5D377E9405344C4B9CA1CA3B4E41A49961A58CFE7A7697EADF4F3F09A7B5231835B3D92DBFB9EAC56CE16ED156DCA7AC496486498CB0AB706758EE92B819E1BA20AC039094BC13E8CEFD588FEC77128D111C6A48A42555CF348A60B219D9C42ABCD3F5C99DCF0E4D22A82420166F47C1834DF1037D2E4E294CA5D181DF7CE305CB548E12DBDECC3BE831BC4064EDC55AA41C698340A94AA9099E4EFCB18EC3D0BCB366881065F6FA7F3C0A7655767339D752AB5066F23DFD1E9CCE15D3BB503ED58458B7728C109E5A0D2A8C16BBDA300D2AD436A1B6F6AFACAFC059632CD7747346B27AC051F6726F184C55D7558456AB143DEDA91FD728BCB4D9745934ACBABE9EBF1F05B8138A4CCFF90351D8F57388D9FF1092525A62821C74CC4FCBA5F572EA3282634824117003BF53579D5CFFDD13B7B80576F2890F56D91E859832231D364A953B97CBD4D4E380F4154E2E0FC3B2DEB3ACE124B2868824B73442B348F088565649B998C89E866BA2417006A9DAF06D980223E90E348D0ADEEBA393FCBC5E13C720A39C2C36EA01CE1EC611429A1C0423311B3D00898C27BFA0CEF9B082875383231FD05D39DA90B2D35B5FBA31F418A898B1C455995CDEF00A4980AED5BA1FA28969CC564D03AC845F29A9265F579435FF4D2548B0D9657E49511627624740A3ADFF3D862B13E46E33AA75983434CA13622C97C9D208499B71509D648E670D4D9FC3B0007A2852FEBC1C57EEB1E6D57EA33E339A45AAAEDE5C9F82286FBE289027F294BD59614FEF5AD87D26A028ACBB9F209AB0E5B6D2EB77AC659371A660C8592C5FC8A3786B3C6507BA40C1D09DF95DEB744473D92C60D2D56C835C5D7CB70327B5F36163491DAF6607FFC4FDAEFBCB05B0591B797A000F992B2B371A509FF855CC064D480063F3455AFF8B66C1BB4EAA539590AAC5262132232DC8182DD1C01EDED8023C84710AC85E11EDE99401BDB6A5FCB16A0F5B657C973D81BE52057EE38E21379B105B93602F4F27AD585BB3CBCC8F9FEF43BB826B43B2AC4A54F100E1DB10CC06A0BD5581C5484BA62C8A70CA4D6FB962ACB4AE49153D6FC04C626F5155FBB95BFE11FCE2A60DD7209DDF17B858572C7E68737D9173976CF0F04978C047DA46B115184DD8BE9365E88C9B9C3878B51B6C8A69F852C0BDA5211334D022F8758C76899AC26518E1395F08E3B6DFBD95037C316375B0CE2ACAADA0D6C98B48AD5CE4C1BA84B04BAB64D5487626582E50447EE75A6FD237BBCFA130836725CB10FFFA6D5648D5284231845852992CFA124ADBCFA9CE4C991B2F6D988025995819ACF075877BFC61C49C76592066763752841F56CD5A0F77059C4357B3238EF1487E30331E53FB2D2B1BE1DF607C5A3BB32A6BEF78CB904397BAF3B14AA41E5EAABC4A212C311AD5DD3AB56522C3857D051E885D5CA828CD266910633B34C54048DAE2F2FCED7902F0CDB30E70252F8BFDAC18910D9068BECF18D3F6F7A2E92722DC2E80E6DA0F0B4D2F524A0FAA500161C66A5CCCC973ED50F484384FAA384D975EEA959312711F76288EC24BCA2E71025A80BE606E03AAEEF07F372CC6C5F1EE01F19D9C0EDB5B16C241ECE7AAD9C557300242E9C01C7F657D82A1638D663F1BAD17439167FE65FB6534431CAEC4F04C19FD2D730AEFB6CCB7FC9383757C097389D0A9134E5DD6136B4C58D2ADA24030F82DDF9F26A4D51F55E15568E3F1ACC1765CAA57D4E729C08AEA02163C61D5E581E0A5B3B7A7D7F75FF4FB105229E446DD4219783C6D34A6A7D15A357360AB5F1CF8D7739CCEC9B96017BF897D5AB1CF504E97C05C0DE2FB2701894CB556E40437C4A423A57EC36F82C05C3D1687EF8060DFBB6CAB3D3585D25FCA3CCBE07F9AC5EC7252DAF17D47B73651024550798CF59EB989ADDEAD1A4F2E54D270C64820929A26934B60C03207680CAC1F39716E72F73833B3E10560CCA58ECADF39CE4C6A8AC1FBE57E7F5E47507E721F05F0801AE7A5FE368EB19AF49160D363FB77E54BDBEAF7B276557198D0C96D059F88C3C67AD7B23147CA2C8C59F839FB6458678F5F9E64D39507C489DE5002627E1FBB545B20EE42119933215B435D6A8F7FBC2759DF5FC61921319773ED05592BA2D28245F293C453A240963AFDB9EBB8CD74DA626176FDB251C1BAFDECADC3BF74D898120C0A0684DF6FCFA78CE502E924643E4C1F204E4B255A888D2EDE6366B79E0E2C50B77E58A4C9D47EE3B62F0A24851A3397D079126F723BE1811384863AD726F6AFF8C99685D23E6674DE0E1D7FB9A4FCCA0EF5067FFF5FC99A5F0B6A04DE9015E3030E52F45EE78425AE185F776E0AD5F5CB50FEA8DCD23F2CC9472E54F246BC56CBB061AA2820B58BFA810A5ADBD10778771D20CE730233B0CA694734FC50547E4AEB0BA0BD88E9AD9D237E24E70A9D182A375DE10BC581CCF2D52A7D21AB1222E57E3707B460F47EE3275E296C6DBE16CC44DA98FABF9E16C76E302D0B491F2C4F0C974102CAD38350E69C65C3067A1FE81BE625F380390764864FF1794B1E27A9A03050C470C5FFC7B9D1EB243F52B770AEF2B2808D78C953B288D874AA2D89551ADCC18E66B598022B4D35EFF0B42FB0FB9F85738ED9BEAEED2EA187500E52AE8F307936A90A524D390A8AE65578B08082F07C78C2F9FEA70B65364FEB0BE1380363F0CFDEE9ABFE57B47AF595F4F928F5C6AD4AEB786DA9AFD142D8A95D1F196F312FB89DC06072CC6
},
{
"8303F126EF8746527608461CE3F4ADC35C715D2E03A37AF3DA5BC8B08DAD2E0A9D3835F427A6871980251CD0F7890F4872449643671C9FB9F718CD77A1C67892",
"5B09BEB224A53EE7FA077CF4CFF9BF6CF12039A806D1A5E62B1632E3E735A6AA942B96CE680A3A626777DC422E5F9B3A2307719C47B1845652E49AA27ED8C9A9CF408D0C97D0AE20B3EF032A8D75B168FC5B5DD47412F4153AF20CAD5656338A9E4ACA9018303752ECEAD4BD4CA44AD68CA27A33A0A4F6EFA14128634EE0A921CC7CEE6AE3AE533D17ECE673B895DACFAED0B0F3DB38C8799B66062A91C78F98711F4FFFAE3ED32FA214924E039ADBC05D728AD51C83712F7F69547B9ED5679B17589D28A887F89D8B99520263152B2755973D99A7C7491C3B1D1F914A80452CA7180915B8B4AEA7ECA6C90195E720FBDCAAA84A865C3A887245CE3B80E8A3ACA9BB199A189A1B0D5A68614A8909F63102374594190DD42092C04A4808A696DC30723C02929EFF4583DE7460654A174496F55D6DCDEEB41780EC2FA1B2EC1800CDDA166018C2F71B033EC46B3252865AC56FF8850527D73466D2225027436F6E23EF00BF8D6AF0FE336F43DF7214E74F860812954FFA90D8FA4C02B25DDEA2A084B02942258BE9941BFC8657BFE3DC89B3A556A03B171D3BBA28ADC61F3D89168715F1670DEFAC8D44BB7AC5D4EFBF899D97043A349500E6634B67F4183A4F43044418E7CF2227DE357757337086A085B1CD46EC9E0ED648EDA66A3E5FF346C2D83B9413BF2FFE0473A8477440106347FBAF846EDA0D0FA814757FA3AE8699C9FC1539FB6B5290245AE144DADDB31C3B540FFCA670F059930002C2D0162AA50853B37436DCE61FC1E35CB60AB542CD59003A24938DBF5DB2511716EC6A39E2A96AB19243A8B7E9538BC05CFAEC28041FB7604CEA675CF3E0DDA8B188C43D7A39243775964A70A0CA4C727A85F813C641B39CCE0D73537DCD3C44FE92857CC5079DE60147EF9FB055129B7F167B1B32ABEE892F72F8CF9AB4BA2148372236A7A4BDF7B1D319F6F207586D5DF156112D0E3931D5ADD3D8F68AECA5673508B7245E92772630549DD6AA28DB3F21E829B07BC17CE6315AC580528861A30A68276FFB67F8F45C3854C1C144A82CAC52F8B13E5DEBA283EEB2E3924CB8A626CE1C21966451E7A1C8C0D83D93A29FEE97C57112E605D0E31D27CC046C856247F36181692E9BC8034ADC7AF8417F24D50754EDD2CBC573A9FC25922C04A8F8B623EF4DF537304AF07A1E549BFEF3B77AA64A991131788759F6295266F39624AEA2876EE8EF2596060CCA6D22220FFA344835D807195980FB0BE2E45E1D30C182A24C523A3E54A1CA59B80E7F1DF689ACE0086849B9AFDA4E189128D5F18A4A321342CD5CCD903DF5C706E5A86268E46B139D6757939064F152382C12085035EF455D40F90389D26525F0615142728CFEC1762D8E7590871F1B50DC429F740F011DC0FF95CDF4EFCA1CDAD5FDD1EED201BC16B80B44C375D85D90EABB50E2C968BFBA0DAA2390B14A33102EC8D08AD6989805E3BB2C77907BD51E8F3727ADEF6808442E10B81CBD358E8C3CD8E37421368B0609F034F57F48150B20EA58FFEA9FEEA8494D9581530C8BAF54BAF47A6C6029E463BCED33EC9548CB6BBF79C699FD9ACC257CEACA29BE01F45B0DB7C5C2CE237E50CC5509E697F0F036990F361B886A526883ED4EB7660C3FF7367FAD3B639C91941ECB849FD1139821FAC9F741161609B7CE9D73A441D0F6385D6BD92D3F0C6D87A30513645E2EEE444A92B9F1AF4789A8D28C712C0C80CE5FBC1F0D01B1A4FD42EB5D9980B65652DB7B7AAC2B56CD0E90D2B95F08EEF92ADB2142A9649CE354B8816D51DD5249D7B80EA8D4E59A3E2E3466342D5BF369478A84DC9366492E00FE4BEBBFF3678194FDA6A1DF121F60634696BDF61C4A3F02870F968539D778518A53EB9AAE65EFB56680E037B129FE1BA4D02BE25788DA4174056756B14ED71548A35686EFB2F783CD319244C25890CA5C3A728B7A0E53945C26F2E7DBAA502CE854C4725C8146008F8595FBADC64F1CF4FD058B10A7290A0365E26891BCE9C3732DE917301582825D0566E7620318F0738ADEED0EA5B98E32445893F4DED159157814C718696FC2A1E28B7529B6EA744258FFCD4AC5AD1F186AFA554AC87051B4CA8DFC25A049E0583906A46E8FEFD518F33B4EAFDFBFDA1CCD8029E41B906BB0F7085BC47998C610951C12779539F37A9BF0B7DBFF4D08D861C0794738A9F1197C8D9862D311CAF48E21D8EDF85CBF897FAFA9A443603BEE953449D73122348ECC5C29AC6736CB846EC74921E55E35365954EEFA3D42AC47E17146078060B65AFB118C392C454F12E8F6EA758CAF5B611755ED5011E11B7E65F5F623B78026E934334ED5B59FAE5BDFE5BCDEBC9343B2AA752E8FD5A98DFED1891A2565FDFD7A100A5AD52A1756221BA39CC3C146551E6BEC499C2095FE7FEF614E221CE275901F85B1229DEF6CC9BF725887B3E04541550F605B8FC8C8098BECBC36CB8DCC7167ED8556D5628592A8CC1F9E2D4CB2F47C18261DE4323ED1655965C1862FC1B36FF3DD980731F93FC4069DB5E91D2F8AA48842EB4CCDD2E0E0B03B796375E67ED878F5A7C8A7D02607E48FB907D27473D689472EDFE9E8373D8343EB6628BF5A83DE0801662C7231743FA7DC20B556F6421201B4639C367D26BD14276FCFE25E68B73B1E173649EEC8E4E5D2774D6E6A2897B2B5C580821D83BFAB38ED3CBB8179062E7357B3B1ACEDDF885EEA654C19082A98A2D6BBE37B6A4C0E4C2FEC3C68F34BF712A394C2DCB236FDA505C75CC454",
"5B09BEB224A53EE7FA077CF4CFF9BF6CF12039A806D1A5E62B1632E3E735A6AABE905D8C10A34A1402E1C7814797D9BE0A800B17395C59FC01632DC5B3A8A1E0D460A715C4666D0C90FEFE06F1F57F76EED31A05637244079B1EEDB48DAB8B75DC7892024AD0298DE885DF61D97C1BAB6EC76017BE7955D3BF9D79478F4A4537202166866300238353027342353027063162711165310130505226177471385270788085757330321008780008843507786733038025614723411268556113166606221287663767801247661571206535238516567336264628758067362270246576235675852617145566255126354146481460670016177407808736205450734535084382160656560523023623725465181278070120730650406564302212866173146412435130027463644483274161331740275387152043131544158332816225846868642551151846568158627551083534763818512210733854108857675524671152545667106363834801825228527703262642608068640802517405626527188588057312078266505564637523160042524313713540747333063383430021626815526257765064273870851848433083274807166361836837641176575268036684501635143718715856681814274267520465700242822247883073435014731583844144114788641020465100431783381701404343381354133176014023738477468432286730574210206682600354781133607325326111586543340654727330555026236102422563266742430328380474218211665531435413531272356181213146328654783835250532528577740218342600248410742558207785464707034806755212241264512746188203731806737141382161051325283108555728451536105458841620045037686306874366502777564853047735105070134625616161488871056488033376538758146778036366400081622327184104755256427426188645334052655484206376668075043733700545322661467611150723632172826468606565364851178556360647750121400252874800226645308256568674678012113805757246173016476734044660165557411675150162302267783423876722356846861186287432338310258615517353441374165585615036641364845766600217052818610413765544816168331288700162601423700484231175060127774137310304773881078124865060807410070251888888765136418717724465782363542686145003644246242758707077356505547851030684055018574677404358525301736088736784233462725483666640402710655086456848750656208085431148662702108617057643164107424172245415832166727267602262176563350604885584558021204460345205186775315221506201804354323562376812112852347105121243663621871550002776887551376735706035364243077622282258115151413040773705533845460023212201077312242160153868372560052654261651331843745632562500065360242521510888602366656886621868682151747421282604657730322871388101573557473783477762625554673534371060660777741038726357805400034641203075087836040060813466707347834811734621210326375314632572517801340152045602014451786255867353818574570387351538773306481785241234425873413547777557024533275312386367207154716834275565356060685368257651021150088357478311456105385408137105670132664715686026635825152611602177367261313258541760285001375750842211427507744664320348346742457662151171040681511244360322713858465262843162652144582443361604437888057254115658782101265475863051808465781320378362223210262852608660702754043635020217524472105056557525441868522728373581077521348548768787463147157334702740218113203285003366505278302678736211720358248635537746813308371063873131300765646E3C9E401919CDBA0F8E0FFB33F16342841D7FA5369C1AB0CE6C4C5251ED3AE01633C8C6D6FEA40B463A9336DF5311E587A7236AA7203EF3B830D9C5FFAE490366DA2F49C011B09FCD760F5916357F5F05C810C00DB1CA0E812E9A2F738D013908AF814652971DCAE826887E7FDB5FC1EE0F687492F11D8102491AD45FA71417704DB82BF75D2E520B89915236B9AB2BAC71A10BF9D3F68F7B398C525C3F03401A60A3EA25B57C6B20994727325546CDD246222E1D90EA8C80D7E1E546E547A04CF6F0F7490DE0BD5ED2CC8DE2257D0AD5A06624C161473BFE2D5B0C4B05EC5A3001A7549ACABDA00596C138C4AA635D770E2A0A358B8ABF3E34E9689B2D67D5DBDE2C8D48AF236CAD32CC1D031EE8F3033A343736F686FF48997C161C9A47003D4CD9C342758C0A6BE8457F0B5FE82A77C82F39F586A6E1D6ED797EE42BAFDCD7215858AA4CD79D0D8D36DCBBBC546989574B9E979FA44035FC73881CAE0D3D05FA50C6BC1A6774221AD7F1ED2A792FBEC0FBA386D9EBD1D1EF6DFAA148AAEC2D83C076BD8C75DB5F51CD12061AC38F36A2201379318536999FA3E52322B9AE39E4273A9DDA9090EDDC153BA0273609E526FDD34354855C0F12D719FDCE8BE1855B2B490D8602E41F1BEE6CC8A624636E47BEFDB779600A7FC89077D228F82BBE6E04420A7284A53993423117F3D599A6449F26B76243983BA27E2EC32B
"BFD1CBA70FC7D6F0611F9084415AF40CBEAE57CDB777C93AC90767FB5EF426740555FF4E57EF6262CE9778EB56A9F6E1A6753BBFBD33D929C87E4AD69C6BCEFC58887B80F4757370D3C30ADB971A07DFB7E70933C68CC5A712292AF1C33338871EE09615D72B3000509FA6DF8561F8E0661A0A82FC0881DC984C4E506D9AD7C1397EA6309D40CADF914A3D7B116D017E178FC1C02CFDA7C89BC67CA93D37C547FD2999D6E64A0477C1A3C9041AF135D65AE62687E42CA3FA22E920E9CFC5550734801CEFB710C06E99273253370C8B7D5911D9064CF370B81DDB11828113B0320EAE4630290A963D2EC1030298C243580CA80F579F064CE26D94F945BC47DB9445E54A149A7CCDFB41FC912624F8E49A8879C971DE8F6E8C966791EB9AD0C4CE6ED94CC474BAE8A2C8124C5991C7EF7F44B2338A43FC40D47330B4F5C4B40B9E9365C0D785EC85A771775C5A23D72A7234372A780B3F55EE68F8CA5761C4A14BA5B4B90C6733EC2D78324BE63C598E40735408A1080F0F48896FC04D1D0CFC2FC22371B117CC0457BAFE82C4C704154BC2A23B82FE951401EC50F3111E463B8874F400B7E22301A80282C786B318EC9CB5A0DE0D1A2E9EBB4C9DEDBFA5DC6CACB0D4D90FA8E8C3CD650E88BCBB1321BA1B324151F55B3BC9642FFC7BF2DA699621902C72AE9F327DB8610E95002ECE242333657CB43E5F2A2AAB9CC9262EE3E1F50C556CF27942F22F7B9FDC1D421CFAA3646C1E4FCD73DAC14D2BBEB579EF01D19082A2EA3B54F03A2978B466579D438B6D6BB3FEAF0F0DC62DFFCBBC75ADDCC706DAE5CF4BEEFA2AE933BB770271038E69A511AED3EE105F8E97FC70F0838E30D7F174F75C1A119AA64E34D3A9D8D20C1C14F0A979565E69C87B43385145D37B04C92E2F47037197AF695ABD674C892041AC91862F4233101A75CCC98ED86235D0DDDDAF348BCB0B5C1DC21A8036603B983E1FAEEC7E77565B54903849C3A0B77099C993A3CFFE40E5097501CA63BA613FD44520C1F48FB50C50EC435133ED83129DBF606B8B1A0503A1847AA72198A5E344FFD97DD30DA5D5B89A891FAC31AD11B9954EB0DA4784F30FDE9F1271BFF1C687963C1332701CAD23B4FCC25B6DEB59AE81F28303DFE1980B944125D9770D8CA1BE474682CD6973A5AABFE5BC48CE614851C1F97A338A1D7A9937F40D7408A8DDAFEB60560935105A023C043BF41E01365533DEF76CA1D55FEF1F3C3411A30D6283D314F269B54AD78F4AEACB207444C28379B5C0340C656429B9739526BB025B6724564DD16A8BA0CA77C67D28A57ECD86E05937434F6A77AE6CEC6F069851F8C5AADB47382DB2F18239300F73E28C13F1DF8F88619F1B217E29F1370671275A2F5627C85B98995850965AE97B05EB9E29B51EE5D110EF14E1F27424C67790B3FEE36783E8F2DF95CF1DAE6D3DB7B24DDC77CAE309C1F5A53FAB7E147F2160A598C48CB5BE8EC9EF733CA512FD00A3E02840B6D62A1A0CA19FB0A176684DF2A2BF51F462143F46991CA31811C49276563EB75F27DD1B596705E89A1F2A97C4488C2CDB4A3E84D7E6ECF8C72B4F78E8F7621968D718A1C50AD1B48427BA04663E255159DFFAEF646FC7BB2A9B60F6335880C28E76CC13E8FD7A8DB62107135AEBB37E3E937B0534C66B43C51904AD02B6839B09E0B66AACCEB9F9E0386D933AA01CF29D88430BE69B417DD1C664D5A3718F6CCBD72983E188E59B280CCB9673C6A16A7672054C151D3C1211705767AF63F010C8816D5478462A55CC8206674483691FA15DD8D5AEECD7C6A8107C15C95C29A2F70F2712F09908B4A732559305F7D9706BF6741B6E93DA508608AC23D4F7CDB0FBDABC540CE29060F21A81C84919199744FB9F9C6D1A29F3BAD8C20AF7474979E06BC5B81E023C2B2A7F8D5990A0C27C7A3416E6F0F505B7845C8D3ACB75C488AFC59487D6B3C95AEFAC16488D1AC8E58C3EC755756AF2A74E245E8D384EBE61DC7B17D313ED56E56608ED3EE795AE08A77095D1C89011C9D4B1A3949D108A76B4F112931E9B60EB7BE46F9CADDCBD1D15E6213C5B890549949A0162440BA31503194F116F5D4E1B202A92E53C92A101E57E968969AA11CCE7F946ADE45A93645F537C945495886A727A3E4831B1659D18B9A85FEFEC499127B0A1D8DC3F52D300CCDDF679110AA7E87DF81877AD929EE594672630132B8AD406A423EA805D157ED861482A67D9FD09BFA3C5C379CC2F9C0942CF4777AC0888FB77FB09F536283B55B9C865A778F8DF896CF0F95E569143B7E179D2239F2C03D27F8C4B4EA486AD9FDE87EE982181643EF23DA8A0940A8AF65349D9808C0B9B9038177B6FE8DD73ACC6113380EB749080ED2944E2305D49FF680153053F19DF32D1265C5B915B4885C7D79F920978246C524012E51A4AFC7907EB6DDC54FBD1DD140A1D8181DB21BE17D2D27EDF6E7E3C23BFF9415C46F5635885B226DA49496020ED45959C6A2729938C2B557DD59ADF65269A7FB2CDE688DCCE56A19554F774B5251F7BD73F030643B86457FF366D356522CD2B23EB89EE2C2363D2AE6594CC795C2D8F04F82421C2A0214EE76ACDE7472D94FE52F41BB6BA1005242ABB23D59B8B4C85977E3C57D833FC4B03DDE1BE679C685EC9F746ED3DB845A1D1690E4F310AD54E7879AFC5F9A3D591E41262F54C13B10F732314458EBA4218D581B13DE6F9A4CBED0FD69A614483026108F52D10081DA85E9ACA00790A0E82536636AED728A64600A2C3E1E73B1906C1F5641C7621510A8849FB35EC8F9F0B43191ED4D30DC886651E317D0F6AF795883CC138178DC4DBA8464AFADE79DC2E6353A8B7A66C1853483C11DB6889937ED2BC1AD6BB694AA49359DE8461D5EA4DBA709C
},
{
"48539BCD582F12892BC27B6D30EFE69173FA7416E7E214DA6F10CA01041059067CC065AAFACBED8D252C3BC61EEEC4236092AEC8C9F581AEFE959846BD37B566",
"4A386ED3C9B19F2EF4E06A99EDB049B0DBD8238A7CD150729CBECCB9FF9EE3404F6E691164D39D844CD43C4FC2B09F37EFDF76DDE41B743CDD532A84FB1A55D71F5C4B6FBEE184AC4B4A0F801753597E13AC73DA59DC8F12773F3C0785F6C58D8CB83FDB1C82F4DDAB41E7E7F8B2594FDEB35C74296D70C599F5865F36C95C4C70C47656F02B591909E21DF930AB71C1A74C2F9FB2F354401EE2301F0C1E3BA452669C907283CF4EBE3EFAF0FDC00826BA78D4124EBCB4C31639AC3E3025E7ACC962CE7C93B9F092D965C9A35E5EF1306305B6E56C6BB8A331DA062D775DC426EDFAFBCD975CD5A4F8B1828E6CBC430FF7086CC6E96EBFB3564BC0044D2851B35677518E367B451E755587D8B176046920A31FA9A53B1C2AF3C1CFB66A948FCCC05080F10DBC50113D06F8A03910186FE25ACE4439CE4F9EF4B999FAAC4193A19CDE4AA3FDFCA49668C76BDCF91567FFE84203F970B74486589E6B1FDC4D76F2750B039A59F83FDDF91229A8A3EE378657C5A34F3980C823FF191F3751D5A46C14F8303A14B9B15499E747DD464C0B6632C9A05FFD8ECADFB6D563FB9C1EC7EE232B3029E05AC2DD53AFED6014060B74CE2E539898FB678CE84C0BDC5B14F1D5E8259284F30A38AB09C8AF79D4271AEC133BEB2EE469F29066A2E1D4A91908C7290FE41FA7F6AD9387995948FE4FD6B5B31CD0103963437CF86D85E287925B82225239189E1C15D833A674C5DB269517579D5254F2032C2E9279E215F39460B3DD3010E9194EF599CFBD68B360D69A3699A1DA1385F665B8D95D207D8812CCE569B4F4C5B00A64BCA1D12DF85C70585243048A7C5AE611B3C98D3D9522F3C8FD6CB5CB5224B3BEBBC41A0284305E3EEEB44DAA5E59FEB55218FFF2ADEA1A96472CAA7AC4FE7816A262D59B084570D7D7A724D13BD59C488B8A47C878C90D6414E5EC9A2672EEEEF1068DEF475BE94778EC8F67A22B7DCC8B73318237DD0D0695221E89809FEDA3AF086D149F0A07F7C98A545D3D01B0E4307103C169955E8C1051C8593EA9ADF4BA9BCB920DB2D501897E747FD4115C716CA491219AC80E2EA06E1C5C25AECFF4CF90682B480D2A9C549E1BF53642F60DBC9750B141DECDB6FC46EAA86466E212328B35F11419C088D5AEBDD3C9F9C32A0C3646601BCB3D456036CB184B1A0C3C9DA4A9191567601FB01B9B8938FB158061BDE3F044BBD8CEB4AF32376D47A5DB9AA65644182193E856D4A9BAE0C4B59DCDA028BF63622D991DCC3243C6B52CDDA0EE48899FF52C075C53D40A7C8C94AFE9859E6C6BDEC4864A5843A5C493ADFED3AE88DD140B755D20019C49BB9F5B6A96DD657A8A94AB0851F0E5441719566E32E5DD7852D517E85870F883DE8A738376B4D96DD3A10A733AAE45D507FF9125162F2BD846DD15750DBD1D72003E93401A4D0954D58369A5422A1F5E13EC6941AA1F54431453192380717CDBD3F7170E9928D094F5F58178001F58B7781F3D55120236C8D4BBF0C12E210B666DAE07FDA10A900168F8D8336EC6747E4A68360CAE785A82CADF7373BAF2CCCEDB735AEDBD6CA10621A482D55D2E663FDEBC5E9119D4BA361BDDDF8CF4E36C4C1B39D602F51C588B265B99C3711FE85EAE662E4B3E926650FA7E597878709A0E74DEFFA7B71AFEB12F3CB1CD33B00BD1621AB575925D23A6A9CFA754CD9FFBFAB6851B84CEDFA0F3FB260550E048412A89499DFB882DC728B69AC729D2730A7F436470158D375F5974BFF42E7EC669F5A6BD0D6BFFF76A0A3C43DD1B225E62C680710469894042771BA7D2FBBAD0915DBE4714C9F2D45C6D3C2458E1AEBEB8717B53FF4A9E50FB8496D3FAC561A128C943F726597DFBF134E4775627BE6C4442D4ACB0FFB6C4E0EC69C808054A276FBECC999B1A1BA5534AB7FE16E4022534D219651256E83EE2EB01C41E2ED52E6339A89A982CC74A662B9ADD0FA0C61612F20536FA1F9AA711D7ECB9CED057547A96E29C2B24354C5DA782831DC7A5E62A49FA6E2DAAD23876B61989D4A481730B6D62218E06231DD1ECD9DE47E9A2C65D2A2CAC8BC40C40719E2EC568A2CA66FDB76AB985E0966D886CEC2752D17F822918F298C8DA4C447617B1DD015F35DB8EF733DF8E41AAC405D7D5C319E2655F17020D5E56B19D1DEC7980EBCC37580AEEEEC1DAE583FEDCB19BA1DB89F0794173111CBC3871FE6B4D76FFC331754A19348605E762732D6F5C6B584B7427EB9BF80455AED01B95DE67F45D7EACCAF0AD7A0F1E203CD97AED5440BBA976F59DBA2578FFD57D9A395F5072EA5B48CE02DB7FCECC87350275E78D27173880F345D751BD5CCE8B3218D5C44C2978350CE80ED6ADA510B6002ADE13A485E1EE2E64157F455FC7C6C36998ECA9C10D3CA0AA725A46FF81AED0B1170BF57DC53C093130D6274E4F9E5E55FD6BE2DC6428230314532B660D72770B0123F148075B37FF8C6B99225EE9B567DC8E281FFBC12287C4A6B02A9094A429CFDA11BE76BA2B6B1979917801E69F20411F881D9BEE05064F152244C831FAE544ADBE67CF1748ABD23F185DF187C9695FF0E9C2BDF4B7005A494D4383620B1DEB63E4E2091DEB740C71E4BD9B2774595A18583C4DBAAF096D086D66E7E96169AFDF9DA0DE6180D4031729AEDD93689A1E584011A62ED74EEE4521EE49D7B9D3B9BD2C65732A45AA95D1FB34D23C7337E3B87429919174050139E7E506E8F6CACC8D4170736DFB0418EEE6DF4A3E587BFF63E3697C2F43A6",
"4A386ED3C9B19F2EF4E06A99EDB049B0DBD8238A7CD150729CBECCB9FF9EE340514CDB80C4196BF928825B545EE20720E1F1B7044B61F50075F00D72B78B4584A6165DC91262BB2EAEB5153773196C036888EB1B67BF3769EA8CFF805F30C742B3334D88D6B4E552C24F092AB1F33CCF944F8A0CD49816ADDA791AB7D88772D1643714602342502488387112062367253543881787867501574008045374200552121046883578522385026251357556755824110063634135640734332362475224754258042824486736274360008666731031686730150074162500063502878873388811134446110684620574532676643033806515278474046714774578033676848315761433303066125171214323667687825284818556283731775137205453738820520406615772762360307512777743260415661611485121838137208332604023601632808741615557667563105843660411617512482022758240731206030373638657558015743256187132103300832176603864733487347828686243225032758681445352608284616856648552065665650674206001004565150160372572241844152454831300537502520385764888753620836006815281764827545788347482615413565082475384804437782354380122538525535305824350331727243184411417300867870677423881252603237248758063828503582180450085880006784357871110030610005828838314160843138428806338372140033648557768120250183675567234056783241048760247635137667134336613522808888686106775747567112665786117828351422021418513516103431062307255768453782183804653013222420268146188848601670186471601608676128647323410161868312583236881161152031485310082067233645834344882570765843631072565331181127346752874171512875660188816150468638422507145203538865366251157285755646328681088610735018054322210045021286360156571324141483574770430216007263110155570530030037667510476207777457550182852557265336320050010408177260334663100760034501122543185083324630108324702122008244654052007233751052604814272088615262671521381506221684437105248687477076615406075213116428377516241808702113150754247353708874451785607201474204662075038658658487320154541234741465047241634001328574083067047134030526018771063705586677351077670484451002427087100030332726224680802300368356468416008855102380160338212224626883480521301480733165326662507502745654738480855245120118285206285604220586511418238325366578505540566571164158310855740528808056102450715351257381372103035134788542153018873781454550676847513537146788616480137355014214080170203673225488746312713773466626573545446572365148586641303110054600225374035865875213621075485676013532014106185570063417424030625156458558632107761654633445640000050785400610844476747348508245416313285760153508141045385661305483835115110152505131382256457624521620656272005772656851023404415616627477550366688431527607046154568650520755332002711223467302586573751211831571638717757184401208435173328578035088434622603721006518515253265523848882588478167652101177084780782158563278140063500141627575138761221675540728470011078633245443105547651034081637274532211645535220230434145153216105414871067680158077585473611738303365560810480546483543803325187308606837341688881832752332132227236117284027187642335658053646677615874268252018471722160605417024257240623818800071142036460331850541424434350678236080664180358506458831205661714064448501777277754353E7D68DD623A00676D723B01145FE2FB741A61271E95043D56C3FE307CA22BC27AF580CFEABDCE4C8DC3C0D6E5A16FC5A9153A710076B7C63D20A166CBF1CE8C9EA9AF9649F83FF6E1F87C13E7CA52C29C625E3A0EEB8D6735B4FD44173EE4A997D5044CB1B0D0439BB535DB8CD96EF7A3355ADE74E201252B6A05814087B3D8E515E40D3B567443FEEB7C13F6CD7F32FA667773EFF9C5B708E3F8E60A8D8D19FB09748599453107153611867054EF76D5C332F8242A7A1936CB78987F140F33314CF8C9F4A7FB0CCCEBF6C60DAC2FFE0D99537465C0A7DE2EDABFE657694038E4EDBA0B31E51476B85EE22A02740C92B9B579E397D586CF4F61FD53C83AAAB05130C1EC4E37842AD94BA02D917B1A09D1E71540131D8743EEFB7614D335C87F83DF03503A531FC1BC77C689DEFD66BC3DF3D809B554F8A6F4606BB9091A227CF721F9B4BDAE2075878DDFBD001AE33265E06DCBE1CF4713288A0181BC87D66C4EB9082576BC1CA076332E770F7C216CC1278F73B365F8722D4CBFCF14E92125E4EEA09D2D8B0573C4A8F7E0D36A344F2741BD028A136EA572E615876A1F92A74082436C37739F780AC6E21B34F7717796427EF3607F799D72BA831A4D5E9C842FF81FBF563511705DB71F7487686704B4AEC2D859AEEAF6E496F82995B4EE88E7C12238FB39CEB8FBDF0A09B548AE8950A1CE86253536DC5D5414C537F3
"AF403004D8B3E044C9BE4349C061A1A4B06C8149338D02F86877C9DCEB4FBBF977A8751169A04C4F7C3A4067E89ED941A4AC69485844BD983355012B1B4975BC563DF5171331BBFF1B314F0B843AD6DB311B952E1FB9BAFCBCF75A71D4CC9083A76A8960971DBF7AF3D96690184DCE1925290F3193FCDF241D7E8DACA88FA316B5F46E379553DEB6D8F9BE204CF007A8FCC636ACFA2AFA6EA1B9A0F4516D772C3063AF4D3D3C14F4F3591E07149149125FB36B530744BEDB2D0FE744A6D2404AF69D841CB4D35B8B1CC3D421D87DB796EA94E181D44CA10CE7E2BBC82292377A2369DE9EDC73CD4C9339A020CD5DADA50B0F4E6D30399869EE23FC4748B3C0A0FD8B0A4880B412BC78DD9BCA8BE4A1046BBCC4031C584E37D098B5BA664C4E8DAC92A4C942F4713EEDF77976CEB7CB06769BB0E6B3D19AE1B97842F33697A189721C7D92AEE8A32E923285AC93E101AF58B067D7C05ABC9C3A59260C274EBA28AD6DFE13E858482A0B8E799828AF80DC7B1CA60F92D1D1A6D658A7FF7386C29E9E37BB29D3DF49A99AF9BC29B6B9366DACC291FC9B172623EF54CCEE94E868ECAECBE19600A769E9B0B5C642EFEF55B9CDCF8DD77F850D5A7127BCB7DE04A9951107EB7B94144363D228473DF5016F7685A9071DD5AD3949A7BACB009570819A0EC5189B592869069CB9B1D544F80978264851DC4FE00E871C3B2262CE0AA15521AEB2C8F61FAB5C10086CCD4C3E190732CD7611B16CFF8B1DBC1916F26CED3658C948FB7C5407C040BBB8B0F92A7809E602588FF4B93DB4B938F1051DF736A920A708529C8ADD0C57973C51F9A019A7A8825FE249FBE79F81CDD294135722FD5EE1C1303A11BB970BD50D75E4FC53CA8DC7949C4E9DF4146725155691BF8A4B34F565254E04B27B849FC6A1B371ACF3D5D49D156FB30DF06DDCF1A244A4A430FBF422F02551EEE34C3629A20D539501733CC9D0ACA95419A41C6C1BD87D142FA2DEA7E3B2BBAD4832C4AF0593C4B78E95B40CE1189C083F7F4BE6DE4C7AEC5E91038D270788AB39C1838A7A431E49E1612CEB521BE3A7CFDD101F47D1B0D7B217B1916934E689A40D5C45C07B62146FB4790D3AE865D43BAD28626B769A821DB5521D173056787F87A35E58CF16DD913835F781C69744EEE62DD9B75E02E6463F234CAD841BD059E952C9B5C347B7921BAD9E5738D034390DAAF6AFB4A5E71AC360BC49859B4E98EA82567138634EB0F75EF3ED2E3C8EBD050BBB0F4C65B9E2AF6A4A66B97F01350962D296CB08886C7D1FE99BF60AE3986E205B232B468D5A69D7A73A414C08C2A60B2E2103467E617DB4755B13D44FCC435C2F63241A2103F88D39BAA159A5C51238B95DB3F3618E6056F218F52279032C76ACE460B36FC56A7D654497ADED469FF5A48C7BDC5BA3179749ABDDFE09D66386B8A71550BF00651FD32871926538F6D5FEF1FC0BABB0FBD291934A35098AEF16CE7FEB572D307D40D9887D1F6F870FE046BE0374644C92DAC969ABCA95EF29E4361F7BFA0D08BDD78EE5767FABBC3072767C2B8D754C75EF22D625668BE16400739F8AE1AE7D4B1AD47562408A33D33D8FC198A394A2B08A79A8A981F997424EFDBC6F51C44DC61724747BEAB70AC8FBFBD7A88D1A8544C65EE014045A54033038E956104C213967F0A259740408FE7209113544A59948D2F6ACBC23C10C313C3002C1B8840659E51B84D1AA0A991C957B81A2436E65B1ED449B8DCE2071332726BD0BB361C673AFC21867B71D4A107E37ADCE102C890B386BD246637D56D7DC83017568B92A074C08398E6BA28E4950668077176A584CF7060E2675C06EDDEE1B890E7A25A01E7EE3BB228340D51C1B6A40402D4C0036D90C4AF628F806CD0FE7F5BA6B7B6EEC684A4784C93BBCAB66AA17C8265D6A5A1DE33D397511E088A1566309AD7F91F66D415AC0A213A65C754BA983D01E32FB577ED11AA8296538280E8E1380828AE5C2E331EE39DB0682A21A8994EDDAFFE44F884C4D8C683A70953C7618104E421722A01B1B2DA83526479F46F4079CA2B98ACCACAD7D08E24C5ACB098BAB162BAF156C058361E341B29324FE13A125440FF8CE1CDCA8BD51A06254DAB9A5F911BBAF73092E78159DF785038041662666268A242B17C916A60B19901C3700B9959BFA0874292BEF4E9320C3C08487743165BA56875D19AE896E431332EF306E85461C9BE151E676771318D48F6D3EA997CF7DAB279D93C914572E0160706143E621D28EACD6D3E8B62FC254BB9A00D3E593F43BDF48583DFA70AA51272A0094BBB2E94A21F8E888B8E8688FF31CF08B01C4D85A9381D635B473B790F4225EAD0C969D0C10709A868FFDEFB6282E7B7FF914CC7EC33313798953D4A48D724A62C074C84043C882A46291220D527135054B37FD43994C663AB8B6C3333394DCED5E4D4D4417D67B8096643EE323323074A9EE153CE7083171B760FDD259B5A979A8EFEC3964340DF5B829CBD671B303F4E531D92412617321DAF4022C2BD5DC3F7B4A5FF7453688537E92D1093CACFFF7B87A1502D15F8F68DCC3C080F3292C101A657657FA6577BCE726FBE397ADDFF3D88D54CE4EB39711E2C1DB662A3D2FF5B6DE74A30E7C56E316F7CB2EDE254F444D0EBDB56B4C615A7BD5C651E528834EF3E9AFFDE3AF9A70C1EFFB9AA06C2043A9B9AB55080C1FAC0B9BC392576A277066FC2C705B69A7332AE4E9726AB5FB7B828A845C13B28DF5F6CD95D7C32E5433C386F17A3C5F04B4B8DDD8E5C1CDB58D6763BC19E8DD940A630D6A35CE6925885CC87F4B04771F6851EFAF7B7EB093A753023341480F2D8FFA76E0551EC63077087972AB9211A4BD03BC4F1FE875EFA440600D4FF47F5AF6ADEDE1DD0F173C
},
{
"2CFA0C9772ADD199F6DA3F217473072DC6131771B27F9553BBB1D52C3CFCB9FFF46986EF2389E8F6CDE2CDB04ED93C0E6E57278C9232E4B3E92F215BA39E7BC4",
"F3EB97D3467BB90386FBBF74545B0DBC0D2F25BAA8E0631B4D0AF145AD2412A1FE4E2C137E620ABB2869F08994D5E64EFCDCE4A3C23AE35EA9B318E57B3F4A08A87CC5CC8D17D46AD57533A23834891619C19498D7BF1D8D493D76E120D224E2A98689BD66FF643EAE18A98DAA7F91BECACE46F0FDF17139AE97C9149EA8841FCBA2612CE6463C39B41B491AB611F37CB3F3C28BB0A36BCDCAB36B93453AD8893D6247026059EDC138F68392EFCE5140E15D256D03887058CD4DB83295C7252FD2B7AFA701AB77945EF5E296ABBAF174A1D1A94FB547C929AF2FE59AF9410C12679867169CD039F0B37406A2770DD70FF72F880C9B4FBAE0A3D98A2F2D0412E5320BB73E89D3686612E330054A819AFC51D438C3C1BEC5AAEF00E16D689A7667048613E0BB425247028FF0685E418158CA1D9564B3CFCAC4ACE02A09AEBCE0DA60B3628F1772DE5DAA4B34AEBF37D18E4E7AD4A96C95860DF8E0A3DFB8EB71C9BA6BE7EF2FD5DB69BB76B72B988A3B6B62D044CF6613C1A80FFCB7636F564591366328DD99BC3ED1EE4951263160C7909929F8F39229E6BC12AA250858E6AEE4F14C6BC8EE44A50276E8122404063A84137DB662B103837A653E3840A26CC3058C486189E8B8DA56789A7E8ED384CEDAB885F9F622A46ACD5DBDFDBD150C93F132AD8F7DA657A08B4E3B60AAACE5151FB5CEDF4334EA344D2EBD94E65B9C9773B9622FB01CE31DCD7900DB8EC4B86923286C8B3784162F5BF133E28B8622F51C1DB089B2F4EE3A126B1C4BA5408148D833A6E6D4289B52C70BCDB2F77B906899435E08DBFF46B53CD0F4FF05101C3D480FDE27818B160F3125B63C73CF75191A8FA01D282E0AEA940219B083E0DB09745B03E007F50D26500E7AB10B29BB575CEBFC1C1E46DF4DC3A3A0DD86514830D1236C6E8AB6D8E74033B97A68AACB3651590AD328372BCF24ACA607F719A6202362F3E75C15D1006DE76032C11DFABA3D4302C38E73D0F32F63B36066DBFD503A91324FDBBA247A657AB8C362CF416F0AEC9A543AE566D5BB7195054FBF9CCDDF2F5414DBFE9993FC273B8BCB93DA27B14670471DBE2CEDF45BB84FFAE897A4D7542C11CB0E79BDCDE145C4170CB45643EDC8A03FF0AB19660C782D25F07B3668426F59FA173F99CECCF79639B5FF9E7F6B7A36144DDDBFC975B588A56C2B1322C6786971F9A8284AA34BF2B5BE63B07F61E031539D36BBB42BC8E515FF2B879D9C53C0033AC8E3E09E7D434C64A19A2A3EBB6EC1F89A028C57D470C387BC89744FE1B4F08B79C8D58106F974E15F8E400335D7CF66BC7354E833675DCB34EAD2CEE785E367D4685D591C332A4A67492F6FFD6AC88A5D8AA2FD874B1CD40E2FDF9A0F2BAE580B48E67BFA595E5EA4931459A9DE2C7E6020F11003222777D5833A71B432D2ABAFBA5BB7168B986A3F21C93CB16A5222558BEBD63F3C84011C91E24D49D0885B4450AF1212F1081B950B7C62E4D652C5B2E39D5DF0F4F3279E936742AC604220492C6AA8CAA3C39742D1C9D230E77190BA9F8C06AC80B04CDF8272BA91635AC87477210103CFF84148557D33C79034AACD0D7343E07554ACAEFEBA4A73318D27E2DF39B6A2DDAE56CD3F70217237DE0EF6362D987A60DBC8CA110F496E49FC1F83DACCC8D0FA308A424CC9BA671D2A81DB861CD99005A649E3DD3263FCF1F88489F1C77CDAFB0AF44C2641E17C55FEBD2962463C2610ADFE8CC76A0530DAA98E5727D6DC5643A79004ED7422103481D1101FD65706055E63FEFEDDDE9333C1890DDECCD3707D058FBD47281386EB010EC3C792C9AF071EC574A2E33D3F510B85EFCCE5303DD040591B6157A901AE4F800D8031B8ABE13F26DF8CD9CA882F4AD1155C3B5DAED88FD581E5EE8E9E0812BF3AD1B906F69B54AE51D60D4D38884FE973357EA10FA9B0380A65229BE9253D81B6D3F1B15A252A8D5EAE3702D4E765E622D466DF92B74D24A9D07292DAD8C29BCA620D060AEAD788522538D3906B7E511A9C1F658927D3AF9E7694DF79EE6DFCB8887F177E13E588EB0AF5CEBD11215C4225377E2598C41BD6B27E2FE96A8B7201497284858AF5F9F5D88B6B259BD5F00BB53EA55CB837E1CB60CABF55331D4BFB5C222A9CBB907F60C99FD56B324012821F3EEC4500504F45C212DC01A2C08B653925B1D003CDC2E050584BF09F47F9C575C13A52610550CB6867E79B7F9E291E56E58F62A08281B0E038A6C8C7F50D08670D8142198F465FB90129AEEB8DA5787A135200B42F0FD385A3BA5B028FD14CA9D52863AF07EBB149D52C876EFF1F07FB20D683A42A3D422898181356828B55F034F0CA855D185EDD4DB69A4036B05C59F744815D0F1A01E6F21182B9172ECF1E2188E72D748E3E7F3BAD06BD050714498C4F64102334A139D624E0B56475923BFBC45CD3FF3365347069BD6021795B5D392E936B744F07FC62F911662D8CF47E96EA70CD1CBFE6E4B42BF68BB591D5897BDB706FA2F3DED9D7FB7E4C42116C922C8E8E8DE0A59E52120441927B4DBCF5D5FEEBBDB52F8EA8FE4160372C36708E7F23EBA2FADAFACB7703E9BF9B80ACE3A2A4EBFF1449E010A2F458B01941B97B5B911BE8FA90EC39F41D017BB7436A9E4D0B783A5C4D52FED7C4FC31A202BDBE0F7A73896AC2E5AA278EE7CDF982720A3B93D8F032528CD9CEEC721C49E217BCB70FC05BE48CB11F224CAB125A064CB3A7CC1F9301C2BE2F5D00CF8CBAA2E072DD6E89148921EE6DA0",
"F3EB97D3467BB90386FBBF74545B0DBC0D2F25BAA8E0631B4D0AF145AD2412A1302F4CF9CA1F9CB5C405CE08EC21CC99DDDA040BF85EC7EC42BEF2B582AD9F21B609F64770BC5722AE0DB6D344EEDCB7907209F05B3B05E5D2969F0EEF384CE43264B824614572003A18419D0FC9B833CF1F2B896B3996B7C9EE836BDEDA8B4186481323343074865778585306584776308533658388276174257688331650011652433414457814372305110728501770607553432384227205173380622644550652014767250215647077308502838316462185052348865771564336738888143500542270142757324107563406462351150418120445434835400608347464768073670380461131157614404354575667553627713717216008211876345281452287204372265657501137720350501531655575543708618710277083580660602056371217657782522587786140382501418623758048640211458467601204483811360480176414378381210764632715473265217871501753201487388460761033473444211405364140884150752837304810562075785624501522874545758128430548525566232426460251565138660303558832810500863206251572568428757028283530586345163043787400787881382301078188065446060361471286086254725430162845111340786404137701546800460368266511700352386486188855400607251322376521456328804147655771154422143210778861215145147636287274010003521461441717464254748448621317602005134620840671155833537127808371630226747215843400155711108163870402287812742647123713313288517764045867477865524515445016071361378332144287175638768524474637172766544033458781680075516303586831487155781516104207426566725570361838538755851567022142585220332127827557370132844402531581143234312224477868857520840134433743134172523064508308205772248277603521005742578108318483706315140712444637157014702336543432605155728824704744825530678531300822366076681712787816877051415143220305087417328886051564747187210666055778087486206386817680651771363002433056700030388300428417644506284073714733884784000387471244116538452447804804440308287408254868510363453261868632442312833758112211786032240070148660545260178772376283668277570801828020577157024717566605226137481210687728247347746558083315465427724666743648372817053263231608563104773886445062300453827378786526113605768446770487885744205674527083544254050112374478661644520062550002332007825717010530760814560217017842753367810280537486310158502175148272843764170033727705643506218623542075847778015655740101345237874570043631531260173206241722238773255374184543845102714207750337731266256536447440700425384310367203223253432203766804102676358548260730664151474666083707003208672472480440387736301626068112866368372327786123245245428836337114648737357040343328661056218106753188875012510028307310118431314243751472411183613032416181310024272526021607618088311083205304608156814668231527430714346534255651865813600530140822022552066720036188655242326147640572208038755628473410814356315785220118217548715412230051576048468811143033281573766276127288707711031827354872223152280251144364178026081436112838045786261328541126372505434548727244877624653564814846038688317785256303536277721211780643278556358702837327605602661657204035858747134811128836437713477617033113272035561526004784701538034462422260787457433056450056412773403215332073148336604026523545DB1FB2DB0AEFFC2EFFD1F3ADF5A76B062377183B7C1966D30DA7C8DD3B98AAD4ECFEC126F50A4B8F608EF4110CBF42F4199AFE1D6AECD7951F4626AD6FDDB5EFDA5E6AA1F4F937AEE2ABBE1AF74A64C912E293D5739A9452FA15A64F4862C01E323F2C0701DAD4C35DFC6B8073B290B6426C1B27519E93DB11BB72C178513C6F9352EDC9CB7C69426A9A843C055BE888180B1FF21B2D195DC8E20AD19B3983DA1B1C860ED5786CD924FA766F35FB5C421A57AFA67F053F635757381251D081BBE437EA8F54806838B5CA92E1AAFBE5E0F814167F2378A349CA0A447DBDF58201D9A83DCB242D30A87ECD4E9A29BE9A4F7BB8FDCBEED674701F376FF932616E4D49E4550475B41CB6C7A0A59970DB5A6071AAC3F0C87AC8A6359B78D9DED0816214DAEBCD4093909187AAC8DC4B31B6AAFFF9AB9BB6F2E15C5F5F4D421671706E61DE3019C782572A933D981BC9E0C28C6CA815BC17241C3CEF451BF884DE6F9528067632B8B46237C6B300DA97352DA2B2FEA09BAAC90BC2378F2C4A4643B04C4F714DD61EDD83282228754BDCDED1E03AD9754B648522F21EB526B3AB15E2174D4DD260C3C6BF76F1B16B877641997FB2D7A4BE5DA7928F73A4B276594191F5F8B574C2F5064142E1861E413D8198E1BFA2EF92ED9C2BE5B601BD8378E4B31F9739B16DF172F2BDD15C059DCE1DCEA2BCF402B06075F562FA758813BD6C
"464B4DA58B294D4F3F1695490853A4B67B9A5592995E244C487B133E9F2BFFBEEB9B8191A09BA23868F354DE53B10669ADD7EE8251F7CE6000E629E0304A113A8C8E1FE047241B23AC229F8BF986A2B7A458C73E4C34857C1FA9D23C2F80B6336B98737E3B743988F6AFC10759FEB5B01D4EE579DD6471EDBAB718C03DC6F5418061C298E8CC2A1B985E5087B70669E8A5C92A4DA2A3903B53CBDD6785242CED237A738B662E4682B0861AC8F956A1A4D90B2BF0D12EB50C715EC18C82D9235D4F75F09054A7B7B3A58855CF3439C433E04D4AA2F1CCB64E512370C00A6498750B3FA351145EFAA6608779216E6E79F24E53141CDC64316E962DA39FB6A846D6373603DC0AB1CC974B24B3424165CA43BC78AC589F074CB6F0F32A0AC20979F48A5DDBF030F48BB02EF6028BB7A8E2E2F466FC96C1955F568FDEC5EE4E19765A544F9B88BD1D4BAF08D85482C930F7305E2D115350B653E7245968C19A816D147FC59E740F12F639198E782F8FE6820A5E1CA8CFBC56A126F6F5FD80B3056803C3B4C7593FAC353523BFB921B6F97447F33936CA57BDB1FC72F687245D9598363EFC65CB7E2246B36E19B71D8E91096CCE39999F4728D27E2012C5382117A074E6DBEEE348A3FEF59486B079BAE3FD5913D553D5A9FE5515E8BB2797037D36CB9649AB4215D493032D5BFCBFB6B8EE3EC0DC3DF13A1AD7B9BFD0E87A505916EB50070CC03CF69986D8C17DFB231050F92D46D8A189BDBD167B8843634BA5D74316A73EC90EE857E2B8BF56F3988B4DBD7EABDEE19E909B0D6A8FEBE742074776587078E794E4906A3679DE97F38FD00C6AB080B66997A64EF1E9620C55B04A2412E573027332B720CDA65E044F3A4D4090430EED08D50B4871E6BD58D0FBE80921B0F5CBD6135C7F527A395A5DA43E206CB812FF16CA094D9767EEF579EC22C29207C97BD32CEA9A4F5A2EC2DFD9D8C5CE6175044A39D4B2FC8CB017D76401AA4A4CB6BFBCCED74C7522854EF49A8EACFD15E075544F5834B074DD274A3763A082BEB1F1A9D83924CC61F5EDACE7668BBD4172FF1B524F988877E335197A89D691E86AB01A5F1E402E4E8EEE22301892882425FD9AD99ED3853DBC58601BC597E8753F7F3FE30D4743B1262C9561E775D6E6AEA2AFA0532A4FD5381CF75339CED064170CC1D3EBF658205330D066B8ACE6EEA77DD32D979F588C81B92EA0576A5405FD0AC2B44E09B2E6FB9674EA642A190802061B889488EDCE9870FB5FD7C975C42382AD5542AD77F3BDAAD6EA41AF32EF5989956E24ADDDBE19305045D82EC296922AF62EF1EFFB4B14F1102E96339A265C890F579458A0397DDB2F829D01FB2B51219D5143F35720FB65994714EC7336443ED66BED2689D9C383DF6135133E1617891944D515655239116E5A284CCCDABC406F7E74F9110C6EE48F13D0A6519ECB51B51099DAB2308AEE6E85D2F4D74D0B1F1A693084B22EE26A7E8AFFAD6BB6C87A86F51523AA77404DB21F25D4933F5B7949D976156C36F9029B2F08E17271DE0A5268407FE3C92545886CF2503A30690AB50EEF6C76DCD73533BE660FE2E3701607C1C9A439744DC751DE1FF517761348CA51F08FF532E698E411B848A371FE08319C65080E1FCDBA6605886FA863A3AAEF17F41C40CC3FEE8F586E4E1E66A85B62E6AC49FDE718D0DC071B0E1C3CB766899F6DC8D339982004EC0520A12EBAA31F3094D9B081014B5EAD9967B62790D2B7F0103393422F8FA7A0D6592FCAD7F85C6C7D05DBB43DC1E3FA910CDD2D032C52694A1D38F9462F3896EEC1FDD0131FC90259195EFDDB251649418A6E30D0575BB8B991D8501F99CF5289EF583F2BD52F1A2E03F899E5D6204EE77262DA0DA03F11DC8FE81CDB200D363A1986B1096CA7F0347C1BAA13375CEF6EE6D295F8271CBFBD77F542A3CD8C4B1A208BF31F23201E3B42EC3DB810AF4EEABAEE239528DF1946AEE264086F3481A21540182364FE199E839CF62A4243F0151B8F41C13A4E38291C21D05ED351C8BBD83A4AE06C0F42C87F15D3D3B82B52656ACB79F564D14B3F223B78DA5E29AA272DBB81032C261D4EF1F9B64F1EBF05A8BD3D30D617F8607BD52D170ACF778DF181589B4BD597916D90099740D2F461F7CA6028BB0F5DEB08DE0EFDA078183624FC8E5F09F9EE598FDE6665E26A9703E4EC3E54A203ACC7A83B6E8DED489DCD51ACC81C1B1E17A3697EA9DC4D56D4DA801F46BB2925DEF9BB11A3B226341CBBE76C915CA0F57547DD0020D3B64F2E24EB93750E9ECDF581037094AD9168E9979388ACA89B250ABF3D5D98A208162A48116231F093B1E06D621C2B5D2D720B6AD06811C5EE5845002CF5737F0D802449B1B6051C6B42030F1EF115625ACC54448B6006C58ED06EE27CA133E54854A7CB9B2AFEEEE078FA5A21155B07800108766E872987BA36F92D544E2B1F57830B7F081B9C8E1EEA82D6E947B82D175D1492EB6CBCC6B2F62A3E261031F7B7780F34DFA3290FA5E7745211951D1F8826363EA892E391DB2F6CE0CC371EB33618F13D2B9444567DE228506F30FE305C22117BB8591F72620997712595E09F4B4BB485FC4B20A84393A87E0A095EF145CF42AA60EB9D798FE90151CA6F89D7E4C27DCD81BB8905D9E00347388DB7275BA61095254C37756DD46D558F377A661DC15007D4D489A4631814CCDDCEC675B59C892BA674AAFCB3EAA4FFA1ACDEC080909DD7A7B99F70CCC0D43112BA7349BD9B18F8CE9C449FBA465E26B2647CB0BC03CD0A998A4628AA96F073038CA0DEE8BDD747EE6C7FD7AA65FF06C0B872736E51C3C6E725C40944D760E220D2DE8FEB216A77521EE8F4B61D74C18F0D2D0F814881B6A8676DDA87A33201DC73385CCEE09DF2
},
}
func TestSign65(t *testing.T) {
var seed [32]byte
for _, c := range sigGen65InternalProjectionCases {
sk, _ := hex.DecodeString(c.sk)
pk, _ := hex.DecodeString(c.pk)
sig, _ := hex.DecodeString(c.sig)
mu, _ := hex.DecodeString(c.mu)
priv, err := NewPrivateKey65(sk)
if err != nil {
t.Fatalf("NewPrivateKey65 failed: %v", err)
}
sig2, err := priv.signInternal(seed[:], mu)
if err != nil {
t.Fatalf("failed to sign: %v", err)
}
if !bytes.Equal(sig2[:lambda192/4], sig[:lambda192/4]) {
t.Errorf("signature mismatch(signer's commitment hash): got %x, want %x", sig2[:lambda192/4], sig[:lambda192/4])
}
if !bytes.Equal(sig2[lambda192/4:lambda192/4+encodingSize20*l65], sig[lambda192/4:lambda192/4+encodingSize20*l65]) {
t.Errorf("signature mismatch(signer's response): got %x, want %x", sig2[lambda192/4:lambda192/4+encodingSize20*l65], sig[lambda192/4:lambda192/4+encodingSize20*l65])
}
if !bytes.Equal(sig2[lambda192/4+encodingSize20*l65:], sig[lambda192/4+encodingSize20*l65:]) {
t.Errorf("signature mismatch(hint): got %x, want %x", sig2[lambda192/4+encodingSize20*l65:], sig[lambda192/4+encodingSize20*l65:])
}
pub, err := NewPublicKey65(pk)
if err != nil {
t.Fatalf("NewPublicKey65 failed: %v", err)
}
if !pub.verifyInternal(sig, mu) {
t.Error("signature verification failed")
}
}
}
// https://raw.githubusercontent.com/usnistgov/ACVP-Server/refs/heads/master/gen-val/json-files/ML-DSA-sigVer-FIPS204/internalProjection.json
var sigVer65InternalProjectionCases = []struct {
pk string
sk string
message string
context string
sig string
passed bool
}{
{
"61473E50E2B5098D5B7DDCD478FAD60D33C30B2F43F659E0C90020244228C8D74922B37471F40097C88E2E9FAADB4BAE5D97244D0CB6A5FE40A97585F64B566BD57CEF99B613031AE25B7152DAA21FBC3846EECA40108E142F101DCAF3E5C2331B1F0A42753CC27E46704727283CFBA9276831CBB7372E51668B4C38C447340436E681DA08C2A19495D80D42267DA7FBD1B3B4BD9338A3D8FC9217BFF644E4000A174BAABBC336503A9FDB0CB19986BF4EC20333B74AB4FFB933EF3E8E176B9E82E1C464BC48CA928C1CFA841B812936E738D461B6EFCE5EAD696608C4F8DFE9B0B7BA48D1C78FDD93D616D86664C6BFA4E7472CE0A0F474FB4D16F56F1EA20BABEECD2948B27ECD2D60E1EDC7BF342D2E63E35708F88832F8FC899A26733E7D15134DB05B74837451E0E60272F2C24AA2D69C6C008D7B19076A99475517930285EA204D23EADA9593A2C349CCE77D3606F0B4D1799B8E0E8236C8CCA35B7D7A7BC2B51F32A409C4283C28C882C969E641B3145D41E08532A8D193D33FC40A5AC7C63F40A707699C83AE95EEE11648FEDB6A950C6BD866531ABD72F07B393CE97B0DA6046A3311B4BDBA4EB2098AF5E343E905AF5111F8FF3E885F12DCEDB76D2A1BD99311A2DB0ECA0988852D7283650F6274FACBB47761539B03928EFAFFBB6874AF93EEB4B3F8C2AEDD2F01048F8F52D355D43E43B15694830544850BB0D89249CA13661B94B3BB90E810B1C8F23E90A480371749AE0C269D9F43965F433646E52132580F18ECCDBA4BBE36DADA8C691FCF1269EE26D615FC4E1D0C327618739A0A900FE37C61BC2191EC79CE300843091FB22F85F257B06DB6A24E1F14B67DE05438E1E9D758033488470676AB386075054FCACA112A4BBBED537D79624034F4FBCA30CC96861649F6D56E9BA39C89B6AF41D4B493C12F778B96081F9AB0A30096BACDE0EE5BD46E0741EEDF835C106787E5CFC317F9C58E12FE4A2516AB01C2CA6094A8B32DA1768382868C3BF352D7EE9D394E5EA018550AABE3C787FBCA93C7B4A27E45FB81EE04FAF9FAC7424D034C92F69386564343FB22A5E3E110E5AC8EA8256C41B1DDEA7B94B7AF246C0978777B89FE8CF1B2973CF733487EF16F91BE8728736808AE9A779C364AC6291FC002CE368FD2BF47F5418C237FA5FE308ED1E2423B2CFA30170056C07C859F16987AE77CB5B4F97253E7F04EA41AA197C63DBA3CF7FD853F9DC4A027179C87957DF0EA9799973E255B1C9899417DB681E53CA1A2BBACC02BD78CD0254E931EDB66661AFB93D36E86725A319461B9E6FEB3E0446AAB856FA03CA4ED919EF91F1EED3BBE29B0864E852EFF2BB91E7483AD0F40EBBD9F74105907590424F1180E6EC6E285B0D9C8FFF564114E07A828BDA5E5E1F356F6397A40F04EAF8E0844DCF2B9405955CC06FA353CB91C293775DD4A3FDFF4F8FF5C1125FE28C81FB2E8890F1BC51A0B47A2688F266E667D4478FC98F092540710EF541198C994BB7ADD6CB3F8254426807698EF03512531D35E938BAD2398594E38882D8FC3FBE15EA85BD7371804623C606B949C93467FFCCB245362209121668FF7B3265F0DD924F7E3533985AE4A06AB7F0B39AD13B4493B56B22F4DA29EB4B7E2FC505DE34A413A719AB7A79BAF392F477C1F88587BB34604F57DAF9A54097C6FD5CDC8A05CC64EFF385D5451FB672A7F95B3989395D3B434308669DD65B24B8DD2808956ED3FD55C82F761FB4069220994BC4C4801EF64BC806CCBDB575013B720ABC76FCBC8B33F2BFA3953221AFD0805D822D0180C930D3D3993749CF149A173904D64D9BBF49E5A557FB5A4D6CED94F122E6D3556AAC66143CED682361D2EC083DE179DD1D319380243678E77C3B0B3F94777B0EC5028C6A1ECD19AA23F2C128D948A511170969E0843EFA240F1F914E4182A39993E815F37613CA9BF6992969155F3AA04E4FD91965AC76C52CC7354D73F4E5759C2E19861B2A30C0BACEE980C35663DF42220D18ECBE6993FBDD7596D080DC1F307EFE150299388B69EB5526D93B4ED2353C64020DCCB3B66F871E0FF619C14D3BBF895183AD125E141ED5A14AA3045B25CC1BBEF8D36A9CE5F0C0F84101EA07B56A28181854C6417CBA533247E9071E7244DEF52856D5279F57C6310953F130EB7908FA6EDA7FCB8D8C5992A9601B2E5AA34A6BC9E073E34E722930F7C3A913AECDEE7C3305E9FD5E7DB83DC546A801F1F65FE450C52A8F698A4D27402F8E512C91BFD964F3AF08DF84B074688D19356C0CAFADD2B53270271EA2A0D9996FFE4A50FC9D43722759058CC62039FDAE732C9E36D15B8A9C6ED341268DB127C3DB23D19A7F660E9829EEF9B5873B6291806FF621C988BD8FDCA719743A6699221DF24A1ADE5400CE312C40B5D8CA355FC36C1C1CEDB80680654B48A5D16C744A6A86243969397959415242B5C7BC5BAF7AC7ACE6DC874DB7DF643B11FE22851BF25C42AC9DA435FE7A58F18695A221C553C09DE8DE0D96AD83903348D117DCBD316745DE503842C317D463598D721DE2E614ACB44C67FB70A02976173AE70281F8DDE6B846A99B860615FB6B3362D0395A761F68AC7525104D09A3DA7C7599E7267ADEEA5F0E28ACE80C7E1459A906D3E4A52812AB277EAEFC4DAF20ACB66B57B7BB3F734B7CDD19CFC5D5E1835B192931DAC116C26F1E4BB5C2519FD57F98774AF0760F7CCB53196DBEC21342E72A61EADCAF76062D53F682664FC2908CD41F94379F9",
"61473E50E2B5098D5B7DDCD478FAD60D33C30B2F43F659E0C90020244228C8D753636FB52610FCA14D4B3C11837592B9B0D97BAD6A7AEF9A1BA447A86BF1C337261598869D679699060D9B1E7EE9665EB812425F366DDC12E8C2622BBBCA390A31A954FE0EE34BEA498B94B82ABDEFA4C95B18AD95A38289AEEC39E3C9275F1D10245388868154288472023570533427426337277624432715248463106026865264678607323870145543725556044444232580053227145883313226485167111323361083121441205477787722101402521238213802887325102055580416174315363768455461755224532274136865076613547334353674372045883070812288201172634158858747306611608728888126662064516610037824425078061763706456777788766212454366420386604762715545624441446228704008468643418383744680810082287616178878374053664664501413146218288256608174350551366140634700370838546800235751731674237551743510748315822368478581343426651180312457154103737646187722562278667603586504846844876062082637447721310226222823077664751766687736074077370872006413080740308420653432888878433058622173470808664568064533766505056828165264065277821558501175163358248450210005584311311255786348562520087113040540760016474108156515807502428113161861258211865832680561053441085232406837448755342105642406405240852336854212138806162067004210881860801055346653413425238265365750100626630026300413822018516623314006828255642713236275612512566602744186527251216207386852508212405463602383050862146468341078811418823520117623065008817728344136008455805620700820003468483670408081871104661853406043804626126675430686188147062757707875524108048680307523386137028482312016415563624252886716523711424312611061673452528121770302768862057037630408127757878023078531233755550400164657768054562877546211535203876677726374101644306280142303342612687652172640882243077776546836867874334100724565725261213181701521077267746888343440128677451440538600444581214756333533021862783833082735060533805410400517007802612607458325872600017311056018331638015604806043278522750336176278345754058643641404141044565664508145114771118313556143336117065848573103587234814278262871605450172570647766603204167327087754712661725071256556274520471320803005626428063215224136336675467145522560057545822712136538860513437680055627343425043337501087036334811475613118805405058024341677472255870374544183246801575651868710845234626688603722268153345147776444811021828686543107522058124350253802173841684353670507828177651482581606183475073334373407101015413468371283062676668428035468308146224144136156445440812462725032254732704017486017406387405712852450551107557185263256566758317564677337422543347452158507225226202752644886018183056676766860630528536002278108603573122872108304557087228738608870783880622607103410575354675417412576684357888354057075205685230247042162103278428521531440052161334014140845336770101454821413737708760306622828553237634732608756486221763605558260855520812104636143641880675466530122221305553615233818814053884201740673162157830865457363714278530855742006603644002336473511606378601033248131458512828713428720610880576888523820326120885364840555367771764267524067824217300071578365758702320342208060053531646428675164167663214820759387284943896627CC83A86192B891296C3E5F7FBB698A87C38D8F73F50737B0071779679D16B788C6CD7DCCDC9CAA667F5196FDCD242614EE215E71D186C9D76C69AB7BC651B44DF46C77BB4D1A96A3CABE786E8526EA2076EB45D42C287D649A41A024D1DB91B74ED542A115B8337E4C1C9316F75A3FEDFC063D227AA35E81B80F4CE650620F8FD1583E2F3F4B178ECD4C1F5AB93125075E03C90B16C2F01C6C4F7F821B0CF5044E9DC61688E26C986683B0C10F461673966342E9FC9E0AB71FE4F06BBF5D8936525AEC3E34EC83C29E32A124EEB21AFEADC62B814DBFD24CD2865F975D6F5A48BA61A0C17C59EA412DAB64E87F8AA7884EE4E22401A159784E6641DC8919F8A0B37ACB705401C802EF14F467FA18A9AA9C15F1D3A65EF2359EDD1B056F0FBD7C20D47693E0C72A4EB1A927F11B626900B579037B60AD1079CDD36DA7D3A3CCEBE5E5CCC7DDCFEE3359FA505047A205A19ABFAB4286BCB2FF910633503F1A2F85DF3A6A0D73E2AFAB063B1904B14C24DA146DE4545AE85D168216F76409ABC6BDD4983E7974A54EE654E7F898527C22BF38B5D8B721E52F7C6DD1058A91135A961A2598DB979C21C2790F7EDCF51DE674C3F8A1B28A5A83FB671C2774DBA092F7FF3B8DF38C590E0CA0DAE394CA3F2F7F77D8F6290B41F71B85E0B44CB47FE534116E56BCD1C77679FD38BB760116A6B7AA5A128901
"7123CBDBA01438A3A3A4D23156515294ECC92F40E867387C50150DD94D6C7A08ED87BAAF3FB0A8F2EB4D320C7C9549A67CF134F1EAFF422CD30A8B480623F1D6B14EC79FF8CE8621BA193F2B940B86DC5E14FD3E432B57B427B37EC5D1620B2B78C7180272A7BB792F781C42B46ADF51D05DAA124F699DC9513947B448B699D65BF395745D573A08274CA8E0F5A9EE6E67C67C6B38671F0E3B755AACB0E3C6D75911EBA2D847184CC9E3796E78D93FABE6F7970E8EF2E846966EBC76A303ECA0BB20BA3454D466FFD50A5D21AEB57CF7EBFDB09C8481F8134640763E47ED5626052724F4D02BA996941B8F86052F870CAD0363FA2AF1C8DF148A60FE6BFA1B6590635135C229FB4FF8DA8E4C610C9EA63EE2396352E78A565DE71ECB7BA2712268F193A3D6C5EFE666B6E2B44725C73256DBA0DC1C8456230727FBB10F6106DA8FD572283FF481DFBE55E7A80B927D58982D2D817C01F7DB19D29858A5AE3C4D5FED47C57E5F60835C1CDD145F6FF6A07FA05F4CAF65C7D69AF088A078DEFC9C6A46180132FDF8F87ADCE644D792CBA1731136A14AA69477EE79C27658DA604261B5A72B1169B1B641AAF243DDB6505D67E07BD8215D521272296BE3B33AA36D20C3FA27F03382EEEA57FE9DB806A15A5D75B0FB4780065BDD975E93589B0D3F48AB4A7E10ADD318DCC35927B830A9D1BDC37EC079EB196A420BD4C34B5EB1437FB6CD62D75E1EDC362AE760EB4866B25BAAF20ADE8CF6150E22DD2F890A42C32444701FE2057BAFCE5D4D7001278C1F3A5DCD8E22D688EFD6AF68530EEC39849AE8887768A110283814E0677CCDC57675EB1BC38EDDACADBCD9C0F22DB4C4AEC5C93DC79E010B56205B6BCE8345C897A29507D29BFF4DD8B0277973F73184A4E363AC4464680C7CBDB7C2DCB65CD4364CB823B259A712710EA22FAB7EC80DE337222B577B154FC6486079AE715B7BDFD3F83C0414BCC70EBB2859B42E55DD37653338313CA72E89BC386F20B6CE9A67575E005BFF7217705367FFAA9E0CFEB7802F7C0BC3D23ED4543C772B2C1A76BBD2F8C12D0C5D66E23FFC037B7C82C534649B3A2C896C60188C0DB96655566C57E27B2D63406353BB5C067724EACAE10DA2CD8198725937FF5B02905F19C3E9B620EE455E906801E634AC85C16BBB1A1D6DD3293E0C8C4528D9BDCB42498768E2C7E3E004E84FE0CC0B8E25B78211BD2744DAE781A5B19900F32EAD71350D74596407D228E35EF75554CFF0A68C3857872F004FBEE1CCE99A0BC363E0A4359CFB35B1F0D998EC289398C94E8F4BA5C3570E52A7D109A90B54E16B140BF2901EA35E3B4B508F65D9D6D15867ED21CB0520CF5670C3D8FA3780027F3F72C3FAEC00B6705A51C693AD7E1580CB402A0ED420DDD806DF90D513B88C12E33DE4EE569D9992FBF5EBE3F8D5360098ECB3C493E5BD236119978592B2664534BF68E47FAD6C7E05BDF491443EF29E65228779FEC1D14C21649CC31B9E50EF872F21EA739B232065B1856432DE88FEDDB324E2A2ED7556A9DC7FA3CED2308B212670CC3DCF518A052A6674177B28A1076A954C2A7215F7FB5FBAC525294ACC269DDF5B808F6972004F54B8E571B564A1A5CC189E56280181F05BA64251D95AE24CE5CCDFCA47D38334A2537397E85705FC17FF832C180B6ABE25C763ECA7A2A2C74FCDC8BA60B9A54F45B76193BFA7B8BF92E9F47B22311AAE873F84EC23C8EB04E6323EA01698E60C7BA55E32B9F1FEA9B387B593A788FA8E6EDF5246C520F5A3EA1B84BD516B46487C9C041DBF888DD986490C196CD61F6AF08F0C5CE063A87FC31DBB46CB84F3C0A02169C7F3EB1D7A3B33AA6D9FB9C1A5614F42442CE76AE664F708DD03C90D30B7ABD22D7B81BA33D438434A490C76CBFBBE0FD8B5AA6B734FE549AD1EF2B37F7DF37A1684BD637128F8EE975ABACBADA527D0B6498A2431C157EADFF3E22BC3D09E0415BA1CF2CB745963DADC2DCA3AC53D904AB5831E820934327788D8CA8BD3CBC525F491EB36718539670D2E66F4CE73B7BE6EFF8E96C3F9A6A5526451ADC07109422299AE7DFCFF494419E27CB0DA84DBDA858BFCDC0DE8BFA20EE735BBCA534989DE4179AA4D3D4A6BDB9C7E839CB58C87201B010AFBE7849B44FBBB466A25E098651865670CFBF68795F7C49183039EC92DA0E1ABEBAEA243A885A643C5DF639F2E02863B7EBA2801C7ECB99D2B2C21EA3F8026CDC50F9AEB53E42234FDBD734E95EFBEA4EEDE49546EA6BA869AF628CBBAA300382EF88FEDA77419C80E96A78172539353F7DB8E40B854C654FC41606DAC31CAA43EE6A22943B6807C1E02A834FBB6C7FB63D4FC85483F1FD022D2A327F137CBB7CAA2383A4FF728F460D67FD824E826A06952A478E895477621F1206BABE1539EDBCD1D2256314D084DE51A8FB640C1423D4F0845D5A684E8C48F6B9CFF75D97B663518E62B64EF72977A1E6C7D0B058C8E20E1845CB9D3F3B3488746A3E5826C52989BBCCC50631FD365FEA99A38304BD50E8182E22B1401F1E5378E84C3D79624B9A5AE57DB9B10A2C3B070BAC5D9EAD70B097B7BA625F746F297686005E284D6B96F73220756DE8AFD2907225AF3884E97946747AE4F932CC8B5AEB9250DCBCAD3CBAE4E27826B725029CB3951BFFCA0508E6ED1AD57A267BD9AA572C92EB4C86259E15794D9DC0665149E51B750C76D2877E8D9D62E24B42342280388D187EE7B828A192C251838684400D10BC5A9E59D2E44511D2F4AED720E7CAC12444A66E6AA166136659C6CC90509201C96C39FEE3A47D3376E9892E3C07EC892E13E71651C68CF659820E5017BBFB6C12EAEF0D70E8E50B5AF824F797CF9564A9DE888BBCA4FCA879AAE7D8AFD83BABD120EDD17
"841713AA646C473F4C554AC77D4CD2429E938F120DC5672A1ACFF1D836F76CF27E5CD02184E425C19EEED3521C0A5076436061C67954675539988E8A2EE62D20A867D2CEC215A2FF590867741AA0C3A95A20BF6417155A512B933727E47FCA0663EDF3E0B3AB9602C479DBD3A692E870C0720AF8ED900D9C4786795917677834DC0E070311831C6418ACF525B1A2D7A4EC4E8F5DB4A6146AF00563CF0FAFAEB99F8C757D37D5BF4FCF",
"F0D96183738F558F32EE2F05928D2CCC5D38811E1E766789306D76AA06DC76E6BB98440832F935FAC453AB27361E64CB83B81959BA46B55259B7738C1BB764F9B45C34446ED14B81B3AEAAD6E4B42C23C1A16350243FD5CB18DE2D8F2888CC0E89AEFE26CB596A249FAECC6F1F23E6799E03970EC6741C066589C03D06C6549D733D21456030477AF2862DA8E9D648F40C940E7F3A0DA25B166DF73CE12F2254C4C2A15B8414906D31B1728A6F7E873EF17015402CD86DB55C2AE4B2861A4E03743820EBA774A0AE45D3F50638E329080550EF939D5FC739F6B6833960C9A424871902DB05C7B282BABCB3C81E9478ADC2213DCD8E91238D0DF9D36B20FAF60D66FA7134C472DB441FAF34511A693847BA6C6C89912076121CF346B5D24C8FE09F25F70848938A23EAED7A5FA7430CFA7FA16C70CAD75ADC91B266928258430104A40FDF1D1CA7A8DA031AD82519864D972CCD14BB0BCAC8CD6DC64C1928A1B280421D5A35C1FC3087CA6F304033F9C25BAC017A7B5EDBC0AF563D500485F0D9ABF8FFD28A3717AAC4B0B85ACA0121000C09F3773E84C8E92755F887EE07CFB0CA5D9EB2861737CA338681BFA3217664188590911C4FB8AD3FD8981583EB7B12962886C4AEBFC52E0CFC380D59736452FCC6EC4C6CE54DC07401317B7C6472C34B4E23996A1938093E28433F934B30D595421425449C2D90B7F7D48E4B8D93C66F83F4EDFB65D44AD081E57AFDF12FE20942012AFACF520845ED4637786DE975904B7D5D5F0D12E2D46A2B9F05EAC30F463ED59C6EE2505A140C6768530DEED9A9585EBC93910AA643A35658782EA677BE31E6D0EDBDD7F2EE067F7BD888916C860C8F9028A8E5F9D7F605480D2C9356DE03B3AE9B513798C81B2F105B16C24C34055B41195904F52FE8ABA406A86916B9B7DF376996AB0F4BE571B8EA39AA5488DBA1116E5B14D7463F7F30D80914A7D1413ADD8A6A47B5C613BC2BA7DA7F685CAB9C5E9CF32A0F44D5DA426F6DC658FF21DEDAC3EADADBCFE89E73201035220626F3C9D6881783E9BE28FA81DDC5CDF852D3651DB89E3988F8598472A81C2DF4DDC8B624BD7247BCCD2CC80A5EAAD6AB4DEBCB65CE2C7B26A513BA0A31C6DCF4F325070B089DD3B71AC86F40C4236D702B4A272E2F5709D719D4165D7A1B24D6200AA80064258F322A9CDE123330E829B9A418CF20A76405D87E11A5AFA7DD978CEE72FFA3E6D8138BE948E90AB218FBE4DA0AF003645B51E87538C36442ED37EC1A81C617DF0E7CD707BE8098C802A7E0153B02294B129604FCA0E2BC441D796A276C92206B68C9A844389C59306048911B5352213E5E49A0625FDEFB6CF233D72E45AA6AB5AE7D72CDDA7874CD9B91CD567E029799E11CDC65EA5F712C874C345623E91943E426E354DBD1581632DB9D41EC176E86E3495FA18054DBF2FD1B5A86B20650E9E106BA55CD14037606C8C4D605734C2A9AD7A83D24D4C7F8A7C4F7E347FEAD0BF92C258CE7E1C91E6B0E94AA3C6F527D1B89C95A77CC9DF6EB8EEC7D43240F4927ACB07E41ADFB14392E42D464238D86FFAD71A1F921DCD5199676FE713F7C6C04FAF6E29EB2269075143C882B31B1DD017C2D2597B870201E1CF5F60A408094777C9D29F2E3328DB57F04B5B5F4BF5A1004E94A47E36E2B909C772EC663197C8BA225628A423686620CD62733FC528690216D1B680F95EF26EB6BA49683F1AF9AAEE2D7D116C8F9C9BF2B72E4B14318046BF68369929CB80399A9AE07A3EBE54EDA98F820735B5DFA3AD51C2CD7E0CC467A9AF73804981C1C561BCB81228308D1CC19995F2CE63233B760FB7353E2B476FEDBA7FD7D574B313244E80E988EA6AE737F28C7151C2C095C16F0F7AC3370D73614DEBFE907593CE08781B5676033437C5E74C50A82BF3B23206550BCF39A7301FFC286AC2B91436BE3071652FF23279A7DCF7E595059A080B6BDDF1CB06BAD6BB86EE593E7182B6046B71457E95AACBFA714EDA0D11D470148D0AA7EE7C267ECEBEC2792DEDA52AEE963C7FBE63572BFEB2C147BF970055081A71E6FF28244E293E2708BA41CF6319361019E662328792C34A891569A61B995FDE3720E8B38459715B3CCCF009E1D224FD24605B5F8EF83ADD8B120032E269E8FEE4A85C1127BA802F0ECC96CD0AAE1931A971F5D5775CBB7FAFD1899FE524805E0C32C117A685E50509BBD6443AF12431C00D50ED8E4D3BA3CFE51B7A8D774EEF747F5A1BC767418122BEE393755CEB3B2D608E71DDBD66F9B6EE684374A06FBC1E5C577C23C1F246E1D6EF07CAEEA7ADF22883CEC1AD8B54F3B13ED598140F3773B7521463851CA0EC6AAA0456CDCF62BA07E10307A7C46F6320C9E6D95083B41BBB7A127A1C5F5A84A4029D28A2F32EB4BD520FE8699C98E35E606DFA43CFC972A37EFD0FD400100A93E530FE224C8992005D624C9602A619623E3F3F3DEAFCCEAC0C50C38F09A1B62DE6E8A84AA9BA9FB661A6083DE8A2CEFBDB3E002824E1307B3CA1642F1F2DB8806320A5BC2D5E2D779D16920AC92861C765DFB377A74A5840E3E9A9C9FA5C77BC57A45629B2E017428694B2C19A7F5BC0DFE156DA754E72C4AE247BC4E32BD0C4260F9EF74098CDD88AAEEBF487C099F46C1D7F5FE77B2CFCEBA5FF6B1E9622F15D352D41764B3744958AEADFC0C82B70C46093F6898FEBF27EEE19641670A259FF352992908C9218C299A59AD67A044EA2FC14BBD817A8EA4ED7CB7D0F165CCA4E4690F01FD13AEE42E052436569D23C3DEE2B4728E54CAFBBC03D094FEA64D010417C3AD9814812A1777637DEC9B255A91DCF2F8288E0C338A081534E10285757D13143B37C87F6F52F5CAE7D12B08179FDEAC36A920B7734AF60D118BA2A9C8
false,
},
{
"FD13A4E22450750C1218DB6A94F36D42DFCC2E9D93F7A39881075A5C3DBE38A6C59FF7109D9A99630DFE1467259B789211E862B6E4181DA20FBF8F3DBA3B792453E1EFC10E997A9BFD0069370581487EDE1E64DD34E04156EECEA3FD3441B2614A29622BE9B91587178C830A385A97115C06CDAD2709AA6BC11572C7606865F0FA148B912F68170209C985F8E0DFCE9954F664C53E48594F7A76D4CE4B1AE2F973FF37838E548AECB365881741AA8A8C05CA28F72CF907F9E7FC254E3916D94E509C980D5673D954C8B33A4915643C23FC082BB1184D783DE38D1405FF47350BBA63BB6468932B8C1271EC0AA71C80E83C18E63B106A7127569E647066CDFC04B069AABC9ADDD9449242EA984E697977E4168E07671B9210AC1DE2530DA1B3866181F57197FD62BAF4956EFCD94FA36EBB9DA444D9F0BE8DE2F6D3736531674547DC11046BED1DCD577C076E5D1EE8704D849B586291DF43BE9E1B01635070BA690817E41B57E603FAE318DE2952E4C675EBC6D1ED651AF3F5BBFC47DEFC93DF4AFC4EF0B3E0809BDA20C98FDD510A2015BAAACE8C45D8E7E9587D3C229D21040D61940ADA2915FAC92CB4DE8239A31B3CD2E67BD4E5CD4FF92C6578C67AFAB3D584F59C45F5B291F291E1D65A8F199A11FD8AA2209AC8D2823E5F864228DBB0B9E354998622146C49FD49B5AA4DB8C7D44155FEF3FEC69C0870498BDF0F74B41E0063D1D44A0BAE9712244D846E2EA7F8F274C68A538BC1342F81443CE858CD5A2728EDF55AB36D39DF88CC563FF0D7EAAC4F4BE7CD0E5C1B45096A189338530FC3F8B75D9C5C17F20DF3A2821FD127DB371DFDF81CDDC3F3A1140B8999A3CCAB75996B60E4D485B72C1B0598CEA9E52DEB89CC6BBC5493BC2675583E9AF1C58F4C8204AE3D645502EFE53B603382150C6A871F318D45244DE950FC191115277F607511F2B67128BEAA80337D0DC68C47B402BB028C3FE326934580B5427F6E3009DA91DFCC6802FFA98D16C241037BDA69DA60D4E9AB62B4D3A5ED04064A770161E64B454FAD700FA1EB67301CD8E38D2AA049B3D45A38109E2693984ECEEA51B40EE30B86B2C2E5EBF791B33F1919A9D6C9ABEAAB7A635A2538C71F52201A08C81377906BC32A4DE94584D2ECAB9327F0FBF282D0E4A8F64619758EC422A31F7FE2B9C91AE506CC9B6C7C7DE45B1D19BB3DF5B21DC561670F0CCAF0350A306E5E0F0FBCB1DFE29FFDC394E197DCF9F823F70107717EBE169F1240E867F5D220755F638F4992C244C988D92EEA5BE2F088050CA276324F9C8542BF5C51CA254092526B1E065B7569C86C4DC97C9A674D4E9235A1D50A03B4DCED6CFE076C38FEAD16A9919A4D766F055235BB9F03200867BB9A5D90C50F256704A0AC8AFCFED16EC084896304DC546B7A19C458A79D4512C64AF29B554E70A97BAB50731EDF53B1E10AB0FFAB24A0BF6FAE5BA497214BC900815A1CFAA0B56FE4A70E0C4E0E737C236EF31E5E36B65053616FBD037A6E8A95CD29658B36EBB8DDB275DE25FC4C386F7250EB08F6B0FE0C86CE2B5848E08AED6B9DDC11F6A95D64ACCC74D30FFD27FB824DC3CD02236F70AF2905115AAC2F89CAE57D00A1E7744C0E6269717EFD50C8099BC6D4C1600508F0F9E5F14712D675A908222B9D46C075524AC5CF8B3B12DCC273F6B6A83D7B4EA6F299B0288D498AA11B274C2CFB0944508695948C8CC307728AB152D76DB83FABA5F708A3BB2E464692D88A2F68032BA3F4CA539E4FD38ACA915964165BC1D3E0A0BC535D46B027BC780704D2C5637DFC4ED70D99D3F46C6764D4F79C0C3ACD844D222498E4F7F3BA49FCABF770A4C566D4B1BBA437099D4A7CCAC9F8B7821EE56CB622BECF9E5FFBBC874F6A28BFA328F3732B3F1EAC2DEF232AA22A4682C5722369DB781CE0A53463DBCA00ED8BC11B4B37A2A5CC575FE7A9AF24AA9BF158BE89F2B8D0025EE8AEFB8BE38E74776618B129662D43D95545D2BD65618C021C85E80A7457F1293DBA2960372F21A5C082EAF8FE73B06A227E70B112AB9D989577A8A87526F550E57343CAA19FFE4C4DA0D52DD8300369FF4658220EB39470A07D4ABCC6A80DDC4C6BD53CF897AB7CD49E7A5C2EDF11C07421DB3E2CBCF6035BF95825B4BC015A8AB5168F2FDC2A9FD4F24E3A125A2C9DF845F31EA65615FA0F65EC1F3C944A111491FB93694FB89443B1DDCB2838BC895BDCAA36B3828234654A8C986E58590195FF9B09D40E9AA8E57F1BB41F3456EC83CA1D0A08D4AF0136B75153269085AB4CFF4F352F4BD1C22A2F8F21A5BB3788B0ECED54F5BBB15891D0BFA795C54F2E541BA15D945A760C4035323814D672E8CAC2200E8CFFBBA0B09C52EC38F1C91FC72A47A8D3337C594F0EE649D61F201695D7419D725C268D23BD8C4CF6EFB2AEFB34953B221407027D85B45C75530EF2448649FBE7B2C92DCDB36F7C5D302537F9A2AAA0CCB1B5A21CFBB12C1825ABEF94FFB47021073246C60B7AA492C96C82E419A465467AF8B449F7909FB6F6C91707EFB913DCD9D70F7C1E4542B602925B334BC60F29772D694914A8A30A0C79E8E7D8409E5641990FA30695EBF61C00DB6661EA35861E136F97F4678A9F2107786A1B1D7A0E415D2D1702384CD214EFD5680E594CD91E6D44C0309D9BFC8D1E964AAA5F6D20CE08813C79C8FC2338548969E0C7F8CA3814681C76E17B1003CABBCA98ECA4B911FEFAD0D4BCA77B63040D4CF6163FE425F93435B71E5387FA",
"FD13A4E22450750C1218DB6A94F36D42DFCC2E9D93F7A39881075A5C3DBE38A6C359BDCD16736009B4712F4CBDAA701304AF405AD1318FBF5354CFCFE7FAF25C4A79C9CF8F8DBDE1936DBBBF9264ED7DB1E1DF04029C62E45B446B040E9C9BF874AF0AFE2B027B59B671C449940D1943574F062B8EF39E14C8558ABF564ABD22835523086865650042200017452044016333468575302887254738475283802384668075878025728254421681126440875287131331578308304381368772200600648521316366845815565020505785840081451730504511117864608404711813008603837155111042385445856380444210882420832244817532503814680400858576185306582822063308827057065242880587681860210414250075704265058677747223825650713274728517846164270847536455143027050003427880847404272406055776452116014827084737121150558661711055531656076763045380175873324423754767238306742510387354537110820122547821682351342321028300714208108714743887110240432234564012766361402035628743034518200120565017385775468403686766712764312284338570253321285383183847821372564858768371638425230072153011177827613617078600345420862544854830135711748812470608223557468525734433870374217684381866740415038774321375650047761664853541270473174433087685444415176161778743117137234728860630001424730221033480324436510400164516784650738835706878223020436775738884568617404476226481451354413828275184562344704344761883675861146146254634232115145763773115735742461126184401612726031828425022854508263777473485735374682006207236735526232657818302116742575073164484514375160144125154470402042887655603813814515134264547833171555304751305016136834248333004263051282721620675388304617100141130330186102384064507455880286821547070143774386524215052406843117816057603834388035306741407411718241884214214225243136228475541135835880848771058351247327655183602724443258410777617422686647681432385033715510247643645547712754345470472012541033035234125520601147574041158386448535220402070240648053867500814687821768510828772382226584372568168404012257453223287118807562555634276550274488873802434373163563671675117705378204624674652331554457756161130021632543134887130383214518282518507870534627055284464833102020142813267873628778016136665817685814510620810546308272438308811143727376742636465201370741275053458074488344283611145480746728501356282183148451715150362002044022768741427176230740538542620458425246542117186245238145530778463176410622733262001044443558854100885463405031163622767005027462818775071465410727421217020650173720021313518724404548484022560071430005437212466157656360554740012581522008052248588476171775664073582886065337343181531188684341587328052764270004181320336062073782611572538584621347151840127557234182827337086708562583246681630558076113254807742876382273377314715750802860340774224148204050773221574147425837741724571423440746632085778410405487863537656562267358357512467206487411200362008337363454786078621036431014724241201822721665834872762530446102225517016148875317665168607013261686150661406256021851762542431651018464514206547581454461822137636530272034222161500166332615384633228851720615316836201337683865878401170345217417081708118714320817722450830478634500453000610141823127804551531716307568102D49A78BDEE92762B7563FEC276DCCDA8F0FAF202C6E64ED2ED0B774623F9373FFED037F9D2AD43928F3A220951A960156372C0EE16CFEE54846584574A5580F813C2CFBDEB1EE81ECBE42AB215B8DEC6073484F025ACA557B0E121FFA5780C693DD1D24B68291601B5590D072EBBAA6E3C689FFE2A16366072EA2605706F068E7C19C9BE5D332781DEDAA57438F68DFA75147971F91DB4631497B60482C5C8F22503471D13A9B20AB0C88E4B026AA864411DA1A8E74E502E09C59943AF93592C3AD8378D2A1D66227A0B0E8B59300FC2C4B7C986EC1C107ED64D901890350AF866EE2517070405C50B978429C1489FB827DE5DBD57AFB1C16C49AE68B31A4DA029429FE4464FC3545270DEEB5BF122AF2F06540DC52610F5B676D3576DA59A99EABFE4EB4BD7EF968A334045B5F39D2901C4593DE05400093AAE3E4AE6215B98D48C4CFC09CE6B1FEA6F169D546426865D39B9D62C1762FC4D1DD610C733E03B4B1FF8BF477BA36079B26D6A82540CF3583719DB85A784E53278D3044E47A8A9B4B5CFF2494E9972C9D07F2EEE9A1575F38A560E066BE50F2904875C980F40DBDEA03AE8A01E4F7DA30312A7E573B7C270B60DBC44ACD62A3813CCF00FADEB01ECA760BA8FAFA7F2C0738244FDBD9403C664C441EAEB04FC363FA0BF58AC44CE8D5A9C038F9EE59C6209C92BE5194CD9C7BF47359E004941D7018F15
"984CBC323B9AB59EADA06903976C5541185682E875C7887BD5CE628B187ECBE75C7D1A93E65B7E9C99B2AD79D3492E4B5161DB282F50B6B2DFA28EBA364E515A1A3C4DC5B7A7A3F47EB1382B7A681D638998D96AD8E524A942D13A8950FD4DD1DE27E2F1ACB7E32BCBB40E53F9F9841A2CDEB7841F2F81FC2DFA7D9BD36FA98C053225FE834A41401CF9995AE252A3C06C0EF8F98953030325653BEEF80025650FF0A59DBAF12925D741D72333A76269E8769BF8D5B87DAAD0DFEFAC6F1881F31DCD0244BB8C370806CDB206FDD3E31511AA067AF4423311356129F1F92FF28947D4F716BC7313EFF0903B08CAB20BFAD0E9DC62A2C9C814E4BFB8CF7B279841D67DB909CDB3FFED0CA943BD5717D1EE30A5199271C90601DEC5CABB612098344D92209CA03C9FE97C4D2BA8CBA7D9AE7B1AEF135BE6D3F6195A456D9D7B3B38510E6430C64C0820B9747945BF1F5C243267379C58E942B2C3E6E8A95C585EF592EBC827CB0C16B2B648FD9E9896DD0103A2C5FB71CD231A35303DDDFEBF69B61312DC9C215FC6F863A86A7C0378E200C4E768C50F72086E87E98792047A5B21C401177B96A1E86C67D56D793CAA03BDC241575AE02DB82B8D733D09CC2ECDD122A6270735A5411B4148F3C79D95E1C5F353C0D14C7EC8EC094D20D8BD2AB45B9C0B0F1E70F6108313A4D8A819C178AE4BFA33808969DD32C597FD462854C01AF00D8816442DC026D4493B29B08D830794492D7D44A5682521544C301DE4CD4ECD88359DC80CF879777726F18EFE8611C71B2BF5A38DA326AA51223CA6389EFA3BCA27369F4B22BF3FD00AE7CC13764490F368BBDF0818F5BFD5E8EACC3749825FF2050543170530D60BFEBC8262FC933BEF73F0BAFDED40CF6B4DA47BF8CA3D8D8D4AC8A6B13304E323B9CD49E8600D7A63E39774D710A9BBABB7771CE85390D948A4E27076F61E86E8C7CAA7A9EC86E26A8DCF88A4853270BA3F9DD0BAEDABEE6177356F427708326C3BFA098064FA488731099441F1507D1425E77E298BC1E3D14B0CA4350E137322107AF4034695A2BEC75B7CD07C396D1B6A7D56EB2A43E62FFE4F1606B90FE3ADDA117B5F6BE8927BD3A96D71F1E12061135D45F2C14E338BDA5FECD811756734CD6DB19D9A8178B07017395ECFC08FEA28277C2044B11A8CAE15E1E49802920C073C3280CB49888F7E89A3DCDBE2A1BB4385DAA3826F7100ED7DE62311F63913F31540717CD26F03CBFE8FB5B2080A9538F2DBD216852247AEAF523B4C538E0E3F56E4E577DAAD1E58F029A4B61FAF40B933769F057969D7FAB84B2AF1C8F3F4A346D56248C3C8AF92E04B7F5D1C00F9D944034048315415B82DA8408A3FFFA37087C1B7198985BC73BFD1598E2205A3F8D569F06B647C64FEEFEBCD803B6E633ADAA162C0F9CF43356FA4C4955204A3FB297CF8A3397E12EA81B0E8CCBA2C178366AC92C500CC75CE0D29EA7766E5AED8B788AD53F2CAE66C67638C6E9D505F591B2B7A01DC5B83D6D0EB6E1FEB7A4D0D1E861D198633AFE1AE6E2083A245B97B49D5F1B4F2CD5ED4A13387A1AC94DB88E62FB357CCA82E0DDF6DCE3B302509578D1AB4C702343DD2DEE9C2B5408F4F7CAA50A8AC9C4696FE9CF3E830A03DBE64E8C831FC1185D98FDC509E62A7CB01C89E6E78EE89F11FBE16C64CDCC319237C4B69804158EDEB223F329EBC05ACC4E9D0AC4AC3B90ACD680989EAFDA818C17A0CA30F6CB4D174E83231F8575A294800C4F4F485942F1F5BD53412CCD61D533789F8E54DAD89DEC431DEF2D865A39C1C56C01BFB4F4A73F1F0BDF59295A6C6240A5DFAF7459EC1DFF044CF07211018CAC6A8739D425D9483F02AEB6F68CE0901E614E97E6E63C5C95D5E59E4CE631CDC2C5E619FA8AD39F3DB685A0B681F3D49299D6B3DEC442928481B4A7B5170EB4B36548EA618329F5152D6C3978B0DE5A8D9AA55B9AE5230BA0579D247FF8BC99EFFE6184EC717F37E571A901DFF2EA11A6349",
"B54760A84F74EF5C923AF18D2D30666BB36876F64645E755A7ADA8CF02BE3AA196F597903052987AC352CC76D72346BF9B29E98D3D6A604DD790FBE8EEB3AF5FB0C9B174EF01949DF5B460A693BFE6A2959683B11DEB6B47698791C4F08E2E24F95F35BEC6DC561EDA0778A8B1C9D46955EB771CD7A8BEE687775045206FA56E5D117068293C8D0DB35B5ADCD1F2BEB9CDB23495FD8B3669C75EFA53E9097A35E4499B6F83A21C8A8074A80D12864581CA394F9BA489B8F881F40A45C60E825B696D63167489F31C4DD91EB584B75ED2A4C1616B65E4A2476010F977BE69639F292DC57059E9432CA5B47F47D119087B6BC8AF29ADAC892FDEBC00B7B599D1",
"FDE538200D42E42804DB1B7B9F35C7F8C33DFDDE2433013F6082BB67CE01D03EFBC2DCF14AC835CC1046A25F50A1DFFE329781FB74F642804947664EBE7EE18376E008388CA5EF5DC5C624B192BD639D78E23194C56A0C52F51EC35E519015D746246A87C341D545943D189F4AEA8ED0BACF590EB6C539BFB9818503B9BCD0C56C14F287823EDD1696D7AC99402544BFF57AD2A59D23EF005F15D8AE7DB554CE658D6A3B0103F33055781199FF7E59E651B11C0A50A119BB614E87BE168EE8F9B86AB5655F796F883AE8B387BA5A137A429CDCBA5715D0B9BC36BFAF7264EEC785C9F387385C160A9B0E5E20314E4AEE04FE52C3D0AD050CC3FDB729B31506D9FC7995C61F3839ACF88884C3998B7EEEC1FA9A36999BB749817DE69139E0316DEC55391286C3FF8E5D5618B47FC5096490D03EAF4448BA814D2A324E7DE0ED87B2E4A2F10673EF3D88013703FC58B50A9BD8E23142D4E4BD17BD18A49373D4B4D104A0C8BE29D67E4ADB84F706A3DFC5462EB6ACBDE1091E43D41EC634F227F083ECC9FEB3CC21B1B205500A604E406701FCF8E51E89D29E67528AE4451DA63BB292E5F338852091E60622EB85D16F36F3DBA477498D69D8DAFD59520D4728BDFD9B4DC6B91053FD213806C7E02358DEA6AF13C20B267C66C2F2A3A418DD308A2B0A660F972013BEEF601D4B09BF089F0FABB432ECCF16EC56B4BC9F9565340265F331C97441578C571A03C5B604D880A99E1F9572AB9DAB775EE4EE9B6A92E4C1A197AF7D67CA37D554FC0F85198A9A11B19C4A46C49D0693C3722793D343E1E9958EC720D7C61A113A11D84000E9B19E6B33C2CC629F3D5D34257C580C5FB07809392DE1329868631BA770A516BE64C2136EB964593ED8CB7D7676C9A51CC9E0156D2AB110B644B7B25C9C0DE5D8F898BD4B8A0FAF5F27BCB91AB2B0D1516F05EE24DC1B1827149E28E6F593A99AA2F8804F0F8D07DD9A8ACB757641BC2BEB6098FC0C87349FD45883A8619478D213B3BE791375B1EA349B22EDF349F4A69135BC9D969DBC8B83D882E34D9FA402CD4CD8AF996B834984AACAC459645436FA6E8B46A24A04BB7858C47165294F6CE4A914380946BB9EBE91DE39CBBC1BF6A05E5CA5F84FD78277DB67FAC6246A8381263C9C5EC47CBB9E70673D4EF8EF295804E9A07D08FAF273D81160BCF706C518FA0BE30BB1919B2FB9A1FF908836058C5125928AFFD0652C4A537458E9B179ACD32684C558661460FD6A7502DCF8139600D87BA256F5C46BE33E8144E5D6862678D9B58602D33D0254B4BF2C7D9F6C37DFEE231E2A3D297F7053FC07C01497488A0A0F36EC001849CC14D0C8900BD84EFA13E61F3611C1898EB99B08D3E07024A4A530CAA1175E83BF56668E99D1A0FAFDC598854DF3E928651A1F98EEB4A66CBDB3EFC1C06C8EB59678F6429C6C196A398A3B1C9D0E1495FE9B67AFB856965351E1354790A4581400A7801AA47364EE3CFC403C3418B25E98BF10D0C7042E80FED7913D04BD4F92A036536F4A186AB6E980559B8B87BFC90F837471A8FC48AC4E8B0D9ADDE9EA4D27AC65E01A1B563A5B5A2A1F0719684836224BD18AF2CC49C6BCAAC879FCAACEC1CB75982DC78F4EFBC6DA048B9AB692152FFA1C82633CD743E9BA83C450AA036AD37C1D8E37F6D513883187330E2B6E50075A6EE058FA6061B065B40235CC57EAF3953D0F8D555C639F49E26A64D836C4E8C9D88D77C934CA3F7E08080103D6AFC1F1CC2F7BFAD92428339FFD21B56581E356F3FBACC1AFBD1873801AE9BF225621D8E6B121DA33665D999CD9E2E021E04956B511A72666F76D7DB89ECEF3AB2B60D7675A492004F6DED1586E35CD3C893971C98A65755F20E03BCBBE8FE0BC0370E0067478CCE8DA7993C3E182CDF51A5B5829E0CE48A50C0176E84E07091FC954A4C14CBAB988D501CC88AAE5A7B289434957DF4529F5B9D08CD63F99C033C655B1927CF6B5163152E5D23442539E3B87BC1E9AF813281176539268D5813B38211F1519182F55A12A5451BA4AC9042CEFEE1D0014F8E34B01250839E5BC4ACE93ADA5AB2FE993810F283150A4984E84A0C8C1993AC812F46B18B0EE6148E21ECFDD6A6BB922172FC40594A0F6E05E1E07E64DC251D8F6227A9CEDDB11230917BBE6E7A144ACA6D6197FFD3551E0C14D9578B58A4CEE27DC2DB6E0B63FAFE501928EB30BDF40355B76F7D6B3E088E70A36F886AB45592E1DAE7C619FDF48B415EF8F860CB90ABD096FE7F154E71108EA5C2B0D5A45F3A895F3FFC38B0A709BBE08B2D59AD942383CCFABB50A637A51F3670480E05C4D9F5D87B52D556576F289B26A55BF6A09E21FE8A50ED6D1D8CF65643D55B385D48FB264B1089CE912D1FAAE54D4C0DAFEAADD54B012DB4C5F9DFD7480B595AD85E056192FED8FC0168463FB58AC5CA84B2365093F29EC953FCEAEAABD90D28C90EB98699B684FE6C96F41E1AB9297DE96BCB7A9A129FB043087A787EDDF54412133C38369818162E891EEF2B1A655307732A4C5DAFB293F525977402434F27E850F4365DA10FD9493CCD4726B357F25B4191F018010DF675FBD685F38773F53E781ED8669DD1AA0C42C94276E0BA1284E08C1DFF160E9DE9FD1233437E9E39BCA529B5657CBF774547493B109D51ABA36B70572D63C7C05059219FE0233D1E5CEEF120BCC59DB69B6718BB3C43AE2B5DAC14B1BF3E1EC92ED6CF56F6E7F35BC0F179303B198F5CB394244AE85BF9D67916EF3E2644475CB2A509056D6B31FB7119D3119400DFFFA6BF09452703E3AFF2B8A749EE3F3E17008FFC5010960D6E512D4ADAC76EEA7A2BD69C8AD00720C12FF51740733B1A7B2BA5FF385B5EAA3A577D417EBABB01EBBF2807D5290F7FF58
true,
},
}
func TestVerify65(t *testing.T) {
for _, c := range sigVer65InternalProjectionCases {
//sk, _ := hex.DecodeString(c.sk)
pk, _ := hex.DecodeString(c.pk)
sig, _ := hex.DecodeString(c.sig)
msg, _ := hex.DecodeString(c.message)
ctx, _ := hex.DecodeString(c.context)
pub, err := NewPublicKey65(pk)
if err != nil {
t.Fatalf("NewPublicKey65 failed: %v", err)
}
if pub.Verify(sig, msg, ctx) != c.passed {
t.Errorf("Verify failed")
}
}
}