0 txs
10 calls
constructor
No constructor.
functions
parseTcbLevels
purefunction parseTcbLevels(string tcbInfoStr) pure returns (uint256 version, tuple[] tcbLevels)
parseTcbString
purefunction parseTcbString(string tcbInfoStr) pure returns (tuple tcbInfo)
parseTcbTdxModules
purefunction parseTcbTdxModules(string tcbInfoStr) pure returns (tuple module, tuple[] moduleIdentities)
events
No events.
errors
TCB_TDX_ID_Invalid
error TCB_TDX_ID_Invalid()
TCB_TDX_Version_Invalid
error TCB_TDX_Version_Invalid()
TCBInfo_Invalid
error TCBInfo_Invalid()
creation bytecode
0x6080806040523460155761452f908161001b8239f35b600080fdfe610460604052600436101561001357600080fd5b60003560e01c80630985653c146115855780630f1dbf4514610dd557632793d5d21461003e57600080fd5b34610dd05761007061007561005236611f86565b6000610120529290610062612296565b6101205260609336916120f5565b6122b6565b600060e05261008381613bf2565b60e052604061038052600080808080805b61009d87613bf2565b51821015610dc457506100b28160e051612196565b516100c46100bf82612364565b6124b6565b6100e46100cf6121aa565b82906020815191012090602081519101201490565b610d7c575b6100f46100cf612220565b610d2b575b610164610380515161010e61038051826120b4565b600981527f7464784d6f64756c6500000000000000000000000000000000000000000000006020918201528251908301207f6f1c9533f85324bc119f3689d641a35996bdbfce949a5b36ae5ef040c09e2c091490565b610c0a575b6101d59061038051519061018061038051836120b4565b601382527f7464784d6f64756c654964656e7469746965730000000000000000000000000060209283015280519101207f6d3b4de4f5b6531723dfb0e5d8257d4dbfe34b65370323640e41f5cf63ee9a4f1490565b610436575b5084908161042e575b81610426575b8161041e575b816101fd5760010190610094565b509450505050505b156103f4576103805151610380518152610230610120515160606103805184015260a0830190612039565b917fffffffffffffffff00000000000000000000000000000000000000000000000060206101205101511660608301527fffffffffffffffff000000000000000000000000000000000000000000000000610380516101205101511660808301528183036020830152805180845260208401906020808260051b8701019301916000905b8282106102c15785850386f35b909192937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087820301825284516080610374610306835160a0865260a0860190612039565b7fffffffffffffffff00000000000000000000000000000000000000000000000060208501511660208601527fffffffffffffffff00000000000000000000000000000000000000000000000061038051850151166103805186015260608401518582036060870152612039565b910151916080818303910152602080835192838152019201906000905b8082106103af575050506020806001929601920192019092916102b4565b909192602060606001926103e9875160ff815116835267ffffffffffffffff8582015116858401526103805101516103805183019061202c565b019401920190610391565b7f5aeb6bce0000000000000000000000000000000000000000000000000000000060005260046000fd5b8491506101ef565b8391506101e9565b8291506101e3565b90935061044a919650600061042052613bf2565b61042081905251600061047161045f836126f1565b61038051516103c0526103c0516120b4565b816103c051527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06104a1836126f1565b01815b818110610b8a57505060006103a052503d610320523d610340523d610400523d6103e0525b806103a051106104e257506103c05194600192846101da565b909491936104ff6104f96103a05161042051612196565b51613bf2565b610360526000610180525b61051a6103a05161042051612196565b51600060039050506060908051600281600716119160208216928260381c63ffffffff169180158415179463ffffffff8211958260181b957fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff169315610a18575b5050505050505051610180511015610a04576106076105ac6100bf6105a66101805161036051612196565b51612364565b6105b76100cf612220565b6109d7575b6105c76100cf612f95565b61099f575b6105d76100cf612f1f565b610947575b6105e76100cf612f5a565b6108e8575b6105f46121e5565b6020815191012090602081519101201490565b61061c575b600161018051016101805261050a565b61062f6104f96101805161036051612196565b60c05260c0515160a05261064460a0516126f1565b610653610380515191826120b4565b60a05181527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061068460a0516126f1565b0160005b8181106108b857505060806106a36103a0516103c051612196565b5101526000610100525b60a05161010051101561060c576106d26104f96101009796959493975160c051612196565b60805260005b608051518110156108a1576106f56100bf6105a683608051612196565b6107006100cf612709565b6107ca575b906107246001926107176100cf612744565b610783575b6105f461277f565b61072f575b016106d8565b61077e61075261074d6100bf61074785608051612196565b51613a0f565b613dcc565b6103805161077761010051608061076f6103a0516103c051612196565b510151612196565b51016127ba565b610729565b67ffffffffffffffff6107a66107a16100bf61074787608051612196565b612887565b1660206107c261010051608061076f6103a0516103c051612196565b51015261071c565b506107da6104f982608051612196565b906107ea6100bf6105a68461215a565b91610380515061085b610380515161080561038051826120b4565b600681527f69737673766e00000000000000000000000000000000000000000000000000006020918201528451908501207f22402e2860cb074cd5b23d7be21f9d4928c0842771359c97717295e5cb1af67c1490565b156103f45760019260ff61087c6108776107476107249561215a565b612666565b1661089661010051608061076f6103a0516103c051612196565b515291925050610705565b5094909192939460016101005101610100526106ad565b60209061038051516108c981612098565b6000815260008382015260006103805182015282828601015201610688565b7fffffffffffffffff0000000000000000000000000000000000000000000000006109276109226100bf6107476101805161036051612196565b6127c6565b60c01b166103805161093f6103a0516103c051612196565b5101526105ec565b7fffffffffffffffff0000000000000000000000000000000000000000000000006109816109226100bf6107476101805161036051612196565b60c01b1660206109976103a0516103c051612196565b5101526105dc565b6109bd6109b86100bf6107476101805161036051612196565b6142db565b60606109cf6103a0516103c051612196565b5101526105cc565b6109ed6100bf6107476101805161036051612196565b6109fd6103a0516103c051612196565b51526105bc565b9391949060016103a051016103a0526104c9565b9690919293949596610b835750610b725761038051519460208601948594805b610b24575050508484037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001918260051c865284610380515263ffffffff8611610400516103e0513e8560381b176020179052610380511115610aa0575b808080808061057b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080846020939b98959b9a979a99969994038b01015b83518151855281520191019080821015610b13577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602091610ad6565b505092959491949390933880610a96565b958660209782528051908461032051610340513e83827fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff1617905260181c63ffffffff169687910196610a38565b50509150503880808080808061057b565b958061057b565b610380515160a0810181811067ffffffffffffffff821117610bdd579060209291610380515260608152848382015284610380518201526060808201526060608082015282826103c051010152016104a4565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b9096959294919350610c1b87613bf2565b94610c24612296565b9660005b8751811015610d11578088610c81610c586100bf61074785610c526100bf6105a660019a89612196565b95612196565b91610c646100cf612f1f565b610cd8575b610c746100cf612f5a565b610c9e575b6105f4612f95565b610c8d575b5001610c28565b610c96906142db565b8a5238610c86565b7fffffffffffffffff000000000000000000000000000000000000000000000000610cc8846127c6565b60c01b168d610380510152610c79565b8c60207fffffffffffffffff000000000000000000000000000000000000000000000000610d05866127c6565b60c01b16910152610c69565b509791949295509295610120526101d56001949050610169565b92506000610d46610d3e6100bf84613a0f565b6105f461225b565b15610d5457506001926100f9565b807f31ab78b50000000000000000000000000000000000000000000000000000000060049252fd5b955060006003610d8e61087784613a0f565b10610d9c57506001956100e9565b807f8dcbb5950000000000000000000000000000000000000000000000000000000060049252fd5b95505050505050610205565b600080fd5b34610dd057610de336611f86565b6040519161010083019083821067ffffffffffffffff83111761155657610e4792610070926040526000855260006020860152600060408601526000606086015260006080860152600060a0860152600060c0860152600060e086015236916120f5565b80610e5181613bf2565b6000906000906000916000806000926000946000976000908c600091610e7960409d5b613bf2565b5183101561154357908c8392610e928796958e98612196565b5191610eaf610ea36100bf85612364565b60006104405293613a0f565b926104405150610f1a8251610ec484826120b4565b600781527f74636254797065000000000000000000000000000000000000000000000000006020918201528251908301207ff1ef84607333b53a2004a6165e8ab88f55e83518116e21fd0b464b25722b2c3f1490565b156110d457505050610f2d60ff91612666565b1690526001938e905b610f4e575b506001610e7991019192938e918e613bf2565b915083806110cd575b806110c6575b806110bf575b806110b8575b806110b1575b600363ffffffff604083950151610440515016101561109a575b5081610f95578d610f3b565b50999a505050505050505050505b156103f45780519060ff83511682526020830151600281101561106b57610100937fffff0000000000000000000000000000000000000000000000000000000000009260e092602086015263ffffffff6040830151169085015267ffffffffffffffff606082015116606085015267ffffffffffffffff608082015116608085015263ffffffff60a08201511660a08501527fffffffffffff000000000000000000000000000000000000000000000000000060c08201511660c085015201511660e0820152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b909150806110aa575b908e610f89565b50896110a3565b5088610f6f565b5087610f69565b5086610f63565b5085610f5d565b5084610f57565b909197506110e66100cf949394612220565b156111c8575050508a9b506110fa906124b6565b8c516111609061110a8f826120b4565b600381527f53475800000000000000000000000000000000000000000000000000000000006020918201528251908301207f8ec2409669ebaea0d83544d244ace12e63a771ee426935bcc157d252eb5f30461490565b1561117957506104405160208f01525b8d60019b610f36565b611187919a506105f461225b565b1561119a57600160208e01528998611170565b7f5aeb6bce000000000000000000000000000000000000000000000000000000006104405152600461044051fd5b81519798969795969495929492611239906111e384826120b4565b600581527f666d7370630000000000000000000000000000000000000000000000000000006020918201528251908301207f32d406b8d9e731fc9123600c61c66a13cbea488c34cc3d265954e87695b412101490565b15611289575050509060c07fffffffffffff0000000000000000000000000000000000000000000000000000806112776109228f9a999897966124b6565b60d01b16169101526001948e90610f36565b61129c6100cf9e9399989796959e6121aa565b156112c1575050506112b263ffffffff91612666565b1660408b01526001998a610f36565b8151929d8e9a90949390929190611332906112dc84826120b4565b600981527f69737375654461746500000000000000000000000000000000000000000000006020918201528251908301207f6076d2bbe55ad3c4b6ee7953ef9ae2e5b181f22d3eba84d569dbda4b99713e821490565b1561135f5750505067ffffffffffffffff6113516107a16060936124b6565b169101526001958e90610f36565b81519a9b929a6113c99061137384826120b4565b600a81527f6e657874557064617465000000000000000000000000000000000000000000006020918201528251908301207f763eaaeea7af2e6dd24f817d656a3a2f55700b655f70efd88231fddddb3c82281490565b156113f65750505067ffffffffffffffff6113e86107a16080936124b6565b169101526001968e90610f36565b81519b9c929b6114609061140a84826120b4565b600581527f70636549640000000000000000000000000000000000000000000000000000006020918201528251908301207f1f5653bc1bc6e041fc665b046bb7155c6612899340379c5caa4d030682426aea1490565b156114aa575050507fffff0000000000000000000000000000000000000000000000000000000000008061149861092260e0946124b6565b60f01b16169101526001978e90610f36565b8151929c9392611516929091906114c190836120b4565b601782527f7463624576616c756174696f6e446174614e756d62657200000000000000000060209283015280519101207f4e781c4bf4f96634340ceb53dcdb4730bdc24be94fdc96d345fdaa60d3d6d7b91490565b611521575b50610f36565b60a0919b5061153463ffffffff91612666565b169101526001988e903861151b565b5050509899505050505050505050610fa3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b34610dd0576100706115a561159936611f86565b929060009336916120f5565b6115ae81613bf2565b60008060609260005b6115c086613bf2565b51811015611f7b576115d28183612196565b516115df6100bf82612364565b6115ea6100cf6121aa565b611f62575b6115fb906105f46121e5565b611f4a575b508380611f43575b611614576001016115b7565b5050909192505b81611f3b575b50156103f4578051600091611635826126f1565b9261164360405194856120b4565b8284527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611670846126f1565b0190805b828110611ebd575050506000915b8083106117e95750505090604051918291604083019083526040602084015281518091526060830190602060608260051b8601019301916000905b8282106116cc57505050500390f35b91939092947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0908203018252845161ffff815116825260a0611732611720602084015160c0602087015260c0860190611ff5565b60408401518582036040870152611ff5565b9167ffffffffffffffff60608201511660608501526117596080820151608086019061202c565b01519160a0818303910152815180825260208201906020808260051b85010194019260005b8281106117a057505050505060208060019296019201920185949391926116bd565b90919293946020806117dc837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087600196030189528951612039565b970195019392910161177e565b6117f96104f98484979597612196565b936000915b61180b6104f98886612196565b51831015611ead576118236100bf6105a68589612196565b61182e6100cf612709565b15611cda5750611853610e74610070611847868a612196565b51600061028052613a0f565b6101e0526002850361195d57610280519361186c6140f7565b95610280519561028051905b6101e051518210156118f0576118976100bf6105a6846101e051612196565b906118b76118ae610877610747866101e051612196565b926105f4614138565b156118cd575061ffff60019116915b0190611878565b91886118ea60ff6118e16001959c93614173565b9b16918c612196565b526118c6565b939592979196601091500361192f57600192602061190e8b87612196565b51019061ffff61191e8c88612196565b5191169052525b01919392936117fe565b7f5aeb6bce000000000000000000000000000000000000000000000000000000006102805152600461028051fd5b60038593969297951460001461192f57610280516101a05261197d6140f7565b610260526119896140f7565b6102c05261028051610300525b6101e05151610300511015611c8f576119bb6100bf6105a6610300516101e051612196565b610220526119e26119ca614138565b61022051906020815191012090602081519101201490565b15611a165761ffff611a00610877610747610300516101e051612196565b166101a0525b6001610300510161030052611996565b611a3b611a2d61030097959397516101e051612196565b51610280516102e052613bf2565b6102e052610280516102a0819052610240526040610200525b611a676104f9610300516101e051612196565b51610240511015611c5157611a93611a85610240516102e051612196565b51610280516101c052613bf2565b6101c052610280515b611aaf6104f9610240516102e051612196565b51811015611c405780611b37611ad06100bf6105a66001956101c051612196565b6102005180519190611ae290836120b4565b600382527f73766e000000000000000000000000000000000000000000000000000000000060209283015280519101207f4294eaea1f2439036f92859f5d2aee946a31a48b4d3ebceca5872241d2d718091490565b611b42575b01611a9c565b610200518051611baf91611b5690826120b4565b601081527f746478746362636f6d706f6e656e7473000000000000000000000000000000006020918201526102205180519101207fd039dfd6fdf9579033b5870aaca39cde10fbba50b5b2d55d2fa2454f62ea34541490565b15611bfd5760ff611bc9610877610747846101c051612196565b6102805150166102a05161016052611be36102a051614173565b6102a052611bf7610160516102c051612196565b52611b3c565b60ff611c12610877610747846101c051612196565b6102805150166102a05161014052611c2c6102a051614173565b6102a052611bf76101405161026051612196565b506001610240510161024052611a54565b9490929460106102a0510315611a06577f5aeb6bce000000000000000000000000000000000000000000000000000000006102805152600461028051fd5b9192939590946001906020611ca48985612196565b51016040611cb28a86612196565b5101611cbe8a86612196565b5161ffff6101a0511690526102c0519052610260519052611925565b611ceb6100cf969596949294612744565b15611d2657508067ffffffffffffffff611d106107a16100bf6107476001968c612196565b166060611d1d8a86612196565b5101525b611925565b611d316100cf61277f565b15611d5c575080611d21611d5061074d6100bf6107476001968c612196565b60806107778b87612196565b611dc4604091825190611d6f84836120b4565b600b82527f61647669736f727949447300000000000000000000000000000000000000000060209283015280519101207fe86af6009aebc04f295f78c7e3eb2fcaace71ae116a426fa95c0ee7718f2b4531490565b611dd2575b50600190611925565b611ddf6104f98389612196565b611dec6104f9848a612196565b5191611e03611dfa846126f1565b915191826120b4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611e30846126f1565b0160005b818110611e9c57505060a0611e498b87612196565b51015260005b828110611e5d575050611dc9565b80611e95818c60a0611e81611e7a6100bf6107476001998b612196565b928b612196565b51015190611e8f8383612196565b52612196565b5001611e4f565b806060602080938601015201611e34565b9395909450600191500191611682565b60405160c0810181811067ffffffffffffffff821117611f0e57906020929160405283815260608382015260606040820152836060820152836080820152606060a082015282828901015201611674565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b905083611621565b5082611608565b909250611f58919450613bf2565b9260019187611600565b94509650611f7261087788613a0f565b966001946115ef565b50509091925061161b565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112610dd05760043567ffffffffffffffff8111610dd05782602382011215610dd05780600401359267ffffffffffffffff8411610dd05760248483010111610dd0576024019190565b906020808351928381520192019060005b8181106120135750505090565b825160ff16845260209384019390920191600101612006565b90600882101561106b5752565b919082519283825260005b8481106120835750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201612044565b6060810190811067ffffffffffffffff82111761155657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761155657604052565b92919267ffffffffffffffff8211611556576040519161213d601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846120b4565b829481845281830111610dd0578281602093846000960137010152565b8051156121675760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156121675760209160051b010190565b604051906121b96040836120b4565b600782527f76657273696f6e000000000000000000000000000000000000000000000000006020830152565b604051906121f46040836120b4565b600982527f7463624c6576656c7300000000000000000000000000000000000000000000006020830152565b6040519061222f6040836120b4565b600282527f69640000000000000000000000000000000000000000000000000000000000006020830152565b6040519061226a6040836120b4565b600382527f54445800000000000000000000000000000000000000000000000000000000006020830152565b604051906122a382612098565b6000604083606081528260208201520152565b6040516020810181811067ffffffffffffffff82111761155657604052600081526040526000906020810190602081518201019081830361230d575b5082159110176122ff5790565b63101827966000526004601cfd5b91819350906123589160008251811a946022845363ffffffff81113d3d3e8060d81b7f22000000000000000000000000000000000000000000000000000000000000001782526133e6565b929092918153386122f2565b9060609160808151166123745750565b61237f919250613b03565b90565b91600092600481019283111590516000915b600483036123a157505050565b90919482861a907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd082019083667e0000007e03ff831c16156122ff57600192826007601060307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0961160051b9211020190039060041b010195019190612394565b90607f8111156124ac5780601f538060061c601e536107ff8111156124945780600c1c601d5361ffff81111561247a5780621100009160121c601c5360005163073f3f3f1663f08080801760e01b83521060021b0190565b50600390600051620f3f3f1662e080801760e81b81520190565b50600290600051611f3f1661c0801760f01b81520190565b9060019181530190565b908151601f81840101906001825160001a600286015161ff00161761222214911116156122ff57602160206040510193015b818103612528575050600082526020604051927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084820301845201604052565b6001819492945160001a910190605c8103612647575b50908382036125555763101827966000526004601cfd5b6001825160001a92019160016b100000000000800400000000821c1661263a5784607582146125d157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffab72080000000c000000000000000a0000000d000991011a90816125c357506122ff565b600191815301925b906124e8565b6125e091506125fb9293612382565b818161dbff821161d80083101715612601575b505092612422565b926125cb565b620ffc0093506126219192506002615c75825160f01c1489029101612382565b92906103ff1691600a1b160162010000019038806125f3565b90600191815301926125cb565b60228103612658575050823861253e565b9160019192815301926125cb565b9060009180516000905b60ff6001808401938501015116947f1999999999999999999999999999999999999999999999999999999999999999811190600a029060097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd080898501019801119187101717150290818110156126e75790612670565b509050156122ff57565b67ffffffffffffffff81116115565760051b60200190565b604051906127186040836120b4565b600382527f74636200000000000000000000000000000000000000000000000000000000006020830152565b604051906127536040836120b4565b600782527f74636244617465000000000000000000000000000000000000000000000000006020830152565b6040519061278e6040836120b4565b600982527f74636253746174757300000000000000000000000000000000000000000000006020830152565b600882101561106b5752565b90600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821160208087015160f01c17613078141660011b915b7403010a071000000b0104040208000c05090d060e0f6d03e4088843e41bac00000000000060ff6001808701968a010151161c601f161a908460fc1c82151715029360041b0101908281101561287d5790917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90612804565b509250156122ff57565b6014815103612ec1576000600460609083516004811115612eb9575b8015612eb1575b50808310612e04575b506128be91506141cf565b906005600760609083516007811115612dfc575b6005811115612df4575b50808310612d47575b506128f091506141cf565b906008600a6060908351600a811115612d3f575b6008811115612d37575b50808310612c8a575b5061292291506141cf565b90600b600d6060908351600d811115612c82575b600b811115612c7a575b50808310612bcd575b5061295491506141cf565b92600e601060609084516010811115612bc5575b600e811115612bbd575b50808310612b10575b5061298691506141cf565b9160119060139060609281516013811115612b08575b6011811115612b00575b50828110612a2e575b5050509162023ab16101907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff50593936129e962015180966141cf565b9860038210900393610e10603c8487069202990297610301600c60096064850495010661f4ff0201600b1c019061016d8160021c910201010392040201010201010190565b6040519281900380845292959350017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830181165b808301518188015201908115612a9d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612a65565b5050600081850160200152603f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01683016040529162023ab16101907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff505936129af565b9050386129a6565b92508261299c565b90508160405191039182825284017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115612b7e57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612b46565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f61298693600060208286010152011681016040523861297b565b925038612972565b905080612968565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115612c3b57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612c03565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f612954936000602082860101520116810160405238612949565b925038612940565b905080612936565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115612cf857907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612cc0565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f612922936000602082860101520116810160405238612917565b92503861290e565b905080612904565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115612db557907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612d7d565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f6128f09360006020828601015201168101604052386128e5565b9250386128dc565b9050806128d2565b90508160405191039182825283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8501165b808301518185015201908115612e7257907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090612e3a565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f6128be9360006020828601015201168101604052386128b3565b9250386128aa565b9050806128a3565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696e76616c69642069736f20737472696e67206c656e677468000000000000006044820152fd5b60405190612f2e6040836120b4565b600a82527f61747472696275746573000000000000000000000000000000000000000000006020830152565b60405190612f696040836120b4565b600e82527f617474726962757465734d61736b0000000000000000000000000000000000006020830152565b60405190612fa46040836120b4565b600882527f6d727369676e65720000000000000000000000000000000000000000000000006020830152565b5b6001640100002600825160001a1c161561237f57600101612fd1565b9063ffffffff81113d3d3e60181b907fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff161790565b9063ffffffff81113d3d3e60981b907fffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffff161790565b9063ffffffff81113d3d3e60381b907fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff161790565b9063ffffffff81113d3d3e60b81b907fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff161790565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600495949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600595949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600695949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600195949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b907fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600295949796978560405199039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b169116171717825260208201604052565b93926134006133fa60009493600051612fed565b92612fd0565b92818410156135185750825160001a6022811490605b811460016703ff200000000000607b8414931c16926134f9576134eb576134d2576134bb576004830181811115613473575b50600583019081116122ff576466616c7365835160d81c036122ff5761237f926133fa928296613162565b8390845160e01c90637472756582146134a75750636e756c6c03613448576133fa92959150600461237f9401958692613203565b61237f95508093506133fa94915096613162565b90916134ca9261237f95613859565b929092612fd0565b5091906134df93946135f6565b90919061237f90612fd0565b505091906134df939461351f565b50505093826135106133fa939661237f9592613771565b9586926130c1565b9450505090565b939060009081600185015b868110156135f157869082156135bb575b61354592896133e6565b80828061355a575b5050506001865b0161352a565b948561356e82600194959851604017613022565b905201935160001a605d811461359457602c1461358c57808061354d565b600190613554565b506135b29196506135b8959350600190979294975b01958694613057565b906132a4565b91565b6135c59150612fd0565b90605d825160001a146135da5790869061353b565b95506135b894925060016135b291979294976135a9565b6122ff565b939091600092600182015b858110156135f15784156136f2575b61361990612fd0565b6136238682613771565b908661362e83612fd0565b603a815160001a14613649575b509050600191505b01613601565b96600161365a93949801908a6133e6565b9080928197839461366f575b5088915061363b565b6136a7827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08d6136ac9503019203845160801761308c565b613022565b90525160001a607d81146136d257602c146136ca5780808080613666565b600190613643565b506135b894955060016136ec919792949701958694613057565b90613345565b6136fb90612fd0565b607d815160001a03613610576135b894955060016136ec91979294976135a9565b6001667e0000007e03ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08484015160001a011c16156122ff5760058203613762575050565b600161376f92019061371c565b565b818110156122ff576001015b805160001a6022811461380c57605c0361380457600181015160001a60016a05101104000000000020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffde83011c166137fb576075146137e75750805b8110156122ff5760010190565b806137f5600260069361371c565b0161377d565b5060020161377d565b60010161377d565b50906137da565b90815b600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0825160001a01101561384d57600101613816565b8092146001166122ff57565b919092508092602d825160001a14613a04575b600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0855160001a0110156122ff5760306001855160001a950194036139c1575b602e845160001a146139ae575b835160658160001a6020171461396b575b50906003917fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff7fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051968589039503019363ffffffff85113d3d3e63ffffffff81113d3d3e60781b9360581b16911617171781526020810160405291565b60016003939295620100017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff26139a694841a011a0101613813565b9390916138cb565b9260016139bb9101613813565b926138ba565b9190925b600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0825160001a0110156139fc576001016139c5565b9290916138ad565b60018201935061386c565b8051919060608115841517613afe57508260581c63ffffffff16928060101615613a37575050565b8060781c63ffffffff16604051948260d81c63ffffffff16017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8401165b808301518189015201908115613ab057907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090613a78565b5050604090808652850160006020820152016040528363ffffffff81113d3d3e60581b907fffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffff16176010179052565b925050565b8051919060608115841517613afe57508260981c63ffffffff16928060081615613b2b575050565b8060b81c63ffffffff16604051948260d81c63ffffffff16017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8401165b808301518189015201908115613ba457907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090613b6c565b5050604090808652850160006020820152016040528363ffffffff81113d3d3e60981b907fffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffff16176008179052565b606090805190600282600716119060208316928060381c63ffffffff169180158215179363ffffffff8211923d3d908460181b983d983d947fffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffff169515613c61575b505050505050505050505090565b9a909192939495969798999a613dc55750613dac576040519860208a019796889695949392885b613d5c57505050506040945087840396877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001948560051c8a52865263ffffffff8911913e8660381b1760201790521015613cec575b808080808080808080613c53565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080602092938501015b83518151855281520191019080821015613d53577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602091613d16565b50503880613cde565b88602099899596979899528051908383883e84827fffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffff1617905260181c63ffffffff16988994019796959493613c88565b5050505050509150503880808080808080808080613c53565b9980613c53565b6040613e338151613ddd83826120b4565b600881527f5570546f446174650000000000000000000000000000000000000000000000006020918201528351908401207f8dd11fcce5839087111530125177803569655488ae47b1f980ef0b1a711bf07c1490565b15613e3f575050600090565b613ea48151613e4e83826120b4565b600981527f4f75744f664461746500000000000000000000000000000000000000000000006020918201528351908401207fe1dbc1592712cb224ab58df345a7bffafe7d5092dc9eff532076ee2c5e6870991490565b15613eb0575050600490565b613f158151613ebf83826120b4565b601c81527f4f75744f6644617465436f6e66696775726174696f6e4e6565646564000000006020918201528351908401207f605a88f0014fcefe2d398f17b974556e2ae7481bfdc313f7e0af48c270400c491490565b15613f21575050600590565b613f868151613f3083826120b4565b601381527f436f6e66696775726174696f6e4e6565646564000000000000000000000000006020918201528351908401207f820e8e2a851961706b111f73b809da9ccf7c4d4181cd135f0696ca2daa5059421490565b15613f92575050600390565b6140068151613fa26060826120b4565b602181527f436f6e66696775726174696f6e416e64535748617264656e696e674e6565646560208201527f64000000000000000000000000000000000000000000000000000000000000008382015283906020815191012090602081519101201490565b15614012575050600290565b614077815161402183826120b4565b601181527f535748617264656e696e674e65656465640000000000000000000000000000006020918201528351908401207f7ad9f5b3c5180451fdebfb145dcb7bcd2dc9f95342d3659e0dcc8d07b31182a11490565b15614083575050600190565b6140e891614093825192836120b4565b600782527f5265766f6b65640000000000000000000000000000000000000000000000000060209283015280519101207f78b54e92f33559320da4a0c1454741ea1f5c5fa31eb1dd482882c6df0231e4781490565b156140f257600690565b600790565b604051610220919061410983826120b4565b60108152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b604051906141476040836120b4565b600682527f70636573766e00000000000000000000000000000000000000000000000000006020830152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146141a05760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906000805b8351821015613afe5760006020838601015160f81c6030811015806142d0575b614205575b505090600101906141d4565b600a830292808404600a14901517156142a357807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08101116142a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09083010180921161427657506001386141f9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b5060398111156141f4565b60006010606091835160108111156144f1575b80156144e9575b5081811061443e575b505060109160309060609381516030811115614436575b601081111561442e575b5082811061437f575b50505061433761433d916127c6565b916127c6565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000006040519260801b16602083015260308201526030815261237f6050826120b4565b60405192819003808452929450017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830181165b8083015181870152019081156143ed57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0906143b5565b5050600083820160200152603f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261433761433d38614328565b90503861431f565b925082614315565b8091925060405192039081835283017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080601f8401165b8083015181860152019081156144ad57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090614475565b5050600082820160200152603f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810160405238806142fe565b9050386142f5565b9150816142ee56fea26469706673582212205c7e1cf9789001b791ebaf02b6fdfc87818ba3b471aa8f6abe1cb0b3155240ad64736f6c634300081b0033