diff --git a/yarn-project/aztec-cli/src/index.ts b/yarn-project/aztec-cli/src/index.ts index 1f02f8b68a9..df01f81600c 100644 --- a/yarn-project/aztec-cli/src/index.ts +++ b/yarn-project/aztec-cli/src/index.ts @@ -354,10 +354,7 @@ async function main() { accountCreationSalt, ); const contract = await Contract.create(contractAddress, contractAbi, wallet); - const origin = (await wallet.getAccounts()).find(addr => addr.equals(wallet.getAddress())); - const tx = contract.methods[functionName](...functionArgs).send({ - origin, - }); + const tx = contract.methods[functionName](...functionArgs).send(); await tx.isMined(); log('\nTX has been mined'); const receipt = await tx.getReceipt(); diff --git a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json index c5a8595e14d..0521c715401 100644 --- a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json +++ b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json @@ -47,7 +47,9 @@ "kind": "field" } } - ] + ], + "bytecode": "H4sIAAAAAAAA/+3du48sSZvX8arMumbWvavv98u59LlW15kz58zlfSffd5Y1wEHiNTAAg9U7sBIYixYDjB3h8Cdg4a+QQFgILcauhBB4a+DhrQeYSDjrrHizOp/p34mO6j41nTn1PS+RUqsiI7Py+URkdVVmZGRkv1ar1WvXU/ybv0bt9mTLs+J19rDpql7etmZVOqNPxBmX6MxtzVq1+79RQb2WbWx+AsbWJ2BsfwLGTq3c/x8z2ndp9zd/yW/+0t/89Wo30x/s3iy3/7lY3mPvjyQvduqgK8ttakk6K6dcb1vl1/usWfhr8qrlHRRlaZcb90rrqFG7qee27ANb3pfXPK9TrmXekrKXtM03+TaTcrf5Wb7NtILPVK/cbX7ekn1W0jbftYrPYonbfG91mU/2ec/jDMuNc1WvfThlkrZYaolBlgbI0gRZWiBLG2TpgCxdkCUBWVKQpQey9EGWAchSX7OlK4aa5NnyjuSNJG2v4yKdSN7EKWeet1Gke5I3LdJ9ydss0gPJ2yrSep6wXaT1fGKnSOt5SXEK8sPvm55PaB3YdrSMtp2x5Nl2JpJnv1cbkme/G1PJs7rclDyryy3Js7rcljyryx3Js7rUMv5LWW7rar3terZjaf0sWuyseJ09bFp8FjVOJvMWKxHDDsAyAFn6IEsPZElBlgRk6YIsHZClDbK0QJYmyNIAWWKQJXIsehy0K3mR89524S65jedtHst+l2ri1ymTdIXH3bN8m6OSt5lvYyx+K6sex9vykZRtXK5j8fkY1j6sU5sfS9xQ/lLjhvLXQvn/fy5/aMMPbfg/1hLa8EMb/iqW0IYf2vBXsZDa8EcgC/16grb/27GLtv9bu7q2w9/VXq9t8/ZbbNvIfw//Xed2vMgTb+xxVV2XGieTeYul7eFjgGUEsgxAlj7I0gNZUpAlAVm6IEsHZGmDLC2QpQmyNECWGGSJHEtoOwltJz/WEtpOQtvJKpbQdhLaTlaxhLYTv6Xq44hVLBOQhd6mpH0x3bai/Hf9f0ob0F19IrUv6V6R1r6k+7JNyzso0i3JOyzSbY9V+25Yf1Htu2H9Rfckz/qL7kue9Rc9kDzr73Hoseg+tPdkxevsYdNiH2qcTOYtlrZlHQIsE5BlDLKMQJYByNIHWXogSwqyJCBLF2TpgCxtkKUFsjRBlgbIEoMskceyX65lrseUNTHplElajwn3HHPu262grvYci81brFQMw8os80X/NDd2BWWed50y59Nd+0SP5+14f098R+X6Pug/btu1eYuldbVRmeV6n7ixKyjzvOuUOZ/u2icWP3/fcZHWPv0n5foW++TYsdi8xdK6mlZoST2xK4gz17q16a59clK85u87LdLH4jsruR7qEse2a/MWS+tqs0JL6oldQZx51ylzPt21Tyx+/r7zIn0qvouS66EucWy7Nm+xtK62KrSkntgVxJl3nTLn0137xOLn73tUpM/F97jkeqhLHNuuzVssravtCi3pktg26bXVRxXUQ82pB5seeSwxyNIAWZogSwtkaYMsHZClC7IkIEsKsvRAlj7IMgBZhiDLCGQZgywTkGUDZJmCLJsgyxbIsg2y7IAsuyDLHsiyD7IcgCyHIMsRyHIMspyALKcgyxnIcg6yXIAs9TVblvXfs+Xah83a+LT/25MirX3nnhbpY8m7LNKnkvesSJ9L3nNJ2+uLIq3jWL4s0jqOZeQpm7X7PZY8a397InnNIv1U8qw96lLyrF3omeRZ+4zazf9C8sxv9jxmNLxdJv1M2Puz4nX2sGnxmdA4mcxrPdcd6zotFyDLOchyBrKcgiwnIMsxyHIEshyCLAcgyz7Isgey7IIsOyDLNsiyBbJsgixTkGUDZJmALGOQZQSyDEGWAcjSB1l6IEsKsiQgSxdk6YAsbZClBbI0QZYGyBKDLJFjSWS53pti7YJ7kmfthzuSZ+2Mx5Jn7ZGnkmftltYWtazP5eMK6kWnTNK+/p8xyNIAWZogSwtkaYMsHZClC7IkIEsKsvRAlj7IMgBZhiDLCGQZgywTkGUDZJmCLJsgyxbIUuW9VqtadkCWXZBlD2TZB1kOQJZDkOUIZDkGWU5AllOQ5Qxkqfo+5FUsFyDLE5DlKchyCbI8A1megywvQJaXIEt9zZZl/ahtuY5Vav2TtW/wqyKtfYhfF2ntazwr0ton+apIa9/leZHWPs6Rx2xt9Npn2qyvJM/arF9LXqtIzyTP2nCvJM/aUs2Ub+tXw9v+yOO/8pRT97XFzsxSwr7WOJnMWyztH30FsLwEWV6ALM9BlmcgyyXI8hRkeQKyXIAs5yDLGchyCrKcgCzHIMsRyHIIshyALPsgyx7Isguy7IAs2yDLFsiyCbJMQZYNkGUCsoxBlhHIMgRZBiBLH2TpgSwpyJKALF2QpQOytEGWFsjSBFkaIEsMskSOZdm9B1X4dMokPfNYYpClAbI0QZYWyNIGWTogSxdkSUCWFGTpgSx9kGUAsgxBlhHIMgZZJiDLBsgyBVk2QZYtkGUbZNkBWXZBlj2QZR9kOQBZDkGWI5DlGGQ5AVlOQZYzkOUcZLkAWZ6ALE9BlkuQ5RnI8hxkeQGyvARZqm6XX8UyB1nqa7YsuyfDteq9FnPJizzbs+sKtn7env56dHvbkWfbM49B6+iVU5bZw6ZFHWmcTOYtlt7LMANY5iDLFcjyEmR5AbI8B1megSyXIMtTkOUJyHIBspyDLGcgyynIcgKyHIMsRyDLIchyALLsgyx7IMsuyLIDsmyDLFsgyybIMgVZNkCWCcgyBllGIMsQZBmALH2QpQeypCBLArJ0QZYOyNIGWVogSxNkaYAsMcjiXvdYdo9HFT6dMkm/8lhikKUBsjRBlhbI0gZZOiBLF2RJQJYUZOmBLH2QZQCyDEGWEcgyBlkmIMsGyDIFWTZBli2QZRtk2QFZdkGWPZBlH2Q5AFkOQZYjkOUYZDkBWU5BljOQ5RxkuQBZnoAsT0GWS5DlGcjyHGR5AbK8BFlegyxVXyNYxXIFssxBlvqaLcvufdHl9mrP/tBne0Se7bnPCsmvM3w3ur3tyLPtVx6D1tFjpyyzh02LOtI4mcxbLL335RXAMgdZrkCWGcjyGmR5CbK8AFmegyzPQJZLkOUpyPIEZLkAWc5BljOQ5RRkOQFZjkGWI5DlEGQ5AFn2QZY9kGUXZNkBWbZBli2QZRNkmYIsGyDLBGQZgywjkGUIsgxAlj7I0gNZUpAlAVm6IEsHZGmDLC2QpQmyNECWGGRxrwctuyeoCp9OmaQfeywxyNIAWZogSwtkaYMsHZClC7IkIEsKsvRAlj7IMgBZhiDLCGQZgywTkGUDZJmCLJsgyxbIsg2y7IAsuyDLHsiyD7IcgCyHIMsRyHIMspyALKcgyxnIcg6yXIAsj0CWJyDLU5DlEmR5BrI8B1legCwvQZaqrxGsYnkNssxAliuQZQ6y1NdsWXavlC1PJO9NkX4keZFne3YdytbPr7/80ej2tiPPth97DFpHnzllmT1sWtSRxslk/jOpg7rjW6dlDrJcgSwzkOU1yPIKZHkJsrwAWZ6DLM9AlkuQ5SnI8gRkeQSyXIAs5yDLGchyCrKcgCzHIMsRyHIIshyALPsgyx7Isguy7IAs2yDLFsiyCbJMQZYNkGUCsoxBlhHIMgRZBiBLH2TpgSwpyJKALF2QpQOytEGWFsjSBFkaIEsMsrjXyRJZfiB5b4v0nuR9XqR3JO9dkT6WvPdF+lTyvijS1ha17N61L2vl14tOmaS/9FhikKUBsjRBlhbI0gZZOiBLF2RJQJYUZOmBLH2QZQCyDEGWEcgyBlkmIMsGyDIFWTZBli2QZRtk2QFZdkGWPZBlH2Q5AFkOQZYjkOUYZDkBWU5BljOQ5RxkuQBZHoEsj0GWJyDLU5DlEmR5BrI8B1legCwvQZZXIMtrkGUGslyBLHOQ5Q3I8hnI8hZk+RxkeQeyvAdZvgBZ6mu2LLs31pY3Je+rIv2Z5H1dpN9K3s+K9OeS9/Mi/U7yvinS7yUvK9JfSF7kMdu19K8kz65pfy155v+Z5Nk13p9Lnl1r/Uby7JpnVrzm2/rV8LY/8vh1O5bWff1zZ9uzh02Lfa1xMpm3WHqP7zcAyxcgy3uQ5R3I8jnI8hZk+QxkeQOyzEGWK5BlBrK8BllegSwvQZYXIMtzkOUZyHIJsjwFWZ6ALI9BlkcgywXIcg6ynIEspyDLCchyDLIcgSyHIMsByLIPsuyBLLsgyw7Isg2ybIEsmyDLFGTZAFkmIMsYZBmBLEOQZQCy9EGWHsiSgiwJyNIFWTogSxtkaYEsTZClAbLEIEvksfysXMtn2h+hJiadMkn/TCxfl2tZXBb6SmKZy+Kkslz7C35VrmOxf752ym/z6vtY66NPyPrmE7Jma7Zqnx/tPxM55nZhbJVrnGufHpvu+t9tidF+F3W8iU65vkUdth2LzVusVAxxdZa3qSd2sqQeuuXGnmn/Kdt2/pv3nzo3MdOSy5tvc1ByOfL9aecC+fS9lEvv5a8ibt+Jmzpx67UPx5/4Xqz23ljW+a+dm/3wn4u0ngNqX7+hE0v/x21Zu/bh+az+X44kbfXVkLyJpCPnPdp2oPe/WztLVrzOHja97TqOfLrru0Tvf98s17LY33rvdiYxNO52uXGvNG69+LMYlh9L+n/YzpT18sk+A2bWNjpdT9MT5z2pLJ9WXOZNcWQyb7Hyz+qfS1mnHrd+n9tyHTtiWrI738aGODqOrSvl0O/2rZ+w/rakTppOfVVgWfzGubGrqvvNe+re8mw99/euUa5prv2gbbrr+0vH/Cr3uGw++7HHZflru1TLbFbBsdTiPK0rfiur2VNZrmNllXxcdefxpY6LFcpfatxQ/loofyh/KH8ofyh/KH8ofyh/KH8ofyh/KH8ofyh/KH8ofyh/KH8ofyh/KH8ofyh/KH8ofyh/KH8o/09f/q7kxWu2pGKorr/lfJbW/J+Dkss87zplzqe7+nmopdz+ntd9TpIVLPp8rF6plur6nGgfUCtrT8pjy/V/rl+u48rtA5vVbvczDeUP5Q/lLzVuKH8tlD+UP5Q/lD+UP5Q/lD+UP5Q/lD+UP5Q/lD+UP5Q/lD+UP5Q/lD+UP5Q/lD+UP5Q/lD+Ufz3l70pee80W7QuSVGa57nPi+xyUXObF52AgZY6cmDpeb3Vjcl2X1zXkcYalxrnexzplkrZYaolBlgbI0gRZWiBLG2TpgCxdkCUBWVKQpQey9EGWAchSX7OlW/M/09qW9yRvVKTvGucyz7PfWFs//235V6Ob5TbuXyTvsXHvYk+8scc18bxX69LekxWvs4dNi7rUOJnMWyx9ZvQEYBmALH2QpQeypCBLArJ0QZYOyNIGWVogSxNkaYAsMcgSeSxlt3/o8YVtO98ff5zcxCx3vNur7/Jtljzu8swdN/h7Kde21F8VcbecuO7Y1Pk6Os7297Xb4wrHss5fDG72w78v9oM+O1DbZHbLLc9iLGJ7jmQ+2WfQ4ujzFPfE8VO1h+2VGufuY36Ltaw9bN2WBsjSBFlaIEsbZOmALF2QJQFZUpClB7L0QZYByDIEWUYgyxhkmYAsGyDLFGTZBFm2QJZtkGUHZNkFWeprtiy7JmLLdyRvv0j7rono9uw8y9Z3r4kcFPl6TeSwSMeeeAce16HnvVqX9p6seJ09bFrUpcbJZN5i6TWRQ4BlF2TZAVm2QZYtkGUTZJmCLBsgywRkGYMsI5BlCLIMQJY+yNIDWVKQJQFZuiBLB2RpgywtkKUJsjRAlhhkiTyWsq9R59s4qt1Mdh45FYeZjip05Ns8LnWb12NbatmsvnXKJH0s5Tst1XJ9/fxMtp9JDI17Xm7cK41bL/4shuXHkv6H0uByfpP84TzQzPnn4sSznqaPnPeksvyk4jKfiiOTeYuVf+f8XSnricc9Fbct1/YV2296rfykgrIc1z4sy7Fj1vFxjyqzXPdVcGNXUOZ5vg3df5ETMxHHqTh+qr4ZJX833Nn2qP87NsUgSwNkaYIsLZClDbJ0QJYuyJKALCnI0gNZ+iDLAGQZgiwjkGUMskxAlg2QZQqybIIsWyDLNsiyA7Lsgix7IMs+yHIAshyCLEcgS4XtfitbTkCW+poty/pbue2meZ61X/r6W+n2rO3E1nf7W1n7YCTvuSjSsSfeucd14Xmv1mUV7Z0aJ5N5i6X9rS4AlhOQ5RhkOQJZDkGWA5BlH2TZA1l2QZYdkGUbZNkCWTZBlinIsgGyTECWMcgyAlmGIMsAZOmDLD2QJQVZEpClC7J0QJY2yNICWZogSwNkiUGWyGOpYmwhi6ljC/2ydxOziv6ST0suR16Pj2s30/dSrqdSf1XEfeLEnTpx83UeieF7sdp7Y1nnT2Vsob9e7IdEtqd9Yp6VW543+Tae124m+wxanNxxWaSfi+On6r/2vNQ4d7flWqxl/dfWbWmALE2QpQWytEGWDsjSBVkSkCUFWXogSx9kGYAsQ5BlBLKMQZYJyLIBskxBlk2QZQtk2QZZdkCWXZBlD2TZB1kOQJZDkOUIZDkGWU5AllOQ5QxkOQdZLkCWRyDLY5DlCcjyFGS5BFmegSz1NVuW9Ru25ZeS96JI+/oN6/aszdrWd/sNvyzyI3nPqyIde+K99Lheed6rdWnvyYrX2cOmRV1qnEzmLZb2G34FsDwDWS5BlqcgyxOQ5THI8ghkuQBZzkGWM5DlFGQ5AVmOQZYjkOUQZDkAWfZBlj2QZRdk2QFZtkGWLZBlE2SZgiwbIMsEZBmDLCOQZQiyDECWPsjSA1lSkCUBWbogSwdkaYMsLZClCbI0QJYYZIk8lirGvH5du5msTV7HvDbT6wod+TZnpW7zesxrLZvVt06ZpGdSvnmpluv7Ot7I9jOJoXE/KzfulcatF38Ww/JjSf++HXjIevlkbepmzj8XV571NP3aeU8qy68qLvNcHJnMW6z8O+fvSVmvPG4d89qW67Uq22/aJ/+qgrLMah+WZeaYUzG8rsxyfQ+NGzuRvFjyrjx186ZUz2yxK/XzZt+Xb8Th7vfUs35Vn0GdMkn7LDHI0gBZmiBLC2RpgywdkKULsiQgSwqy9ECWPsgyAFmGIMsIZBmDLBOQZQNkmYIsmyDLFsiyDbLsgCy7IMseyLIPshyALIcgyxHIcgyynIAspyDLGchyDrJcgCyPQJbHIMsTkOUpyHIJsjwDWZ6DLC9AlpcgyyuQ5TXIUvX1yVUsVV83XMUyB1negCz1NVt89zzm15H+i9yj+K7Ij+Q974u03qP4RZFuSJ7FeSd5b4v0e8n7vEh/4dme1tF7pyyzh02LOtI4mcxbLL2X8QuA5Q3IMgdZrkCWGcjyGmR5BbK8BFlegCzPQZZnIMslyPIUZHkCsjwGWR6BLBcgyznIcgaynIIsJyDLMchyBLIcgiwHIMs+yLIHsuyCLDsgyzbIsgWybIIsU5BlA2SZgCxjkGUEsgxBlgHI0gdZeiBLCrIkIEsXZOmALG2QpQWyNEGWBsgSgyyRY9FrizPJs+uHV5L3ZZGeS95XRVqvb35dpN9K3s+K9OeSFzk+Hb9Vr1/avvxS8uyz9pXk2f/C15Jn/6sWP59PnPla8d7dIp0Vr7OHTVdqySdrh9uVvC8lfeb4Eynfl+J8V6rz+l50deTTXdey34nl56Varu9F/0a2n0mMd05+iXGvNG69dvM/VJP8WNL/3Q7sah/WjX2uzJzvw/ee9TT9pfOeVJa/r7jMP3dM7v7M//f+m5T1vcd9Lm5b/pW4q/i/eicO9/9Kv9P0/7vkz+qi/t479Wfzui/bTn2Vb7m+/92NXVXdv7+n7i3P1tNnrCbiiyt2fiPOsePMp19I2s5f7T2JWH4hzl+W6rz+7lVHPt313ftLsfxOqZbr796/JtvPJIbG/d1y415pXPvutRiWH0v6/8r30e/eJH/4XJk534ffetbT9C+c96Sy/NuKy/w74shk3mLl/zf/W8r6rcc9Fve3jrGq/6tfisP9v+qKQ/+/S/6sLurvW6f+bF73ZezUV/mW6+9eN3ZVdf/tPXVvebZe/hn64+SmPmyKxJmW7Lzr+yut3bbEIEsDZGmCLC2QpQ2ydECWLsiSgCz1NVuWPefGlkeSZ+3i2s/b2u21n7cdFjQlT8fFsDw7rm1Lnv1GdCRvIml7tetuieRFnrKZtSd5Zu1LnlkHkmfWoeSZdSR5Zh1LnlnVblaz5zH/fHS7TPqZsPdnxevsYdPiM6FxMpm3WNrHfQNgSUCWLsjSAVnaIEsLZGmCLA2QJQZZIsfSLjxJuZ7FZQj7/mhIXIsTy/I/Gd6s97eHN3XUK9e0uAySekz6W2/L/07h6NeWn6/1y/XdeQxjsZadr63b0gBZmiBLC2RpgywdkKULsiQgSwqy9ECW+poty85jbbmes9o5np6z2jmenrPq+ImWZ+d4es5qxxJ6zhp5fGbQc0wz6DmmGfQc0wx6jmmGidj/cnTbGnmsY0+ZdB9a7Kx4nT1sWuxDjZPJvMXS884xwNIDWVKQJQFZuiBLB2RpgywtkKUJsjRAlhhkiRyL/hbb71ded/9xeLN86GwnX/6imFl2rjqooHw6ZZK2WMvOVddtaYAsTZClBbK0QZYOyNIFWRKQJQVZeiDLEGQZgSxjkGUCstTXbFnWtmHL77ser9ebLU/H+rc8u8dX2zbsHmRf24b6zKDtHe71Jm3bmEqeGTYlzwxbYn83vm2NPNZNT5l0H1rsrHidPWxa7EONk8m8Pg+w7vjWaZmALGOQZQSyDEGWHsiSgiwJyNIFWTogSxtkaYEsTZClAbLEIEvkWLSty453tK1Lj+30mlLkbNv6uDTLLddcj/tqUj6dMklrW0+rXMvMylmTeqpJHL3/TdsF2+U6Fvu65ZTf5tX3sdZ4zdZl7akl7787z41aHksMsjRAlgr/x1a21NdsWXYubcv1vDly3pvX43+Qc1D3u0O3o+fQbU/ZOxWUXeNkMm+x9By0DbA0QZYGyBKDLJHH0i3XMrNYNYlRkziJY7JliePV/9lE3OE4Jxzn/BhrBfvqswr+l+f6G2PTXZ9FvXZX8v/yvFdY9HfUYmnd6uew5PveFv8PvZvi3jpu1XYbvS+sJ8stL3LWC98n4fvkx1or2FdvwvfJ9fSpf580yjRfzWZ6LqLXB+17w6aPPWfy1XPZx4H12of9J7La7f1dwf690rj14k/3rdWhpf/N6GZdvXfqr6SeGrK9ntTdXznvsXU6ktbt6OdO03ott1Zs05brttr3+Fq10u8pW9RnV6yZzPck/r8e3RhK/j6ea502asu/j0su+0w/E/YZdvdLnl/FPRIW1z7D7n0aei/fn9mFTlkvn+xzpd9dbWc9vb+9VXGZulKmTOb7kr9sHf1/8ZVRzy8Tz3p31Usqy5OPjKPvqfq+My17JvPaP+TfyjWDrses38WWp21d9ho79WC/aVG55Zp9KtvU31lf26Dm+doQI8++0GNXy3PbrGz8UHfsDr1+r/vK7SukY4I3Jc8du0P7SfjG7tBjhCru6bY4tl2bt1hp7fZYIOVbrsfWcmNrPcSVxf74enDHP1lHPTQqi/3x9eCO+VKF5b56aALqwQydNdZDC1APbhvzOuqhDagHMyQ/cT20a8uvI1dxraPm1IVNHakLm2KQpQGyNEGWFshS9XW6VSxVX2PWKZO0XoPzXV+35Xqca9+92j5l30Pa3mfl0+NhPZ6xPPfcSo+l1afx7FWPgS3P4ul4chZP2/nc8+P8fX86vm2NPFZfe6HuwyraujROVvvwnNbqoO741mlpgywtkKUJsjRAlhhkcdv79ftM29Pc89VwfPRxlnB8FI6PVrGE4yPG8dGfbdy2huOjH2cJx0fh+Gj2W3J8tOyYpwqfTpmkU48lPAfCbwnPgfBbSM+BqPr/fBVLH2Sp+jjiPsuyY8GPOT/M/+/eT2+W23FZ5NmOr8+8lr3kfly3+lNljsFMdce3TksfZOmBLG2QpQWyNEGWBsgSgyyRx1LyOf+ib7A8Bu+H71y9X8lMOl6Opu01ctazflRxyebf8vsXfugzrucPNalHc+pvpdsvVveH9q+qor99Bf8ji/sCyn5+RQXHSW8r6IP7eQV9Kt/l2yx57K/3y851h+XGufNY1GItO9ddt6UBsjRBlhbI0gZZOiBLF2RJQJYUZOmBLH2QZQCy1NdsWdZOY8v12pk+s8Nere+jnqNoH0zLs3Ey9ZqXjdekbUE2FpSeQ9hYUHpMu12k9XreTpHW41x7RrNeP9wr0nr9cL9I+64fal1ZPK0Ld6x7vX6ofWMtno4ZavF0zFB3fDm9XroleVbn25Jndb4jeVbn+rxqq/M9ybM6t7rIy/ALaYezdXU/7Hu2Y2n9bJf9TO66EyeTeYul7XB7AMsAZOmDLD2QJQVZEpClC7J0QJY2yNICWZogSwNkiUGWyLEsa7OpwqdTJuldjyUGWRogSxNkaYEsbZClA7J0QZYEZElBlh7I0gdZBiBL1b/dq1j2QZaqz/fvsyxry7Llvuuf2j70J5s3y61NRds6rO0l9mxb22Cs7WXL816to22nLLOHTYs60jiZzFssbRPZAlj2QZY9kGUAsvRBlh7IkoIsCcjSBVk6IEsbZGmBLE2QpQGyxCBL5FiWtRVV4dMpk/S2xxKDLA2QpQmytECWNsjSAVm6IEsCsqQgSw9k6YMsA5Cl6t/uVSw7IMsuyLIHsuyDLFW3Vd1nWdaeZ8u13c/6Smm/p8izPff5h/lx0T/eur3tyLPtbY9B66iK5yhqnEzmfc9e3gZY9kGWPZBlF2TZAVm2QJYByNIHWXogSwqyJCBLF2TpgCxtkKUFsjRBlgbIEoMskceyUa5lrvdh1MSkUybpDbGUPJb24n5zHdfbXHo/iS3X86RxuY7F/pk45bd59X2sdXPN1mVt9VWMy15zLDVPvdhU9TMkVrFU/RyHVSxVP0thFUsLZKn6mQKrWKp8xsSqli7IUuWzFla1pCBLdc+oWd1S5XNiVrUMQJYKj21WtkxBlk2QZQtk2QZZdkCWXZBlD2TZB1nqa7Ysu7Zjy/V++Mh5b358/AdyzcZ9Np9uR+/JH3vKPqqg7Bonk3mLpddsxgDLPsiyB7Lsgiw7IMs2yLIFsmyCLFOQZQNkGYAsfZClB7KkIEsCsnRBlg7I0gZZWiBLE2RpgCwxyBJ5LCWPAzfLt3FQu5ns3GgoDjPZel1J61hnkbOejRtc8hi/cx0HrSb1qFMmaW0DL3ls4JmOq6bt/iWP7bv4zKRO+WxenyGj429XZUk9sSuIM+86Zc6nu/azWqrYz32pZ4tT8tjIi/3cd8pn8wOJ7z7jogpL6oldQZx51ylzPt21n6sco1PHstRrIVVcmx855bN5vTZvhmGFltQTu+q6tW3nv/1/sXETs9z2xvlizP/Ncssxy/ednbfm0/dSLr0eUkXcqRN34sStO/vwe7Hae2NZpz+92Q//S/bDVqn2q+/ybWyL3Y4VLI62kfj60mu9VmHbFVvssVkbm95XYOkdWc/aKPV32NpQ9XfjsNQyzN7qMZlNd32HHorlqFzL4pjyWGKZ60jqwZbrNZjjch2L79gjp/w2r76PtW5/Qtb9T8i6+wlZG2u2diVPz8cix2znXlV8V1qMumxfj2VOJO26EinLifhPnHLm650Waf0uPSvSerx4LrFsO2ey/ELSp8578tiPnDh5vT0u0lnxOnvYtNi3j8SRybzF0vO3iwotqSd2VZ8Vi7Pss/JE0va7a+9JxGfrdSX9WNZ7KnVoeZdFWj8rz4rXSLZzKcufS/qp85489gsnTl5vL4t0VrzOHjYtPisvxJHJ/EuJnzrmKiypJ3YieXqO9KrM2FfXxxEWM5KYr2R/vPY4ZmU6iv1hcWy7Nj+T/dF36qkKS+qJXcW5Ws0ps3vepudytp57Lhee37bS9LbK57ct6+cfnrl1M4VnboVnbq1iCc/cCs/cWsUSnrkVnrl1n+W+Z27p87X0WrHluff1aX9Xfb6WtQnr87WsfVifrxV5fFU/5yp/3z+/pw+vxdbxlvWaglsmdW14/O51b91e1X2CNU4m874+wUOAZQCy9EGWHsiSgiwJyNIFWTogSxtkaYEsTZClAbLEIIt7jLKsraMKn06ZpEceSwyyNECWJsjSAlnaIEsHZOmCLAnIkoIsPZClD7IMQJaqf7tXsUxAlg2QZQqyVN0Ocp9lWduYLdf2IWvv0fYh60Oo7UPWJ0GfAa/9vCzP+vjpM+Ct31JH8vRZ5/ZqfbG0nc767mg7nfXJ03Y66zej7XTWR8bXTqd15d7Lou10+vx49xkr2k6nfTGt7DqOspVd+0W6z4PW59HvS56VXfsxWdkPJc/KfiR5Vnari7wM/0LaDG1d/Uwce7ajfZnyqYK+mR/067LzmCOnnNrGdwSwTEGWDZBlArIMQZYByNIHWXogSwqyJCBLF2TpgCxtkKUFsjRBlgbIEoMskWNZ1iZchU+nTNKHHksMsjRAlibI0gJZ2iBLB2TpgiwJyFLhPYcrW3ogSx9kGYAsQ5BlArJsgCxTkKXqY71VLMcgS9XtifdZlrWV23Ltf2ntr3qPaeTZnh2r2vr5MdofjW5vO/Js+9Bj0Drad8oye9i0qCONk8m8tsfXHd86LccgyxHIMgVZNkCWCcgyBFkGIEsfZOmBLCnIkoAsXZClA7K0QZYWyNIEWRogSwyy+I6lbblvDBdbdtd92yXfW3/nOYXFWnZ+sw7LsvOb2KkrrVdblv/P/OX2zXLfffXuPfe6npa95PEIFmXXOJnMWyw9b2kALJHHUvLYCLN8G/YbUKt9eN3EHGbSNvJOyXWSb6PrcegYRdpHzBwlj0c6z7fhu46UyKvF1zbgksdoffOQMVr75VoWn5GBxDKXjttqy/X60jrGcF3F2v6ErN01Wyv4XH1Xwb3gc+3DaNNd/zcV9tV+Y+PO2H51x781px5/VPH9rs+q1f2ZT/n3mfVj1fUs3ajdvk88luX/Z/OmTMuOqUp+fvKdxzEWa1lfgHVbGiBLE2RpgSxtkKUDsnRBlgRkSUGWHsjSB1kGIMsQZBmBLGOQZQKy1NdsWdYmZMv1Hi+7pqjn6pFne3ZMpmMT2Q1Qek+Zth3ZfVSxJ96mx7Xlea/WZcnPEVjUpcbJZN5iaRvTFsAyAVnGIMsIZBmCLAOQpQ+y9ECWFGRJQJYuyNIBWdogSwtkaYIsDZAlBlkix6LHjvo8e7vfXo9BI2d7elxq6+f/G/n/qn2//4Nf/+Hf+vXv/ZNf/+Hf+PU/02Ni91qnm9Zj1qbzHrXotbYKrgH/to/1Pq9yrHcdl0HPebpOLB2XwXcepONa6OfCXs2h2wjjzN9vCePMh3HmV7GEcebDOPOrWMI482Gc+fssYZz5MM58GGf+4y1hnPkwzvwqljDOfBhnfhVLGGc+jDN/l0+nTNJhnPmPt4Rx5sM486tYwjjzYZz5VSxhnPkwzvwqljDOfBhn3sppeWGcef44803p/xnGmX+YJYwzH8aZX8USxpkP48yvYgnjzIdx5lextECWMM58GGf+Lp9OmaR945GGceb9ljDOvN8Sxpn3W8I4835LGGfebwnjzPstYZx5vyWMM++3hHHm/Zaq2xPvs9w3zrze2/SQcea/G93eduTZ9qHHoHUUxpkP48wvs4Rx5v2WMM683xLGmfdbwjjzfksYZ95vCePM+y0tkCWMM++3/LaMM9+Ses3Kcb/RY/ma+HXKJG3xnXEM/uY//fv/6Pd/T8YxqMt2Y8929byg6ay3bAyDZePA3/V+7d8Te7YZ7oW/3xLuhQ/3wq9iCffCh3vhV7GEe+HDvfD3WcK98OFe+HAvfLgX/qGWcC98uBd+FUu4Fz7cC7+KJdwLH+6FL8sS7oUP98KvYgn3wod74VexhHvhw73wq1jCvfCf5r3w2u6j7T32qmOgW96WU069F17by+z+b20vs/u/ifek59v61fC2P/L4dzzl1H1tsbPidfawabGvNU4m8xZL27x2AJYpyLIBskxAliHIMgBZ+iBLD2RJQZYEZOmCLB2QpQ2ytECWJsjSAFlikCVyLMvaSKvw6ZRJettjiUGWBsjSBFlaIEsbZOmALF2QJQFZUpClB7L0QZYByDIEWSYgywbIMgVZqj7WW8WyC7JU3Z54n2VZ27Et1z6K1v6q43tGnu25z/TMj9Fej25vO/Jse9tj0Dqq4tmgGieTed9z1rcBll2QZQdkmYIsGyDLBGQZgiwDkKUPsvRAlhRkSUCWLsjSAVnaIEsLZGmCLA2QJQZZfMfStlz7PkTOe9u128fwpeE7Ao+KCst3YLOoLHuovU3a2cS+wPMflP8HCKOvpOljBAA=", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "constructor", @@ -81,7 +83,9 @@ "visibility": "public" } ], - "returnTypes": [] + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "entrypoint", @@ -147,7 +151,9 @@ "visibility": "public" } ], - "returnTypes": [] + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] } diff --git a/yarn-project/aztec.js/src/abis/schnorr_multi_key_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_multi_key_account_contract.json new file mode 100644 index 00000000000..91e3e79f7c7 --- /dev/null +++ b/yarn-project/aztec.js/src/abis/schnorr_multi_key_account_contract.json @@ -0,0 +1,147 @@ +{ + "name": "SchnorrMultiKeyAccount", + "functions": [ + { + "name": "compute_note_hash_and_nullifier", + "functionType": "unconstrained", + "isInternal": false, + "parameters": [ + { + "name": "contract_address", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "nonce", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "storage_slot", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "preimage", + "type": { + "kind": "array", + "length": 3, + "type": { + "kind": "field" + } + }, + "visibility": "private" + } + ], + "returnTypes": [ + { + "kind": "array", + "length": 4, + "type": { + "kind": "field" + } + } + ], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "constructor", + "functionType": "secret", + "isInternal": false, + "parameters": [ + { + "name": "signing_pub_key_x", + "type": { + "kind": "field" + }, + "visibility": "public" + }, + { + "name": "signing_pub_key_y", + "type": { + "kind": "field" + }, + "visibility": "public" + } + ], + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "entrypoint", + "functionType": "secret", + "isInternal": false, + "parameters": [ + { + "name": "payload", + "type": { + "kind": "struct", + "fields": [ + { + "name": "flattened_args_hashes", + "type": { + "kind": "array", + "length": 4, + "type": { + "kind": "field" + } + } + }, + { + "name": "flattened_selectors", + "type": { + "kind": "array", + "length": 4, + "type": { + "kind": "field" + } + } + }, + { + "name": "flattened_targets", + "type": { + "kind": "array", + "length": 4, + "type": { + "kind": "field" + } + } + }, + { + "name": "nonce", + "type": { + "kind": "field" + } + } + ] + }, + "visibility": "public" + }, + { + "name": "signature", + "type": { + "kind": "array", + "length": 64, + "type": { + "kind": "integer", + "sign": "unsigned", + "width": 8 + } + }, + "visibility": "public" + } + ], + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + } + ] +} diff --git a/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json index ad992df887c..6bf169c3b86 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json @@ -6,7 +6,9 @@ "functionType": "secret", "isInternal": false, "parameters": [], - "returnTypes": [] + "returnTypes": [], + "bytecode": "H4sIAAAAAAAA/9XcR2/iUBiFYZJJMr2l996rjW2wp2YyvffeCBOY3v7/JhzFSFG2OSzeK1ngjXUeAfYt3+V/oVCoFPZaW+Nobxwd+fvmeeeB8678/f7WPN/MX6OgFMe1crEWRuF2UMyqaRLESbWUhmmYpMlOMY2iWhqn5ayalYMsjKNaWE+yqB7std591woO2VqZsw+Ssx+ScwCScxCScwiScxiScwSScxSScwyScxyScwKScxKScwqScxqScwaScxaScw6Scx6ScwGScxGScwmScxmScwWScxWScw2Scx2ScwOSM4DkDCE5i5CcESRnDMmZQHKWIDnLkJxpi3K2H8gZHK6FbUZzBjG3G80XIOYjRvNFiLnDaL4EMXcazZch5i6j+QrE3Gs0X4WY+4zmTYi532i+BjEPGM1bEPOg0XwdYh4ymm9AzMNG802IecRovgUxjxrNtyHmMaP5DsQ8bjTfhZgnjOZ7EPOk0XwfYp4ymh9AzNNG80OIecZofgQxzxrNjyHmOaP5CcQ8bzQ/hZgXjOZnEPOi0fwcYl4yml9AzMtG80uIecVofgUxrxrNryHmNaP5DcS8bjS/hZg3jOZ3EHNgNL+HmEOj+QPEXDSaP0LMkdH8CWKOjebPEHNiNFcg5pLRvA0xl43mKsScGs1fIOajRvMOxHzMaK5BzMeN5jrEfMJo/goxnzSav0HMp4zm7xDzaaP5B8R8xmj+CTGfNZp/QcznjObfEPN5o/kPxNxtNP+FmHuM5n8tMPfkr83/cdOeGe0h0Z4K7THQeEH9Z/Un1b9Sf0PPXz2PdH/W/Uq/X32fu/Prpfk1tTdKe4W0d0Z7SbS3QnsNmrX3qs3eahyq3VUtq2o7Veuo2j/Vwqk2TLVSqh1SLY1qS1RrodoDrcVrbVprtVq71Fqe1ra01qO1D60FaG5cc8WaO9VcoubWNNekuZdK49DYXGNVjd00llHfXn1d9f3UF1LfQM9KPTt0L9W9Rb81fff0WewCHFR1DShPAAA=", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "entrypoint", @@ -92,7 +94,9 @@ "visibility": "public" } ], - "returnTypes": [] + "returnTypes": [], + "bytecode": "H4sIAAAAAAAA/+1dB5RUxRKdTSQJknPOSNgm5ygZBESSSGZBJAuIiAhIEhUREZEkYFbMOQtmvxFRUREREXNWJMOvlhp4WxvY2bk9vDo7c879d4q/9lbdru6u917N7Cs5A4E7swf+e8UQYgnx/D5oJwg7G7+3/16Qf96+ChEKE4oQivL/X8jz/xcjFCeUIJTk/7+w5/8vRShNKEMo6/l95Qk5PHYFYVcUdiVhVxZ2FWFXFXY1YVcXdg1hnyPsmsKuJezawq4j7ERhG2HXFXY9YdcXdgNhNxR2I2E3FnYTYTcVdjNhNxd2C2G3FHYrYbcWdhthtxV2O2GfK+z2wu4g7I7C7iTszsLuIuyuwu4m7O7CPk/YPYTdU9i9hH2+sHsL+wJh9xF2X2H3E3Z/YQ8Q9oXCHijsi4Q9SNiDhT1E2EPZtvuD3UdaB068ygdOrH273u0at+varmW7fqsFTqxTuzbterRr0K47u9bs+rJryq4ju3bserFrxK4LuxZs/tuct3luc9vms81hm7c2V1uxDzYPbe7ZfLM5ZvPK5pLNH5szNk9sbth8sDnQnee6B89pL5673jxHfXgu+rHmA1jbgazhINZqCGsS1GeY0Gu4sEcIe6Swk4Q9StijhX2xsMcI+xJhjxX2OGGPF/YEYU8U9iRhTxb2pcKeIuypwp4m7MuEPV3Ylwt7hrCvEPZMYV8p7FnCvkrYs4U9R9hzhX21sOcJe76wFwh7obAXCfsaYS8W9rXCvk7Y1wt7ibBvEPZSYd8o7GXCvknYy4V9s7BXCPsWYa8U9q3CXiXs1cJeI+y1wl4n7NuEvV7YGwKn9kNbQ7UOnHgNC5xY+3a92zVu17Vdy3b9Xhw4sU7t2rTr0a5Bu+7sWrPry64pu47s2rHrxa4Ruy7sWrD5b3Pe5rnNbZvPNodt3tpctfk5J3AiD23u2XyzOWbzyuaSzR+bMzZPbG7YfLA5sITneinP6TKeu+U8Ryt4Llay5qtY2zWs4TrWaj1rYvWxtWg51sPWmscCJ2pKy0WYizIXYy7OXIK5JHMp5tLMZZjLMpdjLs9cgbkicyXmysxVmKsyV2OuzlyD+Rzmmsy1mGsz12FOZDbMdZnref772wl3pKJNff6ZBswNmRsxN2ZuwtyUuRlzc+YWzC2ZWzG3Zm7D3Ja5HfO5zO2ZOzB3ZO7E3Jm5C3NX5m7M3ZnPY+7B3JO5F/P5zL092txJuCsVbS7gn+nD3Je5H3N/5gHMFzIPZL6IeRDzYOYhzEOZhzEPZx7BPJI5iXkU82jmi5nHMF/CPJZ5HPN45gnME5knMU9mvpR5ikebuwn3pKLNVP6ZacyXMU9nvpx5BvMVzDOZr2SexXwV82zmOcxzma9mnsc8n3kB80LmRczXMC9mvpb5OubrmZcw38C8lPlG5mXMNzEv92hzL+G+QPJXDHNr5nqJDevXT2pUN8nUM8MS6zYZ3rhBYv0Gwxs2No1Ng8YNRtZtXK9eUuP6jRs1Gd6kUWITU79ekhnVoEm9UYknXvd7xkoM8+XSz01K/HxAiZ8PKvHzISV+PqzEz0eU+PmoEj8fU+Ln40r8fEKJn08q8fMpJX4+rcTPZ5T4+awSP59T4ufzQD/ltY69B2Fr/hXMtzCvZL6VeRXzauY1zGuZ1zHfxryeeQPzRub7mTcxP8D8IPNDzA8zP8L8KPNjzI8zP8H8JPNTzE8zP8P8LPNzzM8HTl3rvEB4MZD8hZ7DlwI6cu1lJX5uVuLnFiV+vqLEz1eV+PmaEj9fV+LnG0r8fFOJn28F8DXF2TyevR9vz9Y7me9mvpf5BeaXmF9m3sy8hfkV5leZX2N+nfkN5jeZ3wqcOtPfJvwvcOJZUmw6OiaG9zKFgDqW43HeIbxLeI/wPuEDwoeErYSPCNsIHxM+IXxK2E74jPA54QvCDsKXhJ2Erwi7CF8TdhO+IewhfEvYS/iO8D3hB8KPhJ9YpOBzOOuL97ncu8J+T9jvC/sDYX8o7K3C/kjY24T9sbA/Efanwt4u7M+E/bmwvxD2DmF/Keydwv5K2LuE/bWwdwv7G2HvEfa3wt4r7O+E/b2wfxD2j8L+iW3vK465NXNieK9kaybcfewd4Fg7Etzs3VK/zPqZNMq+Es27oLHsXLwH1O9L3+v339Dm/fDHqssxmw+A+u30s371T/ppPgxvrERPzGYrUL+v/Kpf3WR+mo8yP1aiiNlsA+q3y4f6NRyVwk/zcebGapxKzOYToH5f+02/xqn6aT4NfaxGacRstgP12+0n/Rql6af5LLSx6qYTs/kcqN83ftGvUbp+mi8yPtaI08RsdgD12+MH/Rqd1k/zZcbGSsxAzGYnUL9vz7R+iRny03x1+rEaZDBmswuo394zqV/9DPtpvk53rPqjQojZ7Abq992Z0q9RSH6ab9Ieq3GIMZs9QP2+PwP6NRkVsp/m29THSsxEzGYvUL8fIq1fYqb8NN+lHMtkMmbzPVC/HyOp38hM+2l+SD5WvTBiNj8C9fspQvrVHRWWn+anAO5eoveeXbj6/Rwh/RLDexngfTazE6jfL0r0A94nMruA+v2qRD/gfQ6zG6jfb0r0A16nmz1A/X5Xoh/wOtPsBer3hxL9gNdJ5nugfn8q0Q9Y55sfgfr9pUQ/YJ1qfgbq97cS/YB1lvkVqN8/SvQD1gnmd6B++5ToBzznzJ9A/f5Voh9wnzZ/A/Xbr0Q/4D5j9gH1O6BEP+A6McCcMUj9bC9brEdDdN9nYdxYJ/s+fyb8QviV8Bvhd8IfhD8JfxH+JvxD2Ef4l7CfcIBwkHCIcJhwhHA0cKIP9jgHHkOIJcQR4gkJhGyE7IQchJyEXDGBZH2f1hdvX+Avwv5V2L8J+3dh/yHsP4X9l7D/FvY/wt4n7H+FvV/YB4R9UNiHhH1Y2EeEfVTYx4R9XNj2jdeOEXassOOEHS/sBGFnE3Z2YecQdk5h54px3/fpXTNh36sFjlU0W+Sfe2Wm7/MX0Fh2Ln4F6lfM9/r9N7T5LfyxTvZ9/g7Ur7if9fP0ff4R3ljJ+j7/BOpXwq/6ib7PvzI/Voq+z7+B+pX0oX6p9X3+k7mxUu373AfUr5Tf9Euj7/Pf0MdKs+9zP1C/0n7SL52+zwOhjZVu3+dBoH5l/KLfafo+D2V8rNP2fR4G6lfWD/ploO/zSMbGylDf51GgfuXOtH4Z7Ps8dvqxMtz3eRyoX/kzqV8IfZ/2YjHtsULr+4yJwelX4UzpF2LfZ2zaMYfc9xkH1K/iGdAvM32f8anHnKm+zwSgfpUirV8m+z6zpYw5032f2YH6VY6kfmH0feZIHnNYfZ85gfpViZB+4fZ95orB3Uv03rMLV7+qEdIvMbyXAd5nM8WB+lVToh/wPpEpCdSvuhL9gPc5TGmgfjWU6Ae8Tjdlgfqdo0Q/4HWmKQ/Ur6YS/YDXSaYiUL9aSvQD1vmmMlC/2kr0A9appipQvzpK9APWWaY6UL9EJfoB6wRzDlA/o0Q/4DlnagH1q6tEP+A+beoA9aunRD/gPmMMUL/6SvQDrhMDzBmD1M/2ssV6NET3fRbBjXWy7/MscjI3IQ8hLyEf4WxCfkIBQkFCIUJhQhFCUUIxQnFCCUJJQilCaUIZQllCOUJ5QgVCRUIlQmVCFUJVQjVCdUIN0fd5lugLzC3sPMLOK+x8wj5b2PmFXUDYBYVdSNiFhV1E2EWFXUzYxYVdQtglhV1K2KWFXUbYZYVdTtjlhV1B2BWFXUnYlYVdRdhVhV1N2NWFXSPGfd+nd82Eu9eeBbxv3ltJ32fuGMxYdi7yAPW7QEnfZ97wYz7Z95kPqF8fJX2fZ4cXc7K+z/xA/foq6fsskPmYU/R9FgTq109J32ehzMWcat9nYaB+/ZX0fRYJPeY0+z6LAvUboKTvs1hoMafb91kcqN+FSvo+S2Q85tP2fZYE6jdQSd9nqYzFnKG+z9JA/S5S0vdZ5vQxZ7jvsyxQv0FK+j7LpRtzaH2f5YH6DVbS91kh7ZhD7vusCNRviJK+z0qpx5ypvs/KQP2GKun7rJIy5kz3fVYF6jdMSd9nteQxh9X3WR2o33AlfZ81YnD3EnsDn9uMUPLcBnifzfQB6jdSiX7A+0SmH1C/JCX6Ae9zmAFA/UYp0Q94nW4GAvUbrUQ/4HWmGQTU72Il+gGvk8wQoH5jlOgHrPPNMKB+lyjRD1inmhFA/cYq0Q9YZ5kkoH7jlOgHrBPMaKB+45XoBzznzBigfhOU6Afcp81YoH4TlegH3GfMeKB+k5ToB1wnBpgzBqmf7WWL9WgYA9awKG6sk32f55CTNQm1CLUJdQiJBEOoS6hHqE9oQGhIaERoTGhCaEpoRmhOaEFoSWhl77MR2hDaEtoRziW0J3QgdCR0InQmdIkJJOv7PEf0BdYUdi1h1xZ2HWEnCtsIu66w6wm7vrAbCLuhsBsJu7Gwmwi7qbCbCbu5sFsIu6WwWwm7tbDbCLutsNsJ+1xhtxd2B2F3FHYnYXcWdpcY932f3jUT9mdUgffNlyrp+6wZgxnLzkUtoH43Kun7rB1+zCf7PusA9VumpO8zMbyYk/V9GqB+Nynp+6yb+ZhT9H3WA+q3XEnfZ/3MxZxq32cDoH43K+n7bBh6zGn2fTYC6rdCSd9n49BiTrfvswlQv1uU9H02zXjMp+37bAbUb6WSvs/mGYs5Q32fLYD63aqk77Pl6WPOcN9nK6B+q5T0fbZON+bQ+j7bAPVbraTvs23aMYfc99kOqN8aJX2f56Yec6b6PtsD9VurpO+zQ8qYM9332RGo3zolfZ+dksccVt9nZ6B+tynp++wSg7uXuBT43Ga9kuc2wPtsZhlQvw1K9APeJzLLgfptVKIf8D6HWQHU73Yl+gGv081KoH53KNEPeJ1pVgH1u1OJfsDrJLMGqN9dSvQD1vlmHVC/u5XoB6xTzXqgfvco0Q9YZ5mNQP3uVaIfsE4wdwD1u0+JfsBzztwF1O9+JfoB92lzD1C/TUr0A+4z5j6gfg8o0Q+4TgwwZwxSP9vLFuvRMAasYTHcWCf7PruSk90I3QnnEXoQehJ6Ec4n9CZcQOhD6EvoR+hPGEC4kDCQcBFhEGEwYQhhKGEYYThhBGEkIYkwijCacDFhDOGSmECyvs+uoi+wm7C7C/s8YfcQdk9h9xL2+cLuLewLhN1H2H2F3U/Y/YU9QNgXCnugsC8S9iBhDxb2EGEPFfYwYQ8X9ghhjxR2krBHCXu0sC8W9hhhXxLjvu/Tu2bC3Wu7Au+bv6Ok77NbDGYsOxfdgfq9q6Tv87zwYz7Z99kDqN97Svo+e4YXc7K+z15A/d5X0vd5fuZjTtH32Ruo3wdK+j4vyFzMqfZ99gHq96GSvs++ocecZt9nP6B+W5X0ffYPLeZ0+z4HAPX7SEnf54UZj/m0fZ8DgfptU9L3eVHGYs5Q3+cgoH4fK+n7HHz6mDPc9zkEqN8nSvo+h6Ybc2h9n8OA+n2qpO9zeNoxh9z3OQKo33YlfZ8jU485U32fSUD9PlPS9zkqZcyZ7vscDdTvcyV9nxcnjzmsvs8xQP2+UNL3eUkM7l7iO8DnNjuUPLcB3mcz7wH1+1KJfsD7ROYDoH47legHvM9htgL1+0qJfsDrdLMNqN8uJfoBrzPNJ0D9vlaiH/A6yWwH6rdbiX7AOt98DtTvGyX6AetUswOo3x4l+gHrLLMTqN+3SvQD1glmF1C/vUr0A55zZjdQv++U6Afcp80eoH7fK9EPuM+YvUD9flCiH3CdGGDOGKR+tpct1qNhDFjD4rixTvZ9jiUnxxHGEyYQJhImESYTLiVMIUwlTCNcRphOuJwwg3AFYSbhSsIswlWE2YQ5hLmEqwnzCPMJCwgLCYsI1xAWE66NCSTr+xwr+gLHCXu8sCcIe6KwJwl7srAvFfYUYU8V9jRhXybs6cK+XNgzhH2FsGcK+0phzxL2VcKeLew5wp4r7KuFPU/Y84W9QNgLhb1I2NcIe7Gwr41x3/fpXTPh7rVjgffNs2eP/HOvzPR9jovBjGXnYjxQvxy+1++/oc2E8GM+2fc5EahfTj/r5+n7nBRezMn6PicD9cvlV/1E3+elmY85Rd/nFKB+Z/lQv9T6PqdmLuZU+z6nAfXL7Tf90uj7vCz0mNPs+5wO1C+Pn/RLp+/z8tBiTrfvcwZQv7x+0e80fZ9XZDzm0/Z9zgTql88P+mWg7/PKjMWcob7PWUD9zj7T+mWw7/Oq08ec4b7P2UD98p9J/ULo+5yTbsyh9X3OBepX4EzpF2Lf59Vpxxxy3+c8oH4Fz4B+men7nJ96zJnq+1wA1K9QpPXLZN/nwpQxZ7rvcxFQv8KR1C+Mvs9rksccVt/nYqB+RSKkX7h9n9fG4O4leu/Zhatf0QjplxjeywDvs5mcQP2KKdEPeJ/InAXUr7gS/YD3OUweoH4llOgHvE43+YD6lVSiH/A60+QH6ldKiX7A6yRTEKhfaSX6Aet8UxioXxkl+gHrVFMUqF9ZJfoB6yxTHKhfOSX6AesEUxKoX3kl+gHPOVMaqF8FJfoB92lTFqhfRSX6AfcZUx6oXyUl+gHXiQHmjEHqZ3vZYj0axoA1LIEb62Tf53Xk5PWEJYQbCEsJNxKWEW4iLCfcTFhBuIWwknArYRVhNWENYS1hHeE2wnrCBsJGwu2EOwh3Eu4i3E24h3Av4T7C/TGBZH2f14m+wOuFvUTYNwh7qbBvFPYyYd8k7OXCvlnYK4R9i7BXCvtWYa8S9mphrxH2WmGvE/Ztwl4v7A3C3ijs24V9h7DvFPZdwr5b2PcI+15h3yfs+2Pc931610y4e+11wPvm7ZT0fV4fgxnLzsUSoH7nKun7vCH8mE/2fS4F6tdeSd/njeHFnKzvcxlQvw5K+j5vynzMKfo+lwP166ik7/PmzMWcat/nCqB+nZT0fd4Sesxp9n2uBOrXWUnf562hxZxu3+cqoH5dlPR9rs54zKft+1wD1K+rkr7PtRmLOUN9n+uA+nVT0vd52+ljznDf53qgft2V9H1uSDfm0Po+NwL1O09J3+ftacccct/nHUD9eijp+7wz9Zgz1fd5F1C/nkr6Pu9OGXOm+z7vAerXS0nf573JYw6r7/M+oH7nK+n7vD8Gdy+xHfC5TW8lz22A99lMe6B+FyjRD3ifyHQE6tdHiX7A+xymM1C/vkr0A16nm65A/fop0Q94nWm6A/Xrr0Q/4HWS6QHUb4AS/YB1vukF1O9CJfoB61TTG6jfQCX6Aess0weo30VK9APWCaYfUL9BSvQDnnNmAFC/wUr0A+7TZiBQvyFK9APuM2YQUL+hSvQDrhMDzBmD1M/2ssV6NIwBa1gSN9bJvs9N5OQDhAcJDxEeJjxCeJTwGOFxwhOEJwlPEZ4mPEN4lvAc4XnCC4QXCS8RXiZsJmwhvEJ4lfAa4XXCG4Q3CW8R3ib8LyaQrO9zk+gLfEDYDwr7IWE/LOxHhP2osB8T9uPCfkLYTwr7KWE/LexnhP2ssJ8T9vPCfkHYLwr7JWG/LOzNwt4i7FeE/aqwXxP268J+Q9hvCvstYb8t7P/FuO/79K6ZcPfaTcD75rOV9H0+EIMZy87Fg0D95ijp+3wo/JhP9n0+DNRvrpK+z0fCizlZ3+ejQP2uVtL3+VjmY07R9/k4UL95Svo+n8hczKn2fT4J1G++kr7Pp0KPOc2+z6eB+i1Q0vf5TGgxp9v3+SxQv4VK+j6fy3jMp+37fB6o3yIlfZ8vZCzmDPV9vgjU7xolfZ8vnT7mDPd9vgzUb7GSvs/N6cYcWt/nFqB+1yrp+3wl7ZhD7vt8FajfdUr6Pl9LPeZM9X2+DtTveiV9n2+kjDnTfZ9vAvVboqTv863kMYfV9/k2UL8blPR9/i8Gdy9xNvC5zVIlz22A99nMXKB+NyrRD3ifyMwD6rdMiX7A+xxmAVC/m5ToB7xON4uA+i1Xoh/wOtMsBup3sxL9gNdJ5jqgfiuU6Aes880SoH63KNEPWKeapUD9VirRD1hnmWVA/W5Voh+wTjDLgfqtUqIf8JwzK4D6rVaiH3CfNiuB+q1Roh9wnzGrgPqtVaIfcJ0YYM4YpH62ly3Wo2EMWMNSuLFO9n2+Q06+S3iP8D7hA8KHhK2EjwjbCB8TPiF8SthO+IzwOeELwg7Cl4SdhK8IuwhfE3YTviHsIXxL2Ev4jvA94QfCj4SfYgLJ+j7fEX2B7wr7PWG/L+wPhP2hsLcK+yNhbxP2x8L+RNifCnu7sD8T9ufC/kLYO4T9pbB3CvsrYe8S9tfC3i3sb4S9R9jfCnuvsL8T9vfC/kHYPwr7pxj3fZ/eNRPuXvsO8L7580r6Pt+NwYxl5+I9oH4vKOn7fD/8mE/2fX4A1O9FJX2fH4YXc7K+z61A/V5S0vf5UeZjTtH3uQ2o38tK+j4/zlzMqfZ9fgLUb7OSvs9PQ485zb7P7UD9tijp+/wstJjT7fv8HKjfK0r6Pr/IeMyn7fvcAdTvVSV9n19mLOYM9X3uBOr3mpK+z69OH3OG+z53AfV7XUnf59fpxhxa3+duoH5vKOn7/CbtmEPu+9wD1O9NJX2f36Yec6b6PvcC9XtLSd/ndyljznTf5/dA/d5W0vf5Q/KYw+r7/BGo3/+U9H3+FIO7l/g88LnNO0qe2wDvs5kXgfq9q0Q/4H0i8zJQv/eU6Ae8z2G2APV7X4l+wOt08ypQvw+U6Ae8zjSvA/X7UIl+wOsk8yZQv61K9APW+eZtoH4fKdEPWKead4D6bVOiH7DOMu8B9ftYiX7AOsF8ANTvEyX6Ac85sxWo36dK9APu02YbUL/tSvQD7jPmE6B+nynRD7hODDBnDFI/28sW69EwBqxhadxYJ/s+fyYnfyH8SviN8DvhD8KfhL8IfxP+Iewj/EvYTzhAOEg4RDhMOEI4SjhGOM5NfTGEWEIcIZ6QQMhGyE7IQchJyBUbSNb3+bPoC/xF2L8K+zdh/y7sP4T9p7D/Evbfwv5H2PuE/a+w9wv7gLAPCvuQsA8L+4iwjwr7mLCPC9v+j9eOEXassOOEHS/sBGFnE3Z2YecQdk5h54p13/fpXTPh7rU/A++b71fS9/kLsO/zV6B+B5T0ff4G7Pv8HajfQSV9n38A+z7/BOp3SEnf51/Avs+/gfodVtL3+Q+w73MfUL8jSvo+/wX2fe4H6ndUSd/nAWDf50GgfseU9H0eAvZ9Hgbqd1xJ3+cRYN/nUaB+9sLhjOqXwb7PY8C+z+NA/WLOpH4h9H3aC8W0xwqt7zMmFqdf7JnSL8S+z9i0Yw657zMOqF/cGdAvM32f8anHnKm+zwSgfvGR1i+TfZ/ZUsac6b7P7ED9EiKpXxh9nzmSxxxW32dOoH7ZIqRfuH2fuWJx9xL3A5/bZI+QfonhvQzwPps5CNQvhxL9gPeJzGGgfjmV6Ae8z2GOAvXLpUQ/4HW6OQ7U7ywl+gGvM433mitc/XIr0Q94nWTigPrlUaIfsM43CUD98irRD1inmuxA/fIp0Q9YZ5mcQP3OVqIfsE4wZwH1y69EP+A5Z/IA9SugRD/gPm3yAfUrqEQ/4D5j8gP1K6REP+A6McCcMUj96BaTfUxx8oXu+yyDG+tk3+dZ5HBuQh5CXkI+wtmE/IQChIKEQoTChCKEooRihOKEEoSShFKE0oQyhLKEcoTyhAqEioRKhMqEKoSqhGqE6oQasYFkfZ/WF29fYG5h5xF2XmHnE/bZws4v7ALCLijsQsIuLOwiwi4q7GLCLi7sEsIuKexSwi4t7DLCLivscsIuL+wKwq4o7ErCrizsKsKuKuxqwq4u7Bqx7vs+vWsm7HsVsbix6p3p59YZ7PvMHYsZy85FHqB+9X2v339Dm7zhx3yy7zMfUL8GftbP0/d5dngxJ+v7zA/Ur6Ff9RN9nwUyH3OKvs+CQP0a+VC/1Po+C2Uu5lT7PgsD9WvsN/3S6PssEnrMafZ9FgXq18RP+qXT91kstJjT7fssDtSvqV/0O03fZ4mMx3zavs+SQP2a+UG/DPR9lspYzBnq+ywN1K+5kr7PMqePOcN9n2WB+rVQ0vdZLt2YQ+v7LA/Ur6WSvs8Kacccct9nRaB+rZT0fVZKPeZM9X1WBurXWknfZ5WUMWe677MqUL82Svo+qyWPOay+z+pA/doq6fusEYu7l1gP+NymnZLnNsD7bKYBUL9zlegHvE9kGgH1a69EP+B9DtMEqF8HJfoBr9NNM6B+HZXoB7zONC2A+nVSoh/wOsm0AurXWYl+wDrftAHq10WJfsA61bQD6tdViX7AOsu0B+rXTYl+wDrBdATq112JfsBzznQG6neeEv2A+7TpCtSvhxL9gPuM6Q7Ur6cS/YDrxABzxiD1o1tM//WzBV/ovs+yuLFO9n2eQw7XJNQi1CbUIdhADKEuoR6hPqEBoSGhEaExoQmhKaEZoTmhBaEloZW9z0ZoQ2hLaEc4l9Ce0IHQkdCJ0JnQJTaQrO/T+uLtC6wp7FrCri3sOsJOFLYRdl1h1xN2fWE3EHZDYTcSdmNhNxF2U2E3E3ZzYbcQdkthtxJ2a2G3EXZbYbcT9rnCbi/sDsLuKOxOwu4s7C6x7vs+vWsm3L3W5idqrIlK+j5rxmLGsnNRC6jfJCV9n7XDj/lk32cdoH6TlfR9JoYXc7K+TwPU71IlfZ91Mx9zir7PekD9pijp+6yfuZhT7ftsANRvqpK+z4ahx5xm32cjoH7TlPR9Ng4t5nT7PpsA9btMSd9n04zHfNq+z2ZA/aYr6ftsnrGYM9T32QKo3+VK+j5bnj7mDPd9tgLqN0NJ32frdGMOre+zDVC/K5T0fbZNO+aQ+z7bAfWbqaTv89zUY85U32d7oH5XKun77JAy5kz3fXYE6jdLSd9np+Qxh9X32Rmo31VK+j67xOLuJU4EPreZreS5DfA+m5kM1G+OEv2A94nMFKB+c5XoB7zPYaYB9btaiX7A63QzHajfPCX6Aa8zzQygfvOV6Ae8TjIzgfotUKIfsM43s4D6LVSiH7BONbOB+i1Soh+wzjJzgfpdo0Q/YJ1g5gH1W6xEP+A5ZxYA9btWiX7AfdosAup3nRL9gPuMWQzU73ol+gHXiQHmjEHqR7eY/utnC77QfZ/lcGOd7PvsSg53I3QnnEfoQehJ6EU4n9CbcAGhD6EvoR+hP2EA4ULCQMJFhEGEwYQhhKGEYYThhBGEkYQkwijCaMLFhDGES2IDyfo+rS/evsBuwu4u7POE3UPYPYXdS9jnC7u3sC8Qdh9h9xV2P2H3F/YAYV8o7IHCvkjYg4Q9WNhDhD1U2MOEPVzYI4Q9UthJwh4l7NHCvljYY4R9Saz7vs9yAdxea/MTNdYmJX2f3WIxY9m56A7U7wElfZ/nhR/zyb7PHkD9HlTS99kzvJiT9X32Aur3kJK+z/MzH3OKvs/eQP0eVtL3eUHmYk6177MPUL9HlPR99g095jT7PvsB9XtUSd9n/9BiTrfvcwBQv8eU9H1emPGYT9v3ORCo3+NK+j4vyljMGer7HATU7wklfZ+DTx9zhvs+hwD1e1JJ3+fQdGMOre9zGFC/p5T0fQ5PO+aQ+z5HAPV7Wknf58jUY85U32cSUL9nlPR9jkoZc6b7PkcD9XtWSd/nxcljDqvvcwxQv+eU9H1eEou7l7gJ+NzmeSXPbYD32cyDQP1eUKIf8D6ReRio34tK9APe5zCPAvV7SYl+wOt08zhQv5eV6Ae8zjRPAvXbrEQ/4HWSeRqo3xYl+gHrfPMsUL9XlOgHrFPN80D9XlWiH7DOMi8C9XtNiX7AOsG8DNTvdSX6Ac85swWo3xtK9APu0+ZVoH5vKtEPuM+Y14H6vaVEP+A6McCcMUj9Yli3Ddzw+VPgRF/bj8w/MH/P/B3zXuZvmfcwf8O8m/lr5l3MXzHvZP6SeQfzF8yfM3/GvJ35U+ZPmD9m3sb8EfNW5g+ZP2B+n/k95neZ32HOFXOCczLnYM7OnI05gTmeOY45ljmGOcB8nMc/xnyU+QjzYeZDzAeZDzDvZ/6XeR/zP8x/M//F/CfzH8y/M//G/CvzL8w/M9dgf6szV2OuylyFuTJzJeaKzBWYyzOXYy7LXIa5NHMp5pLMJZiLMxdjLspchLkwcyHmgswFmPMzn82cjzkvcx7m3MxnMXdh7szcibkjcwfm9sznMrdjbsvchrk1cyvmlswtmJszN2NuytyEuTFzI+aGzA2Y6zPXY67LbJgTmesw12auxVyT+RzmS5jHMF/MPJp5FHMS80jmEczDmYcxD2UewjyYeRDzRcwDmS9kHsDcn7kfc1/mPswXMPdmPp+5F3NP5h7M5zF3Z+7G3JX5WubFzNcwL2JeyLyAeT7zPOarmecyz2GezXwV8yzmK5lnMl/BPIP5cubpzJcxT2OeyjyF+VLmycyTmCcyT2AezzyOeSzz/cz3Md/LfA/z3cx3Md/JfAfz7cwbmTcwr2e+jXkd81rmNcyrmVcx38q8kvkW5hXMNzMvZ76JeRnzjcxLmW9gXsJ8PfN1zP9jfpv5LeY3md9gfp35NeZXmV9h3sK8mfll5peYX2R+gfl55ueYn2V+hvlp5qeYn2R+gvlx5seYH2V+hPlh5oeYH2R+gHkT80/MPzL/wPw983fMe5m/Zd7D/A3zbuavmXcxf8W8k/lL5h3MXzB/zvwZ83bmT5k/Yf6YeRvzR8xbmT9k/oD5feb3mN9lfoc5V+wJzsmcgzk7czbmBOZ45jjmWOYY5gDzcR7/GPNR5iPMh5kPMR9kPsC8n/lf5n3M/zD/zfwX85/MfzD/zvwb86/MvzD/zFyD/a3OXI25KnMV5srMlZgrMldgLs9cjrkscxnm0sylmEsyl2AuzlyMuShzEebCzIWYCzIXYM7PfDZzPua8zHmYczOfxRz8Pu/g93wHv/87+L3gwe8LD36PePD7xYPfOx78PvLg95S3Zg5+r3nw+86D34Me/H704PemB79PPfg968HvXw9+L3vw+9qD3+Me/H734Pe+B78PPvg98cHvjw9+r3zw++aD30Mf/H764PfWBz/XEvy8S/BzMMHPxwQ/NxP8PE3wczbBz98EP5cT/LzOUObg53uCn/sJfh4o+Dmh4OeHgp8rCn7eKPg5pODnk4KfWwp+nin4Oafg55+Cn4sKfl4q+Dmq4Oergp+7Cn4eK/g5reDnt8oFTrzGkj2OMJ4wgTCRMIkwmXApYQphKmEa4TLCdMLlhBmEKwgzCVcSZhGuIswmzCHMJVxNmEeYT1hAWEhYRLiGsJhwbWwg2SvFda1JDOtVPpDs+jGs0SoEcPcFvs8RwfsCYURdMZDCz0yPVgmo3w85InxfJZNRVw6k6memRqsC1O/HSOuXmLmoqwbS9DPk0aoB9fvpTOiXGHrU1QPp+hnSaDWA+v18pvRLDC3qcwKn9TPDo9UE6vfLmdQvMeNR1wpkyM8MjVYbqN+vZ1q/xIxFXSeQYT9PPxpQv9/8oF/i6aM2gZD8THe0ukD9fveLfonpR10vELKfaY5WH6jfH37SLzHtqBsEMuVnqqM1BOr3p9/0S0w96kaBTPuZYrTGQP3+8qN+iSmjbhIIy89kozUF6ve3X/VLTB51s0DYfp4crTlQv3/8rF/iqahbBCB+/jdaS6B++/yuX+KJqFsFYH6a1kD9/tWgH8UMvM9mvPecwtVvvxL9gPeJzE9A/Q4o0Q94n8P8AtTvoBL9gNfp5jegfoeU6Ae8zjR/APU7rEQ/4HWS+Quo3xEl+gHrfPMPUL+jSvQD1qnmX6B+x5ToB6yzzAGgfseV6AesE8whoH6BnDr0A55z5ghQvxgl+gH3aXMMqF+sEv2A+4zxrrlw9YtToh9wnZhYoH7xEdIv7L8bEIvTD5gzJlL6hdu/1iaA619rC5zXipFcv2FE3S6A6187F6hfpUjvf5mMun0A17/WAahf5TNxfmQi6o4BXP9aJ6B+Vc7U+Rti1J0DuP61LkD9qp7J+iWEqLsGTutnhkfrBtSv2pmu/zIYdfdAhvzM0GjnAfWr7of6OQNR9whk2M/TjtYTqF8Nv1x/nCbqXoGQ/Ex3tPOB+p3jp+u3dKLuHQjZzzRHuwCoX02/Xf+mEXWfQKb8THW0vkD9avnx/kEqUfcLZNrPFKP1B+pX26/3X0TUAwJh+ZlstAuB+tXx8/0rT9QDA2H7eXK0i4D6Jfr9/h9HPSgA8fO/0QYD9TMa7p9S1EMCMD/NUKB+dZXcfwbeZzOVgPef6ynRD3ifyFQB6ldfiX7A+xymGlC/Bkr0A16nmxpA/Roq0Q94nWlqAvVrpEQ/4HWSqQ3Ur7ES/YB1vkkE6tdEiX7AOtXUBerXVIl+wDrL1Afq10yJfsA6wTQE6tdciX7Ac840BurXQol+wH3aNAXq11KJfsB9xjQH6tdKiX7AdWJaAvVrraR/7Xpg/xowZwxSvxgaI4Fge/XsdzZfzxwcf1iAv++OeQTzSOYk5lHMo5kvZh7DfAnzWOZxzOOZJzBPZJ7EPJn5UuYpzFOZpzFfxjyd+XLmGcxXMM9kvpJ5FvNVzLOZ5zDPZb6aeR7zfOYFzAuZFzFfw7yY+Vrm65ivZ17CfAPzUuYbmZcx38S8nPlm5hXMtzCvZL6VeRXzauY1zGuZ1zHfxryeeUMg5fcE/jdvzOOZJzBPZJ7EPJn5UuYpzFOZpzFfxjyd+XLmGcxXMM9kvpJ5FvNVzLOZ5zDPZb6aeR7zfOYFzAuZFzFfw7yY+VrmJbGBZK+g2Zo5MbyXWRKL27duAI5l99SYQMpXDDj+G2Kxe1rwtdQzb/Fi7uwreGZkcxBTQPweqWPeVP4N+stdTJIVFD3ujcCEdRX3jbHwOUpWvPhd04Ankb1+hjv2MmCRpfFDAuHqd1MWKVKzebRbxkXqTcwbAyc4H2E5/dvN4rBGax4LXKfLget0BfAQjdTBj/TZ6+8t0YMfO0m3ODj4V/r84Ldxr1R28CM1jdQmUCrgZhO4NboJYCfpVgebwCqfbwI27lUONoG4wKkE9L78vLhc+llMiZ+FAvjNynJLfr+acm0NYS1hHeE2wnrCBsJGwu2EOwh3Eu4i3E24h3Av4T7C/YRNhAcIDxIeIjxMeITwKOExwuOEJwhPEp4iPE14hvAs4TnC84QXCC8SXiK8TNhM2EJ4hfAq4TXC64Q3CG8S3iK8Tfgf4R3Cu4T3CO8TPiB8SNhK+IiwjfAx4RPCp4TtnvWVj5kuIFJs2jk9aybG82+i4P9vQw9g5z3RwSGRaG+95/DEERDx5uVYskF/b70k+7sSAslf8jBqnYqe1teC/H7EsHHjel465rJhU5M6TJswYuqYiRO86RwcPpjWcamEJ/893iNFdn6f4Pm34H+X3cMx0v/WzOGeJd5zKTG8l/0rRcn0Re9Ja2Pd7J1AH+t+Rj5+Huuw6InhDLG/6CiLbO3Ufin6WetaQBGTNOrE6zNgQfQ5MDFcJ/E6BUn8Bfm4IxJJ/IVI4h0RSOJ1wCT+ApjEOxQl8W0KkvhL8nFnJJL4S5HEOyOQxLcBk/hLYBLvVJTEtytI4q/Ix12RSOKvRBLvikAS3w5M4q+ASbxLURLfoSCJvyYfd0ciib8WSbw7Akl8BzCJvwYm8W5FSXyngiT+hnzcE4kk/kYk8Z4IJPGdwCT+BpjEexQl8XYFSfwt+bg3Ekn8rUjivRFI4u3AJP4WmMR7HSUGWj/vI5RwY14N1O87oH6RetaL9Nnr7/exp95Hn/WGOaadpO9j8eP+AEx+V3H/EAufo2SbU6wYG/mcIuw/DR7r77y0c/NjLP5ZzxAlH+lCzvVPwLkegvx6+EBkDiJg/MkOop+jBxF2kn52cBD94vODyMb9i+ODyO+aBjyJjPTT22gUrp9rgDH/qrCa/9XRJvpbdBPFTtJvDjbR332+idq4f8/C1fwfPq/m7dz84aCaH5YFq/k/gXM9TGE1D4w/2UH0V/Qgwk7SXw4Oor99fhDZuP9WVs2jNQ14Ehnpp7cdP1w/7wLG/I/Cav4fR5vovugmip2kfQ420X99vonauP/NwtX8fp9X83Zu9juo5kdkwWr+AHCuRyis5oHxJzuIDkYPIuwkHXRwEB3y+UFk4z6krJpHahqpTWCvo03gcHQTwE7SYQebwBGfbwI27iNZuBo96vNq1M7NUQfVaFIWrEaPAec6SWE1Cow/2UF0PHoQYSfpuIODyKoTHMuPB5GN2/slCqBxnVajSE0jtQnscrQJxHjmLroJhDnmf5/NjMOPG+vzTcDGHet4E/BzNRoX5++8tHMTF4evRkdnwWo0HjjXoxVWo8D4kx1ECdGDCDtJCQ4Oomw+P4hs3NmUVaPZFFajyM+we/3NHt0EsJOU3cEmkMPnm4CNO0cWrkZz+rwatXOT00E1OiYLVqO5gHM9RmE1mstRNXpW9CDCTtJZDg6i3D4/iGzcuZVVo7kVVqPIL6Px+psnuglgJymPg00gr883ARt33ixcjebzeTVq5yafg2p0bBasRs8GzvVYhdXo2Y6q0fzRgwg7SfkdHEQFfH4Q2bgLKKtG0ZoGPIns9dNPf5JvPXBDLgjckCK1iRZ0tIkWim6i2Ekq5GATLezzTdTGXTgLV/NFfF7N27kp4qCaH58Fq/miwLker7CaL+roICoWPYiwk1TMwUFU3OcHkY27uLJqvriSah74JyvNBuCGXEJhNV/C0SZaMrqJYieppINNtJTPN1Ebd6ksXM2X9nk1b+emtINqfmIWrObLAOd6osJqvoyjg6hs9CDCTlJZBwdROZ8fRDbucsqqeaSm1je7QIILyH6v8bHAib+da3kH807mXITy9PsrcK54/0j1ev6ZDcwbmXcx72bew5yfUJHGqZTKWB/wz3zIvJX5I+ZtzB8z5yZUpnGqeMaqzWPZ32F/5i7+2buZ72G+l/k+5vuZNzE/wPwg80PMDzM/wvwo82PMjzM/wfwk81PMTzM/w/ws83PMzzO/wPwi80vMLzNvZt7C/Arzq8yvMb/O/Abzm8xvMb/N/D/md5jfZX6P+X3myqzrJ2x/ylyDUJX+v2qeuQgusdX8M+X5v63KXIBQnd7X8KxF+/JzEXcO8GCP1GFcOuDmMK4ZPYyxk1TTwWFcy+eHsY27loPDOC6Q7JPyJ19+Xlwu/SyuxM/CAfxmZbklv69NSVGHYBPE7sB1CfUI9QkNCA0JjQiNCU0ITQnNCM0JLQgtCa3smiK0IbQltCOcS2hP6EDoSOhE6EzoQuhK6EboTjiP0IPQk9CLcD6hN+ECQh9CX0I/Qn/CAMKFhIGEiwiDCIMJQwhDCcMIwwkjCCMJSYRRhNGEiwljCJcQxnoWQj5muqhMsWnn9KyZGM+/eTd1+8rmed8aNFcODonEBBojhyeOgIg3byB5AYr5vfXs194EEgLJX/Iwap2KntbXgvx+xLBx43peOuayYVOTOkybMGLqmIkTvOkcHD6Y1nGphCf/Pd4jRXZ+n+D5t+B/l93DMdL/1szhniW1gIVUbCC5vug9KTHOzd4J9LHuOPJxfJzDoieGM8T+Iu/fNE3tl6JvzSUCipjg3zQdByyIxgMTw3USGwVJPIF8nBiJJJ4gknhiBJLYAJN4AjCJJypK4roKkngS+Tg5Ekk8SSTx5AgkcV1gEk8CJvFkRUncUEESX0o+TolEEl8qknhKBJK4ITCJLwUm8RRFSdxIQRJPJR+nRSKJp4oknhaBJG4ETOKpwCSepiiJGytI4svIx+mRSOLLRBJPj0ASNwYm8WXAJJ6uKInHKkjiy8nHGZFI4stFEs+IQBKPBSbx5cAknuEoMdD6eR+hhBtzbaB+VwD1iwtE5lkv0mevvzPjTr2PPusNc0w7STPj8ONeCUx+V3FfGQefI6cdwMjn57Pi/J2Xdm5mxeGf9UxW0gGMnOurgHM9WWEH8FWODqLZ0YMIO0mzHRxEc3x+ENm45zg+iPyuacCTyEg/vY1G4fpZBxjzXIXV/FxHm+jV0U0UO0lXO9hE5/l8E7Vxz8vC1fx8n1fzdm7mO6jmp2TBan4BcK6nKKzmFzg6iBZGDyLsJC10cBAt8vlBZONepKyaX6Skmve244frZxNgzNcorOavcbSJLo5uothJWuxgE73W55uojfvaLFzNX+fzat7OzXUOqvlpWbCavx4419MUVvPXOzqIlkQPIuwkLXFwEN3g84PIxn2DsmoeqWmkNoEZjjaBpdFNADtJSx1sAjf6fBOwcd+YhavRZT6vRu3cLHNQjU7PgtXoTcC5nq6wGr3J0UG0PHoQYSdpuYOD6GafH0Q27puVVaM3K6xGpzjaBFZENwHsJK1wsAnc4vNNwMZ9SxauRlf6vBq1c7PSQTU6IwtWo7cC53qGwmr0VkcH0aroQYSdpFUODqLVPj+IbNyrlVWjqxVWo9McbQJropsAdpLWONgE1vp8E7Bxr83C1eg6n1ejdm7WOahGZ2bBavQ24FzPVFiN3uboIFofPYiwk7TewUG0wecHkY17g7JqdIPCanS6o01gY3QTwE7SRgebwO0+3wRs3Ldn4Wr0Dp9Xo3Zu7nBQjc7KgtXoncC5nqWwGr3T0UF0V/Qgwk7SXQ4Oort9fhDZuO9WVo2iNQ14EtnrZ7hjxwJjrgeM+R7ghhSpTfQeR5vovdFNFDtJ9zrYRO/z+SZq474vC1fz9/u8mrdzc7+Dan52FqzmNwHnerbCan6To4PogehBhJ2kBxwcRA/6/CCycT+orJp/UEk1D/yTlaY+MOaHFFbzDznaRB+ObqLYSXrYwSb6iM83URv3I1m4mn/U59W8nZtHHVTzc7NgNf8YcK7nKqzmH3N0ED0ePYiwk/S4g4PoCZ8fRDbuJ5RV80hNrW92gQQXkP1e42OBE3871/JE5snMuQhP0vunOFe8f6S6Hv9MfeYGzFOYpzFPZ85PeJreP5PKWCP4Z0YyJzGPYh7NfDFzbsKz9P45z1i1eayn+WeaMDdlbsbcnLkFc0vmVsytmdswt2Vux3wuc3vmDswdmTsxd2buwtyVuRtzd+bzmHsw92TuxXw+c2/mC5j7MPdl7sfcn3kA84XMA5kvYh7EPJh5CPNQ5mHMw5mfZR7DfAlzDcLz9P4Fz1wEl1ht/pknmZ9nLkB4kd6/FHdiE/dunugiZFWsm4PA62NiaC8j/+Fl0mFznMNDxA5shba/6CUW2dqbPZtL8IW+zPdOQIhjJYqxzMvAzXAzsFI7XRInhvcy4fg6KvlrRMBREm8hH1/xJjF6JdeKwy+ILexw0LYBtAm4XRDIOF4BLohX43DJENTzVY+eLvLBLoww50duMg2Q87MZOD/zwJfTYW5SKebc6rYlDj/P8/0Vt3z9d/vgFQdxL4jQ7ZNwD+UtwBxH7mcLldx+Aq5rMx94y2iREv2A68QAc8aEo196RRv6Vjdy/b4GPDtdxoy85fs6OGb0+WTn5HUH59OSLHh7/w3gXC9ReHsfGH+y2/tvxp16H729H+aYdpLejMOP+xZwIbmK+604+Bw5vb3vd02rk3/nODg83o6LzPyE6+f/lPj5jhI/3wX6mUBjLKlz6sCwOWXny2rxblwg4DKO98BxNGt7Kg47thcu43gfGEc8z4d8ocZPS4PE8F7m/Tj/+/iBkvX9ITif7LpwlE/G1Vx9GM0nWD5tBV5wad2ftirIp4+U5NM2cD5p3J+2RfMJlk8f4/ysq3V/+lhBPn2iJJ8+BeeTxv3p02g+wfJpO87Pelr3p+0K8ukzJfn0OTifNO5Pn2fhfEI/iA2jOzTFWF9Ea3vzhYLcfFHJXrdDz70sZ3O1Q0E+falkr0M2Iuz0edOJq+eGXynZO3bpOYucrctdCvaOr7Pg3rHbUZMeeg19o+deiLP8/EbBGtqTBdfQt0rW0F491+vO8nOvgjX0XRZcQ98D11CkGmDL4MZK1gD7Q7QBFjtJPzhogP3R582aNu4fHTTAxgVOJaD35efF5dLPEkr8LBLAb1aWc/P7nygpfib8QviV8Bvhd8IfhD8JfxH+JvxD2OdJoHzMOQMpN7ucnlyL8fybdzO0r2ye961BMTrYXP9r7szhiSMg4s0bSP5dKKDfO8L+roRA8pfcxFunoqf1tTi/T5oweVrStKSe04aPGzOiw7QJI6aOmTih3bBx47zJEPwlwaSISyVI+e/xHkGy8/sEz78F/7vsHnb2vQI/AsuQ2IDbL4L4xVGZCPSx7r/k4/64CHybif1FRwOnvrwhtV+K/jDZL4ASIIk/1fkvsJzYD0wM10n8q4IkPkA+HoxEEh8QSXwwAkn8KzCJDwCT+KCiJP5NQRIfIh8PRyKJD4kkPhyBJP4NmMSHgEl8WFES/6UgiY/Y3IpEEh8RSXw0Akn8FzCJjwCT+KiiJP5bQRIfIx+PRyKJj4kkPh6BJP4bmMTHgEl8XFES/6Mgie1le0x8BJLY/iJvEqf2S9FJ/A8wia3/qCSOiXeTGGj9vPduw435J+AmEAvUL1IPmZA+e/2Niz/1PvqQKcwx7STFxePHjQduHq7ijo+Hz5HTp9bIB3cJ8f7OSzs3CfH42+RLlXzdF3KuswHneqnCr/vK5uggyh49iLCTlN3BQZTD5weRjTuH44PI75oGPImM9NPb4RCunz8DN+ScCqv5nI420VzRTRQ7SbkcbKJn+XwTtXGflYWr+dw+r+bt3OR2UM0vy4LVfB7gXC9TWM3ncXQQ5Y0eRNhJyuvgIMrn84PIxp1PWTWfT0k17+0DDtfPfcAN+WyF1fzZjjbR/NFNFDtJ+R1sogV8vonauAtk4Wq+oM+reTs3BR1U88uzYDVfCDjXyxVW84UcHUSFowcRdpIKOziIivj8ILJxF1FWzSM1jdQmgOzT9PpbNLoJYCepqINNoJjPNwEbd7EsXI0W93k1auemuINqdEUWrEZLAOd6hcJqtISjarRk9CDCTlJJBwdRKZ8fRDbuUsqq0VIKq9HjjqrR0tFNADtJpR1sAmV8vgnYuMtk4Wq0rM+rUTs3ZR1UoyuzYDVaDjjXKxVWo+UcVaPlowcRdpLKOziIKvj8ILJxV1BWjVZQWI3GONoEKkY3AewkVXSwCVTy+SZg466UhavRyj6vRu3cVHZQja7KgtVoFeBcr1JYjVZxdBBVjR5E2Emq6uAgqubzg8jGXU1ZNYrWNOBJZK+fYX/3BDDm34EbcnWFfbfVHW2iNaKbKHaSajjYRM/x+SZq4z4nC1fzNX1ezdu5qemgml+TBav5WsC5XqOwmq/l6CCqHT2IsJNU28FBVMfnB5GNu46yar6Okmoe+NdJzB/ADTlRYTWf6GgTNdFNFDtJxsEmWtfnm6iNu24Wrubr+byat3NTz0E1vy4LVvP1gXO9TmE1X9/RQdQgehBhJ6mBg4Oooc8PIht3Q2XVPFJT65tdIEEJ7DfJHQuc+ENPlg8yH2bORWhEP9yYc8X7d9V+55/5g/lP5qPMx5ntg3nL+QlN6H3T+EAgPb3CjbFZfGTmNVw/myvxswV4Q7f5E9ysm3FuNGduwWz/ZF1Let/Kca60VjIHbZT42dZhrrTm3GjD3NaTK+3o/bmOc6W9kjnooMTPjg5zpT3nRgfmjp5c6UTvOzvOlS5K5qCrEj+7OcyVLpwbXZm7eXKlO70/z3Gu9FAyBz2V+NnLYa704NzoydzLkyvn0/vejnPlAiVz0EeJn30d5soFnBt9mPt6cqUfve/vOFcGKJmDC5X4OdBhrgzg3LiQeaAnVy6i94Mc58pgJXMwRImfQx3mymDOjSHMQz25MozeD3ecKyOUzMFIB3MQvOE8gjUfyZyDkETvRznWfrQS7S92qP1o1vxij/Zj6P0ljrUfq0T7cQ61H8uaj/NoP57eT3Cs/UQl2k9yqP1E1nySR/vJ9P5Sx9pPUaL9VIfaT2HNp3q0n0bvL3Os/XQl2l/uUPvprPnlHu1n0PsrHGs/U4n2VzrUfiZrfqVH+1n0/irH2s9Wov0ch9rPZs3neLSfS++vdqz9PCXaz1fi5wIlfi5U4uciJX5eo8TPxUr8vFaJn9cp8fN6JX4uUeLnDUr8XKrEzxuV+LlMiZ83KfFzuRI/b1bi5wolft6ixM+VSvy8VYmfqxxcQ1fn8ZrwtfM+7kWex/Z85gXMC5lbMrdj7sTcnfl85n7MFzEPY05iHsM8nnky8zTmGcyzmOcyL2K+hnkx87XM1zFfz7yE+Qbmpcw3Mi9jvol5OfPNzCuYb2FeyXwr8yrmcwir6f2a+FN94MHnkT+xto34Z1czFyCspffrxP2KWHD+ID+8cxsuF02kPnBTNoBdP8HXes+8xYu5CwSiH7gJacyyLCh63A3xuOR3FfeGePgc/fdptrhAypefF5dLP0sq8bNoAL9ZWc7N7zdSrt1OuINwJ+Euwt2Eewj3Eu4j3E/YRHjAk5f5mG0TjdzscnpyLcbzb97N0L6yed63BsXoYHNNTAiceJgQjCMg4s0bSP5BL9DvHWF/V0Ig+Utu4q1T0dP6WpzfJ02YPC1pWlLPacPHjRnRYdqEEVPHTJzQbti4cd5kCP6SYFLEpRKk/Pd4jyDZ+X2C59+C/112D8fIKFozh7sTbwCWIbGB5CqjV/Qdji4zgD7WfZB8fCjeYckQwxlif9FRFtnaqf1S9IfX7wCUAEmjTrweBJYTDwETw3US36kgiR8mHx+JRBI/LJL4kQgk8Z3AJH4YmMSPKEriuxQk8aPk42ORSOJHRRI/FoEkvguYxI8Ck/gxRUl8n4Ikfpx8fCISSfy4SOInIpDE9wGT+HFgEj+hKInvV5DET5KPT0UiiZ8USfxUBJL4fmASPwlM4qcUJfEmBUn8NPn4TCSS+GmRxM9EIIk3AZP4aWASP+MoMdD6ee/dhhvzRqB+zwL1i9RDJqTPXn+fiz5kwk7Scw4eMj3v84dMNu7nHTxkCnhe6KfWyAd3L8T7Oy/t3LwQj79Nvl7J14si5/pF4FyvV/j1oi86Ooheih5E2El6ycFB9LLPDyIb98uODyK/axrwJDLST2+HQ7h+3g6MebPCan6zo010S3QTxU7SFgeb6Cs+30Rt3K9k4Wr+VZ9X83ZuXnVQzW/MgtX8a8C53qiwmn/N0UH0evQgwk7S6w4Oojd8fhDZuN9QVs2/oaSa9/YBh+vnA8CY31RYzb/paBN9K7qJYifpLQeb6Ns+30Rt3G9n4Wr+fz6v5u3c/M9BNX9HFqzm3wHO9R0Kq/l3HB1E70YPIuwkvevgIHrP5weRjfs9ZdU8UtNIbQJPONoE3o9uAthJet/BJvCBzzcBG/cHWbga/dDn1aidmw8dVKN3ZcFqdCtwru9SWI1udXQQfRQ9iLCT9JGDg2ibzw8iG/c2ZdXoNoXV6FOONoGPo5sAdpI+drAJfOLzTcDG/UkWrkY/9Xk1aufmUwfV6D1ZsBrdDpzrexRWo9sdHUSfRQ8i7CR95uAg+tznB5GN+3Nl1ejnCqvRZxxtAl9ENwHsJH3hYBPY4fNNwMa9IwtXo1/6vBq1c/Olg2r0vixYje4EzvV9CqvRnY4Ooq+iBxF2kr5ycBDt8vlBZOPepawaRWsa8CSy189wx44Fxnw3MOavFfbdfu1oE90d3USxk7TbwSb6jc83URv3N1m4mt/j82rezs0eB9X8pixYzX8LnOtNCqv5bx0dRHujBxF2kvY6OIi+8/lBZOP+Tlk1/52Sah7410nMPcCYv1dYzX/vaBP9IbqJYifpBweb6I8+30Rt3D9m4Wr+J59X83ZufnJQzT+YBav5n4Fz/aDCav5nRwfRL9GDCDtJvzg4iH71+UFk4/5VWTWP1NT6ZhdIUAL7TXL2j50+xPwI82PMuQi/0fvfOVe8f1ftbv6Ze5jvZX6C+SnmZ5jzE/6g93/GBwLp6RVujH/FR2Zew/XzbyV+/gPe0L1/fPcvzo2/mf9htn+ybh+9/9dxruxXMgcHlPh50GGu7OfcOMB80JMrh+j9Yce5ckTJHBxV4ucxh7lyhHPjKPMxT64ct3mS4DZXYhJ0zEGsEj/jEtzlip0rmxuxzHEJp3Ilnt4nOM6VbErmILsSP3M4zJVsnBvZmXN4ciUnvc/lOFfOUjIHuZX4mcdhrpzFuZGbOY8nV/LS+3yOc+VsJXOQX4mfBRzmytmcG/mZC3hypSC9L+Q4VwormYMiSvws6jBXCnNuFGEu6smVYvS+uONcKaFkDko6mIPgDecSrHnJYB1AKEXvSzvWvowS7cs61L4Ma17Wo305el/esfYVlGhf0aH2FVjzih7tK9H7yo61r6JE+6oOta/Cmlf1aF+N3ld3rH0NJdqf41D7Gqz5OR7ta9L7Wo61r61E+zoOta/NmtfxaJ9I741j7esq0b6eQ+3rsub1PNrXp/cNHGvfUIn2jRxq35A1b+TRvjG9b+JY+6ZKtG+mxM/mSvxsocTPlkr8bKXEz9ZK/GyjxM+2Svxsp8TPc5X42V6Jnx2U+NlRiZ+dlPjZWYmfXZT42VWJn92U+NldiZ/nKfGzhxI/ezq4hq7O4/3BfV8PMDfla+lmzM2ZWzDv4587xHycOT74jI05L3NB5mLMpZjLMVdirsZckzmRuT5zY+aWzK2YWzO3YW7L3I75XOb2zB2YOzJ3Yu7M3IW5K3M35u7M5zH3YO4ZvO9J6EXvz0841QcefB65kTX6jblX8Bk2oTe9vyDhxD2NGIc59GMcLIeSfdjD62NiaC8j/6EP6dA3IbkO4fyCFL/QDmyFtr/oJRbZ2n09Cyz4Qn+U1zsBIY6VKMYyfRJwfvXFbS7mdEmcGN7LhOPrqOSvEQFHSdyPfOzvTWL0St4Qj18Q/djhoG0DaBNwuyCQcfQHLogBCbhkCOo5wKOni3ywCyPM+ZGbTAPk/PQFzs/D4I/MhrlJpZhzq1u/BPw8P+KvuOXrv48I93cQ96MR+oh0uIdyP2COI/ezx5R8xBy4rs0jwI+FP65EP+A6McCcMeHol17RFhve+k0xz8j1eyGwqHYZM/JrHQaCY0afT3ZOBjo4n57Ngl/hcRFwrp9V+BUewPiTfYXHIE/nSvQrPMIc007SoAT8uIOBB4WruAcnwOfI6Vd4+F3TtbQab3Pw/U9DlDyCGKrEz2FK/BwO9NMu9Y8bnDowbE7Z+bJaDHfcCjkCHMcV7U7FYcf2wmUcI4FxxPN8yBdq/LQ0SAzvZUYm+N/HJCXrexQ4n+y6cJRPxtVcjYrmEyyfRgMvuLTuT6MV5NPFSvJpDDifNO5PY6L5BMunS3B+1tW6P12iIJ/GKsmnceB80rg/jYvmEyyfxuP8rKd1fxqvIJ8mKMmnieB80rg/TczC+YR+EBtGd2iKsSZFa3szSUFu9lay103Wcy/L2VxNVpBPlyrZ65CNCFN83nTi6rnhVCV7xzQ9Z5GzdTlNwd5xWRbcO6Y7atJDr6HL9dwLcZaflytYQzOy4Bq6Qskamqnnet1Zfs5UsIauzIJraJaSNXSVkppzthI/5yjxc64SP69W4uc8JX7OV+LnAiV+LlTi5yIlfl6jxM/FSvy8Vomf1ynx83olfi5R4ucNSvxcqsTPG5X4uQzsJ/qatRY9u/0qDh/38z7/wocvKeadDuJ+wZ9f+JDCz5uA1+3AuTYv+DxvvqaJ2O0gb5b7fJ/YQzF/6yDum30e93cU8/cO4l7h87jtPcKpDr5w4GWfr2/bhzDFQdyblZwLtwDPBeBcm80+zxv7DHq6g7xZ6fN9wj43vMJB3Lf6PG77rGeWg7hXKbmuWa3EzzVK/FyrxM91Svy8TYmf65X4uUGJnxsj9Aw+MbzXf19ei4r5diUxxwJjvkNJzHHAmO9UEnM8MOa7lMScAIz5biUxZwPGfI+SmN8GxnyvkpivAn6/2X1KYp4NjPl+JTHPAca8SUnMc4ExP6Ak5quBMT+oJOZ5wJgfUhLzfGDMDyuJeQEw5keUxLwQGPOjSmJeBIz5MSUxXwOM+XElMS8GxvyEkpivBcb8pJKYrwPG/JSSmK8Hxvy0kpiXAGN+RknMNwBjflZJzEuBMT+nJOYbgTE/ryTmZcCYX1AS803AmF9UEvNyYMwvKYn5ZmDMLyuJeQUw5s1KYr4FGPMWJTGvBMb8ipKYbwXG/KqSmFcBY35NScyrgTG/riTmNcCY31AS81pgzG8qiXkdMOa3lMR8GzDmt5XEvB4Y8/+UxLwBGPM7SmLeCIz5XSUxZw/gYn5PScw5gDG/ryTmnMCYP1AScy5gzB8qifksYMxblcScGxjzR0pizgOMeZuSmPMCY/5YScz5gDF/oiTms4Exf6ok5vzAmLcribkAMObPlMRcEBjz5w5i3sgcw7Hbz8zYz5DYz1TYzxjY6wVbP9t60tZXtt6w5689j+z+bPcru35tPtv5tfEWIhQmFCEUJRQjFCeUIJQklCKUJpQhlCWUI5QnVCBUJFQiVCZUIVQlVCNUJ9QgnEOoSahFqE2oY7Ug2C8wrWs1JtQn2D+z1JDQiNCY0ITQlNCM0JzQgtCS0Irnpw2hLcF+Pe+5hPaEDoSOhE6EzoQuhK6EboTuhPMIPQg9Cb0I5xN6Ey4g9CH0JfQj9CcMIFxIGEi4iDCIMJgwhDCUMIwwnDCCMJKQRBhFGE24mDCGcAlhLGEcYTxhAmEiYRJhMuFSwhTCVMI0wmWE6YTLCTMIVxBmEq4kzCJcRZhNmEOYS7iaMI8wn7CAsJCwiHANYTHhWsJ1hOsJSwg3EJYSbiQsI9xEWE64mbCCcAthJeFWwirCasIawlrCOsJthPWEDYETeWjnyb7sZ+rsZ8zsZ67sZ5DsZ3LsZ1TsZzbsZxhsT7/tcbc937YH2vYE2x5Z2zNqeyhtT6HtsbM9Z7YHy/Yk2R4d27NiezhsT4N9xm+fedtnwPaZqH1GaJ+Z2WdI9pmKfcZg77nbe9D2nqy9R2nv2dl7WPaejr3HYa/57TWwvSa010j2msHW0LamtDWWrTnsGWzPJLtH2z3LruH/A2kakxsy0AUA", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] } diff --git a/yarn-project/aztec.js/src/account/account.ts b/yarn-project/aztec.js/src/account/account.ts new file mode 100644 index 00000000000..1e4091406a0 --- /dev/null +++ b/yarn-project/aztec.js/src/account/account.ts @@ -0,0 +1,112 @@ +import { Fr, PublicKey, getContractDeploymentInfo } from '@aztec/circuits.js'; +import { AztecRPC, PrivateKey } from '@aztec/types'; + +import { AccountWallet, ContractDeployer, WaitOpts, Wallet, generatePublicKey } from '../index.js'; +import { CompleteAddress, isCompleteAddress } from './complete_address.js'; +import { DeployAccountSentTx } from './deploy_account_sent_tx.js'; +import { AccountContract, Salt } from './index.js'; + +/** + * Manages a user account. Provides methods for calculating the account's address, deploying the account contract, + * and creating and registering the user wallet in the RPC server. + */ +export class Account { + /** Deployment salt for the account contract. */ + public readonly salt?: Fr; + + private completeAddress?: CompleteAddress; + private encryptionPublicKey?: PublicKey; + + constructor( + private rpc: AztecRPC, + private encryptionPrivateKey: PrivateKey, + private accountContract: AccountContract, + saltOrAddress?: Salt | CompleteAddress, + ) { + if (isCompleteAddress(saltOrAddress)) { + this.completeAddress = saltOrAddress; + } else { + this.salt = saltOrAddress ? new Fr(saltOrAddress) : Fr.random(); + } + } + + protected async getEncryptionPublicKey() { + if (!this.encryptionPublicKey) { + this.encryptionPublicKey = await generatePublicKey(this.encryptionPrivateKey); + } + return this.encryptionPublicKey; + } + + /** + * Gets the calculated complete address associated with this account. + * Does not require the account to be deployed or registered. + * @returns The address, partial address, and encryption public key. + */ + public async getCompleteAddress(): Promise { + if (!this.completeAddress) { + const encryptionPublicKey = await generatePublicKey(this.encryptionPrivateKey); + this.completeAddress = await getContractDeploymentInfo( + this.accountContract.getContractAbi(), + await this.accountContract.getDeploymentArgs(), + this.salt!, + encryptionPublicKey, + ); + } + return this.completeAddress; + } + + /** + * Returns a Wallet instance associated with this account. Use it to create Contract + * instances to be interacted with from this account. + * @returns A Wallet instance. + */ + public async getWallet(): Promise { + const nodeInfo = await this.rpc.getNodeInfo(); + const completeAddress = await this.getCompleteAddress(); + const account = await this.accountContract.getEntrypoint(completeAddress, nodeInfo); + return new AccountWallet(this.rpc, account); + } + + /** + * Registers this account in the RPC server and returns the associated wallet. Registering + * the account on the RPC server is required for managing private state associated with it. + * Use the returned wallet to create Contract instances to be interacted with from this account. + * @returns A Wallet instance. + */ + public async register(): Promise { + const { address, partialAddress } = await this.getCompleteAddress(); + await this.rpc.addAccount(this.encryptionPrivateKey, address, partialAddress); + return this.getWallet(); + } + + /** + * Deploys the account contract that backs this account. + * Uses the salt provided in the constructor or a randomly generated one. + * Note that if the Account is constructed with an explicit complete address + * it is assumed that the account contract has already been deployed and this method will throw. + * Registers the account in the RPC server before deploying the contract. + * @returns A SentTx object that can be waited to get the associated Wallet. + */ + public async deploy(): Promise { + if (!this.salt) throw new Error(`Cannot deploy account contract without known salt.`); + const wallet = await this.register(); + const encryptionPublicKey = await this.getEncryptionPublicKey(); + const deployer = new ContractDeployer(this.accountContract.getContractAbi(), this.rpc, encryptionPublicKey); + const args = await this.accountContract.getDeploymentArgs(); + const sentTx = deployer.deploy(...args).send({ contractAddressSalt: this.salt }); + return new DeployAccountSentTx(wallet, sentTx.getTxHash()); + } + + /** + * Deploys the account contract that backs this account and awaits the tx to be mined. + * Uses the salt provided in the constructor or a randomly generated one. + * Note that if the Account is constructed with an explicit complete address + * it is assumed that the account contract has already been deployed and this method will throw. + * Registers the account in the RPC server before deploying the contract. + * @param opts - Options to wait for the tx to be mined. + * @returns A Wallet instance. + */ + public async waitDeploy(opts: WaitOpts): Promise { + return (await this.deploy()).getWallet(opts); + } +} diff --git a/yarn-project/aztec.js/src/account/complete_address.ts b/yarn-project/aztec.js/src/account/complete_address.ts new file mode 100644 index 00000000000..8fcc014a99d --- /dev/null +++ b/yarn-project/aztec.js/src/account/complete_address.ts @@ -0,0 +1,18 @@ +import { AztecAddress, PartialContractAddress, PublicKey } from '@aztec/circuits.js'; + +/** Address and preimages associated with an account. */ +export type CompleteAddress = { + /** Address of an account. Derived from the partial address and public key. */ + address: AztecAddress; + /** Partial address of the account. Required for deriving the address from the encryption public key. */ + partialAddress: PartialContractAddress; + /** Encryption public key associated with this address. */ + publicKey: PublicKey; +}; + +/** Returns whether the argument looks like a CompleteAddress. */ +export function isCompleteAddress(obj: any): obj is CompleteAddress { + if (!obj) return false; + const maybe = obj as CompleteAddress; + return !!maybe.address && !!maybe.partialAddress && !!maybe.publicKey; +} diff --git a/yarn-project/aztec.js/src/account/contract/ecdsa_account_contract.ts b/yarn-project/aztec.js/src/account/contract/ecdsa_account_contract.ts new file mode 100644 index 00000000000..11ea1931ca7 --- /dev/null +++ b/yarn-project/aztec.js/src/account/contract/ecdsa_account_contract.ts @@ -0,0 +1,28 @@ +import { Ecdsa } from '@aztec/circuits.js/barretenberg'; +import { ContractAbi } from '@aztec/foundation/abi'; +import { NodeInfo, PrivateKey } from '@aztec/types'; + +import EcdsaAccountContractAbi from '../../abis/ecdsa_account_contract.json' assert { type: 'json' }; +import { CompleteAddress } from '../complete_address.js'; +import { StoredKeyAccountEntrypoint } from '../entrypoint/stored_key_account_entrypoint.js'; +import { AccountContract } from './index.js'; + +/** + * Account contract that authenticates transactions using ECDSA signatures + * verified against a secp256k1 public key stored in an immutable encrypted note. + */ export class EcdsaAccountContract implements AccountContract { + constructor(private signingPrivateKey: PrivateKey) {} + + public async getDeploymentArgs() { + const signingPublicKey = await Ecdsa.new().then(e => e.computePublicKey(this.signingPrivateKey)); + return [signingPublicKey.subarray(0, 32), signingPublicKey.subarray(32, 64)]; + } + + public async getEntrypoint({ address }: CompleteAddress, { chainId, version }: NodeInfo) { + return new StoredKeyAccountEntrypoint(address, this.signingPrivateKey, await Ecdsa.new(), chainId, version); + } + + public getContractAbi(): ContractAbi { + return EcdsaAccountContractAbi as ContractAbi; + } +} diff --git a/yarn-project/aztec.js/src/account/contract/index.ts b/yarn-project/aztec.js/src/account/contract/index.ts new file mode 100644 index 00000000000..6f267ff33d9 --- /dev/null +++ b/yarn-project/aztec.js/src/account/contract/index.ts @@ -0,0 +1,26 @@ +import { ContractAbi } from '@aztec/foundation/abi'; +import { NodeInfo } from '@aztec/types'; + +import { Entrypoint } from '../index.js'; +import { CompleteAddress } from './../complete_address.js'; + +export * from './ecdsa_account_contract.js'; +export * from './schnorr_account_contract.js'; +export * from './single_key_account_contract.js'; + +/** + * An account contract instance. Knows its ABI, deployment arguments, and to create transaction execution + * requests out of function calls through an entrypoint. + */ +export interface AccountContract { + /** Returns the ABI of this account contract. */ + getContractAbi(): ContractAbi; + /** Returns the deployment arguments for this instance. */ + getDeploymentArgs(): Promise; + /** + * Creates an entrypoint for creating transaction execution requests for this account contract. + * @param address - Complete address of the deployed account contract. + * @param nodeInfo - Chain id and protocol version where the account contract is deployed. + */ + getEntrypoint(address: CompleteAddress, nodeInfo: NodeInfo): Promise; +} diff --git a/yarn-project/aztec.js/src/account/contract/schnorr_account_contract.ts b/yarn-project/aztec.js/src/account/contract/schnorr_account_contract.ts new file mode 100644 index 00000000000..9aac50b6c1e --- /dev/null +++ b/yarn-project/aztec.js/src/account/contract/schnorr_account_contract.ts @@ -0,0 +1,29 @@ +import { Schnorr } from '@aztec/circuits.js/barretenberg'; +import { ContractAbi } from '@aztec/foundation/abi'; +import { NodeInfo, PrivateKey } from '@aztec/types'; + +import SchnorrMultiKeyAccountContractAbi from '../../abis/schnorr_multi_key_account_contract.json' assert { type: 'json' }; +import { CompleteAddress } from '../complete_address.js'; +import { StoredKeyAccountEntrypoint } from '../entrypoint/stored_key_account_entrypoint.js'; +import { AccountContract } from './index.js'; + +/** + * Account contract that authenticates transactions using Schnorr signatures + * verified against a Grumpkin public key stored in an immutable encrypted note. + */ +export class SchnorrAccountContract implements AccountContract { + constructor(private signingPrivateKey: PrivateKey) {} + + public async getDeploymentArgs() { + const signingPublicKey = await Schnorr.new().then(e => e.computePublicKey(this.signingPrivateKey)); + return [signingPublicKey.x, signingPublicKey.y]; + } + + public async getEntrypoint({ address }: CompleteAddress, { chainId, version }: NodeInfo) { + return new StoredKeyAccountEntrypoint(address, this.signingPrivateKey, await Schnorr.new(), chainId, version); + } + + public getContractAbi(): ContractAbi { + return SchnorrMultiKeyAccountContractAbi as ContractAbi; + } +} diff --git a/yarn-project/aztec.js/src/account/contract/single_key_account_contract.ts b/yarn-project/aztec.js/src/account/contract/single_key_account_contract.ts new file mode 100644 index 00000000000..f886ad52db6 --- /dev/null +++ b/yarn-project/aztec.js/src/account/contract/single_key_account_contract.ts @@ -0,0 +1,35 @@ +import { Schnorr } from '@aztec/circuits.js/barretenberg'; +import { ContractAbi } from '@aztec/foundation/abi'; +import { NodeInfo, PrivateKey } from '@aztec/types'; + +import SchnorrSingleKeyAccountContractAbi from '../../abis/schnorr_single_key_account_contract.json' assert { type: 'json' }; +import { CompleteAddress } from '../complete_address.js'; +import { SingleKeyAccountEntrypoint } from '../entrypoint/single_key_account_entrypoint.js'; +import { AccountContract } from './index.js'; + +/** + * Account contract that authenticates transactions using Schnorr signatures verified against + * the note encryption key, relying on a single private key for both encryption and authentication. + */ +export class SingleKeyAccountContract implements AccountContract { + constructor(private encryptionPrivateKey: PrivateKey) {} + + public getDeploymentArgs() { + return Promise.resolve([]); + } + + public async getEntrypoint({ address, partialAddress }: CompleteAddress, { chainId, version }: NodeInfo) { + return new SingleKeyAccountEntrypoint( + address, + partialAddress, + this.encryptionPrivateKey, + await Schnorr.new(), + chainId, + version, + ); + } + + public getContractAbi(): ContractAbi { + return SchnorrSingleKeyAccountContractAbi as ContractAbi; + } +} diff --git a/yarn-project/aztec.js/src/account/deploy_account_sent_tx.ts b/yarn-project/aztec.js/src/account/deploy_account_sent_tx.ts new file mode 100644 index 00000000000..86a95074fab --- /dev/null +++ b/yarn-project/aztec.js/src/account/deploy_account_sent_tx.ts @@ -0,0 +1,39 @@ +import { FieldsOf } from '@aztec/circuits.js'; +import { TxHash, TxReceipt } from '@aztec/types'; + +import { SentTx, WaitOpts, Wallet } from '../index.js'; + +/** Extends a transaction receipt with a wallet instance for the newly deployed contract. */ +export type DeployAccountTxReceipt = FieldsOf & { + /** Wallet that corresponds to the newly deployed account contract. */ + wallet: Wallet; +}; + +/** + * A deployment transaction for an account contract sent to the network, extending SentTx with methods to get the resulting wallet. + */ +export class DeployAccountSentTx extends SentTx { + constructor(private wallet: Wallet, txHashPromise: Promise) { + super(wallet, txHashPromise); + } + + /** + * Awaits for the tx to be mined and returns the contract instance. Throws if tx is not mined. + * @param opts - Options for configuring the waiting for the tx to be mined. + * @returns The deployed contract instance. + */ + public async getWallet(opts?: WaitOpts): Promise { + const receipt = await this.wait(opts); + return receipt.wallet; + } + + /** + * Awaits for the tx to be mined and returns the receipt along with a wallet instance. Throws if tx is not mined. + * @param opts - Options for configuring the waiting for the tx to be mined. + * @returns The transaction receipt with the wallet for the deployed account contract. + */ + public async wait(opts?: WaitOpts): Promise { + const receipt = await super.wait(opts); + return { ...receipt, wallet: this.wallet }; + } +} diff --git a/yarn-project/aztec.js/src/account/entrypoint/entrypoint_collection.ts b/yarn-project/aztec.js/src/account/entrypoint/entrypoint_collection.ts new file mode 100644 index 00000000000..1779f002b1a --- /dev/null +++ b/yarn-project/aztec.js/src/account/entrypoint/entrypoint_collection.ts @@ -0,0 +1,31 @@ +import { AztecAddress } from '@aztec/circuits.js'; +import { FunctionCall, TxExecutionRequest } from '@aztec/types'; + +import { CreateTxRequestOpts, Entrypoint } from './index.js'; + +/** + * An entrypoint that groups together multiple concrete entrypoints. + * Delegates to the registered entrypoints based on the requested origin. + */ +export class EntrypointCollection implements Entrypoint { + private entrypoints: Map = new Map(); + + /** + * Registers an entrypoint against an aztec address + * @param addr - The aztec address agianst which to register the implementation. + * @param impl - The entrypoint to be registered. + */ + public registerAccount(addr: AztecAddress, impl: Entrypoint) { + this.entrypoints.set(addr.toString(), impl); + } + + public createTxExecutionRequest( + executions: FunctionCall[], + opts: CreateTxRequestOpts = {}, + ): Promise { + const defaultAccount = this.entrypoints.values().next().value as Entrypoint; + const impl = opts.origin ? this.entrypoints.get(opts.origin.toString()) : defaultAccount; + if (!impl) throw new Error(`No entrypoint registered for ${opts.origin}`); + return impl.createTxExecutionRequest(executions, opts); + } +} diff --git a/yarn-project/aztec.js/src/account_impl/entrypoint_payload.ts b/yarn-project/aztec.js/src/account/entrypoint/entrypoint_payload.ts similarity index 100% rename from yarn-project/aztec.js/src/account_impl/entrypoint_payload.ts rename to yarn-project/aztec.js/src/account/entrypoint/entrypoint_payload.ts diff --git a/yarn-project/aztec.js/src/account_impl/index.ts b/yarn-project/aztec.js/src/account/entrypoint/index.ts similarity index 58% rename from yarn-project/aztec.js/src/account_impl/index.ts rename to yarn-project/aztec.js/src/account/entrypoint/index.ts index 795ec3fb9cb..7ec15f81187 100644 --- a/yarn-project/aztec.js/src/account_impl/index.ts +++ b/yarn-project/aztec.js/src/account/entrypoint/index.ts @@ -1,9 +1,9 @@ import { AztecAddress } from '@aztec/circuits.js'; import { FunctionCall, TxExecutionRequest } from '@aztec/types'; -export * from './account_collection.js'; -export * from './single_key_account_contract.js'; -export * from './stored_key_account_contract.js'; +export * from './entrypoint_collection.js'; +export * from './single_key_account_entrypoint.js'; +export * from './stored_key_account_entrypoint.js'; /** Options for creating a tx request out of a set of function calls. */ export type CreateTxRequestOpts = { @@ -11,14 +11,11 @@ export type CreateTxRequestOpts = { origin?: AztecAddress; }; -/** Represents an implementation for a user account contract. Knows how to encode and sign a tx for that particular implementation. */ -export interface AccountImplementation { - /** - * Returns the address for the account contract used by this implementation. - * @returns The address. - */ - getAddress(): AztecAddress; - +/** + * Represents a transaction entrypoint in an account contract. + * Knows how to assemble a transaction execution request given a set of function calls. + */ +export interface Entrypoint { /** * Generates an authenticated request out of set of intents * @param executions - The execution intents to be run. diff --git a/yarn-project/aztec.js/src/account_impl/single_key_account_contract.ts b/yarn-project/aztec.js/src/account/entrypoint/single_key_account_entrypoint.ts similarity index 86% rename from yarn-project/aztec.js/src/account_impl/single_key_account_contract.ts rename to yarn-project/aztec.js/src/account/entrypoint/single_key_account_entrypoint.ts index e37bbb1f85e..2126f26a027 100644 --- a/yarn-project/aztec.js/src/account_impl/single_key_account_contract.ts +++ b/yarn-project/aztec.js/src/account/entrypoint/single_key_account_entrypoint.ts @@ -12,18 +12,18 @@ import { FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/types' import partition from 'lodash.partition'; -import SchnorrSingleKeyAccountContractAbi from '../abis/schnorr_single_key_account_contract.json' assert { type: 'json' }; -import { generatePublicKey } from '../index.js'; -import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from '../utils/defaults.js'; +import SchnorrSingleKeyAccountContractAbi from '../../abis/schnorr_single_key_account_contract.json' assert { type: 'json' }; +import { generatePublicKey } from '../../index.js'; +import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from '../../utils/defaults.js'; import { buildPayload, hashPayload } from './entrypoint_payload.js'; -import { AccountImplementation, CreateTxRequestOpts } from './index.js'; +import { CreateTxRequestOpts, Entrypoint } from './index.js'; /** * Account contract implementation that uses a single key for signing and encryption. This public key is not * stored in the contract, but rather verified against the contract address. Note that this approach is not * secure and should not be used in real use cases. */ -export class SingleKeyAccountContract implements AccountImplementation { +export class SingleKeyAccountEntrypoint implements Entrypoint { constructor( private address: AztecAddress, private partialContractAddress: PartialContractAddress, @@ -33,10 +33,6 @@ export class SingleKeyAccountContract implements AccountImplementation { private version: number = DEFAULT_VERSION, ) {} - getAddress(): AztecAddress { - return this.address; - } - async createTxExecutionRequest( executions: FunctionCall[], opts: CreateTxRequestOpts = {}, diff --git a/yarn-project/aztec.js/src/account_impl/stored_key_account_contract.ts b/yarn-project/aztec.js/src/account/entrypoint/stored_key_account_entrypoint.ts similarity index 87% rename from yarn-project/aztec.js/src/account_impl/stored_key_account_contract.ts rename to yarn-project/aztec.js/src/account/entrypoint/stored_key_account_entrypoint.ts index ee22a6c3f53..620ee392680 100644 --- a/yarn-project/aztec.js/src/account_impl/stored_key_account_contract.ts +++ b/yarn-project/aztec.js/src/account/entrypoint/stored_key_account_entrypoint.ts @@ -6,16 +6,16 @@ import { FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/types' import partition from 'lodash.partition'; -import EcdsaAccountContractAbi from '../abis/ecdsa_account_contract.json' assert { type: 'json' }; -import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from '../utils/defaults.js'; +import EcdsaAccountContractAbi from '../../abis/ecdsa_account_contract.json' assert { type: 'json' }; +import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from '../../utils/defaults.js'; import { buildPayload, hashPayload } from './entrypoint_payload.js'; -import { AccountImplementation, CreateTxRequestOpts } from './index.js'; +import { CreateTxRequestOpts, Entrypoint } from './index.js'; /** * Account contract implementation that keeps a signing public key in storage, and is retrieved on * every new request in order to validate the payload signature. */ -export class StoredKeyAccountContract implements AccountImplementation { +export class StoredKeyAccountEntrypoint implements Entrypoint { private log: DebugLogger; constructor( @@ -28,10 +28,6 @@ export class StoredKeyAccountContract implements AccountImplementation { this.log = createDebugLogger('aztec:client:accounts:stored_key'); } - getAddress(): AztecAddress { - return this.address; - } - async createTxExecutionRequest( executions: FunctionCall[], opts: CreateTxRequestOpts = {}, diff --git a/yarn-project/aztec.js/src/account/index.ts b/yarn-project/aztec.js/src/account/index.ts new file mode 100644 index 00000000000..0d81f73c575 --- /dev/null +++ b/yarn-project/aztec.js/src/account/index.ts @@ -0,0 +1,67 @@ +import { AztecRPC, PrivateKey } from '@aztec/types'; + +import { Fr } from '../index.js'; +import { Account } from './account.js'; +import { CompleteAddress } from './complete_address.js'; +import { EcdsaAccountContract } from './contract/ecdsa_account_contract.js'; +import { SchnorrAccountContract } from './contract/schnorr_account_contract.js'; +import { SingleKeyAccountContract } from './contract/single_key_account_contract.js'; + +export { Account } from './account.js'; +export * from './contract/index.js'; +export * from './entrypoint/index.js'; +export { CompleteAddress }; + +/** A contract deployment salt. */ +export type Salt = Fr | number | bigint; + +/** + * Creates an Account that relies on an ECDSA signing key for authentication. + * @param rpc - An AztecRPC server instance. + * @param encryptionPrivateKey - Grumpkin key used for note encryption. + * @param signingPrivateKey - Secp256k1 key used for signing transactions. + * @param saltOrAddress - Deployment salt or complete address if account contract is already deployed. + */ +export function getEcdsaAccount( + rpc: AztecRPC, + encryptionPrivateKey: PrivateKey, + signingPrivateKey: PrivateKey, + saltOrAddress?: Salt | CompleteAddress, +): Account { + return new Account(rpc, encryptionPrivateKey, new EcdsaAccountContract(signingPrivateKey), saltOrAddress); +} + +/** + * Creates an Account that relies on a Grumpkin signing key for authentication. + * @param rpc - An AztecRPC server instance. + * @param encryptionPrivateKey - Grumpkin key used for note encryption. + * @param signingPrivateKey - Grumpkin key used for signing transactions. + * @param saltOrAddress - Deployment salt or complete address if account contract is already deployed. + */ +export function getSchnorrAccount( + rpc: AztecRPC, + encryptionPrivateKey: PrivateKey, + signingPrivateKey: PrivateKey, + saltOrAddress?: Salt | CompleteAddress, +): Account { + return new Account(rpc, encryptionPrivateKey, new SchnorrAccountContract(signingPrivateKey), saltOrAddress); +} + +/** + * Creates an Account that uses the same Grumpkin key for encryption and authentication. + * @param rpc - An AztecRPC server instance. + * @param encryptionAndSigningPrivateKey - Grumpkin key used for note encryption and signing transactions. + * @param saltOrAddress - Deployment salt or complete address if account contract is already deployed. + */ +export function getUnsafeSchnorrAccount( + rpc: AztecRPC, + encryptionAndSigningPrivateKey: PrivateKey, + saltOrAddress?: Salt | CompleteAddress, +): Account { + return new Account( + rpc, + encryptionAndSigningPrivateKey, + new SingleKeyAccountContract(encryptionAndSigningPrivateKey), + saltOrAddress, + ); +} diff --git a/yarn-project/aztec.js/src/account_impl/account_collection.ts b/yarn-project/aztec.js/src/account_impl/account_collection.ts deleted file mode 100644 index de1ad92c439..00000000000 --- a/yarn-project/aztec.js/src/account_impl/account_collection.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { AztecAddress } from '@aztec/circuits.js'; -import { FunctionCall, TxExecutionRequest } from '@aztec/types'; - -import { AccountImplementation, CreateTxRequestOpts } from './index.js'; - -/** - * A concrete account implementation that manages multiple accounts. - */ -export class AccountCollection implements AccountImplementation { - private accounts: Map = new Map(); - - /** - * Registers an account implementation against an aztec address - * @param addr - The aztec address agianst which to register the implementation. - * @param impl - The account implementation to be registered. - */ - public registerAccount(addr: AztecAddress, impl: AccountImplementation) { - this.accounts.set(addr.toString(), impl); - } - - getAddress(): AztecAddress { - if (!this.accounts) throw new Error(`No accounts registered`); - return AztecAddress.fromString(this.accounts.keys().next().value as string); - } - - public createTxExecutionRequest( - executions: FunctionCall[], - opts: CreateTxRequestOpts = {}, - ): Promise { - const sender = opts.origin ?? this.getAddress(); - const impl = this.accounts.get(sender.toString()); - if (!impl) throw new Error(`No account implementation registered for ${sender}`); - return impl.createTxExecutionRequest(executions, opts); - } -} diff --git a/yarn-project/aztec.js/src/aztec_rpc_client/wallet.ts b/yarn-project/aztec.js/src/aztec_rpc_client/wallet.ts index 093f8de01ab..a892613850d 100644 --- a/yarn-project/aztec.js/src/aztec_rpc_client/wallet.ts +++ b/yarn-project/aztec.js/src/aztec_rpc_client/wallet.ts @@ -14,12 +14,12 @@ import { TxReceipt, } from '@aztec/types'; -import { AccountImplementation, CreateTxRequestOpts } from '../account_impl/index.js'; +import { CreateTxRequestOpts, Entrypoint } from '../account/entrypoint/index.js'; /** * The wallet interface. */ -export type Wallet = AccountImplementation & AztecRPC; +export type Wallet = Entrypoint & AztecRPC; /** * A base class for Wallet implementations @@ -27,7 +27,6 @@ export type Wallet = AccountImplementation & AztecRPC; export abstract class BaseWallet implements Wallet { constructor(protected readonly rpc: AztecRPC) {} - abstract getAddress(): AztecAddress; abstract createTxExecutionRequest(execs: FunctionCall[], opts?: CreateTxRequestOpts): Promise; addAccount(privKey: PrivateKey, address: AztecAddress, partialContractAddress: Fr): Promise { @@ -103,12 +102,9 @@ export abstract class BaseWallet implements Wallet { * A simple wallet implementation that forwards authentication requests to a provided account implementation. */ export class AccountWallet extends BaseWallet { - constructor(rpc: AztecRPC, protected accountImpl: AccountImplementation) { + constructor(rpc: AztecRPC, protected accountImpl: Entrypoint) { super(rpc); } - getAddress(): AztecAddress { - return this.accountImpl.getAddress(); - } createTxExecutionRequest(executions: FunctionCall[], opts: CreateTxRequestOpts = {}): Promise { return this.accountImpl.createTxExecutionRequest(executions, opts); } diff --git a/yarn-project/aztec.js/src/index.ts b/yarn-project/aztec.js/src/index.ts index 49b017c6bc0..b9c94efa813 100644 --- a/yarn-project/aztec.js/src/index.ts +++ b/yarn-project/aztec.js/src/index.ts @@ -2,7 +2,7 @@ export * from './contract/index.js'; export * from './contract_deployer/index.js'; export * from './utils/index.js'; export * from './aztec_rpc_client/index.js'; -export * from './account_impl/index.js'; +export * from './account/index.js'; export * from './contract_deployer/deploy_method.js'; // TODO - only export necessary stuffs diff --git a/yarn-project/aztec.js/src/utils/account.ts b/yarn-project/aztec.js/src/utils/account.ts index a3e22aed7d5..0acd2103271 100644 --- a/yarn-project/aztec.js/src/utils/account.ts +++ b/yarn-project/aztec.js/src/utils/account.ts @@ -4,8 +4,9 @@ import { ContractAbi } from '@aztec/foundation/abi'; import { createDebugLogger } from '@aztec/foundation/log'; import { AztecRPC, TxStatus } from '@aztec/types'; +import { SingleKeyAccountEntrypoint } from '../account/entrypoint/single_key_account_entrypoint.js'; import { AccountWallet, Wallet } from '../aztec_rpc_client/wallet.js'; -import { AccountCollection, ContractDeployer, SingleKeyAccountContract, generatePublicKey } from '../index.js'; +import { ContractDeployer, EntrypointCollection, generatePublicKey } from '../index.js'; /** * Creates an Aztec Account. @@ -19,7 +20,7 @@ export async function createAccounts( numberOfAccounts = 1, logger = createDebugLogger('aztec:aztec.js:accounts'), ): Promise { - const accountImpls = new AccountCollection(); + const accountImpls = new EntrypointCollection(); for (let i = 0; i < numberOfAccounts; ++i) { // TODO(#662): Let the aztec rpc server generate the keypair rather than hardcoding the private key @@ -43,7 +44,7 @@ export async function createAccounts( logger(`Created account ${address.toString()} with public key ${publicKey.toString()}`); accountImpls.registerAccount( address, - new SingleKeyAccountContract(address, deploymentInfo.partialAddress, privKey, await Schnorr.new()), + new SingleKeyAccountEntrypoint(address, deploymentInfo.partialAddress, privKey, await Schnorr.new()), ); } return new AccountWallet(aztecRpcClient, accountImpls); @@ -61,14 +62,14 @@ export async function getAccountWallet( privateKey: PrivateKey, salt: Fr, ) { - const accountCollection = new AccountCollection(); + const accountCollection = new EntrypointCollection(); const publicKey = await generatePublicKey(privateKey); const deploymentInfo = await getContractDeploymentInfo(accountContractAbi, [], salt, publicKey); const address = deploymentInfo.address; accountCollection.registerAccount( address, - new SingleKeyAccountContract(address, deploymentInfo.partialAddress, privateKey, await Schnorr.new()), + new SingleKeyAccountEntrypoint(address, deploymentInfo.partialAddress, privateKey, await Schnorr.new()), ); return new AccountWallet(aztecRpcClient, accountCollection); } diff --git a/yarn-project/end-to-end/src/e2e_account_contracts.test.ts b/yarn-project/end-to-end/src/e2e_account_contracts.test.ts index 8efcd1d0afd..f04132b99a3 100644 --- a/yarn-project/end-to-end/src/e2e_account_contracts.test.ts +++ b/yarn-project/end-to-end/src/e2e_account_contracts.test.ts @@ -1,46 +1,33 @@ import { AztecRPCServer } from '@aztec/aztec-rpc'; -import { AccountWallet, Fr, SingleKeyAccountContract, StoredKeyAccountContract } from '@aztec/aztec.js'; -import { AztecAddress, PartialContractAddress, Point, PrivateKey, PublicKey } from '@aztec/circuits.js'; -import { Ecdsa, Schnorr } from '@aztec/circuits.js/barretenberg'; -import { ContractAbi } from '@aztec/foundation/abi'; -import { toBigInt } from '@aztec/foundation/serialize'; import { - EcdsaAccountContractAbi, - SchnorrMultiKeyAccountContractAbi, - SchnorrSingleKeyAccountContractAbi, -} from '@aztec/noir-contracts/artifacts'; + Account, + AccountContract, + EcdsaAccountContract, + Fr, + SchnorrAccountContract, + SingleKeyAccountContract, + Wallet, +} from '@aztec/aztec.js'; +import { PrivateKey } from '@aztec/circuits.js'; +import { toBigInt } from '@aztec/foundation/serialize'; import { ChildContract } from '@aztec/noir-contracts/types'; -import { CreateAccountImplFn, createNewAccount, deployContract, setup } from './fixtures/utils.js'; +import { setup } from './fixtures/utils.js'; -function itShouldBehaveLikeAnAccountContract( - abi: ContractAbi, - argsFn: () => any[], - createAccountImpl: CreateAccountImplFn, -) { +function itShouldBehaveLikeAnAccountContract(getAccountContract: (encryptionKey: PrivateKey) => AccountContract) { describe(`behaves like an account contract`, () => { let context: Awaited>; let child: ChildContract; - let address: AztecAddress; - let partialAddress: PartialContractAddress; - let wallet: AccountWallet; + let account: Account; + let wallet: Wallet; let encryptionPrivateKey: PrivateKey; beforeEach(async () => { context = await setup(); encryptionPrivateKey = PrivateKey.random(); - const { aztecRpcServer } = context; - ({ wallet, address, partialAddress } = await createNewAccount( - aztecRpcServer, - abi, - argsFn(), - encryptionPrivateKey, - true, - createAccountImpl, - )); - - const { address: childAddress } = await deployContract(aztecRpcServer, Point.random(), ChildContract.abi, []); - child = await ChildContract.create(childAddress, wallet); + account = new Account(context.aztecRpcServer, encryptionPrivateKey, getAccountContract(encryptionPrivateKey)); + wallet = await account.deploy().then(tx => tx.getWallet()); + child = await ChildContract.deploy(wallet).send().deployed(); }, 60_000); afterEach(async () => { @@ -66,10 +53,13 @@ function itShouldBehaveLikeAnAccountContract( }, 60_000); it('fails to call a function using an invalid signature', async () => { - const invalidWallet = new AccountWallet( + const accountAddress = await account.getCompleteAddress(); + const invalidWallet = await new Account( context.aztecRpcServer, - await createAccountImpl(address, false, partialAddress, encryptionPrivateKey), - ); + encryptionPrivateKey, + getAccountContract(PrivateKey.random()), + accountAddress, + ).getWallet(); const childWithInvalidWallet = await ChildContract.create(child.address, invalidWallet); await expect(childWithInvalidWallet.methods.value(42).simulate()).rejects.toThrowError( /could not satisfy all constraints/, @@ -80,59 +70,14 @@ function itShouldBehaveLikeAnAccountContract( describe('e2e_account_contracts', () => { describe('schnorr single-key account', () => { - const createWallet = async ( - address: AztecAddress, - useProperKey: boolean, - partial: PartialContractAddress, - privateKey: PrivateKey, - ) => - new SingleKeyAccountContract( - address, - partial, - useProperKey ? privateKey : PrivateKey.random(), - await Schnorr.new(), - ); - - itShouldBehaveLikeAnAccountContract(SchnorrSingleKeyAccountContractAbi, () => [], createWallet); + itShouldBehaveLikeAnAccountContract((encryptionKey: PrivateKey) => new SingleKeyAccountContract(encryptionKey)); }); describe('schnorr multi-key account', () => { - let signingPrivateKey: PrivateKey; - let signingPublicKey: PublicKey; - let createArgs: any[]; - - const createWallet = async (address: AztecAddress, useProperKey: boolean) => - new StoredKeyAccountContract( - address, - useProperKey ? signingPrivateKey : PrivateKey.random(), - await Schnorr.new(), - ); - - beforeAll(async () => { - signingPrivateKey = PrivateKey.random(); - const schnorr = await Schnorr.new(); - signingPublicKey = schnorr.computePublicKey(signingPrivateKey); - createArgs = [signingPublicKey.x, signingPublicKey.y]; - }); - - itShouldBehaveLikeAnAccountContract(SchnorrMultiKeyAccountContractAbi, () => createArgs, createWallet); + itShouldBehaveLikeAnAccountContract(() => new SchnorrAccountContract(PrivateKey.random())); }); describe('ecdsa stored-key account', () => { - let ecdsaPrivateKey: PrivateKey; - let ecdsaPublicKey: Buffer; - let ecdsaCreateArgs: any[]; - - const createWallet = async (address: AztecAddress, useProperKey: boolean) => - new StoredKeyAccountContract(address, useProperKey ? ecdsaPrivateKey : PrivateKey.random(), await Ecdsa.new()); - - beforeAll(async () => { - ecdsaPrivateKey = PrivateKey.random(); - const ecdsa = await Ecdsa.new(); - ecdsaPublicKey = ecdsa.computePublicKey(ecdsaPrivateKey); - ecdsaCreateArgs = [ecdsaPublicKey.subarray(0, 32), ecdsaPublicKey.subarray(32, 64)]; - }); - - itShouldBehaveLikeAnAccountContract(EcdsaAccountContractAbi, () => ecdsaCreateArgs, createWallet); + itShouldBehaveLikeAnAccountContract(() => new EcdsaAccountContract(PrivateKey.random())); }); }); diff --git a/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts b/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts index dddb8b88a1f..a1fccd44eca 100644 --- a/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts +++ b/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts @@ -1,6 +1,6 @@ import { AztecNodeService } from '@aztec/aztec-node'; import { AztecRPCServer } from '@aztec/aztec-rpc'; -import { AztecAddress, StoredKeyAccountContract, Wallet, generatePublicKey } from '@aztec/aztec.js'; +import { AztecAddress, StoredKeyAccountEntrypoint, Wallet, generatePublicKey } from '@aztec/aztec.js'; import { PrivateKey } from '@aztec/circuits.js'; import { Schnorr } from '@aztec/circuits.js/barretenberg'; import { DebugLogger } from '@aztec/foundation/log'; @@ -35,7 +35,7 @@ describe('e2e_multiple_accounts_1_enc_key', () => { logger(`Deploying account contract ${i}/3...`); const signingPrivateKey = PrivateKey.random(); const createWallet = async (address: AztecAddress, useProperKey: boolean) => - new StoredKeyAccountContract( + new StoredKeyAccountEntrypoint( address, useProperKey ? signingPrivateKey : PrivateKey.random(), await Schnorr.new(), diff --git a/yarn-project/end-to-end/src/fixtures/utils.ts b/yarn-project/end-to-end/src/fixtures/utils.ts index dabb5fb8c96..9cbb7d1638b 100644 --- a/yarn-project/end-to-end/src/fixtures/utils.ts +++ b/yarn-project/end-to-end/src/fixtures/utils.ts @@ -1,16 +1,16 @@ import { AztecNodeConfig, AztecNodeService, getConfigEnvVars } from '@aztec/aztec-node'; import { RpcServerConfig, createAztecRPCServer, getConfigEnvVars as getRpcConfigEnvVars } from '@aztec/aztec-rpc'; import { - AccountCollection, - AccountImplementation, AccountWallet, AztecAddress, Contract, ContractDeployer, DeployMethod, + Entrypoint, + EntrypointCollection, EthAddress, SentTx, - SingleKeyAccountContract, + SingleKeyAccountEntrypoint, Wallet, createAztecRpcClient as createJsonRpcClient, generatePublicKey, @@ -192,7 +192,7 @@ export async function setupAztecRPCServer( const aztecRpcServer = await createRpcServer(rpcConfig, aztecNode, logger, useLogSuffix); - const accountCollection = new AccountCollection(); + const accountCollection = new EntrypointCollection(); const txContexts: TxContext[] = []; logger('RPC server created, deploying accounts...'); @@ -250,7 +250,7 @@ export async function setupAztecRPCServer( ); accountCollection.registerAccount( context.deploymentData.address, - new SingleKeyAccountContract( + new SingleKeyAccountEntrypoint( context.deploymentData.address, context.deploymentData.partialAddress, context.privateKey, @@ -388,7 +388,7 @@ export type CreateAccountImplFn = ( useProperKey: boolean, partialAddress: PartialContractAddress, encryptionPrivateKey: PrivateKey, -) => Promise; +) => Promise; /** * Creates a new account. diff --git a/yarn-project/noir-contracts/src/scripts/copy_output.ts b/yarn-project/noir-contracts/src/scripts/copy_output.ts index 21954579569..38ae42bb3e9 100644 --- a/yarn-project/noir-contracts/src/scripts/copy_output.ts +++ b/yarn-project/noir-contracts/src/scripts/copy_output.ts @@ -15,8 +15,9 @@ const STATEMENT_TYPES = ['type', 'params', 'return'] as const; const log = createConsoleLogger('aztec:noir-contracts'); const PROJECT_CONTRACTS = [ - { name: 'SchnorrSingleKeyAccount', target: '../aztec.js/src/abis/', exclude: ['bytecode', 'verificationKey'] }, - { name: 'EcdsaAccount', target: '../aztec.js/src/abis/', exclude: ['bytecode', 'verificationKey'] }, + { name: 'SchnorrSingleKeyAccount', target: '../aztec.js/src/abis/', exclude: [] }, + { name: 'SchnorrMultiKeyAccount', target: '../aztec.js/src/abis/', exclude: [] }, + { name: 'EcdsaAccount', target: '../aztec.js/src/abis/', exclude: [] }, ]; /**