Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Native Management contract allows to deploy contract with invalid method offset #2848

Closed
AnnaShaleva opened this issue Mar 10, 2023 · 8 comments · Fixed by #2849
Closed

Native Management contract allows to deploy contract with invalid method offset #2848

AnnaShaleva opened this issue Mar 10, 2023 · 8 comments · Fixed by #2849

Comments

@AnnaShaleva
Copy link
Member

AnnaShaleva commented Mar 10, 2023

Describe the bug
The issue is descovered due to states diff at block 1670095 of the current testnet between neo-go and C# nodes:

Found states diff
anna@kiwi:~/Documents/GitProjects/nspcc-dev/neo-go$ go run scripts/compare-states/compare-states.go http://seed1t5.neo.org:20332 http://localhost:20332
at 0: 9c1361fbbe2a0ce31910f992cbdfb8afee6f178e5d1aabdd1c6f2af90440e239 vs 9c1361fbbe2a0ce31910f992cbdfb8afee6f178e5d1aabdd1c6f2af90440e239
at 1677728: 8262da585b6eb9a21628b759152b86490072798a2e105b699e1dbbfab493a5c3 vs 55cec6b538a19f6bf095af75f1ee39ebfbf8e509b4abe126a436417b224c6041
at 838864: 7e8238718219bed695d9e201917ead365e3e43e991a7c0bc99f71bf28101a128 vs 7e8238718219bed695d9e201917ead365e3e43e991a7c0bc99f71bf28101a128
at 1258296: 7df0d2b730f2c16a0f62cdad05e2c483a483441ef686163a4eef64d000af32eb vs 7df0d2b730f2c16a0f62cdad05e2c483a483441ef686163a4eef64d000af32eb
at 1468012: cb06f213579be02cd56caff2baedb894939cc9d985fa2a6b9034963c4f60d708 vs cb06f213579be02cd56caff2baedb894939cc9d985fa2a6b9034963c4f60d708
at 1572870: 43b67af8dc088b9c6f9647900190609acfbbdf0925b34043f813c19e10db5bf6 vs 43b67af8dc088b9c6f9647900190609acfbbdf0925b34043f813c19e10db5bf6
at 1625299: 9360e5000bc6fd24954ea969ff9f149f8874b8470c8ec9d9fe1d8f2a3474d78b vs 9360e5000bc6fd24954ea969ff9f149f8874b8470c8ec9d9fe1d8f2a3474d78b
at 1651513: 15c5d5f9acb636bb126e541801b1fc6c855d59ae2adf751eb69f5d9f804f0fe4 vs 15c5d5f9acb636bb126e541801b1fc6c855d59ae2adf751eb69f5d9f804f0fe4
at 1664620: 3d473cd1a3f162028e195510e854952944143ed765140e29af381bb1c58f3f85 vs 3d473cd1a3f162028e195510e854952944143ed765140e29af381bb1c58f3f85
at 1671174: 3f211cc0ced0f13822c52c9d14214d442d7cf651e77093cee9e993997c69f584 vs 956ad40ef6b8f2d0dff2cab0f3a63febfdf97fede377c13b0b3327c6ff4d8858
at 1667897: 384bf38caf538e6dd49bad841356510dd6722f90b76e169fa8581f1824685397 vs 384bf38caf538e6dd49bad841356510dd6722f90b76e169fa8581f1824685397
at 1669535: 771b442ca4754731d692b0e6fe67f8aa226c6dd696fb7d96dc6e9017d4459e06 vs 771b442ca4754731d692b0e6fe67f8aa226c6dd696fb7d96dc6e9017d4459e06
at 1670354: 2526d8feb56e7506ae0c106db9528618ba8447c8e489fc262972c32ceb6c24d5 vs 814e1397cfc3664145623ce162dd24eb077389d7b4ac3ab24ea10a06cad3139d
at 1669944: 76eddb313d2cfb8fc2a2e0e23bfaf1db6ffdcfb4a6751b6d085e89578a07191f vs 76eddb313d2cfb8fc2a2e0e23bfaf1db6ffdcfb4a6751b6d085e89578a07191f
at 1670149: 90d8f57c54eb57f1d5c8c68ce8a415a3305af3b16f5113ea58025b8ed31ae39a vs 7379f84c5c2e483a4a847a3521353378f755d127630cf11d68ec2f51cf3de486
at 1670046: e6ed08b347eb317690c69f4f32b99f1a532717144bd923322359be59b71017ba vs e6ed08b347eb317690c69f4f32b99f1a532717144bd923322359be59b71017ba
at 1670097: 114dc4d32cc565b9e82f4ed86b90b4008a2176701366edad021b74cae4645cfd vs fceb7042ee04be20c29a6d7b561e68754a9abf14aacdce669fea2b74cf723742
at 1670071: 5dafed27553afa091b8c33b4f17549f72c52f173be7d853485408f04de635d5e vs 5dafed27553afa091b8c33b4f17549f72c52f173be7d853485408f04de635d5e
at 1670084: 71efee4e27002d25afa571bfc5208e1464042ab844fa4a6018d254f67b8674a0 vs 71efee4e27002d25afa571bfc5208e1464042ab844fa4a6018d254f67b8674a0
at 1670090: 2f21db98ebf55fd9da6caa829d40c1a855ca2479908d54f2945fd4e0b12167fd vs 2f21db98ebf55fd9da6caa829d40c1a855ca2479908d54f2945fd4e0b12167fd
at 1670093: 965d359222e41da2584f897e3ee27000b67eafa23f0cea1e8b022118a87a1b9a vs 965d359222e41da2584f897e3ee27000b67eafa23f0cea1e8b022118a87a1b9a
at 1670095: 3a7523bd0908811f5a88222e4e93febdd82b4d15c29c5b6c00cd314829f33fc6 vs bb880abc904d5ebf59bd62b0ae257628b06cf9a979e75b096a5c54654b805f42
at 1670094: 2319cc9dc03412d70304a262ff32e61657682198a882d5a038addb6b8eeb7ab4 vs 2319cc9dc03412d70304a262ff32e61657682198a882d5a038addb6b8eeb7ab4
state differs at 1670095, block deb23875ed455ecc5a4e7106c23d6728aaeb77dc8ffad712d2177ab6bfe0ba10
transaction c42252ccc37f37f80c8e38c6411b7ea0d1ff66ce8045265b1d61f495d906eba6:
--- http://seed1t5.neo.org:20332
+++ http://localhost:20332
@@ -1,2 +1,2 @@
-(*result.ApplicationLog)(0xc00029bc00)({
+(*result.ApplicationLog)(0xc00029a080)({
  Container: (util.Uint256) (len=32 cap=32) a6eb06d995f4611d5b264580ce66ffd1a07e1b41c6388e0cf8377fc3cc5222c4,
@@ -6,15 +6,12 @@
    Trigger: (trigger.Type) Application,
-   VMState: (vmstate.State) HALT,
-   GasConsumed: (int64) 392322297,
-   Stack: ([]stackitem.Item) (len=1 cap=1) {
-    (stackitem.Null) Null
+   VMState: (vmstate.State) FAULT,
+   GasConsumed: (int64) 392322084,
+   Stack: ([]stackitem.Item) (len=3 cap=3) {
+    (stackitem.Null) Null,
+    (*stackitem.ByteArray)(0xc00012c090)((len=12158 cap=12159) ByteString),
+    (*stackitem.ByteArray)(0xc00012c0a8)((len=27025 cap=27027) ByteString)
    },
-   Events: ([]state.NotificationEvent) (len=1 cap=4) {
-    (state.NotificationEvent) {
-     ScriptHash: (util.Uint160) (len=20 cap=20) fda3fa4346ea532a258fc497ddaddb6437c9fdff,
-     Name: (string) (len=6) "Update",
-     Item: (*stackitem.Array)(0xc0003e2390)(Array)
-    }
+   Events: ([]state.NotificationEvent) {
    },
-   FaultException: (string) ""
+   FaultException: (string) (len=94) "at instruction 71 (SYSCALL): some methods point to wrong offsets (not to instruction boundary)"
   }

different state found
exit status 1

At block 1670095 there's a single transaction (0xc42252ccc37f37f80c8e38c6411b7ea0d1ff66ce8045265b1d61f495d906eba6) that calls the update method of the contract b531a2ec582c2806023c63cba7c3e752a459afaa:

Block 1670095 ``` anna@kiwi:~/Documents/GitProjects/nspcc-dev/neo-go$ curl -d '{ "jsonrpc": "2.0", "id": 1, "method": "getblock", "params": ["0xdeb23875ed455ecc5a4e7106c23d6728aaeb77dc8ffad712d2177ab6bfe0ba10", 1] }' localhost:20332 | json_pp % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 54365 0 54229 100 136 17.2M 45333 --:--:-- --:--:-- --:--:-- 17.2M { "jsonrpc" : "2.0", "result" : { "merkleroot" : "0xc42252ccc37f37f80c8e38c6411b7ea0d1ff66ce8045265b1d61f495d906eba6", "confirmations" : 7616, "witnesses" : [ { "verification" : "FQwhAwCbdUDhDyVi5f2PrJ6uwlFmpYsm5BI0j/WoaSe/rCKiDCEDAgXpzvrqWh38WAryDI1aokaLsBSPGl5GBfxiLIDmBLoMIQIUuvDO6jpm8X5+HoOeol/YvtbNgua7bmglAYkGX0T/AQwhAj6bMuqJuU0GbmSbEk/VDjlu6RNp6OKmrhsRwXDQIiVtDCEDQI3NQWOW9keDrFh+oeFZPFfZ/qiAyKahkg6SollHeAYMIQKng0vpsy4pgdFXy1u9OstCz9EepcOxAiTXpE6YxZEPGwwhAroscPWZbzV6QxmHBYWfriz+oT4RcpYoAHcrPViKnUq9F0Ge0Nw6", "invocation" : "DEBo8O75yBksvOn2nOzrGsM6y2ifA6xzb2eW8OFQQUyiZ5xek6Y6oB8FukkHiEsifj6kRseAOkYCEkSS1WQvHws5DECk2FVhcMpKLjzIm1x8C+j5+36tOGgsZPHVkV5vB/BkzbBrGPT5NBICEEIpsglKJpQjLie0YBh1657Q/hO+z2OUDEAoXtiKkioT4aR3GPQybhyHv+/1XEPwXpfaCF5AAytfvJd3TUYloDabzSzSTIPtIw1VRubpIY86ZFcV2JnyutyfDECL2pZ1oxiPa+B57BUd7yUvr0rlNyHPAaVyklCOfU/vGr43+N8DDc5OjQucLwPrHrvLCs6GKp07TKDiMLQquFiuDEAR7K9BbdHepMQQiHs9Z99JV1AAQwuLeommC9aw+yNe3Ndw/rjed70UmNOtjn10BPabnNuNyBJOtWDi9++8ru4N" } ], "size" : 40084, "index" : 1670095, "primary" : 0, "nextblockhash" : "0x875755fd0c869692ea7f20c0ef6bf500255dd8650b89f9d4f3f9049489c7a4b0", "nonce" : "63619CEEED79E7A0", "time" : 1678317362301, "hash" : "0xdeb23875ed455ecc5a4e7106c23d6728aaeb77dc8ffad712d2177ab6bfe0ba10", "tx" : [ { "witnesses" : [ { "invocation" : "DEDbE731jSe+vzdr57L/Z6rVqocpBklfzKWcEnb0OrlJ9kq0hHqyTyY9puh6ZBRyDtRD0TXnmWVwCX2nYAUaGfmc", "verification" : "DCEClkkylEcekEm1xvWDSjGUq0/zMyfVO7TWXnY141EtUN5BVuezJw==" } ], "signers" : [ { "account" : "0x8b2b6082c4726d74107a52feff8bc836e91dde09", "scopes" : "CalledByEntry" } ], "netfee" : "4037052", "attributes" : [], "size" : 39387, "hash" : "0xc42252ccc37f37f80c8e38c6411b7ea0d1ff66ce8045265b1d61f495d906eba6", "validuntilblock" : 1675853, "nonce" : 727405985, "script" : "DX4veyJuYW1lIjoiR2hvc3RNYXJrZXQiLCJncm91cHMiOltdLCJmZWF0dXJlcyI6e30sInN1cHBvcnRlZHN0YW5kYXJkcyI6W10sImFiaSI6eyJtZXRob2RzIjpbeyJuYW1lIjoiYWRtaW5DYW5jZWxTYWxlIiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImF1Y3Rpb25JZCIsInR5cGUiOiJCeXRlQXJyYXkifV0sInJldHVybnR5cGUiOiJWb2lkIiwib2Zmc2V0IjowLCJzYWZlIjpmYWxzZX0seyJuYW1lIjoidm90ZSIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJ0YXJnZXQiLCJ0eXBlIjoiUHVibGljS2V5In1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6MTE5OCwic2FmZSI6ZmFsc2V9LHsibmFtZSI6ImFkZE1hbmRhdG9yeUN1cnJlbmN5IiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImN1cnJlbmN5IiwidHlwZSI6Ikhhc2gxNjAifV0sInJldHVybnR5cGUiOiJWb2lkIiwib2Zmc2V0IjoxMzAzLCJzYWZlIjpmYWxzZX0seyJuYW1lIjoiZGVsZXRlTWFuZGF0b3J5Q3VycmVuY3kiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiY3VycmVuY3kiLCJ0eXBlIjoiSGFzaDE2MCJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjE4MTMsInNhZmUiOmZhbHNlfSx7Im5hbWUiOiJhZGRHZnVuZEN1cnJlbmN5IiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImN1cnJlbmN5IiwidHlwZSI6Ikhhc2gxNjAifV0sInJldHVybnR5cGUiOiJWb2lkIiwib2Zmc2V0IjoyMDA2LCJzYWZlIjpmYWxzZX0seyJuYW1lIjoiZGVsZXRlR2Z1bmRDdXJyZW5jeSIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJjdXJyZW5jeSIsInR5cGUiOiJIYXNoMTYwIn1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6MjM0Mywic2FmZSI6ZmFsc2V9LHsibmFtZSI6InNldFByb3BlcnR5TWF0Y2hlckNvbnRyYWN0IiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImNvbnRyYWN0IiwidHlwZSI6Ikhhc2gxNjAifV0sInJldHVybnR5cGUiOiJWb2lkIiwib2Zmc2V0IjoyNTIzLCJzYWZlIjpmYWxzZX0seyJuYW1lIjoidXBkYXRlRmVlIiwicGFyYW1ldGVycyI6W3sibmFtZSI6InRyYWRlRmVlIiwidHlwZSI6IkludGVnZXIifV0sInJldHVybnR5cGUiOiJWb2lkIiwib2Zmc2V0IjoyNzg4LCJzYWZlIjpmYWxzZX0seyJuYW1lIjoidXBkYXRlR2Z1bmRGZWUiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiZnVuZEZlZSIsInR5cGUiOiJJbnRlZ2VyIn1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6Mjk3OCwic2FmZSI6ZmFsc2V9LHsibmFtZSI6InVwZGF0ZU1heE9yaWdpbkZlZSIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJtYXhPcmlnaW5GZWUiLCJ0eXBlIjoiSW50ZWdlciJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjMxNzEsInNhZmUiOmZhbHNlfSx7Im5hbWUiOiJ1cGRhdGVGZWVBZGRyZXNzIiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImFkZHJlc3MiLCJ0eXBlIjoiSGFzaDE2MCJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjMzODMsInNhZmUiOmZhbHNlfSx7Im5hbWUiOiJ1cGRhdGVHZnVuZENvbnRyYWN0QWRkcmVzcyIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJhZGRyZXNzIiwidHlwZSI6Ikhhc2gxNjAifV0sInJldHVybnR5cGUiOiJWb2lkIiwib2Zmc2V0IjozNTk2LCJzYWZlIjpmYWxzZX0seyJuYW1lIjoidXBkYXRlTWluQmlkSW5jcmVhc2UiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoibWluQmlkSW5jcmVhc2UiLCJ0eXBlIjoiSW50ZWdlciJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjM4MTcsInNhZmUiOmZhbHNlfSx7Im5hbWUiOiJ3aXRoZHJhd05lcDExIiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImNvbnRyYWN0IiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJ0b2tlbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6InRhcmdldCIsInR5cGUiOiJIYXNoMTYwIn1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6NDAzMywic2FmZSI6ZmFsc2V9LHsibmFtZSI6IndpdGhkcmF3QWxsTmVwMTEiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiY29udHJhY3QiLCJ0eXBlIjoiSGFzaDE2MCJ9LHsibmFtZSI6InRhcmdldCIsInR5cGUiOiJIYXNoMTYwIn1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6NDY1NSwic2FmZSI6ZmFsc2V9LHsibmFtZSI6IndpdGhkcmF3RXhjZXNzaXZlQmFsYW5jZSIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJjb250cmFjdCIsInR5cGUiOiJIYXNoMTYwIn1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6NTM5OSwic2FmZSI6ZmFsc2V9LHsibmFtZSI6ImdldEdmdW5kSGFzaCIsInBhcmFtZXRlcnMiOltdLCJyZXR1cm50eXBlIjoiSGFzaDE2MCIsIm9mZnNldCI6NTkxNiwic2FmZSI6dHJ1ZX0seyJuYW1lIjoiZ2V0UHJvcGVydHlNYXRjaGVySGFzaCIsInBhcmFtZXRlcnMiOltdLCJyZXR1cm50eXBlIjoiSGFzaDE2MCIsIm9mZnNldCI6NjAwMCwic2FmZSI6dHJ1ZX0seyJuYW1lIjoiZ2V0R2Z1bmRGZWVzIiwicGFyYW1ldGVycyI6W10sInJldHVybnR5cGUiOiJJbnRlZ2VyIiwib2Zmc2V0Ijo2MDUzLCJzYWZlIjp0cnVlfSx7Im5hbWUiOiJnZXRHZnVuZEN1cnJlbmNpZXMiLCJwYXJhbWV0ZXJzIjpbXSwicmV0dXJudHlwZSI6IkFycmF5Iiwib2Zmc2V0IjoyMjUyLCJzYWZlIjp0cnVlfSx7Im5hbWUiOiJnZXRNYW5kYXRvcnlDdXJyZW5jaWVzIiwicGFyYW1ldGVycyI6W10sInJldHVybnR5cGUiOiJBcnJheSIsIm9mZnNldCI6MTY3OSwic2FmZSI6dHJ1ZX0seyJuYW1lIjoiZ2V0TWF0Y2hBdHRyaWJ1dGVzUGVyT2ZmZXIiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiYXVjdGlvbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9XSwicmV0dXJudHlwZSI6IkFycmF5Iiwib2Zmc2V0Ijo2MDg2LCJzYWZlIjp0cnVlfSx7Im5hbWUiOiJnZXRNYXRjaEF0dHJpYnV0ZXNFbmFibGVkQ29udHJhY3RzIiwicGFyYW1ldGVycyI6W3sibmFtZSI6InN0YXJ0IiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJyZXN1bHRDb3VudCIsInR5cGUiOiJJbnRlZ2VyIn1dLCJyZXR1cm50eXBlIjoiTWFwIiwib2Zmc2V0Ijo2MTk0LCJzYWZlIjp0cnVlfSx7Im5hbWUiOiJnZXRSZWdpc3RlcmVkQ3VycmVuY3lDb250cmFjdHMiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoic3RhcnQiLCJ0eXBlIjoiSW50ZWdlciJ9LHsibmFtZSI6InJlc3VsdENvdW50IiwidHlwZSI6IkludGVnZXIifV0sInJldHVybnR5cGUiOiJNYXAiLCJvZmZzZXQiOjY1MTAsInNhZmUiOnRydWV9LHsibmFtZSI6ImdldFJlZ2lzdGVyZWRSb3lhbHR5UGVyQ29udHJhY3QiLCJwYXJhbWV0ZXJzIjpbXSwicmV0dXJudHlwZSI6Ik1hcCIsIm9mZnNldCI6NjgxMywic2FmZSI6dHJ1ZX0seyJuYW1lIjoiZ2V0Q3VzdG9tUm95YWx0aWVzIiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImNvbnRyYWN0IiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJ0b2tlbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6InJveWFsdHlUb2tlbiIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoic2FsZVByaWNlIiwidHlwZSI6IkludGVnZXIifV0sInJldHVybnR5cGUiOiJNYXAiLCJvZmZzZXQiOjY5MTcsInNhZmUiOnRydWV9LHsibmFtZSI6ImdldEV4Y2Vzc2l2ZUJhbGFuY2UiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoidG9rZW4iLCJ0eXBlIjoiSGFzaDE2MCJ9XSwicmV0dXJudHlwZSI6IkludGVnZXIiLCJvZmZzZXQiOjU2NDEsInNhZmUiOnRydWV9LHsibmFtZSI6ImdldEdNUHJvcCIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJwcm9wIiwidHlwZSI6IlN0cmluZyJ9XSwicmV0dXJudHlwZSI6IkJ5dGVBcnJheSIsIm9mZnNldCI6NTk1Nywic2FmZSI6dHJ1ZX0seyJuYW1lIjoiaXNPd25lciIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJvd25lciIsInR5cGUiOiJIYXNoMTYwIn1dLCJyZXR1cm50eXBlIjoiQm9vbGVhbiIsIm9mZnNldCI6Nzc2NSwic2FmZSI6dHJ1ZX0seyJuYW1lIjoiZ2V0T3duZXJzIiwicGFyYW1ldGVycyI6W10sInJldHVybnR5cGUiOiJBcnJheSIsIm9mZnNldCI6Nzg3NSwic2FmZSI6dHJ1ZX0seyJuYW1lIjoiaXNQYXVzZWQiLCJwYXJhbWV0ZXJzIjpbXSwicmV0dXJudHlwZSI6IkJvb2xlYW4iLCJvZmZzZXQiOjc5NTksInNhZmUiOnRydWV9LHsibmFtZSI6ImdldEF1Y3Rpb24iLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiYXVjdGlvbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9XSwicmV0dXJudHlwZSI6IkFycmF5Iiwib2Zmc2V0Ijo4MDA4LCJzYWZlIjp0cnVlfSx7Im5hbWUiOiJnZXRBdWN0aW9uSWRzIiwicGFyYW1ldGVycyI6W3sibmFtZSI6InN0YXJ0IiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJyZXN1bHRDb3VudCIsInR5cGUiOiJJbnRlZ2VyIn1dLCJyZXR1cm50eXBlIjoiQXJyYXkiLCJvZmZzZXQiOjgwODMsInNhZmUiOnRydWV9LHsibmFtZSI6ImdldEF1Y3Rpb25zIiwicGFyYW1ldGVycyI6W3sibmFtZSI6InN0YXJ0IiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJyZXN1bHRDb3VudCIsInR5cGUiOiJJbnRlZ2VyIn1dLCJyZXR1cm50eXBlIjoiTWFwIiwib2Zmc2V0Ijo4MzIwLCJzYWZlIjp0cnVlfSx7Im5hbWUiOiJhZGRPd25lciIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJvd25lciIsInR5cGUiOiJIYXNoMTYwIn1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6ODU2MSwic2FmZSI6ZmFsc2V9LHsibmFtZSI6ImRlbGV0ZU93bmVyIiwicGFyYW1ldGVycyI6W3sibmFtZSI6Im93bmVyIiwidHlwZSI6Ikhhc2gxNjAifV0sInJldHVybnR5cGUiOiJWb2lkIiwib2Zmc2V0Ijo4ODA5LCJzYWZlIjpmYWxzZX0seyJuYW1lIjoic2V0UGF1c2VkIiwicGFyYW1ldGVycyI6W3sibmFtZSI6InBhdXNlZCIsInR5cGUiOiJJbnRlZ2VyIn1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6OTAwMiwic2FmZSI6ZmFsc2V9LHsibmFtZSI6Il9kZXBsb3kiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiZGF0YSIsInR5cGUiOiJBbnkifSx7Im5hbWUiOiJ1cGRhdGUiLCJ0eXBlIjoiQm9vbGVhbiJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjkxNjIsInNhZmUiOmZhbHNlfSx7Im5hbWUiOiJ1cGRhdGUiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoibmVmRmlsZSIsInR5cGUiOiJCeXRlQXJyYXkifSx7Im5hbWUiOiJtYW5pZmVzdCIsInR5cGUiOiJTdHJpbmcifV0sInJldHVybnR5cGUiOiJWb2lkIiwib2Zmc2V0Ijo5Mzc3LCJzYWZlIjpmYWxzZX0seyJuYW1lIjoib25ORVAxMVBheW1lbnQiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiZnJvbSIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoiYW1vdW50IiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJ0b2tlbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6ImRhdGEiLCJ0eXBlIjoiQW55In1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6OTQ0NSwic2FmZSI6dHJ1ZX0seyJuYW1lIjoib25ORVAxN1BheW1lbnQiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiZnJvbSIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoiYW1vdW50IiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJkYXRhIiwidHlwZSI6IkFueSJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjk3MDYsInNhZmUiOnRydWV9LHsibmFtZSI6InVwZ3JhZGVEb25lIiwicGFyYW1ldGVycyI6W3sibmFtZSI6InVwZ3JhZGVNZXRob2QiLCJ0eXBlIjoiU3RyaW5nIn1dLCJyZXR1cm50eXBlIjoiQm9vbGVhbiIsIm9mZnNldCI6OTk5NSwic2FmZSI6dHJ1ZX0seyJuYW1lIjoic2V0TWF0Y2hBdHRyaWJ1dGVzRW5hYmxlZEZvckNvbnRyYWN0IiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImNvbnRyYWN0IiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJlbmFibGVkIiwidHlwZSI6IkJvb2xlYW4ifV0sInJldHVybnR5cGUiOiJWb2lkIiwib2Zmc2V0IjoxMDA4OCwic2FmZSI6ZmFsc2V9LHsibmFtZSI6InNldEN1cnJlbmNpZXNGb3JDb250cmFjdCIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJjb250cmFjdCIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoiY3VycmVuY2llcyIsInR5cGUiOiJBcnJheSJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjEwNTIyLCJzYWZlIjpmYWxzZX0seyJuYW1lIjoic2V0Um95YWx0aWVzRm9yQ29udHJhY3QiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiY29udHJhY3QiLCJ0eXBlIjoiSGFzaDE2MCJ9LHsibmFtZSI6InJveWFsdGllcyIsInR5cGUiOiJBcnJheSJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjExMjU5LCJzYWZlIjpmYWxzZX0seyJuYW1lIjoicGxhY2VPZmZlciIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJiYXNlU2NyaXB0SGFzaCIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoiZnJvbSIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoicXVvdGVTY3JpcHRIYXNoIiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJ0b2tlbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6InByaWNlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJzdGFydERhdGUiLCJ0eXBlIjoiSW50ZWdlciJ9LHsibmFtZSI6ImVuZERhdGUiLCJ0eXBlIjoiSW50ZWdlciJ9LHsibmFtZSI6ImF0dHJpYnV0ZXMiLCJ0eXBlIjoiQXJyYXkifV0sInJldHVybnR5cGUiOiJCeXRlQXJyYXkiLCJvZmZzZXQiOjEyMDg0LCJzYWZlIjpmYWxzZX0seyJuYW1lIjoicGxhY2VPZmZlciIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJiYXNlU2NyaXB0SGFzaCIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoiZnJvbSIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoicXVvdGVTY3JpcHRIYXNoIiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJ0b2tlbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6InByaWNlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJzdGFydERhdGUiLCJ0eXBlIjoiSW50ZWdlciJ9LHsibmFtZSI6ImVuZERhdGUiLCJ0eXBlIjoiSW50ZWdlciJ9XSwicmV0dXJudHlwZSI6IkJ5dGVBcnJheSIsIm9mZnNldCI6MTUxMzQsInNhZmUiOmZhbHNlfSx7Im5hbWUiOiJsaXN0VG9rZW4iLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiYmFzZVNjcmlwdEhhc2giLCJ0eXBlIjoiSGFzaDE2MCJ9LHsibmFtZSI6ImZyb20iLCJ0eXBlIjoiSGFzaDE2MCJ9LHsibmFtZSI6InF1b3RlU2NyaXB0SGFzaCIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoidG9rZW5JZCIsInR5cGUiOiJCeXRlQXJyYXkifSx7Im5hbWUiOiJwcmljZSIsInR5cGUiOiJJbnRlZ2VyIn0seyJuYW1lIjoiZW5kUHJpY2UiLCJ0eXBlIjoiSW50ZWdlciJ9LHsibmFtZSI6InN0YXJ0RGF0ZSIsInR5cGUiOiJJbnRlZ2VyIn0seyJuYW1lIjoiZW5kRGF0ZSIsInR5cGUiOiJJbnRlZ2VyIn0seyJuYW1lIjoiZXh0ZW5zaW9uUGVyaW9kIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJhdWN0aW9uVHlwZSIsInR5cGUiOiJJbnRlZ2VyIn1dLCJyZXR1cm50eXBlIjoiQnl0ZUFycmF5Iiwib2Zmc2V0IjoxNTE2MSwic2FmZSI6ZmFsc2V9LHsibmFtZSI6ImNhbmNlbFNhbGUiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiYXVjdGlvbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjE2OTY2LCJzYWZlIjpmYWxzZX0seyJuYW1lIjoiY2FuY2VsT2ZmZXIiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiYXVjdGlvbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjIwMDE3LCJzYWZlIjpmYWxzZX0seyJuYW1lIjoiZWRpdFNhbGUiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiZnJvbSIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoiYXVjdGlvbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6InByaWNlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJlbmRQcmljZSIsInR5cGUiOiJJbnRlZ2VyIn0seyJuYW1lIjoic3RhcnREYXRlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJlbmREYXRlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJleHRlbnNpb25QZXJpb2QiLCJ0eXBlIjoiSW50ZWdlciJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjIwMjkyLCJzYWZlIjpmYWxzZX0seyJuYW1lIjoiYWNjZXB0T2ZmZXIiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiZnJvbSIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoiYXVjdGlvbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6InRva2VuSWQiLCJ0eXBlIjoiQnl0ZUFycmF5In1dLCJyZXR1cm50eXBlIjoiVm9pZCIsIm9mZnNldCI6MjEyNDksInNhZmUiOmZhbHNlfSx7Im5hbWUiOiJhY2NlcHRPZmZlciIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJmcm9tIiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJhdWN0aW9uSWQiLCJ0eXBlIjoiQnl0ZUFycmF5In0seyJuYW1lIjoidG9rZW5JZCIsInR5cGUiOiJCeXRlQXJyYXkifSx7Im5hbWUiOiJvcmlnaW5BZGRyZXNzIiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJvcmlnaW5GZWUiLCJ0eXBlIjoiSW50ZWdlciJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjIyOTgxLCJzYWZlIjpmYWxzZX0seyJuYW1lIjoiYmlkVG9rZW4iLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiZnJvbSIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoiYXVjdGlvbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6InByaWNlIiwidHlwZSI6IkludGVnZXIifV0sInJldHVybnR5cGUiOiJWb2lkIiwib2Zmc2V0IjoyMzM1NCwic2FmZSI6ZmFsc2V9LHsibmFtZSI6ImJpZFRva2VuIiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImZyb20iLCJ0eXBlIjoiSGFzaDE2MCJ9LHsibmFtZSI6ImF1Y3Rpb25JZCIsInR5cGUiOiJCeXRlQXJyYXkifSx7Im5hbWUiOiJwcmljZSIsInR5cGUiOiJJbnRlZ2VyIn0seyJuYW1lIjoib3JpZ2luQWRkcmVzcyIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoib3JpZ2luRmVlIiwidHlwZSI6IkludGVnZXIifV0sInJldHVybnR5cGUiOiJWb2lkIiwib2Zmc2V0IjoyNTYzOSwic2FmZSI6ZmFsc2V9LHsibmFtZSI6InJlbW92ZUV4cGlyZWRBdWN0aW9ucyIsInBhcmFtZXRlcnMiOlt7Im5hbWUiOiJvZmZlcnMiLCJ0eXBlIjoiQm9vbGVhbiJ9XSwicmV0dXJudHlwZSI6IlZvaWQiLCJvZmZzZXQiOjI1OTk3LCJzYWZlIjpmYWxzZX1dLCJldmVudHMiOlt7Im5hbWUiOiJPcmRlckNyZWF0ZWQiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiYXVjdGlvbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6InRva2VuSWQiLCJ0eXBlIjoiQnl0ZUFycmF5In0seyJuYW1lIjoiYmFzZVNjcmlwdEhhc2giLCJ0eXBlIjoiSGFzaDE2MCJ9LHsibmFtZSI6InF1b3RlU2NyaXB0SGFzaCIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoicHJpY2UiLCJ0eXBlIjoiSW50ZWdlciJ9LHsibmFtZSI6ImVuZFByaWNlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJzdGFydERhdGUiLCJ0eXBlIjoiSW50ZWdlciJ9LHsibmFtZSI6ImVuZERhdGUiLCJ0eXBlIjoiSW50ZWdlciJ9LHsibmFtZSI6ImV4dGVuc2lvblBlcmlvZCIsInR5cGUiOiJJbnRlZ2VyIn0seyJuYW1lIjoiYXVjdGlvblR5cGUiLCJ0eXBlIjoiSW50ZWdlciJ9LHsibmFtZSI6ImF1Y3Rpb25GZWUiLCJ0eXBlIjoiSW50ZWdlciJ9XX0seyJuYW1lIjoiT3JkZXJDYW5jZWxsZWQiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiYXVjdGlvbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9XX0seyJuYW1lIjoiT2ZmZXJDcmVhdGVkIiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImF1Y3Rpb25JZCIsInR5cGUiOiJCeXRlQXJyYXkifSx7Im5hbWUiOiJ0b2tlbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6ImJhc2VTY3JpcHRIYXNoIiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJxdW90ZVNjcmlwdEhhc2giLCJ0eXBlIjoiSGFzaDE2MCJ9LHsibmFtZSI6InByaWNlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJlbmRQcmljZSIsInR5cGUiOiJJbnRlZ2VyIn0seyJuYW1lIjoic3RhcnREYXRlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJlbmREYXRlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJleHRlbnNpb25QZXJpb2QiLCJ0eXBlIjoiSW50ZWdlciJ9LHsibmFtZSI6ImF1Y3Rpb25UeXBlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJhdWN0aW9uRmVlIiwidHlwZSI6IkludGVnZXIifV19LHsibmFtZSI6Ik9mZmVyQ2FuY2VsbGVkIiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImF1Y3Rpb25JZCIsInR5cGUiOiJCeXRlQXJyYXkifV19LHsibmFtZSI6Ik9yZGVyQmlkIiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImF1Y3Rpb25JZCIsInR5cGUiOiJCeXRlQXJyYXkifSx7Im5hbWUiOiJ0b2tlbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6ImJhc2VTY3JpcHRIYXNoIiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJxdW90ZVNjcmlwdEhhc2giLCJ0eXBlIjoiSGFzaDE2MCJ9LHsibmFtZSI6InByaWNlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJlbmRQcmljZSIsInR5cGUiOiJJbnRlZ2VyIn0seyJuYW1lIjoic3RhcnREYXRlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJlbmREYXRlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJleHRlbnNpb25QZXJpb2QiLCJ0eXBlIjoiSW50ZWdlciJ9LHsibmFtZSI6ImF1Y3Rpb25UeXBlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJhdWN0aW9uRmVlIiwidHlwZSI6IkludGVnZXIifV19LHsibmFtZSI6Ik9yZGVyRmlsbGVkIiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImF1Y3Rpb25JZCIsInR5cGUiOiJCeXRlQXJyYXkifSx7Im5hbWUiOiJ0b2tlbklkIiwidHlwZSI6IkJ5dGVBcnJheSJ9LHsibmFtZSI6ImJhc2VTY3JpcHRIYXNoIiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJxdW90ZVNjcmlwdEhhc2giLCJ0eXBlIjoiSGFzaDE2MCJ9LHsibmFtZSI6InByaWNlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJlbmRQcmljZSIsInR5cGUiOiJJbnRlZ2VyIn0seyJuYW1lIjoic3RhcnREYXRlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJlbmREYXRlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJleHRlbnNpb25QZXJpb2QiLCJ0eXBlIjoiSW50ZWdlciJ9LHsibmFtZSI6ImF1Y3Rpb25UeXBlIiwidHlwZSI6IkludGVnZXIifSx7Im5hbWUiOiJhdWN0aW9uRmVlIiwidHlwZSI6IkludGVnZXIifV19LHsibmFtZSI6IlJveWFsdGllc1NldEZvckNvbnRyYWN0IiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImNvbnRyYWN0IiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJhZGRyZXNzIiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJ2YWx1ZSIsInR5cGUiOiJJbnRlZ2VyIn1dfSx7Im5hbWUiOiJDdXJyZW5jaWVzU2V0Rm9yQ29udHJhY3QiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiY29udHJhY3QiLCJ0eXBlIjoiSGFzaDE2MCJ9LHsibmFtZSI6ImN1cnJlbmNpZXMiLCJ0eXBlIjoiQXJyYXkifV19LHsibmFtZSI6Ik1hdGNoQXR0cmlidXRlc1NldEZvckNvbnRyYWN0IiwicGFyYW1ldGVycyI6W3sibmFtZSI6ImNvbnRyYWN0IiwidHlwZSI6Ikhhc2gxNjAifSx7Im5hbWUiOiJlbmFibGVkIiwidHlwZSI6IkJvb2xlYW4ifV19LHsibmFtZSI6IlJveWFsdGllc1RyYW5zZmVycmVkIiwicGFyYW1ldGVycyI6W3sibmFtZSI6InJveWFsdHlUb2tlbiIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoicm95YWx0eVJlY2lwaWVudCIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoiYnV5ZXIiLCJ0eXBlIjoiSGFzaDE2MCJ9LHsibmFtZSI6InRva2VuSWQiLCJ0eXBlIjoiQnl0ZUFycmF5In0seyJuYW1lIjoiYW1vdW50IiwidHlwZSI6IkludGVnZXIifV19LHsibmFtZSI6IkF1dGhvcml6ZWQiLCJwYXJhbWV0ZXJzIjpbeyJuYW1lIjoiYWRkcmVzcyIsInR5cGUiOiJIYXNoMTYwIn0seyJuYW1lIjoiYWRkZWQiLCJ0eXBlIjoiQm9vbGVhbiJ9XX1dfSwicGVybWlzc2lvbnMiOlt7ImNvbnRyYWN0IjoiKiIsIm1ldGhvZHMiOiIqIn1dLCJ0cnVzdHMiOltdLCJleHRyYSI6eyJBdXRob3IiOiJNYXRoaWFzIEVuemVuc2JlcmdlciwgVmluY2VudCBHZW5lc3RlIiwiRW1haWwiOiJoZWxsb0BnaG9zdG1hcmtldC5pbyIsIkRlc2NyaXB0aW9uIjoiR2hvc3RNYXJrZXQgRXhjaGFuZ2UgQ29udHJhY3QifX0NkWlORUYzTmVvLkNvbXBpbGVyLkNTaGFycCAzLjUuMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsDvOc7g5OklxsKgannhRA3Yb86sBGl0b2EBAAEPwO85zuDk6SXGwqBqeeFEDdhvzqwLZGVzZXJpYWxpemUBAAEPwO85zuDk6SXGwqBqeeFEDdhvzqwJc2VyaWFsaXplAQABD/Vj6kC8KD1NDgXEjqMFs/Kgc0DvBHZvdGUCAAEP/aP6Q0bqUyolj8SX3a3bZDfJ/f8LZ2V0Q29udHJhY3QBAAEP/aP6Q0bqUyolj8SX3a3bZDfJ/f8JaGFzTWV0aG9kAwABD8DvOc7g5OklxsKgannhRA3Yb86sD2pzb25EZXNlcmlhbGl6ZQEAAQ/A7znO4OTpJcbCoGp54UQN2G/OrARhdG9pAgABD8DvOc7g5OklxsKgannhRA3Yb86sEWJhc2U1OENoZWNrRGVjb2RlAQABD/2j+kNG6lMqJY/El92t22Q3yf3/BnVwZGF0ZQMAAA8AAP3tZ1cDASELDC9BZG1pbkNhbmNlbFNhbGUgLSBjYWxsZXIgbmVlZHMgdG8gYmUgYXV0aG9yaXplZDV5AQAANWUBAAA1bAIAABA1XAIAAHB4aDVkAgAAcQsMIUFkbWluQ2FuY2VsU2FsZSAtIGludmFsaWQgYXVjdGlvbmkLmDUlAQAAaTU8AgAAchHbIGp4NTUCAABqGc4RlycNAAAAEdsgIwsAAAAhahnOEpchJ1oAAAAhahrONZcDAACYJ0kAAAAhCwwmQWRtaW5DYW5jZWxTYWxlIC0gTkVQLTE3IHJlZnVuZCBmYWlsZWQLahzOahrONZkDAABqFM41agMAADWkAAAAISEhIWoZzhSXJw0AAAAR2yAjCwAAACFqGc4VlyEnJQAAACHCSnjPDA5PZmZlckNhbmNlbGxlZEGVAW9hISNgAAAAISELDChBZG1pbkNhbmNlbFNhbGUgLSBORVAtMTEgdHJhbnNmZXIgZmFpbGVkC2oVzmoQzmoTzjUUAwAANSEAAADCSnjPDA5PcmRlckNhbmNlbGxlZEGVAW9hISFAVwADIXiqJwcAAAB5OiFAVwQAITXLAAAAcAsMKlZhbGlkYXRlQ29udHJhY3RPd25lciAtIGNhbGxlciBub3Qgc2lnbmVyIGgTzjWbAAAANbL///8LDC5WYWxpZGF0ZUNvbnRyYWN0T3duZXIgLSBwcm94eSBjYWxsIG5vdCBhbGxvd2VkNWYAAAA1ZwAAAJc1cf///wH/ADcAAGgTzovbKHFpNVoAAAA1TwAAAErYJQ8AAABKygAUKQYAAAA6IXJqc2sLl6onDwAAACER2yAjDwAAACEhENsgIwUAAABAQS1RCDBAQfgn7IxAQTlTbjxAQfm04jhAQZJd6DFAQfa0a+JAEYhOEFHQUBLAQEGb9mfOQMFFU4tQQZJd6DFANwEAQFcKAyE15////xA11////3A12////wAiNcr///9xNc7///8AMzW9////cnqqJ5YAAAAheTUpAQAASnhoNSUBAABFeRXOC5gndQAAACF5Fc5KeGk1DgEAAEV5Fc5qNQ8BAABzawuXJy4AAAAhNQsBAAB0eEp4bFM1AgEAAEVsNd8AAABKeRXOajXZAAAARSEjKwAAACEhazVm////dXhKeG1TNdcAAABFbTW0AAAASnkVzmo1rgAAAEUhISEhISOdAAAAISF4aDUr////dgsMJVBlcnNpc3RBdWN0aW9uU3RhdGUgLSBpbnZhbGlkIGF1Y3Rpb25uC5g16P3//241//7//3cHbwcVzguYJ0cAAAAhbwcVzmo13P7//3cIbwgLmCcoAAAAIW8INdT+//93CW8JeDVIAAAAJw8AAAAhbwl4NTwAAAAhISEheGk1MwAAACEheGg1KgAAACEhQDcCAEDBRVOLUEHmPxiEQMFFU4tQQZJd6DFAyEDQQMtA0kDBRVOLUEEvWMXtQAwUAAAAAAAAAAAAAAAAAAAAAAAAAABAVwAFIXx7enkUwB8MCHRyYW5zZmVyeDULAAAAIwUAAABAQWJ9W1JAQdv+qHRAVwAEIXt6eRPAHwwIdHJhbnNmZXJ4Nd////8jBQAAAEBXAAEhCwwkVm90ZSAtIGNhbGxlciBuZWVkcyB0byBiZSBhdXRob3JpemVkNdb8//81wvz//wsMHFZvdGUgLSB2b3RlIHdhcyB1bnN1Y2Nlc3NmdWx4NYX///81CwAAADWT/P//QDcDAEBXAgEhCww0QWRkTWFuZGF0b3J5Q3VycmVuY3kgLSBjYWxsZXIgbmVlZHMgdG8gYmUgYXV0aG9yaXplZDVd/P//NUn8//8LDDdBZGRNYW5kYXRvcnlDdXJyZW5jeSAtIGN1cnJlbmN5IGRvZXMgbm90IHN1cHBvcnQgTkVQLTE3DAZORVAtMTd4NX8AAAA1/Pv//zXmAAAANd8AAABwCww1QWRkTWFuZGF0b3J5Q3VycmVuY3kgLSBjdXJyZW5jeSBjb3VudCBoYXMgdG8gYmUgPD0gMTBoGrY1sfv//wwUTUFOREFUT1JZX0NVUlJFTkNJRVM1ovz//zXgAAAAcXh4aTXyAAAAQFcHAiF4NWYAAABweHFpC5eqJQ0AAAAQ2yAjDAAAACFocmoLl6ohJzsAAAAhaBTOE85Kc8p0EHUjIQAAAGttznYhbnmXJw8AAAAhEdsgIx0AAAAhISFtnHVtbDHi////ISEhENsgIwUAAABANwQAQMpAVwUAIQwUTUFOREFUT1JZX0NVUlJFTkNJRVM18/v//zVBAAAAcBJoNTwAAABxNT4AAAByIWk1OAAAACceAAAAIWk1MgAAAHNrEc50amw1LAAAACEj4P///yFqIwUAAABAEsBAwUVB3zC4mkDCQEGcCO2cQEHzVL8dQM9AwUVTi1BB5j8YhEBXAQEhCww3RGVsZXRlTWFuZGF0b3J5Q3VycmVuY3kgLSBjYWxsZXIgbmVlZHMgdG8gYmUgYXV0aG9yaXplZDVc+v//NUj6//8LDDpEZWxldGVNYW5kYXRvcnlDdXJyZW5jeSAtIGN1cnJlbmN5IGRvZXMgbm90IHN1cHBvcnQgTkVQLTE3DAZORVAtMTd4NXv+//81+Pn//wwUTUFOREFUT1JZX0NVUlJFTkNJRVM16fr//zUn////cHhoNW/8//9AVwIBIQsMMEFkZEdmdW5kQ3VycmVuY3kgLSBjYWxsZXIgbmVlZHMgdG8gYmUgYXV0aG9yaXplZDWi+f//NY75//8LDDNBZGRHZnVuZEN1cnJlbmN5IC0gY3VycmVuY3kgZG9lcyBub3Qgc3VwcG9ydCBORVAtMTcMBk5FUC0xN3g1yP3//zVF+f//NWwAAAA1KP7//3ALDDFBZGRHZnVuZEN1cnJlbmN5IC0gY3VycmVuY3kgY291bnQgaGFzIHRvIGJlIDw9IDEwaBq2Nf74//8MD0ZVTkRfQ1VSUkVOQ0lFUzX0+f//NTL+//9xeHhpNUT+//9AVwUAIQwPRlVORF9DVVJSRU5DSUVTNbv5//81Cf7//3ASaDUE/v//cTUG/v//ciFpNQD+//8nHgAAACFpNfr9//9zaxHOdGpsNfT9//8hI+D///8haiMFAAAAQFcBASELDDNEZWxldGVHZnVuZEN1cnJlbmN5IC0gY2FsbGVyIG5lZWRzIHRvIGJlIGF1dGhvcml6ZWQ1Tvj//zU6+P//Cww2RGVsZXRlR2Z1bmRDdXJyZW5jeSAtIGN1cnJlbmN5IGRvZXMgbm90IHN1cHBvcnQgTkVQLTE3DAZORVAtMTd4NXH8//817vf//wwPRlVORF9DVVJSRU5DSUVTNeT4//81Iv3//3B4aDVq+v//QFcBASELDDpTZXRQcm9wZXJ0eU1hdGNoZXJDb250cmFjdCAtIGNhbGxlciBuZWVkcyB0byBiZSBhdXRob3JpemVkNZP3//81f/f//wsMNFNldFByb3BlcnR5TWF0Y2hlckNvbnRyYWN0IC0gY29udHJhY3QgZG9lcyBub3QgZXhpc3R4NUkAAAA1Pff//wwNR01fUFJPUEVSVElFUzU1+P//NXP8//9weAwbR01fUFJPUEVSVFlfTUFUQ0hFUl9BRERSRVNT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IQsMJ09uTkVQMTdQYXltZW50IC0gaW52YWxpZCBwYXltZW50IGFtb3VudHkQtzWy2v//QAwUz3bii9AGLEpHjuNVYQETGfPPpNJAVwIBIQwJVVBHUkFERV9YeIvbKHBoNXzb//81cdv//3FoaZcnDwAAACER2yAjDwAAACEhENsgIwUAAABAVwEBIQwJVVBHUkFERV9YeIvbKHBoaDVP2///NQH7//9AVwICIQsMNlNldE1hdGNoQXR0cmlidXRlc0VuYWJsZWRGb3JDb250cmFjdCAtIGNvbnRyYWN0IHBhdXNlZDVy9///qjX12f//CwxzU2V0TWF0Y2hBdHRyaWJ1dGVzRW5hYmxlZEZvckNvbnRyYWN0IC0gb25seSBjYWxsYWJsZSBieSBhIHRyYWRpbmcgY29udHJhY3Qgb3duZXIgb3IgYnkgYSB0aGlyZCBwYXJ0eSBjb250cmFjdCBvd25lcjWJ2f//Jw0AAAAR2yAjDAAAACF4NUra//8hNWDZ//8LDEdTZXRNYXRjaEF0dHJpYnV0ZXNFbmFibGVkRm9yQ29udHJhY3QgLSBjb250cmFjdCBkb2VzIG5vdCBzdXBwb3J0IE5FUC0xMQwGTkVQLTExeDWG3f//NQPZ//8MGEFUVFJJQlVURVNfT0ZGRVJfRU5BQkxFRDXw2f//NS7e//9weScbAAAAIXk1Ttv//3FpeGg1Mt7//yEjDwAAACEheGg1WNv//yEhwkp4z0p5zwwdTWF0Y2hBdHRyaWJ1dGVzU2V0Rm9yQ29udHJhY3RBlQFvYUBXDAIhCwwqU2V0Q3VycmVuY2llc0ZvckNvbnRyYWN0IC0gY29udHJhY3QgcGF1c2VkNcz1//+qNU/Y//8LDGdTZXRDdXJyZW5jaWVzRm9yQ29udHJhY3QgLSBvbmx5IGNhbGxhYmxlIGJ5IGEgdHJhZGluZyBjb250cmFjdCBvd25lciBvciBieSBhIHRoaXJkIHBhcnR5IGNvbnRyYWN0IG93bmVyNe/X//8nDQAAABHbICMMAAAAIXg1sNj//yE1xtf//wsMO1NldEN1cnJlbmNpZXNGb3JDb250cmFjdCAtIGNvbnRyYWN0IGRvZXMgbm90IHN1cHBvcnQgTkVQLTExDAZORVAtMTF4Nfjb//81ddf//wsMO1NldEN1cnJlbmNpZXNGb3JDb250cmFjdCAtIHRvdGFsIGN1cnJlbmNpZXMgY2FuIG5vdCBiZSA+IDEwecoatjUu1///DBNDVVJSRU5DWV9DT0xMRUNUSU9ONSDY//81Xtz//3B5yhC3JyYBAAAheUpxynIQcyPUAAAAaWvOdCELDDtTZXRDdXJyZW5jaWVzRm9yQ29udHJhY3QgLSBjdXJyZW5jeSBkb2VzIG5vdCBzdXBwb3J0IE5FUC0xNwwGTkVQLTE3bDUl2///NaLW//81jNv//3VtSnbKdwcQdwgjXAAAAG5vCM53CSELDD5TZXRDdXJyZW5jaWVzRm9yQ29udHJhY3QgLSBjdXJyZW5jeSBpcyBhbHJlYWR5IGEgbWFuZGF0b3J5IG9uZW8JbJg1Pdb//yFvCJx3CG8Ibwcxpf///yEha5xza2oxL////yF5NZjY//93Cm8KeGg1etv//8JKeM9Kec8MGEN1cnJlbmNpZXNTZXRGb3JDb250cmFjdEGVAW9hISM9AAAAISF4aDV62P//NTDb//93C8JKeM9KbwvPDBhDdXJyZW5jaWVzU2V0Rm9yQ29udHJhY3RBlQFvYSEhQFcHAiELDClTZXRSb3lhbHRpZXNGb3JDb250cmFjdCAtIGNvbnRyYWN0IHBhdXNlZDXs8v//qjVv1f//CwxmU2V0Um95YWx0aWVzRm9yQ29udHJhY3QgLSBvbmx5IGNhbGxhYmxlIGJ5IGEgdHJhZGluZyBjb250cmFjdCBvd25lciBvciBieSBhIHRoaXJkIHBhcnR5IGNvbnRyYWN0IG93bmVyNRDV//8nDQAAABHbICMMAAAAIXg10dX//yE159T//wsMOlNldFJveWFsdGllc0ZvckNvbnRyYWN0IC0gY29udHJhY3QgZG9lcyBub3Qgc3VwcG9ydCBORVAtMTEMBk5FUC0xMXg1Gtn//zWX1P//CwxEU2V0Um95YWx0aWVzRm9yQ29udHJhY3QgLSB0b3RhbCByb3lhbHRpZXMgcmVjaXBpZW50cyBjYW4gbm90IGJlID4gMTB5yhq2NUfU//8MElJPWUFMVFlfQ09MTEVDVElPTjU61f//NXjZ//9wecoQtyd7AQAAIRBxeUpyynMQdCMDAQAAamzOdSELDEBTZXRSb3lhbHRpZXNGb3JDb250cmFjdCAtIHJveWFsdHkgYWRkcmVzcyBpcyBub3QgYSB2YWxpZCBVSW50MTYwbRDONR/g//8lDQAAABDbICMPAAAAIW0QzjUT4P//qiE1o9P//wsMNlNldFJveWFsdGllc0ZvckNvbnRyYWN0IC0gcm95YWx0eSB2YWx1ZSBjYW4ndCBiZSA+IDUwJW0RzhC3JQ0AAAAQ2yAjDQAAACFtEc4BiBO2ITVK0///aW0Rzp5KcUXCSnjPSm0Qzs9KbRHOzwwXUm95YWx0aWVzU2V0Rm9yQ29udHJhY3RBlQFvYSFsnHRsazEA////IQsMP1NldFJveWFsdGllc0ZvckNvbnRyYWN0IC0gdG90YWwgcm95YWx0aWVzIHZhbHVlcyBjYW4ndCBiZSA+IDUwJWkBiBO2Nb7S//95NTXV//92bnhoNRnY//8hIzsAAAAhIXhoNT/V///CSnjPSjVA1f//z0oQzwwXUm95YWx0aWVzU2V0Rm9yQ29udHJhY3RBlQFvYSEhQFcACCF/B359fHt6eXg1CwAAACMFAAAAQFcLCCELDCRQbGFjZU9mZmVySW50ZXJuYWwgLSBjb250cmFjdCBwYXVzZWQ1oO///6o1I9L//wsMMFBsYWNlT2ZmZXJJbnRlcm5hbCAtIGZyb20gaXMgbm90IGEgdmFsaWQgVUludDE2MHk1Sd7//yUNAAAAENsgIw0AAAAheTU/3v//qiE1z9H//wsMJFBsYWNlT2ZmZXJJbnRlcm5hbCAtIGludmFsaWQgd2l0bmVzc3k1htL//zWd0f//Cww0UGxhY2VPZmZlckludGVybmFsIC0gY2FuJ3QgYmUgY2FsbGVkIGZyb20gYSBjb250cmFjdDVL0v//NWPa//+qNVbR//8LDDRQbGFjZU9mZmVySW50ZXJuYWwgLSBjYW4ndCBiZSBjYWxsZWQgZnJvbSBhIGNvbnRyYWN0eTUg2v//qjUT0f//Cww7UGxhY2VPZmZlckludGVybmFsIC0gYmFzZVNjcmlwdEhhc2ggZG9lcyBub3Qgc3VwcG9ydCBORVAtMTEMBk5FUC0xMXg1RdX//zXC0P//Cww8UGxhY2VPZmZlckludGVybmFsIC0gcXVvdGVTY3JpcHRIYXNoIGRvZXMgbm90IHN1cHBvcnQgTkVQLTE3DAZORVAtMTd6NfPU//81cND//wsMRlBsYWNlT2ZmZXJJbnRlcm5hbCAt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NcjF//8LDCNMaXN0VG9rZW5JbnRlcm5hbCAtIGludmFsaWQgd2l0bmVzc3k1gMb//zWXxf//CwwzTGlzdFRva2VuSW50ZXJuYWwgLSBjYW4ndCBiZSBjYWxsZWQgZnJvbSBhIGNvbnRyYWN0NUbG//81Xs7//6o1UcX//wsMM0xpc3RUb2tlbkludGVybmFsIC0gY2FuJ3QgYmUgY2FsbGVkIGZyb20gYSBjb250cmFjdHk1HM7//6o1D8X//wsMOkxpc3RUb2tlbkludGVybmFsIC0gYmFzZVNjcmlwdEhhc2ggZG9lcyBub3Qgc3VwcG9ydCBORVAtMTEMBk5FUC0xMXg1Qsn//zW/xP//Cww7TGlzdFRva2VuSW50ZXJuYWwgLSBxdW90ZVNjcmlwdEhhc2ggZG9lcyBub3Qgc3VwcG9ydCBORVAtMTcMBk5FUC0xN3o18cj//zVuxP//CwxHTGlzdFRva2VuSW50ZXJuYWwgLSBiYXNlU2NyaXB0SGFzaCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgcXVvdGUgY29udHJhY3R6eDXR+P//NRjE//9+NYj5//+1Jw8AAAAhNXz5//9KhkUhIQsMIUxpc3RUb2tlbkludGVybmFsIC0gaW52YWxpZCBvd25lcnt4NW75//95lzXPw///CwwETE9MMxDbIDXAw///CwwnTGlzdFRva2VuSW50ZXJuYWwgLSBwcmljZSBoYXMgdG8gYmUgPiAwfBC3NY7D//8LDCtMaXN0VG9rZW5JbnRlcm5hbCAtIGVuZFByaWNlIGhhcyB0byBiZSA+PSAwfRC4NVjD//8LDDpMaXN0VG9rZW5JbnRlcm5hbCAtIGVuZCBkYXRlIG11c3QgYmUgbGF0ZXIgdGhhbiBzdGFydCBkYXRlfwd+tzUSw///NYP4//8DALD4ngMAAACeShAvCgAAACMcAAAASgT//////////wAAAAAAAAAAMxcAAAAE//////////8AAAAAAAAAAJEhcAsMMkxpc3RUb2tlbkludGVybmFsIC0gZW5kIGRhdGUgaXMgdG9vIGRpc3RhbnQsIG1heDogaDcAAIvbKAwMLCByZWNlaXZlZDogi9sofwc3AACL2yh/B2i2NW7C//8LDDJMaXN0VG9rZW5JbnRlcm5hbCAtIGV4dGVuc2lvblBlcmlv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dUUhCwwpQmlkVG9rZW5JbnRlcm5hbCAtIGJpZCBoYXMgdG8gYmUgbWluaW11bSBsAGShNwAAi9soDBYlIGhpZ2hlciB0aGFuIGxhc3QgYmlki9soem24NUmi//8hIWoRznZqEs53B2oRzhCXJ1kAAAAhNaTX//9KdkU1nNf//wIAXCYFnkoQLwoAAAAjHAAAAEoE//////////8AAAAAAAAAADMXAAAABP//////////AAAAAAAAAACRIUp3B0UhIzAAAAAhahLONU3X//+fahjOAegDoLUnGAAAACE1Odf//2oYzgHoA6CeSncHRSEhIWoUzjUo1///dwhvCHpqNX3Z//93CXs1Q6T//5gnFQAAACFvCXp8Nabt//+eSncJRSEhbwl6nkp3CUULDClCaWRUb2tlbkludGVybmFsIC0gTkVQLTE3IHRyYW5zZmVyIGZhaWxlZAtvCTUupP//eGoUzjX+o///NTih//9qGs412qP//5gnSgAAACELDCdCaWRUb2tlbkludGVybmFsIC0gTkVQLTE3IHJlZnVuZCBmYWlsZWQLahzOahrONduj//9qFM41rKP//zXmoP//ISHFSgvPShDPShDPSgvPSgvPSgvPShDPShDPShDPShDPSgvPShDPShDPbwlqG854ahnOahjOemoWzmoVzmoUzmoTzm8HbmoQzh1NNQvY//9Kc0UQ2yBreTWqof//wkp5z0prFc7PSmsTzs9KaxTOz0prFs7PSnrPSmsRzs9KbwfPSmsYzs9KaxnOz0prG87PDAhPcmRlckJpZEGVAW9hISFqGc4Tlyd9AQAAIQsMN0JpZFRva2VuSW50ZXJuYWwgLSB5b3UgY2FuIG5vdCBiaWQgb24geW91ciBvd24gYXVjdGlvbnN4ahDOmDX2n///ahbOahfOn3cKahLOahHOn3cLNVXV//9qEc6fdwxvDG8KoG8LoXcNahbObw2fdw5vDmoXzrUnDgAAACFqF85Kdw5FISHFSgvPShDPShDPSgvPSgvPSgvPShDPShDPShDPShDPSgvPShDPShDPbw5qG854ahnOahjObw5qFs5qFc5qFM5qE85qEs5qEc5qEM4dTTXV1v//SnNFfHtreXg1IuH//8JKec9KaxXOz0prE87PSmsUzs9KaxbOz0pvDs9KaxHOz0o1otT//89KaxjOz0prGc7PSmsbzs8MCE9yZGVyQmlkQZUBb2HCSnnPSmsVzs9KaxPOz0prFM7PSmsWzs9Kbw7PSmsRzs9KNVzU///PSmsYzs9KaxnOz0prG87PDAtPcmRlckZpbGxlZEGVAW9hISFqGc4QlycsAQAAIQsML0JpZFRva2VuSW50ZXJuYWwgLSB5b3UgY2FuIG5vdCBidXkgeW91ciBvd24gTkZUeGoQzpg1e57//wsMN0JpZFRva2VuSW50ZXJuYWwgLSBiaWQgaGFzIHRvIGJlIGVxdWFsIHRvIGN1cnJlbnQgcHJpY2V6ahbOlzU3nv//xUoLz0oQz0oQz0oLz0oLz0oLz0oQz0oQz0oQz0oQz0oLz0oQz0oQz3pqG854ahnOahjOEGoWzmoVzmoUzmoTzmoSzmoRzmoQzh1NNVzV//9Kc0V8e2t5eDWp3///wkp5z0prFc7PSmsTzs9KaxTOz0prFs7PShDPSmsRzs9KNSrT///PSmsYzs9KaxnOz0prG87PDAtPcmRlckZpbGxlZEGVAW9hISEhIUBXAQUhCwwqQmlkVG9rZW4gLSBjYW4ndCBiZSBjYWxsZWQgZnJvbSBhIGNvbnRyYWN0eDVdpv//qjVQnf//CwwqQmlkVG9rZW4gLSBjYW4ndCBiZSBjYWxsZWQgZnJvbSBhIGNvbnRyYWN0NQie//81IKb//6o1E53//wwRR01fTUFYX09SSUdJTl9GRUU1oLL//zUTs///cAsMJEJpZFRva2VuIC0gb3JpZ2luVmFsdWUgaGFzIHRvIGJlIDw9IGgAZKE3AACL2ygMASWL2yh8aLY1tpz//wsMJUJpZFRva2VuIC0gb3JpZ2luQWRkcmVzcyBpcyBub3QgdmFsaWR7Neeo//8lDQAAABDbICMNAAAAIXs13aj//6ohNW2c//8LDCxCaWRUb2tlbiAtIG9yaWdpbkFkZHJlc3MgY2FuJ3QgYmUgYSBjb250cmFjdHs1P6X//6o1Mpz//3x7enl4NTz2//9AVwkBIQsMJ1JlbW92ZUV4cGlyZWRBdWN0aW9ucyAtIGNvbnRyYWN0IHBhdXNlZDVruf//qjXum///NfWc//8QNeWc//9weDUIAQAAcWk1fKv//xC3J/gAAAAhaUpyynMQdCPiAAAAamzOdSFtaDXHnP//dniqJ2oAAAAhCwwnUmVtb3ZlRXhwaXJlZEF1Y3Rpb25zIC0gaW52YWxpZCBhdWN0aW9ubguYNXqb//9uNZGc//93BxHbIG8HbTWInP//wkptzwwOT3JkZXJDYW5jZWxsZWRBlQFvYSEjZAAAACEhCwwlUmVtb3ZlRXhwaXJlZEF1Y3Rpb25zIC0gaW52YWxpZCBvZmZlcm4LmDUWm///bjUtnP//dwgR2yBvCG01JJz//8JKbc8MDk9mZmVyQ2FuY2VsbGVkQZUBb2EhISFsnHRsazEh////ISEhQFcGASE1zJv//xA1zJv//3AaaDUUoP//cTVFq///ciFpNRCg//8n2gAAACFpNQqg//9zaxHOdGk1/5///xDOdXiqJ2AAAAAhbBnOFJglDQAAABDbICMLAAAAIWwZzhWYISUNAAAAENsgIwsAAAAhbBLOEJghJQ0AAAAQ2yAjDwAAACE1yM///2wSzrchJw4AAAAham01zar//yEhISNcAAAAISFsGc4UlyUNAAAAENsgIwsAAAAhbBnOFZghJQ0AAAAQ2yAjCwAAACFsEs4QmCElDQAAABDbICMPAAAAITVsz///bBLOtyEnDgAAACFqbTVxqv//ISEhISEjJP///yFqIwUAAABAVwABIcIVDAZzeW1ib2x4NaCc//8jBQAAAEBidB/eEsAfDAZ1cGRhdGUMFKqvWaRS58Ony2M8AgYoLFjsojG1QWJ9W1I=", "sender" : "NLp9MRxBHH2YJrsF1D1VMXg3mvze3WSTqn", "version" : 0, "sysfee" : "392322297" } ], "nextconsensus" : "NZHf1NJvz1tvELGLWZjhpb3NqZJFFUYpxT", "previousblockhash" : "0x79ac0aa5523d1d8668cf2d15b17d7c459a9a53b10c7be22aebc07ee441d8f2d0", "version" : 0 }, "id" : 1 } ```

State of the contract by the moment of 1670095 block acceptance: contract_state.txt

Parsed contract script by the moment of 1670095 block acceptance: parsed_contract_script.txt

Method update (9377 offset) performs some witness checks and calls update method of native Management. It has the following script:

9377     INITSLOT      0 local, 2 arg
9380     NOP           
9381     PUSHNULL      
9382     PUSHDATA1     557064617465202d2063616c6c6572206e6565647320746f20626520617574686f72697a6564 ("Update - caller needs to be authorized")
9422     CALL_L        431 (-8991/e1dcffff)
9427     CALL_L        416 (-9011/cddcffff)
9432     PUSHNULL      
9433     LDARG1        
9434     LDARG0        
9435     CALL_L        9441 (6/06000000)
9440     RET           

The transaction 0xc42252ccc37f37f80c8e38c6411b7ea0d1ff66ce8045265b1d61f495d906eba6 successfully updates the contract in the C# node and fails to update it in the neo-go node. The reason of failure in neo-go is that some of updated contract's methods do not have proper offsets (this can be seen from the arguments of update method by comparing NEF script and methods offsets taken from manifest):

  1. Updated contract manifest (JSON marshalled manifest representation): updated_manifest.txt

  2. Parsed updated contract script got from updated NEF: updated_parsed_contract_script.txt

  3. Methods that have wrong offset set in manifest:

  • cancelSale (1 argument): 16966 offset
  • cancelOffer (1 argument): 20017 offset
  • editSale (7 arguments): 20292 offset
  • acceptOffer (3 arguments): 21249 offset
  • acceptOffer (5 arguments): 22981 offset
  • bidToken (3 arguments): 23354 offset
  • bidToken (5 arguments): 25639 offset
  • removeExpiredAuctions (1 argument): 25997 offset

To Reproduce
The issue is reproduced in the testnet (see the description above).

Expected behavior
Management contract should forbid updating the contract if some methods have wrong offsets specified in manifest.

Platform:

  • Version: 3.5.0

(Optional) Additional context
I believe that the problem is somewhere inside this method:

Helper.Check(contract.Nef.Script, contract.Manifest.Abi);

neo-go's implementation successfully finds wrong offsets and fails to update the contract as expected, see the https://github.com/nspcc-dev/neo-go/blob/31ee21a83afc59ccb139b53398ebb6fc96b3d85a/pkg/vm/contract_checks.go#L140.

@Jim8y
Copy link
Contributor

Jim8y commented Mar 10, 2023

I dont think we have IsScriptCorrect anywhere in the C# code, should we add one? or should we just allow the vm to FAULT

@roman-khimov
Copy link
Contributor

Seems like the manifest is for the old contract version, because new NEF looks like this:

16954    NOP           
16955    PUSHNULL      
16956    PUSHDATA1     43616e63656c53616c65202d20636f6e747261637420706175736564 ("CancelSale - contract paused")
16986    CALL_L        7959 (-9027/bddcffff)
16991    NOT           

And cancelSale is broken. The old NEF:

16960    JMP_L         16965 (5/05000000)
16965    RET
16966    INITSLOT      4 local, 1 arg
16969    NOP
16970    PUSHNULL

@roman-khimov
Copy link
Contributor

I dont think we have IsScriptCorrect anywhere in the C# code, should we add one? or should we just allow the vm to FAULT

We have it since #2263.

@AnnaShaleva
Copy link
Member Author

I dont think we have IsScriptCorrect anywhere in the C# code

This check is performed here:

foreach (ContractMethodDescriptor method in abi.Methods)
script.GetInstruction(method.Offset);

@vincentgeneste
Copy link

Just to add this is me doing this upgrade , and yes turns out I ran an upgrade where I had the new NEF and the old manifest , so one of them was mismatching.

but yes if that caused an offset issue it shouldn’t have been allowed in the first place

@Jim8y
Copy link
Contributor

Jim8y commented Mar 12, 2023

I dont think we have IsScriptCorrect anywhere in the C# code, should we add one? or should we just allow the vm to FAULT

We have it since #2263.

@roman-khimov This was removed in #2266 9770748 . I am not sure why, but we can still bring it back, with a fork maybe. The existing checking logic is:

      public static void Check(this Script script, ContractAbi abi)
        {
            foreach (ContractMethodDescriptor method in abi.Methods)
                script.GetInstruction(method.Offset);
            abi.GetMethod(string.Empty,
                0); // Trigger the construction of ContractAbi.methodDictionary to check the uniqueness of the method names.
            _ = abi.Events.ToDictionary(p => p.Name); // Check the uniqueness of the event names.
        }

Which is not the same as what we have in Go. I have tested the old checking logic, it captures the offset errors.
@AnnaShaleva Can you please confirm that whether the checking logic here #2263. is the same as what Go does?

@roman-khimov
Copy link
Contributor

roman-khimov commented Mar 12, 2023

@roman-khimov This was removed in #2266

😲 Well, it's just an accident to me. Of course transaction and witness scripts have no methods, but that's just a separate check mode.

with a fork maybe

Currently it only affects testnet, so not an issue at all.

@AnnaShaleva
Copy link
Member Author

AnnaShaleva commented Mar 13, 2023

@Liaojinghui, @roman-khimov

This was removed in #2266 9770748

This was probably just moved to neo-vm, see the Script constructor: https://github.com/neo-project/neo-vm/blob/5b0a39811b34abacab1273f3ee5a9a9f7e52ac7b/src/Neo.VM/Script.cs#L72.

And this checking code is still there and invoked during contract ABI check inside native Management's deploy:

Check(new Script(script, true), abi);

But at the same time it works slightly different than #2263 and somehow doesn't catch the error in ABI offsets.

AnnaShaleva added a commit to nspcc-dev/neo-go that referenced this issue Jul 4, 2023
This check is good and was present here since #1729, but it was
accidently removed from the reference implementation (see the
discussion in neo-project/neo#2848). The
removal of this check from the C# node leaded to the T5 testnet state
diff since 1670095 heigh which causes inability to process new blocks
since 2272533 height (see #3049). This check was added back to the
C# node in neo-project/neo#2849, but it is
planned to be the part of the upcoming 3.6.0 C# node release.

We need to keep our testnet healthy, thus, strict contract script
check will be temporary removed from the node code and is planned
to be added back to be a part of the next 3.6.0-compatible release.

Close #3049.
AnnaShaleva added a commit to nspcc-dev/neo-go that referenced this issue Jul 4, 2023
This check is good and was present here since #1729, but it was
accidently removed from the reference implementation (see the
discussion in neo-project/neo#2848). The
removal of this check from the C# node leaded to the T5 testnet state
diff since 1670095 heigh which causes inability to process new blocks
since 2272533 height (see #3049). This check was added back to the
C# node in neo-project/neo#2849, but it is
planned to be the part of the upcoming 3.6.0 C# node release.

We need to keep our testnet healthy, thus, strict contract script
check will be temporary removed from the node code and is planned
to be added back to be a part of the next 3.6.0-compatible release.

Close #3049.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
AnnaShaleva added a commit to nspcc-dev/neo-go that referenced this issue Jul 4, 2023
This check is good and was present here since #1729, but it was
accidently removed from the reference implementation (see the
discussion in neo-project/neo#2848). The
removal of this check from the C# node leaded to the T5 testnet state
diff since 1670095 heigh which causes inability to process new blocks
since 2272533 height (see #3049). This check was added back to the
C# node in neo-project/neo#2849, but it is
planned to be the part of the upcoming 3.6.0 C# node release.

We need to keep our testnet healthy, thus, strict contract script
check will be temporary removed from the node code and is planned
to be added back to be a part of the next 3.6.0-compatible release.

Close #3049.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
AnnaShaleva added a commit to nspcc-dev/neo-go that referenced this issue Jul 8, 2023
This check is good and was present here since #1729, but it was
accidently removed from the reference implementation (see the
discussion in neo-project/neo#2848). The
removal of this check from the C# node leaded to the T5 testnet state
diff since 1670095 heigh which causes inability to process new blocks
since 2272533 height (see #3049). This check was added back to the
C# node in neo-project/neo#2849, but it is
planned to be the part of the upcoming 3.6.0 C# node release.

We need to keep our testnet healthy, thus, strict contract script
check will be temporary removed from the node code and is planned
to be added back to be a part of the next 3.6.0-compatible release.

Close #3049.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants